@neuralis/brain-core 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (383) hide show
  1. package/README.md +26 -35
  2. package/app/cards/DiffView.tsx +9 -7
  3. package/app/cards/README.md +1 -1
  4. package/app/cards/diffLine.tsx +2 -4
  5. package/app/filesystem/README.md +1 -1
  6. package/app/filesystem/api/index.ts +14 -5
  7. package/app/filesystem/domain/types.ts +24 -5
  8. package/app/filesystem/store/filesystemStore.ts +20 -1
  9. package/app/filesystem/store/listSlice.ts +2 -0
  10. package/app/filesystem/store/searchSlice.ts +24 -1
  11. package/app/filesystem/ui/FileTreeSearch.tsx +29 -2
  12. package/app/filesystem/ui/PendingChangesPanel.tsx +74 -17
  13. package/app/filesystem/ui/PendingReviewDialog.tsx +45 -20
  14. package/app/filesystem/ui/README.md +8 -7
  15. package/app/filesystem/ui/ReembedDialog.tsx +20 -9
  16. package/app/filesystem/ui/SourceDeleteConfirm.tsx +1 -1
  17. package/app/filesystem/ui/SourcesPanel.tsx +110 -17
  18. package/app/filesystem/ui/VectorHealthPanel.tsx +14 -0
  19. package/app/filesystem/ui/pendingChangesModel.ts +9 -5
  20. package/dist/app/chunks/{astro-LRAFGXNX.js → astro-B2J4AS2D.js} +1 -1
  21. package/dist/app/chunks/bash-KY6SAQTH.js +1 -0
  22. package/dist/app/chunks/c-OBOPYVZ7.js +1 -0
  23. package/dist/app/chunks/{chunk-5H7ZCOD3.js → chunk-2X3GNKJ3.js} +1 -1
  24. package/dist/app/chunks/{chunk-XIFGTNRM.js → chunk-JPJIVRFI.js} +1 -1
  25. package/dist/app/chunks/{chunk-RH3QY5LF.js → chunk-LEFIFWND.js} +1 -1
  26. package/dist/app/chunks/{chunk-G4RZ3UNX.js → chunk-N6RXX3PH.js} +1 -1
  27. package/dist/app/chunks/{chunk-QXXJ73P5.js → chunk-PZAW4HPB.js} +1 -1
  28. package/dist/app/chunks/{chunk-3QLE7Y4L.js → chunk-ZBYWWTO6.js} +1 -1
  29. package/dist/app/chunks/cpp-TVWVOTEQ.js +1 -0
  30. package/dist/app/chunks/css-MANZBYA4.js +1 -0
  31. package/dist/app/chunks/{elixir-M36XROA6.js → elixir-S725Z7EH.js} +1 -1
  32. package/dist/app/chunks/{elm-7BG6QAIK.js → elm-5WUUSTNB.js} +1 -1
  33. package/dist/app/chunks/graphql-UGOPR3WU.js +1 -0
  34. package/dist/app/chunks/html-F6FWTBSG.js +1 -0
  35. package/dist/app/chunks/java-ANIVV5H5.js +1 -0
  36. package/dist/app/chunks/javascript-IH374YWG.js +1 -0
  37. package/dist/app/chunks/json-WGGVVXSB.js +1 -0
  38. package/dist/app/chunks/jsx-OTXJQD32.js +1 -0
  39. package/dist/app/chunks/{latex-ZWK7SXB6.js → latex-QCZNITGN.js} +1 -1
  40. package/dist/app/chunks/lua-4CRZ64PU.js +1 -0
  41. package/dist/app/chunks/{nginx-2L6VRV3A.js → nginx-V4CYS7WR.js} +1 -1
  42. package/dist/app/chunks/{perl-PBUAXXK6.js → perl-BHTX7F5B.js} +1 -1
  43. package/dist/app/chunks/{php-QJX57PA6.js → php-AYGJ5WYZ.js} +1 -1
  44. package/dist/app/chunks/r-4YFCFA4B.js +1 -0
  45. package/dist/app/chunks/{ruby-RLOWMVPO.js → ruby-42NMJWAL.js} +1 -1
  46. package/dist/app/chunks/{scss-B5CAI3HR.js → scss-XD7VU2CU.js} +1 -1
  47. package/dist/app/chunks/sql-B55MH6JJ.js +1 -0
  48. package/dist/app/chunks/{svelte-GT3D4C44.js → svelte-WR3QPIJU.js} +1 -1
  49. package/dist/app/chunks/tsx-S73GAE2L.js +1 -0
  50. package/dist/app/chunks/typescript-NEWOAB5Z.js +1 -0
  51. package/dist/app/chunks/{vue-JOW62MHD.js → vue-CCDS4VZK.js} +1 -1
  52. package/dist/app/chunks/xml-UXKAGLDR.js +1 -0
  53. package/dist/app/chunks/yaml-UMWKDTK7.js +1 -0
  54. package/dist/app/host.js +40 -40
  55. package/dist/scripts/embeddingLockV3.d.ts +30 -0
  56. package/dist/scripts/embeddingLockV3.d.ts.map +1 -0
  57. package/dist/scripts/embeddingLockV3.js +100 -0
  58. package/dist/scripts/embeddingLockV3.js.map +1 -0
  59. package/dist/scripts/vectorProofV1.d.ts +90 -0
  60. package/dist/scripts/vectorProofV1.d.ts.map +1 -0
  61. package/dist/scripts/vectorProofV1.js +220 -0
  62. package/dist/scripts/vectorProofV1.js.map +1 -0
  63. package/dist/src/config/env.d.ts +21 -0
  64. package/dist/src/config/env.d.ts.map +1 -1
  65. package/dist/src/config/env.js +55 -0
  66. package/dist/src/config/env.js.map +1 -1
  67. package/dist/src/connectors/AppSourceConfigStore.d.ts +12 -2
  68. package/dist/src/connectors/AppSourceConfigStore.d.ts.map +1 -1
  69. package/dist/src/connectors/AppSourceConfigStore.js +48 -40
  70. package/dist/src/connectors/AppSourceConfigStore.js.map +1 -1
  71. package/dist/src/connectors/LocalDiskConnector.d.ts +11 -14
  72. package/dist/src/connectors/LocalDiskConnector.d.ts.map +1 -1
  73. package/dist/src/connectors/LocalDiskConnector.js +87 -107
  74. package/dist/src/connectors/LocalDiskConnector.js.map +1 -1
  75. package/dist/src/connectors/sourceConfigMutation.d.ts +11 -1
  76. package/dist/src/connectors/sourceConfigMutation.d.ts.map +1 -1
  77. package/dist/src/connectors/sourceConfigMutation.js +36 -3
  78. package/dist/src/connectors/sourceConfigMutation.js.map +1 -1
  79. package/dist/src/domain/chunker.js +8 -3
  80. package/dist/src/domain/chunker.js.map +1 -1
  81. package/dist/src/domain/healthTypes.d.ts +11 -0
  82. package/dist/src/domain/healthTypes.d.ts.map +1 -1
  83. package/dist/src/domain/mime.d.ts +1 -0
  84. package/dist/src/domain/mime.d.ts.map +1 -1
  85. package/dist/src/domain/mime.js +48 -0
  86. package/dist/src/domain/mime.js.map +1 -1
  87. package/dist/src/domain/pendingChange.d.ts +7 -0
  88. package/dist/src/domain/pendingChange.d.ts.map +1 -1
  89. package/dist/src/domain/pendingChange.js +11 -0
  90. package/dist/src/domain/pendingChange.js.map +1 -1
  91. package/dist/src/domain/sourceConfig.d.ts +7 -14
  92. package/dist/src/domain/sourceConfig.d.ts.map +1 -1
  93. package/dist/src/domain/sourceConfig.js +1 -13
  94. package/dist/src/domain/sourceConfig.js.map +1 -1
  95. package/dist/src/domain/sourcePackages.d.ts +11 -2
  96. package/dist/src/domain/sourcePackages.d.ts.map +1 -1
  97. package/dist/src/domain/syncTrigger.d.ts +2 -3
  98. package/dist/src/domain/syncTrigger.d.ts.map +1 -1
  99. package/dist/src/domain/syncTrigger.js +2 -3
  100. package/dist/src/domain/syncTrigger.js.map +1 -1
  101. package/dist/src/domain/syncTypes.d.ts +21 -4
  102. package/dist/src/domain/syncTypes.d.ts.map +1 -1
  103. package/dist/src/domain/syncTypes.js.map +1 -1
  104. package/dist/src/domain/text.d.ts +3 -0
  105. package/dist/src/domain/text.d.ts.map +1 -1
  106. package/dist/src/domain/text.js +5 -0
  107. package/dist/src/domain/text.js.map +1 -1
  108. package/dist/src/domain/types.d.ts +9 -0
  109. package/dist/src/domain/types.d.ts.map +1 -1
  110. package/dist/src/embeddings/clients/GeminiEmbedder.d.ts.map +1 -1
  111. package/dist/src/embeddings/clients/GeminiEmbedder.js +11 -5
  112. package/dist/src/embeddings/clients/GeminiEmbedder.js.map +1 -1
  113. package/dist/src/embeddings/clients/OllamaEmbedder.d.ts.map +1 -1
  114. package/dist/src/embeddings/clients/OllamaEmbedder.js +13 -6
  115. package/dist/src/embeddings/clients/OllamaEmbedder.js.map +1 -1
  116. package/dist/src/embeddings/clients/OpenAIEmbedder.d.ts.map +1 -1
  117. package/dist/src/embeddings/clients/OpenAIEmbedder.js +12 -9
  118. package/dist/src/embeddings/clients/OpenAIEmbedder.js.map +1 -1
  119. package/dist/src/embeddings/clients/QwenEmbedder.d.ts.map +1 -1
  120. package/dist/src/embeddings/clients/QwenEmbedder.js +12 -5
  121. package/dist/src/embeddings/clients/QwenEmbedder.js.map +1 -1
  122. package/dist/src/embeddings/clients/VoyageEmbedder.d.ts.map +1 -1
  123. package/dist/src/embeddings/clients/VoyageEmbedder.js +12 -5
  124. package/dist/src/embeddings/clients/VoyageEmbedder.js.map +1 -1
  125. package/dist/src/embeddings/factory.d.ts +2 -0
  126. package/dist/src/embeddings/factory.d.ts.map +1 -1
  127. package/dist/src/embeddings/factory.js +23 -3
  128. package/dist/src/embeddings/factory.js.map +1 -1
  129. package/dist/src/embeddings/lock.d.ts +22 -11
  130. package/dist/src/embeddings/lock.d.ts.map +1 -1
  131. package/dist/src/embeddings/lock.js +47 -29
  132. package/dist/src/embeddings/lock.js.map +1 -1
  133. package/dist/src/embeddings/retry.d.ts +5 -0
  134. package/dist/src/embeddings/retry.d.ts.map +1 -1
  135. package/dist/src/embeddings/retry.js +35 -0
  136. package/dist/src/embeddings/retry.js.map +1 -1
  137. package/dist/src/events/pending.d.ts +56 -0
  138. package/dist/src/events/pending.d.ts.map +1 -0
  139. package/dist/src/events/pending.js +108 -0
  140. package/dist/src/events/pending.js.map +1 -0
  141. package/dist/src/events/source.d.ts +60 -14
  142. package/dist/src/events/source.d.ts.map +1 -1
  143. package/dist/src/events/source.js +149 -31
  144. package/dist/src/events/source.js.map +1 -1
  145. package/dist/src/events/vector.d.ts +33 -0
  146. package/dist/src/events/vector.d.ts.map +1 -0
  147. package/dist/src/events/vector.js +57 -0
  148. package/dist/src/events/vector.js.map +1 -0
  149. package/dist/src/git/GitRunner.d.ts.map +1 -1
  150. package/dist/src/git/GitRunner.js +11 -8
  151. package/dist/src/git/GitRunner.js.map +1 -1
  152. package/dist/src/git/sourceGitControl.d.ts.map +1 -1
  153. package/dist/src/git/sourceGitControl.js +2 -1
  154. package/dist/src/git/sourceGitControl.js.map +1 -1
  155. package/dist/src/index.d.ts +5 -4
  156. package/dist/src/index.d.ts.map +1 -1
  157. package/dist/src/index.js +4 -3
  158. package/dist/src/index.js.map +1 -1
  159. package/dist/src/lifecycle.d.ts +20 -4
  160. package/dist/src/lifecycle.d.ts.map +1 -1
  161. package/dist/src/lifecycle.js +5 -1
  162. package/dist/src/lifecycle.js.map +1 -1
  163. package/dist/src/routes/health.js +6 -1
  164. package/dist/src/routes/health.js.map +1 -1
  165. package/dist/src/routes/pending.d.ts.map +1 -1
  166. package/dist/src/routes/pending.js +2 -1
  167. package/dist/src/routes/pending.js.map +1 -1
  168. package/dist/src/routes/sources.d.ts.map +1 -1
  169. package/dist/src/routes/sources.js +60 -11
  170. package/dist/src/routes/sources.js.map +1 -1
  171. package/dist/src/services/BridgeService.d.ts +2 -2
  172. package/dist/src/services/BridgeService.d.ts.map +1 -1
  173. package/dist/src/services/BridgeService.js +11 -2
  174. package/dist/src/services/BridgeService.js.map +1 -1
  175. package/dist/src/services/FilesystemService.d.ts +3 -1
  176. package/dist/src/services/FilesystemService.d.ts.map +1 -1
  177. package/dist/src/services/FilesystemService.js +3 -1
  178. package/dist/src/services/FilesystemService.js.map +1 -1
  179. package/dist/src/services/FilesystemUiService.js +1 -1
  180. package/dist/src/services/FilesystemUiService.js.map +1 -1
  181. package/dist/src/services/SyncScheduler.d.ts.map +1 -1
  182. package/dist/src/services/SyncScheduler.js +0 -14
  183. package/dist/src/services/SyncScheduler.js.map +1 -1
  184. package/dist/src/services/VectorHealthService.d.ts.map +1 -1
  185. package/dist/src/services/VectorHealthService.js +2 -46
  186. package/dist/src/services/VectorHealthService.js.map +1 -1
  187. package/dist/src/services/baselineRepair.d.ts +2 -2
  188. package/dist/src/services/baselineRepair.js +2 -2
  189. package/dist/src/services/declaredSources.d.ts +8 -1
  190. package/dist/src/services/declaredSources.d.ts.map +1 -1
  191. package/dist/src/services/declaredSources.js +19 -19
  192. package/dist/src/services/declaredSources.js.map +1 -1
  193. package/dist/src/store/dataFormats.d.ts +14 -3
  194. package/dist/src/store/dataFormats.d.ts.map +1 -1
  195. package/dist/src/store/dataFormats.js +15 -5
  196. package/dist/src/store/dataFormats.js.map +1 -1
  197. package/dist/src/sync/DeltaSyncRunner.d.ts.map +1 -1
  198. package/dist/src/sync/DeltaSyncRunner.js +78 -243
  199. package/dist/src/sync/DeltaSyncRunner.js.map +1 -1
  200. package/dist/src/sync/SyncJobQueue.d.ts +33 -4
  201. package/dist/src/sync/SyncJobQueue.d.ts.map +1 -1
  202. package/dist/src/sync/SyncJobQueue.js +179 -19
  203. package/dist/src/sync/SyncJobQueue.js.map +1 -1
  204. package/dist/src/sync/moveDetector.d.ts +2 -1
  205. package/dist/src/sync/moveDetector.d.ts.map +1 -1
  206. package/dist/src/sync/moveDetector.js +2 -1
  207. package/dist/src/sync/moveDetector.js.map +1 -1
  208. package/dist/src/tools/fs_search.d.ts.map +1 -1
  209. package/dist/src/tools/fs_search.js +8 -0
  210. package/dist/src/tools/fs_search.js.map +1 -1
  211. package/dist/src/tools/fs_write.js +3 -1
  212. package/dist/src/tools/fs_write.js.map +1 -1
  213. package/dist/src/usecases/chunkUpsert.d.ts +4 -0
  214. package/dist/src/usecases/chunkUpsert.d.ts.map +1 -1
  215. package/dist/src/usecases/chunkUpsert.js +103 -60
  216. package/dist/src/usecases/chunkUpsert.js.map +1 -1
  217. package/dist/src/usecases/embeddingBacklog.d.ts +31 -0
  218. package/dist/src/usecases/embeddingBacklog.d.ts.map +1 -0
  219. package/dist/src/usecases/embeddingBacklog.js +244 -0
  220. package/dist/src/usecases/embeddingBacklog.js.map +1 -0
  221. package/dist/src/usecases/listSourcePackages.js +17 -1
  222. package/dist/src/usecases/listSourcePackages.js.map +1 -1
  223. package/dist/src/usecases/mediaLane.d.ts +11 -4
  224. package/dist/src/usecases/mediaLane.d.ts.map +1 -1
  225. package/dist/src/usecases/mediaLane.js +67 -30
  226. package/dist/src/usecases/mediaLane.js.map +1 -1
  227. package/dist/src/usecases/pendingReview.d.ts.map +1 -1
  228. package/dist/src/usecases/pendingReview.js +24 -7
  229. package/dist/src/usecases/pendingReview.js.map +1 -1
  230. package/dist/src/usecases/purgeExcludedPoints.d.ts +2 -0
  231. package/dist/src/usecases/purgeExcludedPoints.d.ts.map +1 -1
  232. package/dist/src/usecases/purgeExcludedPoints.js +3 -2
  233. package/dist/src/usecases/purgeExcludedPoints.js.map +1 -1
  234. package/dist/src/usecases/readFiles.d.ts.map +1 -1
  235. package/dist/src/usecases/readFiles.js +33 -6
  236. package/dist/src/usecases/readFiles.js.map +1 -1
  237. package/dist/src/usecases/reconcileSourcePackageRoots.d.ts +31 -0
  238. package/dist/src/usecases/reconcileSourcePackageRoots.d.ts.map +1 -0
  239. package/dist/src/usecases/reconcileSourcePackageRoots.js +114 -0
  240. package/dist/src/usecases/reconcileSourcePackageRoots.js.map +1 -0
  241. package/dist/src/usecases/searchFiles.d.ts.map +1 -1
  242. package/dist/src/usecases/searchFiles.js +62 -64
  243. package/dist/src/usecases/searchFiles.js.map +1 -1
  244. package/dist/src/usecases/syncIndexedFile.d.ts +42 -0
  245. package/dist/src/usecases/syncIndexedFile.d.ts.map +1 -0
  246. package/dist/src/usecases/syncIndexedFile.js +242 -0
  247. package/dist/src/usecases/syncIndexedFile.js.map +1 -0
  248. package/dist/src/usecases/syncPointWrites.d.ts +5 -0
  249. package/dist/src/usecases/syncPointWrites.d.ts.map +1 -1
  250. package/dist/src/usecases/syncPointWrites.js +32 -5
  251. package/dist/src/usecases/syncPointWrites.js.map +1 -1
  252. package/dist/src/usecases/uploadBinary.d.ts.map +1 -1
  253. package/dist/src/usecases/uploadBinary.js +36 -49
  254. package/dist/src/usecases/uploadBinary.js.map +1 -1
  255. package/dist/src/usecases/vector/endpointGuard.js +2 -1
  256. package/dist/src/usecases/vector/endpointGuard.js.map +1 -1
  257. package/dist/src/usecases/vector/estimate.d.ts +7 -4
  258. package/dist/src/usecases/vector/estimate.d.ts.map +1 -1
  259. package/dist/src/usecases/vector/estimate.js +8 -5
  260. package/dist/src/usecases/vector/estimate.js.map +1 -1
  261. package/dist/src/usecases/vector/rebuildGeneration.d.ts +29 -5
  262. package/dist/src/usecases/vector/rebuildGeneration.d.ts.map +1 -1
  263. package/dist/src/usecases/vector/rebuildGeneration.js +224 -82
  264. package/dist/src/usecases/vector/rebuildGeneration.js.map +1 -1
  265. package/dist/src/usecases/vectorMaintenance.d.ts +46 -4
  266. package/dist/src/usecases/vectorMaintenance.d.ts.map +1 -1
  267. package/dist/src/usecases/vectorMaintenance.js +190 -11
  268. package/dist/src/usecases/vectorMaintenance.js.map +1 -1
  269. package/dist/src/usecases/write/commit.d.ts +6 -8
  270. package/dist/src/usecases/write/commit.d.ts.map +1 -1
  271. package/dist/src/usecases/write/commit.js +96 -112
  272. package/dist/src/usecases/write/commit.js.map +1 -1
  273. package/dist/src/usecases/write/content.js +1 -2
  274. package/dist/src/usecases/write/content.js.map +1 -1
  275. package/dist/src/usecases/write/ports.d.ts +1 -0
  276. package/dist/src/usecases/write/ports.d.ts.map +1 -1
  277. package/dist/src/vector/FilesystemVectorIndex.d.ts +34 -3
  278. package/dist/src/vector/FilesystemVectorIndex.d.ts.map +1 -1
  279. package/dist/src/vector/FilesystemVectorIndex.js +254 -20
  280. package/dist/src/vector/FilesystemVectorIndex.js.map +1 -1
  281. package/dist/src/vector/InMemoryVectorIndex.d.ts +9 -2
  282. package/dist/src/vector/InMemoryVectorIndex.d.ts.map +1 -1
  283. package/dist/src/vector/InMemoryVectorIndex.js +25 -6
  284. package/dist/src/vector/InMemoryVectorIndex.js.map +1 -1
  285. package/dist/src/vector/QdrantVectorIndex.d.ts +35 -9
  286. package/dist/src/vector/QdrantVectorIndex.d.ts.map +1 -1
  287. package/dist/src/vector/QdrantVectorIndex.js +209 -90
  288. package/dist/src/vector/QdrantVectorIndex.js.map +1 -1
  289. package/dist/src/vector/qdrantFilter.d.ts +3 -1
  290. package/dist/src/vector/qdrantFilter.d.ts.map +1 -1
  291. package/dist/src/vector/qdrantFilter.js +2 -0
  292. package/dist/src/vector/qdrantFilter.js.map +1 -1
  293. package/dist/src/vector/types.d.ts +81 -0
  294. package/dist/src/vector/types.d.ts.map +1 -1
  295. package/dist/src/vector/types.js +2 -0
  296. package/dist/src/vector/types.js.map +1 -1
  297. package/dist/src/wiring.d.ts +6 -0
  298. package/dist/src/wiring.d.ts.map +1 -1
  299. package/dist/src/wiring.js +62 -3
  300. package/dist/src/wiring.js.map +1 -1
  301. package/dist/tools/fs_search.json +2 -2
  302. package/docs/drive-overview.md +2 -2
  303. package/instructions/brain-model.md +1 -1
  304. package/package.json +999 -10
  305. package/rules/brain-rules.md +1 -1
  306. package/skills/connect-business-data/SKILL.md +6 -4
  307. package/skills/create-package/SKILL.md +14 -12
  308. package/skills/create-package/references/config-and-credentials.md +3 -3
  309. package/skills/create-package/references/connectors-and-uri-policies.md +5 -3
  310. package/skills/create-package/references/manifest-and-discovery.md +4 -3
  311. package/skills/create-package/references/runtime-and-build.md +9 -9
  312. package/skills/create-package/references/skills-and-context.md +3 -3
  313. package/skills/create-package/references/surfaces-and-design.md +2 -1
  314. package/skills/create-package/references/team-and-workflows.md +2 -2
  315. package/skills/create-package/references/test-and-ship.md +15 -15
  316. package/skills/create-package/references/tools-and-schemas.md +1 -1
  317. package/skills/create-package/scripts/check-package.sh +3 -3
  318. package/skills/create-package/scripts/verify-loaded.sh +16 -16
  319. package/skills/manage-files/SKILL.md +2 -2
  320. package/skills/manage-sources/SKILL.md +16 -15
  321. package/skills/manage-sources/scripts/reembed.sh +9 -3
  322. package/skills/sync/SKILL.md +4 -4
  323. package/tools/fs_search.json +2 -2
  324. package/dist/app/chunks/bash-M45GHPBQ.js +0 -1
  325. package/dist/app/chunks/c-X3REOAWD.js +0 -1
  326. package/dist/app/chunks/cpp-VOWI743W.js +0 -1
  327. package/dist/app/chunks/css-2ZVPHE25.js +0 -1
  328. package/dist/app/chunks/graphql-7V2NP54C.js +0 -1
  329. package/dist/app/chunks/html-UF3LFLNA.js +0 -1
  330. package/dist/app/chunks/java-PNTAU4L3.js +0 -1
  331. package/dist/app/chunks/javascript-4JJTQGEL.js +0 -1
  332. package/dist/app/chunks/json-VLQ6D3JH.js +0 -1
  333. package/dist/app/chunks/jsx-KQKSLAAH.js +0 -1
  334. package/dist/app/chunks/lua-UFPYUJ2O.js +0 -1
  335. package/dist/app/chunks/r-QEZB45SR.js +0 -1
  336. package/dist/app/chunks/sql-DTZHNUZP.js +0 -1
  337. package/dist/app/chunks/tsx-WPR2WRZD.js +0 -1
  338. package/dist/app/chunks/typescript-LWO362OA.js +0 -1
  339. package/dist/app/chunks/xml-A5H72RTS.js +0 -1
  340. package/dist/app/chunks/yaml-MXHSIJCI.js +0 -1
  341. package/dist/src/services/purgePendingNodes.d.ts +0 -32
  342. package/dist/src/services/purgePendingNodes.d.ts.map +0 -1
  343. package/dist/src/services/purgePendingNodes.js +0 -61
  344. package/dist/src/services/purgePendingNodes.js.map +0 -1
  345. /package/dist/app/chunks/{chunk-737Y24HS.js → chunk-3JASFUPF.js} +0 -0
  346. /package/dist/app/chunks/{chunk-DKD2L57N.js → chunk-6EYLOQ4F.js} +0 -0
  347. /package/dist/app/chunks/{chunk-KYH5EHHY.js → chunk-7YRZ5LOQ.js} +0 -0
  348. /package/dist/app/chunks/{chunk-6TC3DVWV.js → chunk-C7LU4RID.js} +0 -0
  349. /package/dist/app/chunks/{chunk-TY33BMKR.js → chunk-CD52YDZP.js} +0 -0
  350. /package/dist/app/chunks/{chunk-OLEIKJ3X.js → chunk-DCJKTCJ5.js} +0 -0
  351. /package/dist/app/chunks/{chunk-QLBZ4JR2.js → chunk-EXIU2KBV.js} +0 -0
  352. /package/dist/app/chunks/{chunk-SFUNBBEA.js → chunk-FDP4LO4P.js} +0 -0
  353. /package/dist/app/chunks/{chunk-BGRVFATT.js → chunk-HNETUS7U.js} +0 -0
  354. /package/dist/app/chunks/{chunk-4QNMHAIR.js → chunk-LBFZJEDR.js} +0 -0
  355. /package/dist/app/chunks/{chunk-TRRUHDPN.js → chunk-ULRXL5VM.js} +0 -0
  356. /package/dist/app/chunks/{chunk-S6B4WWIF.js → chunk-XJK47SMJ.js} +0 -0
  357. /package/dist/app/chunks/{chunk-DZ5C5FKI.js → chunk-YYAAIAU2.js} +0 -0
  358. /package/dist/app/chunks/{clojure-OC6KPSJO.js → clojure-4QCN4GHG.js} +0 -0
  359. /package/dist/app/chunks/{core-KGE7TQJ3.js → core-ZHTX3P2Q.js} +0 -0
  360. /package/dist/app/chunks/{csharp-E7VIFITL.js → csharp-HQWR4N52.js} +0 -0
  361. /package/dist/app/chunks/{dark-plus-BOSCZXE4.js → dark-plus-GYPKKZES.js} +0 -0
  362. /package/dist/app/chunks/{dart-6Y3X27SZ.js → dart-FO4TTVO2.js} +0 -0
  363. /package/dist/app/chunks/{diff-TR2NPA64.js → diff-SHANV4YC.js} +0 -0
  364. /package/dist/app/chunks/{dist-T32U2VVR.js → dist-WSDF34DM.js} +0 -0
  365. /package/dist/app/chunks/{docker-N33HOW54.js → docker-VX55HTDS.js} +0 -0
  366. /package/dist/app/chunks/{go-6DGG5UTP.js → go-5UCPEC6S.js} +0 -0
  367. /package/dist/app/chunks/{haskell-KK36PMMM.js → haskell-25PJ3OSG.js} +0 -0
  368. /package/dist/app/chunks/{ini-VHVQ5TPB.js → ini-BJIVD5MK.js} +0 -0
  369. /package/dist/app/chunks/{kotlin-44WS3JHE.js → kotlin-MNR6XOEQ.js} +0 -0
  370. /package/dist/app/chunks/{less-5WZ3KLAK.js → less-KA5JURX6.js} +0 -0
  371. /package/dist/app/chunks/{light-plus-HGGBC43G.js → light-plus-QXH2UUWZ.js} +0 -0
  372. /package/dist/app/chunks/{make-X7RXMVW7.js → make-LPD5KOCO.js} +0 -0
  373. /package/dist/app/chunks/{markdown-46IKUAIB.js → markdown-LMWF6MQR.js} +0 -0
  374. /package/dist/app/chunks/{mdx-DGLHDAO7.js → mdx-WPMNN5BS.js} +0 -0
  375. /package/dist/app/chunks/{nix-Q6FYQZLX.js → nix-QGWLUUMZ.js} +0 -0
  376. /package/dist/app/chunks/{powershell-L4KJJ6DK.js → powershell-7GSBBEFF.js} +0 -0
  377. /package/dist/app/chunks/{prisma-IKS4LVH2.js → prisma-FPMPQISO.js} +0 -0
  378. /package/dist/app/chunks/{proto-AYCDOTJO.js → proto-7KDX5Z2U.js} +0 -0
  379. /package/dist/app/chunks/{python-KXMCSAFQ.js → python-CFG4FTQW.js} +0 -0
  380. /package/dist/app/chunks/{rust-J3BC3P6V.js → rust-X7A37WU3.js} +0 -0
  381. /package/dist/app/chunks/{scala-AYIIHBJK.js → scala-OYHJSUG2.js} +0 -0
  382. /package/dist/app/chunks/{swift-QPHHCQD3.js → swift-PE7VNYW5.js} +0 -0
  383. /package/dist/app/chunks/{toml-UV7JK7K7.js → toml-ETQRDILP.js} +0 -0
@@ -70,7 +70,7 @@ server-side source rows rather than the index-count survey.)
70
70
  | Forget sync state (next tick re-walks; deletes nothing) | POST | `/sources/reset` | `drive.sync` | `reset.sh` |
71
71
  | Rescan changes (full re-walk now; unchanged files keep their vectors; 202 + job) | POST | `/sources/reindex` | `drive.sync` | `reindex.sh` |
72
72
  | Clean a file / folder / source index (estimate first) | POST | `/sources/purge` | `drive.mount` + `drive.sync` | `purge-index.sh` |
73
- | Re-embed a file / folder / source (estimate first) | POST | `/sources/reindex` + `force` | `drive.sync` | `reembed.sh` |
73
+ | Catch up embedding debt; FORCE=1 re-embeds (estimate first) | POST | `/sources/reindex` + `embeddingOnly` or `force` | `drive.sync` | `reembed.sh` |
74
74
 
75
75
  > **`update` takes no `:slug`.** PATCH targets the bare `/sources` path; the
76
76
  > source to patch is the body `source` field (the handler ignores the path).
@@ -151,6 +151,8 @@ server-side sync queue. Poll `sync-status.sh` (`SOURCE=<slug>`) until
151
151
  with `SOURCE` stops one source's job mid-run; without it, every job on
152
152
  sources you can see.
153
153
 
154
+ An embedding job can end `paused`: report `result.embedding.pausedReason` and partial counts. Resume is a new explicitly authorized `reembed.sh` request, using durable point debt; no saved job ID or automatic paid restart.
155
+
154
156
  `sync.sh` refuses in two ways worth telling apart. **404** — the slug does not
155
157
  resolve for you (it does not exist, or it is outside your scope; the two answer
156
158
  alike on purpose). **400** — the source exists but carries no `sync` block, so
@@ -167,11 +169,14 @@ Per-action:
167
169
  id or a UI label. An unregistered value is `404 Unknown kind "<x>"` for every caller.
168
170
  - `PATH_ARG` — for `browse.sh` (we don't reuse `PATH`).
169
171
  - `PURGE` — optional for `delete.sh`; `PURGE=1` (or `true`) enqueues an async
170
- vector purge. Delete then returns **202 + `{purgeJob, …}`** (vs 200 normally).
172
+ vector purge. Delete then returns **202 + `{purgeJob, …}`** (vs 200 normally). Any delete
173
+ resolves the source's open notifications (its unread failure warnings) for you and its creator.
171
174
  - `SOURCE` — source name for `sync.sh`, `reindex.sh`, `reset.sh`, `reembed.sh` (required) and
172
175
  `cancel.sh`, `sync-status.sh` (optional).
173
176
  - `FOLDER` / `URI` — `reembed.sh` scope (one of them, inside `SOURCE`; neither = the whole
174
- source). `CONFIRM=1` starts the re-embed; without it the script only ESTIMATES.
177
+ source). `CONFIRM=1` starts debt catchup; without it the script only ESTIMATES. `FORCE=1` selects a forced connector re-embed instead.
178
+ `SCOPE=platform` (catch-up only, whole source, needs `platform.vector.maintain`) catches up EVERY
179
+ writer's points of the source, not only yours — the way back after an operator dense clear.
175
180
  - `ENABLED` — `true | false | auto` for `set-enabled.sh`.
176
181
  - `BODY_JSON` — POST/PATCH bodies (`create.sh`, `update.sh`). Both MUST include
177
182
  `source` + `permissions`; create additionally requires `connection.kind`. May also
@@ -182,7 +187,7 @@ Per-action:
182
187
  means only matching files sync, and an exclude still wins. A `sync.media` object
183
188
  (`{"images":true,"pdf":true,"video":false,"audio":false}`, absent key = that default)
184
189
  picks which binary kinds a MULTIMODAL active model embeds; a text-only model embeds
185
- none, and `lastSyncResult.mediaSkipped` counts what was left out. The `invalid` reason is a local PNG structural check before provider work; invalid input preserves existing indexed and recovery payloads. **`include` bounds the
190
+ none, and `lastSyncResult.mediaSkipped` counts what was left out; `lastSyncResult.binarySkipped` is the last count of binary files not indexed as text (a binary extension, or a NUL in the first `brainSyncBinarySniffChars` characters); `lastSyncResult.embeddingDegraded` lists the reasons (`quota`, `credentials`, `rate_limit`, …) when the embedder was unavailable during the pass — the files are indexed and text-searchable, their semantic embedding is owed and caught up by `reembed.sh` once the embedder answers. The `invalid` reason is a local PNG structural check before provider work; invalid input preserves existing indexed and recovery payloads. **`include` bounds the
186
191
  INDEX, never the read.** What an agent can `fs_read` is set by the source ROOT and by
187
192
  `permissions.paths[]` — so narrowing a wide source with `include` alone leaves every
188
193
  file under that root readable. Re-root it, or add a path deny, or both.
@@ -228,22 +233,18 @@ SOURCE=scratch-demo FOLDER=scratch-demo://docs OBSOLETE_ONLY=false bash ${SKILL_
228
233
 
229
234
  ## Re-embed (a file, a folder, a source)
230
235
 
231
- "Rescan changes" reuses unchanged indexed files, but rebuilds re-included recovery-only content. `reembed.sh` forces every file in the
232
- scope is read again and embedded with the ACTIVE model, and nothing else about the source
233
- changes. Run it WITHOUT `CONFIRM` first — it answers `{documents, estimate:{tokens,
234
- relStdErr, usd, seconds}}` and changes nothing (`usd` is `null` for an unpriced model; the
235
- count covers only files you may read). Show that to the user, then run it again with
236
- `CONFIRM=1` (202 + job; poll `sync-status.sh`). A single file you may not read answers
236
+ "Rescan changes" reuses unchanged indexed files, but rebuilds re-included recovery-only content. `reembed.sh` catches up missing/stale indexed embeddings, including brain-only and unchanged legacy records. Its read-only estimate returns `estimate_kind:scope_upper_bound`: authorized indexed scope counts are an upper bound, not a provider quote; no provider call or job starts. Show the estimate before `CONFIRM=1` (202 + embedding job; poll `sync-status.sh`). Disabled embedding refuses: each `list.sh` row's `embedding_enabled` is the live platform switch, and while it is `false` `reembed.sh` answers 409 `embedding_disabled`; without an active dense generation the estimate refuses and a submitted job pauses as `metadata_only`, never activating a model. `FORCE=1` instead rereads and re-embeds the connector scope; its estimate includes `{documents,estimate:{tokens,relStdErr,usd,seconds}}` (`usd:null` for an unpriced model). A single file you may not read answers
237
237
  `404`, exactly like a missing one. Switching the platform to a DIFFERENT model is not this:
238
238
  that is the owner's rebuild in the admin Vector section.
239
239
 
240
240
  ## Package sources (`recognizesPackages`)
241
241
 
242
- `create.sh` / `update.sh` accept `recognizesPackages` (boolean) in `BODY_JSON`. When
243
- true, the source's markdown is discovered as **package contributions** (skill /
244
- instruction / rule / agent / docs — there is no `team` category via this path) — this is
245
- how a synced source feeds packages back (source packages, R2/R2b). Two server-side gates
246
- apply regardless of what you send (`src/routes/sources.ts`):
242
+ `create.sh` / `update.sh` accept `recognizesPackages` (boolean) in `BODY_JSON`. It does
243
+ NOT switch markdown discovery on — a synced source's markdown becomes source-package
244
+ contributions (skill / instruction / rule / agent / docs) either way; the flag lets the host
245
+ load the source as a runtime package source (create-package
246
+ `references/connectors-and-uri-policies.md` §Declare source instances owns the details). Two
247
+ server-side gates apply regardless of what you send (`src/routes/sources.ts`):
247
248
 
248
249
  - **Owner/admin-STRENGTH only, measured by PRIORITY — not by role name.** The
249
250
  gate passes a caller whose `priority` is at or above the built-in `admin`
@@ -2,19 +2,25 @@
2
2
  set -euo pipefail
3
3
  API_BASE="${NEURALIS_API:?NEURALIS_API not set; activate skill first}"
4
4
  TOKEN="${NEURALIS_SESSION_TOKEN:?missing session ticket; activate the skill via execute action=\"skill\"}"
5
- # Requires drive.sync (403 otherwise). Re-embeds with the ACTIVE model — a
5
+ # Requires drive.sync (403 otherwise). FORCE=1 re-embeds with the ACTIVE model; otherwise catches up durable embedding debt — a
6
6
  # file (URI), a folder's indexed files (FOLDER) or, with neither, the whole
7
7
  # source — even when nothing changed. Default = the ESTIMATE only (changes
8
8
  # nothing); CONFIRM=1 starts it (202 + job). Only files you may read count.
9
+ # SCOPE=platform (catch-up only, whole source, needs platform.vector.maintain)
10
+ # catches up EVERY writer's points of the source — the way back after a dense clear.
9
11
  SOURCE="${SOURCE:?SOURCE is required}"
10
12
  FOLDER="${FOLDER:-}"
11
13
  URI="${URI:-}"
12
14
  CONFIRM="${CONFIRM:-}"
13
- BODY=$(jq -n --arg source "${SOURCE}" --arg folder "${FOLDER}" --arg uri "${URI}" --arg confirm "${CONFIRM}" \
15
+ FORCE="${FORCE:-}"
16
+ SCOPE="${SCOPE:-}"
17
+ BODY=$(jq -n --arg source "${SOURCE}" --arg folder "${FOLDER}" --arg uri "${URI}" --arg confirm "${CONFIRM}" --arg force "${FORCE}" --arg scope "${SCOPE}" \
14
18
  '{ source: $source }
15
19
  + (if $folder == "" then {} else { folder: $folder } end)
16
20
  + (if $uri == "" then {} else { uri: $uri } end)
17
- + (if $confirm == "1" then { force: true } else { estimate: true } end)')
21
+ + (if $force == "1" then {force: ($confirm == "1")} else {embeddingOnly: true} end)
22
+ + (if $scope == "" then {} else {scope: $scope} end)
23
+ + (if $confirm == "1" then {} else {estimate: true} end)')
18
24
  curl --fail-with-body -sS -X POST \
19
25
  -H "Authorization: Bearer ${TOKEN}" -H "X-Neuralis-Skill: manage-sources" \
20
26
  -H "Content-Type: application/json" -d "${BODY}" \
@@ -13,20 +13,20 @@ Trigger a delta sync for the brain-core filesystem.
13
13
 
14
14
  1. Use `fs_list` with no `uri` first to identify configured sources, scopes, current sync status, and recent errors.
15
15
  2. Call the brain-core source sync route for the intended source. The route answers 202 + a queue job snapshot — the sync runs in the background. Explicit sync requires `drive.sync`; source create/update/delete uses `drive.mount`; file writes use `drive.write`.
16
- 3. Poll `GET /sources/sync-status?source=<slug>` until the job finishes, then report the job `result` counts: `filesAdded`, `filesUpdated`, `filesRemoved`, `filesSkipped`, `filesMoved`, `chunksRemoved`, `chunksEmbedded` and `chunksSkipped` — and read the two flags that change what those counts mean before you report them. `cancelled: true` is not a failure, but the run stopped early: the counts are partial and a re-run converges. `truncated: true` means the walk stopped at `filesScanCap`, so files past the cap were never examined and no deletion or move was inferred — call that a partial pass, never a completed sync.
16
+ 3. Poll `GET /sources/sync-status?source=<slug>` until the job finishes, then report the job `result` counts: `filesAdded`, `filesUpdated`, `filesRemoved`, `filesSkipped`, `filesMoved`, `chunksRemoved`, `chunksEmbedded` and `chunksSkipped` plus `embeddingDegraded` (safe, deduplicated embedding stop reasons). Payload indexing can succeed with missing/stale embeddings; report that debt separately. Read the two flags before interpreting completion. `cancelled: true` is not a failure, but the run stopped early: the counts are partial and a re-run converges. `truncated: true` means the walk stopped at `filesScanCap`, so files past the cap were never examined and no deletion or move was inferred — call that a partial pass, never a completed sync.
17
17
  4. If any errors occur, list them clearly with the affected source, scope, and file path.
18
- 5. Remind the user that `fs_read` and `fs_list` may already show live connector data before semantic/filter search catches up.
18
+ 5. Distinguish live connector data, indexed payload and embedding freshness. Provider outage or disabled embedding preserves metadata/full-text indexing; semantic results may be old, or the response may fall back to filter search. Ordinary sync completion does not settle all embedding debt. Use `manage-sources` explicit debt catchup; terminal `paused` carries `result.embedding.pausedReason`, and Resume creates a new authorized job from durable debt.
19
19
 
20
20
  ## What a sync will and will not index
21
21
 
22
- A file is embedded only when BOTH inputs allow it, and they are different kinds
22
+ A file is indexed only when BOTH inputs allow it, and they are different kinds
23
23
  of thing — say which one you mean when you report a missing file:
24
24
 
25
25
  - the source's **exclude/include patterns** — a PREFERENCE the operator owns and
26
26
  can edit at any time (`manage-sources`). A file missing for this reason is a
27
27
  configuration answer, not a security one.
28
28
  - the immutable **uri-policy read floor** — the security half. *What cannot be
29
- READ cannot be EMBEDDED*: a path a `floor:true` row denies `read` on is never
29
+ READ cannot be INDEXED*: a path a `floor:true` row denies `read` on is never
30
30
  newly embedded, on every source including ones attached long before the floor
31
31
  shipped, and no `include` whitelist resurrects it. There is no exclude entry to
32
32
  add and none to remove.
@@ -3,7 +3,7 @@
3
3
  "title": "Search Filesystem Nodes",
4
4
  "type": "object",
5
5
  "additionalProperties": false,
6
- "description": "Find files by meaning, by indexed metadata, or by literal text in the live files. For a place you cannot name yet, pair semantic search with a scoped grep to cover index lag; grep needs a folder URI and answers with line anchors. Search before you create — and before you claim something is absent: every mode says when its set was cut.",
6
+ "description": "Find scoped files by meaning, indexed metadata/keywords or fixed-string live grep with line anchors (folder_uri required). Pair semantic and grep to cover index lag. Search before creating or claiming absence; every mode reports truncation.",
7
7
  "properties": {
8
8
  "search_mode": {
9
9
  "type": "string",
@@ -12,7 +12,7 @@
12
12
  "filter",
13
13
  "grep"
14
14
  ],
15
- "description": "'semantic' (default) = embeddings + indexed text. 'filter' = indexed metadata/keyword, no embed cost. 'grep' = FIXED-STRING (never regex) over live files, needs folder_uri. `glob` alone → filter."
15
+ "description": "semantic (default): embeddings + indexed text; off/unavailable embedding → filter. Check effective_mode, embedding_degraded and row embedding_status (current/stale/missing/unknown). filter: metadata/keywords, no embed cost. grep: FIXED-STRING, never regex, needs folder_uri. glob alone → filter."
16
16
  },
17
17
  "query": {
18
18
  "type": "string",
@@ -1 +0,0 @@
1
- import{a as e}from"./chunk-TY33BMKR.js";import"./chunk-DCANE7XH.js";export{e as default};
@@ -1 +0,0 @@
1
- import{a}from"./chunk-QLBZ4JR2.js";import"./chunk-DCANE7XH.js";export{a as default};
@@ -1 +0,0 @@
1
- import{a}from"./chunk-G4RZ3UNX.js";import"./chunk-XIFGTNRM.js";import"./chunk-QLBZ4JR2.js";import"./chunk-DCANE7XH.js";export{a as default};
@@ -1 +0,0 @@
1
- import{a}from"./chunk-DKD2L57N.js";import"./chunk-DCANE7XH.js";export{a as default};
@@ -1 +0,0 @@
1
- import{a}from"./chunk-QXXJ73P5.js";import"./chunk-6TC3DVWV.js";import"./chunk-TRRUHDPN.js";import"./chunk-OLEIKJ3X.js";import"./chunk-KYH5EHHY.js";import"./chunk-DCANE7XH.js";export{a as default};
@@ -1 +0,0 @@
1
- import{a}from"./chunk-RH3QY5LF.js";import"./chunk-DKD2L57N.js";import"./chunk-OLEIKJ3X.js";import"./chunk-DCANE7XH.js";export{a as default};
@@ -1 +0,0 @@
1
- import{a}from"./chunk-BGRVFATT.js";import"./chunk-DCANE7XH.js";export{a as default};
@@ -1 +0,0 @@
1
- import{a}from"./chunk-OLEIKJ3X.js";import"./chunk-DCANE7XH.js";export{a as default};
@@ -1 +0,0 @@
1
- import{a}from"./chunk-DZ5C5FKI.js";import"./chunk-DCANE7XH.js";export{a as default};
@@ -1 +0,0 @@
1
- import{a}from"./chunk-KYH5EHHY.js";import"./chunk-DCANE7XH.js";export{a as default};
@@ -1 +0,0 @@
1
- import{a}from"./chunk-5H7ZCOD3.js";import"./chunk-QLBZ4JR2.js";import"./chunk-DCANE7XH.js";export{a as default};
@@ -1 +0,0 @@
1
- import{a}from"./chunk-737Y24HS.js";import"./chunk-DCANE7XH.js";export{a as default};
@@ -1 +0,0 @@
1
- import{a}from"./chunk-4QNMHAIR.js";import"./chunk-DCANE7XH.js";export{a as default};
@@ -1 +0,0 @@
1
- import{a}from"./chunk-TRRUHDPN.js";import"./chunk-DCANE7XH.js";export{a as default};
@@ -1 +0,0 @@
1
- import{a}from"./chunk-6TC3DVWV.js";import"./chunk-DCANE7XH.js";export{a as default};
@@ -1 +0,0 @@
1
- import{a}from"./chunk-3QLE7Y4L.js";import"./chunk-BGRVFATT.js";import"./chunk-DCANE7XH.js";export{a as default};
@@ -1 +0,0 @@
1
- import{a}from"./chunk-SFUNBBEA.js";import"./chunk-DCANE7XH.js";export{a as default};
@@ -1,32 +0,0 @@
1
- /**
2
- * One-time `_pending` boot self-heal (prudent-indexing-otter, Step C).
3
- *
4
- * The durable Pending-Changes journal + baseline blobs live under
5
- * `data://brain-core/_pending/**` — sync-EXCLUDED (the runtime floor) precisely
6
- * because the baseline blobs may hold sensitive file content that must NEVER be
7
- * vectorized. Before this increment the fs write path vectorized EVERY create,
8
- * so projects predating the floor can carry stale `_pending` nodes in Qdrant.
9
- *
10
- * This idempotent boot pass purges them per project — the proven `runPurge`
11
- * bounded `deleteByFilter` shape (no full-project scroll, no client matching):
12
- * a single server-side delete scoped to `projectId` + `folder_ancestors` =
13
- * `data://brain-core/_pending` (chunks carry `folder_ancestors` too, so they are
14
- * covered by the same filter). `_pending`-ONLY; general excluded-node cleanup
15
- * rides the existing sync config-change reconcile.
16
- */
17
- import type { SourceConfigPort } from '../connectors/types.js';
18
- import type { VectorIndexPort } from '../vector/types.js';
19
- import type { FilesystemNode } from '../domain/types.js';
20
- export type PurgePendingResult = {
21
- projects: number;
22
- removed: number;
23
- };
24
- export declare function purgeStalePendingNodes(deps: {
25
- sourceConfigs: SourceConfigPort;
26
- getVector: (projectId: string) => Promise<VectorIndexPort<FilesystemNode>>;
27
- logger?: {
28
- info?: (msg: string, meta?: Record<string, unknown>) => void;
29
- warn?: (msg: string, meta?: Record<string, unknown>) => void;
30
- };
31
- }): Promise<PurgePendingResult>;
32
- //# sourceMappingURL=purgePendingNodes.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"purgePendingNodes.d.ts","sourceRoot":"","sources":["../../../src/services/purgePendingNodes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAKzD,MAAM,MAAM,kBAAkB,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAEvE,wBAAsB,sBAAsB,CAAC,IAAI,EAAE;IACjD,aAAa,EAAE,gBAAgB,CAAC;IAChC,SAAS,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,eAAe,CAAC,cAAc,CAAC,CAAC,CAAC;IAC3E,MAAM,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;QAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAA;KAAE,CAAC;CACzI,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAyC9B"}
@@ -1,61 +0,0 @@
1
- /**
2
- * One-time `_pending` boot self-heal (prudent-indexing-otter, Step C).
3
- *
4
- * The durable Pending-Changes journal + baseline blobs live under
5
- * `data://brain-core/_pending/**` — sync-EXCLUDED (the runtime floor) precisely
6
- * because the baseline blobs may hold sensitive file content that must NEVER be
7
- * vectorized. Before this increment the fs write path vectorized EVERY create,
8
- * so projects predating the floor can carry stale `_pending` nodes in Qdrant.
9
- *
10
- * This idempotent boot pass purges them per project — the proven `runPurge`
11
- * bounded `deleteByFilter` shape (no full-project scroll, no client matching):
12
- * a single server-side delete scoped to `projectId` + `folder_ancestors` =
13
- * `data://brain-core/_pending` (chunks carry `folder_ancestors` too, so they are
14
- * covered by the same filter). `_pending`-ONLY; general excluded-node cleanup
15
- * rides the existing sync config-change reconcile.
16
- */
17
- /** The folder-ancestor key the `_pending` journal + blob nodes carry. */
18
- const PENDING_FOLDER_ANCESTOR = 'data://brain-core/_pending';
19
- export async function purgeStalePendingNodes(deps) {
20
- let scoped;
21
- try {
22
- scoped = await deps.sourceConfigs.listAll();
23
- }
24
- catch (err) {
25
- deps.logger?.warn?.('pending purge: listAll failed', {
26
- error: err instanceof Error ? err.message : String(err),
27
- });
28
- return { projects: 0, removed: 0 };
29
- }
30
- const projectIds = new Set();
31
- for (const { scope } of scoped) {
32
- if (scope.projectId)
33
- projectIds.add(scope.projectId);
34
- }
35
- let removed = 0;
36
- for (const projectId of projectIds) {
37
- try {
38
- const vector = await deps.getVector(projectId);
39
- removed += await vector.deleteByFilter({
40
- must: [
41
- { field: 'projectId', equals: projectId },
42
- { field: 'folder_ancestors', equals: PENDING_FOLDER_ANCESTOR },
43
- ],
44
- });
45
- }
46
- catch (err) {
47
- deps.logger?.warn?.('pending purge failed for project', {
48
- projectId,
49
- error: err instanceof Error ? err.message : String(err),
50
- });
51
- }
52
- }
53
- if (removed > 0) {
54
- deps.logger?.info?.('stale _pending nodes purged', {
55
- projects: projectIds.size,
56
- removed,
57
- });
58
- }
59
- return { projects: projectIds.size, removed };
60
- }
61
- //# sourceMappingURL=purgePendingNodes.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"purgePendingNodes.js","sourceRoot":"","sources":["../../../src/services/purgePendingNodes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAMH,yEAAyE;AACzE,MAAM,uBAAuB,GAAG,4BAA4B,CAAC;AAI7D,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,IAI5C;IACC,IAAI,MAAM,CAAC;IACX,IAAI,CAAC;QACH,MAAM,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC;IAC9C,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,+BAA+B,EAAE;YACnD,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;SACxD,CAAC,CAAC;QACH,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;IACrC,CAAC;IAED,MAAM,UAAU,GAAG,IAAI,GAAG,EAAU,CAAC;IACrC,KAAK,MAAM,EAAE,KAAK,EAAE,IAAI,MAAM,EAAE,CAAC;QAC/B,IAAI,KAAK,CAAC,SAAS;YAAE,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IACvD,CAAC;IAED,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;YAC/C,OAAO,IAAI,MAAM,MAAM,CAAC,cAAc,CAAC;gBACrC,IAAI,EAAE;oBACJ,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE;oBACzC,EAAE,KAAK,EAAE,kBAAkB,EAAE,MAAM,EAAE,uBAAuB,EAAE;iBAC/D;aACF,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,kCAAkC,EAAE;gBACtD,SAAS;gBACT,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;aACxD,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;QAChB,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,6BAA6B,EAAE;YACjD,QAAQ,EAAE,UAAU,CAAC,IAAI;YACzB,OAAO;SACR,CAAC,CAAC;IACL,CAAC;IACD,OAAO,EAAE,QAAQ,EAAE,UAAU,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC;AAChD,CAAC"}