@neuralis/brain-core 0.1.0 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (401) hide show
  1. package/README.md +26 -35
  2. package/app/README.md +1 -1
  3. package/app/cards/DiffView.tsx +9 -7
  4. package/app/cards/README.md +1 -1
  5. package/app/cards/diffLine.tsx +2 -4
  6. package/app/filesystem/README.md +4 -4
  7. package/app/filesystem/api/README.md +3 -3
  8. package/app/filesystem/api/index.ts +137 -123
  9. package/app/filesystem/domain/types.ts +36 -5
  10. package/app/filesystem/hooks/README.md +5 -5
  11. package/app/filesystem/hooks/useDiscoverableSources.ts +4 -2
  12. package/app/filesystem/hooks/useFilesystemSSE.ts +31 -23
  13. package/app/filesystem/hooks/useGitChangesInventory.ts +4 -2
  14. package/app/filesystem/host/README.md +3 -2
  15. package/app/filesystem/host/installFilesystemHostComponents.tsx +22 -9
  16. package/app/filesystem/store/README.md +11 -7
  17. package/app/filesystem/store/filesystemStore.ts +454 -162
  18. package/app/filesystem/store/gitSlice.ts +6 -6
  19. package/app/filesystem/store/listSlice.ts +10 -6
  20. package/app/filesystem/store/searchSlice.ts +27 -4
  21. package/app/filesystem/ui/FileEditor.tsx +48 -35
  22. package/app/filesystem/ui/FileTree.tsx +10 -9
  23. package/app/filesystem/ui/FileTreeSearch.tsx +29 -2
  24. package/app/filesystem/ui/GitCommitChangesView.tsx +5 -3
  25. package/app/filesystem/ui/GitCommitGraph.tsx +6 -5
  26. package/app/filesystem/ui/GitControlPanel.tsx +14 -13
  27. package/app/filesystem/ui/GitDiffView.tsx +2 -1
  28. package/app/filesystem/ui/GitFileDiff.tsx +7 -6
  29. package/app/filesystem/ui/PendingChangesPanel.tsx +88 -28
  30. package/app/filesystem/ui/PendingReviewDialog.tsx +52 -24
  31. package/app/filesystem/ui/README.md +8 -7
  32. package/app/filesystem/ui/ReembedDialog.tsx +22 -9
  33. package/app/filesystem/ui/SourceDeleteConfirm.tsx +1 -1
  34. package/app/filesystem/ui/SourcesPanel.tsx +135 -42
  35. package/app/filesystem/ui/VectorHealthPanel.tsx +20 -4
  36. package/app/filesystem/ui/pendingChangesModel.ts +9 -5
  37. package/dist/app/chunks/{astro-LRAFGXNX.js → astro-B2J4AS2D.js} +1 -1
  38. package/dist/app/chunks/bash-KY6SAQTH.js +1 -0
  39. package/dist/app/chunks/c-OBOPYVZ7.js +1 -0
  40. package/dist/app/chunks/{chunk-5H7ZCOD3.js → chunk-2X3GNKJ3.js} +1 -1
  41. package/dist/app/chunks/{chunk-XIFGTNRM.js → chunk-JPJIVRFI.js} +1 -1
  42. package/dist/app/chunks/{chunk-RH3QY5LF.js → chunk-LEFIFWND.js} +1 -1
  43. package/dist/app/chunks/{chunk-G4RZ3UNX.js → chunk-N6RXX3PH.js} +1 -1
  44. package/dist/app/chunks/{chunk-QXXJ73P5.js → chunk-PZAW4HPB.js} +1 -1
  45. package/dist/app/chunks/{chunk-3QLE7Y4L.js → chunk-ZBYWWTO6.js} +1 -1
  46. package/dist/app/chunks/cpp-TVWVOTEQ.js +1 -0
  47. package/dist/app/chunks/css-MANZBYA4.js +1 -0
  48. package/dist/app/chunks/{elixir-M36XROA6.js → elixir-S725Z7EH.js} +1 -1
  49. package/dist/app/chunks/{elm-7BG6QAIK.js → elm-5WUUSTNB.js} +1 -1
  50. package/dist/app/chunks/graphql-UGOPR3WU.js +1 -0
  51. package/dist/app/chunks/html-F6FWTBSG.js +1 -0
  52. package/dist/app/chunks/java-ANIVV5H5.js +1 -0
  53. package/dist/app/chunks/javascript-IH374YWG.js +1 -0
  54. package/dist/app/chunks/json-WGGVVXSB.js +1 -0
  55. package/dist/app/chunks/jsx-OTXJQD32.js +1 -0
  56. package/dist/app/chunks/{latex-ZWK7SXB6.js → latex-QCZNITGN.js} +1 -1
  57. package/dist/app/chunks/lua-4CRZ64PU.js +1 -0
  58. package/dist/app/chunks/{nginx-2L6VRV3A.js → nginx-V4CYS7WR.js} +1 -1
  59. package/dist/app/chunks/{perl-PBUAXXK6.js → perl-BHTX7F5B.js} +1 -1
  60. package/dist/app/chunks/{php-QJX57PA6.js → php-AYGJ5WYZ.js} +1 -1
  61. package/dist/app/chunks/r-4YFCFA4B.js +1 -0
  62. package/dist/app/chunks/{ruby-RLOWMVPO.js → ruby-42NMJWAL.js} +1 -1
  63. package/dist/app/chunks/{scss-B5CAI3HR.js → scss-XD7VU2CU.js} +1 -1
  64. package/dist/app/chunks/sql-B55MH6JJ.js +1 -0
  65. package/dist/app/chunks/{svelte-GT3D4C44.js → svelte-WR3QPIJU.js} +1 -1
  66. package/dist/app/chunks/tsx-S73GAE2L.js +1 -0
  67. package/dist/app/chunks/typescript-NEWOAB5Z.js +1 -0
  68. package/dist/app/chunks/{vue-JOW62MHD.js → vue-CCDS4VZK.js} +1 -1
  69. package/dist/app/chunks/xml-UXKAGLDR.js +1 -0
  70. package/dist/app/chunks/yaml-UMWKDTK7.js +1 -0
  71. package/dist/app/host.js +46 -46
  72. package/dist/scripts/embeddingLockV3.d.ts +30 -0
  73. package/dist/scripts/embeddingLockV3.d.ts.map +1 -0
  74. package/dist/scripts/embeddingLockV3.js +100 -0
  75. package/dist/scripts/embeddingLockV3.js.map +1 -0
  76. package/dist/scripts/vectorProofV1.d.ts +90 -0
  77. package/dist/scripts/vectorProofV1.d.ts.map +1 -0
  78. package/dist/scripts/vectorProofV1.js +220 -0
  79. package/dist/scripts/vectorProofV1.js.map +1 -0
  80. package/dist/src/config/env.d.ts +21 -0
  81. package/dist/src/config/env.d.ts.map +1 -1
  82. package/dist/src/config/env.js +55 -0
  83. package/dist/src/config/env.js.map +1 -1
  84. package/dist/src/connectors/AppSourceConfigStore.d.ts +12 -2
  85. package/dist/src/connectors/AppSourceConfigStore.d.ts.map +1 -1
  86. package/dist/src/connectors/AppSourceConfigStore.js +48 -40
  87. package/dist/src/connectors/AppSourceConfigStore.js.map +1 -1
  88. package/dist/src/connectors/LocalDiskConnector.d.ts +11 -14
  89. package/dist/src/connectors/LocalDiskConnector.d.ts.map +1 -1
  90. package/dist/src/connectors/LocalDiskConnector.js +87 -107
  91. package/dist/src/connectors/LocalDiskConnector.js.map +1 -1
  92. package/dist/src/connectors/sourceConfigMutation.d.ts +11 -1
  93. package/dist/src/connectors/sourceConfigMutation.d.ts.map +1 -1
  94. package/dist/src/connectors/sourceConfigMutation.js +36 -3
  95. package/dist/src/connectors/sourceConfigMutation.js.map +1 -1
  96. package/dist/src/domain/chunker.js +8 -3
  97. package/dist/src/domain/chunker.js.map +1 -1
  98. package/dist/src/domain/healthTypes.d.ts +11 -0
  99. package/dist/src/domain/healthTypes.d.ts.map +1 -1
  100. package/dist/src/domain/mime.d.ts +1 -0
  101. package/dist/src/domain/mime.d.ts.map +1 -1
  102. package/dist/src/domain/mime.js +48 -0
  103. package/dist/src/domain/mime.js.map +1 -1
  104. package/dist/src/domain/pendingChange.d.ts +7 -0
  105. package/dist/src/domain/pendingChange.d.ts.map +1 -1
  106. package/dist/src/domain/pendingChange.js +11 -0
  107. package/dist/src/domain/pendingChange.js.map +1 -1
  108. package/dist/src/domain/sourceConfig.d.ts +7 -14
  109. package/dist/src/domain/sourceConfig.d.ts.map +1 -1
  110. package/dist/src/domain/sourceConfig.js +1 -13
  111. package/dist/src/domain/sourceConfig.js.map +1 -1
  112. package/dist/src/domain/sourcePackages.d.ts +11 -2
  113. package/dist/src/domain/sourcePackages.d.ts.map +1 -1
  114. package/dist/src/domain/syncTrigger.d.ts +2 -3
  115. package/dist/src/domain/syncTrigger.d.ts.map +1 -1
  116. package/dist/src/domain/syncTrigger.js +2 -3
  117. package/dist/src/domain/syncTrigger.js.map +1 -1
  118. package/dist/src/domain/syncTypes.d.ts +21 -4
  119. package/dist/src/domain/syncTypes.d.ts.map +1 -1
  120. package/dist/src/domain/syncTypes.js.map +1 -1
  121. package/dist/src/domain/text.d.ts +3 -0
  122. package/dist/src/domain/text.d.ts.map +1 -1
  123. package/dist/src/domain/text.js +5 -0
  124. package/dist/src/domain/text.js.map +1 -1
  125. package/dist/src/domain/types.d.ts +9 -0
  126. package/dist/src/domain/types.d.ts.map +1 -1
  127. package/dist/src/embeddings/clients/GeminiEmbedder.d.ts.map +1 -1
  128. package/dist/src/embeddings/clients/GeminiEmbedder.js +11 -5
  129. package/dist/src/embeddings/clients/GeminiEmbedder.js.map +1 -1
  130. package/dist/src/embeddings/clients/OllamaEmbedder.d.ts.map +1 -1
  131. package/dist/src/embeddings/clients/OllamaEmbedder.js +13 -6
  132. package/dist/src/embeddings/clients/OllamaEmbedder.js.map +1 -1
  133. package/dist/src/embeddings/clients/OpenAIEmbedder.d.ts.map +1 -1
  134. package/dist/src/embeddings/clients/OpenAIEmbedder.js +12 -9
  135. package/dist/src/embeddings/clients/OpenAIEmbedder.js.map +1 -1
  136. package/dist/src/embeddings/clients/QwenEmbedder.d.ts.map +1 -1
  137. package/dist/src/embeddings/clients/QwenEmbedder.js +12 -5
  138. package/dist/src/embeddings/clients/QwenEmbedder.js.map +1 -1
  139. package/dist/src/embeddings/clients/VoyageEmbedder.d.ts.map +1 -1
  140. package/dist/src/embeddings/clients/VoyageEmbedder.js +12 -5
  141. package/dist/src/embeddings/clients/VoyageEmbedder.js.map +1 -1
  142. package/dist/src/embeddings/factory.d.ts +2 -0
  143. package/dist/src/embeddings/factory.d.ts.map +1 -1
  144. package/dist/src/embeddings/factory.js +23 -3
  145. package/dist/src/embeddings/factory.js.map +1 -1
  146. package/dist/src/embeddings/lock.d.ts +22 -11
  147. package/dist/src/embeddings/lock.d.ts.map +1 -1
  148. package/dist/src/embeddings/lock.js +47 -29
  149. package/dist/src/embeddings/lock.js.map +1 -1
  150. package/dist/src/embeddings/retry.d.ts +5 -0
  151. package/dist/src/embeddings/retry.d.ts.map +1 -1
  152. package/dist/src/embeddings/retry.js +35 -0
  153. package/dist/src/embeddings/retry.js.map +1 -1
  154. package/dist/src/events/pending.d.ts +56 -0
  155. package/dist/src/events/pending.d.ts.map +1 -0
  156. package/dist/src/events/pending.js +108 -0
  157. package/dist/src/events/pending.js.map +1 -0
  158. package/dist/src/events/source.d.ts +60 -14
  159. package/dist/src/events/source.d.ts.map +1 -1
  160. package/dist/src/events/source.js +149 -31
  161. package/dist/src/events/source.js.map +1 -1
  162. package/dist/src/events/vector.d.ts +33 -0
  163. package/dist/src/events/vector.d.ts.map +1 -0
  164. package/dist/src/events/vector.js +57 -0
  165. package/dist/src/events/vector.js.map +1 -0
  166. package/dist/src/git/GitRunner.d.ts.map +1 -1
  167. package/dist/src/git/GitRunner.js +11 -8
  168. package/dist/src/git/GitRunner.js.map +1 -1
  169. package/dist/src/git/sourceGitControl.d.ts.map +1 -1
  170. package/dist/src/git/sourceGitControl.js +2 -1
  171. package/dist/src/git/sourceGitControl.js.map +1 -1
  172. package/dist/src/index.d.ts +5 -4
  173. package/dist/src/index.d.ts.map +1 -1
  174. package/dist/src/index.js +4 -3
  175. package/dist/src/index.js.map +1 -1
  176. package/dist/src/lifecycle.d.ts +20 -4
  177. package/dist/src/lifecycle.d.ts.map +1 -1
  178. package/dist/src/lifecycle.js +5 -1
  179. package/dist/src/lifecycle.js.map +1 -1
  180. package/dist/src/routes/health.js +6 -1
  181. package/dist/src/routes/health.js.map +1 -1
  182. package/dist/src/routes/pending.d.ts.map +1 -1
  183. package/dist/src/routes/pending.js +2 -1
  184. package/dist/src/routes/pending.js.map +1 -1
  185. package/dist/src/routes/sources.d.ts.map +1 -1
  186. package/dist/src/routes/sources.js +60 -11
  187. package/dist/src/routes/sources.js.map +1 -1
  188. package/dist/src/services/BridgeService.d.ts +2 -2
  189. package/dist/src/services/BridgeService.d.ts.map +1 -1
  190. package/dist/src/services/BridgeService.js +11 -2
  191. package/dist/src/services/BridgeService.js.map +1 -1
  192. package/dist/src/services/FilesystemService.d.ts +3 -1
  193. package/dist/src/services/FilesystemService.d.ts.map +1 -1
  194. package/dist/src/services/FilesystemService.js +3 -1
  195. package/dist/src/services/FilesystemService.js.map +1 -1
  196. package/dist/src/services/FilesystemUiService.js +1 -1
  197. package/dist/src/services/FilesystemUiService.js.map +1 -1
  198. package/dist/src/services/SyncScheduler.d.ts.map +1 -1
  199. package/dist/src/services/SyncScheduler.js +0 -14
  200. package/dist/src/services/SyncScheduler.js.map +1 -1
  201. package/dist/src/services/VectorHealthService.d.ts.map +1 -1
  202. package/dist/src/services/VectorHealthService.js +2 -46
  203. package/dist/src/services/VectorHealthService.js.map +1 -1
  204. package/dist/src/services/baselineRepair.d.ts +2 -2
  205. package/dist/src/services/baselineRepair.js +2 -2
  206. package/dist/src/services/declaredSources.d.ts +8 -1
  207. package/dist/src/services/declaredSources.d.ts.map +1 -1
  208. package/dist/src/services/declaredSources.js +19 -19
  209. package/dist/src/services/declaredSources.js.map +1 -1
  210. package/dist/src/store/dataFormats.d.ts +14 -3
  211. package/dist/src/store/dataFormats.d.ts.map +1 -1
  212. package/dist/src/store/dataFormats.js +15 -5
  213. package/dist/src/store/dataFormats.js.map +1 -1
  214. package/dist/src/sync/DeltaSyncRunner.d.ts.map +1 -1
  215. package/dist/src/sync/DeltaSyncRunner.js +78 -243
  216. package/dist/src/sync/DeltaSyncRunner.js.map +1 -1
  217. package/dist/src/sync/SyncJobQueue.d.ts +33 -4
  218. package/dist/src/sync/SyncJobQueue.d.ts.map +1 -1
  219. package/dist/src/sync/SyncJobQueue.js +179 -19
  220. package/dist/src/sync/SyncJobQueue.js.map +1 -1
  221. package/dist/src/sync/moveDetector.d.ts +2 -1
  222. package/dist/src/sync/moveDetector.d.ts.map +1 -1
  223. package/dist/src/sync/moveDetector.js +2 -1
  224. package/dist/src/sync/moveDetector.js.map +1 -1
  225. package/dist/src/tools/fs_search.d.ts.map +1 -1
  226. package/dist/src/tools/fs_search.js +8 -0
  227. package/dist/src/tools/fs_search.js.map +1 -1
  228. package/dist/src/tools/fs_write.js +3 -1
  229. package/dist/src/tools/fs_write.js.map +1 -1
  230. package/dist/src/usecases/chunkUpsert.d.ts +4 -0
  231. package/dist/src/usecases/chunkUpsert.d.ts.map +1 -1
  232. package/dist/src/usecases/chunkUpsert.js +103 -60
  233. package/dist/src/usecases/chunkUpsert.js.map +1 -1
  234. package/dist/src/usecases/embeddingBacklog.d.ts +31 -0
  235. package/dist/src/usecases/embeddingBacklog.d.ts.map +1 -0
  236. package/dist/src/usecases/embeddingBacklog.js +244 -0
  237. package/dist/src/usecases/embeddingBacklog.js.map +1 -0
  238. package/dist/src/usecases/listSourcePackages.js +17 -1
  239. package/dist/src/usecases/listSourcePackages.js.map +1 -1
  240. package/dist/src/usecases/mediaLane.d.ts +11 -4
  241. package/dist/src/usecases/mediaLane.d.ts.map +1 -1
  242. package/dist/src/usecases/mediaLane.js +67 -30
  243. package/dist/src/usecases/mediaLane.js.map +1 -1
  244. package/dist/src/usecases/pendingReview.d.ts.map +1 -1
  245. package/dist/src/usecases/pendingReview.js +24 -7
  246. package/dist/src/usecases/pendingReview.js.map +1 -1
  247. package/dist/src/usecases/purgeExcludedPoints.d.ts +2 -0
  248. package/dist/src/usecases/purgeExcludedPoints.d.ts.map +1 -1
  249. package/dist/src/usecases/purgeExcludedPoints.js +3 -2
  250. package/dist/src/usecases/purgeExcludedPoints.js.map +1 -1
  251. package/dist/src/usecases/readFiles.d.ts.map +1 -1
  252. package/dist/src/usecases/readFiles.js +33 -6
  253. package/dist/src/usecases/readFiles.js.map +1 -1
  254. package/dist/src/usecases/reconcileSourcePackageRoots.d.ts +31 -0
  255. package/dist/src/usecases/reconcileSourcePackageRoots.d.ts.map +1 -0
  256. package/dist/src/usecases/reconcileSourcePackageRoots.js +114 -0
  257. package/dist/src/usecases/reconcileSourcePackageRoots.js.map +1 -0
  258. package/dist/src/usecases/searchFiles.d.ts.map +1 -1
  259. package/dist/src/usecases/searchFiles.js +62 -64
  260. package/dist/src/usecases/searchFiles.js.map +1 -1
  261. package/dist/src/usecases/syncIndexedFile.d.ts +42 -0
  262. package/dist/src/usecases/syncIndexedFile.d.ts.map +1 -0
  263. package/dist/src/usecases/syncIndexedFile.js +242 -0
  264. package/dist/src/usecases/syncIndexedFile.js.map +1 -0
  265. package/dist/src/usecases/syncPointWrites.d.ts +5 -0
  266. package/dist/src/usecases/syncPointWrites.d.ts.map +1 -1
  267. package/dist/src/usecases/syncPointWrites.js +32 -5
  268. package/dist/src/usecases/syncPointWrites.js.map +1 -1
  269. package/dist/src/usecases/uploadBinary.d.ts.map +1 -1
  270. package/dist/src/usecases/uploadBinary.js +36 -49
  271. package/dist/src/usecases/uploadBinary.js.map +1 -1
  272. package/dist/src/usecases/vector/endpointGuard.js +2 -1
  273. package/dist/src/usecases/vector/endpointGuard.js.map +1 -1
  274. package/dist/src/usecases/vector/estimate.d.ts +7 -4
  275. package/dist/src/usecases/vector/estimate.d.ts.map +1 -1
  276. package/dist/src/usecases/vector/estimate.js +8 -5
  277. package/dist/src/usecases/vector/estimate.js.map +1 -1
  278. package/dist/src/usecases/vector/rebuildGeneration.d.ts +29 -5
  279. package/dist/src/usecases/vector/rebuildGeneration.d.ts.map +1 -1
  280. package/dist/src/usecases/vector/rebuildGeneration.js +224 -82
  281. package/dist/src/usecases/vector/rebuildGeneration.js.map +1 -1
  282. package/dist/src/usecases/vectorMaintenance.d.ts +46 -4
  283. package/dist/src/usecases/vectorMaintenance.d.ts.map +1 -1
  284. package/dist/src/usecases/vectorMaintenance.js +190 -11
  285. package/dist/src/usecases/vectorMaintenance.js.map +1 -1
  286. package/dist/src/usecases/write/commit.d.ts +6 -8
  287. package/dist/src/usecases/write/commit.d.ts.map +1 -1
  288. package/dist/src/usecases/write/commit.js +96 -112
  289. package/dist/src/usecases/write/commit.js.map +1 -1
  290. package/dist/src/usecases/write/content.js +1 -2
  291. package/dist/src/usecases/write/content.js.map +1 -1
  292. package/dist/src/usecases/write/ports.d.ts +1 -0
  293. package/dist/src/usecases/write/ports.d.ts.map +1 -1
  294. package/dist/src/vector/FilesystemVectorIndex.d.ts +34 -3
  295. package/dist/src/vector/FilesystemVectorIndex.d.ts.map +1 -1
  296. package/dist/src/vector/FilesystemVectorIndex.js +254 -20
  297. package/dist/src/vector/FilesystemVectorIndex.js.map +1 -1
  298. package/dist/src/vector/InMemoryVectorIndex.d.ts +9 -2
  299. package/dist/src/vector/InMemoryVectorIndex.d.ts.map +1 -1
  300. package/dist/src/vector/InMemoryVectorIndex.js +25 -6
  301. package/dist/src/vector/InMemoryVectorIndex.js.map +1 -1
  302. package/dist/src/vector/QdrantVectorIndex.d.ts +35 -9
  303. package/dist/src/vector/QdrantVectorIndex.d.ts.map +1 -1
  304. package/dist/src/vector/QdrantVectorIndex.js +209 -90
  305. package/dist/src/vector/QdrantVectorIndex.js.map +1 -1
  306. package/dist/src/vector/qdrantFilter.d.ts +3 -1
  307. package/dist/src/vector/qdrantFilter.d.ts.map +1 -1
  308. package/dist/src/vector/qdrantFilter.js +2 -0
  309. package/dist/src/vector/qdrantFilter.js.map +1 -1
  310. package/dist/src/vector/types.d.ts +81 -0
  311. package/dist/src/vector/types.d.ts.map +1 -1
  312. package/dist/src/vector/types.js +2 -0
  313. package/dist/src/vector/types.js.map +1 -1
  314. package/dist/src/wiring.d.ts +6 -0
  315. package/dist/src/wiring.d.ts.map +1 -1
  316. package/dist/src/wiring.js +62 -3
  317. package/dist/src/wiring.js.map +1 -1
  318. package/dist/tools/fs_search.json +2 -2
  319. package/docs/drive-overview.md +2 -2
  320. package/instructions/brain-model.md +1 -1
  321. package/package.json +1000 -11
  322. package/rules/brain-rules.md +1 -1
  323. package/skills/connect-business-data/SKILL.md +6 -4
  324. package/skills/create-package/SKILL.md +14 -12
  325. package/skills/create-package/references/config-and-credentials.md +3 -3
  326. package/skills/create-package/references/connectors-and-uri-policies.md +5 -3
  327. package/skills/create-package/references/manifest-and-discovery.md +5 -4
  328. package/skills/create-package/references/runtime-and-build.md +9 -9
  329. package/skills/create-package/references/skills-and-context.md +3 -3
  330. package/skills/create-package/references/surfaces-and-design.md +9 -6
  331. package/skills/create-package/references/team-and-workflows.md +2 -2
  332. package/skills/create-package/references/test-and-ship.md +15 -15
  333. package/skills/create-package/references/tools-and-schemas.md +1 -1
  334. package/skills/create-package/scripts/check-package.sh +50 -4
  335. package/skills/create-package/scripts/verify-loaded.sh +16 -16
  336. package/skills/manage-files/SKILL.md +2 -2
  337. package/skills/manage-sources/SKILL.md +16 -15
  338. package/skills/manage-sources/scripts/reembed.sh +9 -3
  339. package/skills/sync/SKILL.md +4 -4
  340. package/tools/fs_search.json +2 -2
  341. package/app/filesystem/hooks/useContainerWidth.ts +0 -39
  342. package/dist/app/chunks/bash-M45GHPBQ.js +0 -1
  343. package/dist/app/chunks/c-X3REOAWD.js +0 -1
  344. package/dist/app/chunks/cpp-VOWI743W.js +0 -1
  345. package/dist/app/chunks/css-2ZVPHE25.js +0 -1
  346. package/dist/app/chunks/graphql-7V2NP54C.js +0 -1
  347. package/dist/app/chunks/html-UF3LFLNA.js +0 -1
  348. package/dist/app/chunks/java-PNTAU4L3.js +0 -1
  349. package/dist/app/chunks/javascript-4JJTQGEL.js +0 -1
  350. package/dist/app/chunks/json-VLQ6D3JH.js +0 -1
  351. package/dist/app/chunks/jsx-KQKSLAAH.js +0 -1
  352. package/dist/app/chunks/lua-UFPYUJ2O.js +0 -1
  353. package/dist/app/chunks/r-QEZB45SR.js +0 -1
  354. package/dist/app/chunks/sql-DTZHNUZP.js +0 -1
  355. package/dist/app/chunks/tsx-WPR2WRZD.js +0 -1
  356. package/dist/app/chunks/typescript-LWO362OA.js +0 -1
  357. package/dist/app/chunks/xml-A5H72RTS.js +0 -1
  358. package/dist/app/chunks/yaml-MXHSIJCI.js +0 -1
  359. package/dist/src/services/purgePendingNodes.d.ts +0 -32
  360. package/dist/src/services/purgePendingNodes.d.ts.map +0 -1
  361. package/dist/src/services/purgePendingNodes.js +0 -61
  362. package/dist/src/services/purgePendingNodes.js.map +0 -1
  363. /package/dist/app/chunks/{chunk-737Y24HS.js → chunk-3JASFUPF.js} +0 -0
  364. /package/dist/app/chunks/{chunk-DKD2L57N.js → chunk-6EYLOQ4F.js} +0 -0
  365. /package/dist/app/chunks/{chunk-KYH5EHHY.js → chunk-7YRZ5LOQ.js} +0 -0
  366. /package/dist/app/chunks/{chunk-6TC3DVWV.js → chunk-C7LU4RID.js} +0 -0
  367. /package/dist/app/chunks/{chunk-TY33BMKR.js → chunk-CD52YDZP.js} +0 -0
  368. /package/dist/app/chunks/{chunk-OLEIKJ3X.js → chunk-DCJKTCJ5.js} +0 -0
  369. /package/dist/app/chunks/{chunk-QLBZ4JR2.js → chunk-EXIU2KBV.js} +0 -0
  370. /package/dist/app/chunks/{chunk-SFUNBBEA.js → chunk-FDP4LO4P.js} +0 -0
  371. /package/dist/app/chunks/{chunk-BGRVFATT.js → chunk-HNETUS7U.js} +0 -0
  372. /package/dist/app/chunks/{chunk-4QNMHAIR.js → chunk-LBFZJEDR.js} +0 -0
  373. /package/dist/app/chunks/{chunk-TRRUHDPN.js → chunk-ULRXL5VM.js} +0 -0
  374. /package/dist/app/chunks/{chunk-S6B4WWIF.js → chunk-XJK47SMJ.js} +0 -0
  375. /package/dist/app/chunks/{chunk-DZ5C5FKI.js → chunk-YYAAIAU2.js} +0 -0
  376. /package/dist/app/chunks/{clojure-OC6KPSJO.js → clojure-4QCN4GHG.js} +0 -0
  377. /package/dist/app/chunks/{core-KGE7TQJ3.js → core-ZHTX3P2Q.js} +0 -0
  378. /package/dist/app/chunks/{csharp-E7VIFITL.js → csharp-HQWR4N52.js} +0 -0
  379. /package/dist/app/chunks/{dark-plus-BOSCZXE4.js → dark-plus-GYPKKZES.js} +0 -0
  380. /package/dist/app/chunks/{dart-6Y3X27SZ.js → dart-FO4TTVO2.js} +0 -0
  381. /package/dist/app/chunks/{diff-TR2NPA64.js → diff-SHANV4YC.js} +0 -0
  382. /package/dist/app/chunks/{dist-T32U2VVR.js → dist-WSDF34DM.js} +0 -0
  383. /package/dist/app/chunks/{docker-N33HOW54.js → docker-VX55HTDS.js} +0 -0
  384. /package/dist/app/chunks/{go-6DGG5UTP.js → go-5UCPEC6S.js} +0 -0
  385. /package/dist/app/chunks/{haskell-KK36PMMM.js → haskell-25PJ3OSG.js} +0 -0
  386. /package/dist/app/chunks/{ini-VHVQ5TPB.js → ini-BJIVD5MK.js} +0 -0
  387. /package/dist/app/chunks/{kotlin-44WS3JHE.js → kotlin-MNR6XOEQ.js} +0 -0
  388. /package/dist/app/chunks/{less-5WZ3KLAK.js → less-KA5JURX6.js} +0 -0
  389. /package/dist/app/chunks/{light-plus-HGGBC43G.js → light-plus-QXH2UUWZ.js} +0 -0
  390. /package/dist/app/chunks/{make-X7RXMVW7.js → make-LPD5KOCO.js} +0 -0
  391. /package/dist/app/chunks/{markdown-46IKUAIB.js → markdown-LMWF6MQR.js} +0 -0
  392. /package/dist/app/chunks/{mdx-DGLHDAO7.js → mdx-WPMNN5BS.js} +0 -0
  393. /package/dist/app/chunks/{nix-Q6FYQZLX.js → nix-QGWLUUMZ.js} +0 -0
  394. /package/dist/app/chunks/{powershell-L4KJJ6DK.js → powershell-7GSBBEFF.js} +0 -0
  395. /package/dist/app/chunks/{prisma-IKS4LVH2.js → prisma-FPMPQISO.js} +0 -0
  396. /package/dist/app/chunks/{proto-AYCDOTJO.js → proto-7KDX5Z2U.js} +0 -0
  397. /package/dist/app/chunks/{python-KXMCSAFQ.js → python-CFG4FTQW.js} +0 -0
  398. /package/dist/app/chunks/{rust-J3BC3P6V.js → rust-X7A37WU3.js} +0 -0
  399. /package/dist/app/chunks/{scala-AYIIHBJK.js → scala-OYHJSUG2.js} +0 -0
  400. /package/dist/app/chunks/{swift-QPHHCQD3.js → swift-PE7VNYW5.js} +0 -0
  401. /package/dist/app/chunks/{toml-UV7JK7K7.js → toml-ETQRDILP.js} +0 -0
@@ -21,12 +21,15 @@ import type {
21
21
  } from '../domain/types';
22
22
 
23
23
  /**
24
- * Await the PackageApi for 'brain-core'. Uses tryGetPackageApiImperativeAsync so
25
- * that callers invoked at mount time don't race the PackageApiProvider registration.
24
+ * Every request takes its `client` as the LAST argument: a Files window passes
25
+ * the one its store was built with — `createPackageApi` over the window's project
26
+ * and BOUND agent (`createFilesWindowStore`) — so the X-Project-Id / X-Agent-Id
27
+ * headers are the window's own, fixed before any await, whatever other Files
28
+ * window or agent is mounted beside it. A request body may still name another
29
+ * agent (a file read through its writing agent); the header plane stays the
30
+ * window's. `readFiles` alone accepts no client, for the chat change card, which
31
+ * is not a Files window and reads through the first registered provider.
26
32
  */
27
- function api(): Promise<PackageApi> {
28
- return tryGetPackageApiImperativeAsync('brain-core');
29
- }
30
33
 
31
34
  export type ResolveListOpts = {
32
35
  /** Omit (or `/`) for the full-root view; otherwise a scope URI like `data://agent-core`. */
@@ -58,8 +61,9 @@ export type ResolveListOpts = {
58
61
 
59
62
  export async function resolveList(
60
63
  agentId: string,
61
- projectId?: string,
62
- opts?: ResolveListOpts,
64
+ projectId: string | undefined,
65
+ opts: ResolveListOpts,
66
+ client: PackageApi,
63
67
  ): Promise<{
64
68
  uri: string;
65
69
  folders: unknown[];
@@ -69,7 +73,6 @@ export async function resolveList(
69
73
  truncated?: boolean;
70
74
  summary_omitted_count?: number;
71
75
  }> {
72
- const a = await api();
73
76
  const body: Record<string, unknown> = { agentId };
74
77
  if (projectId) body.projectId = projectId;
75
78
  if (opts?.uri) body.uri = opts.uri;
@@ -81,7 +84,7 @@ export async function resolveList(
81
84
  if (typeof opts?.sources_only === 'boolean') body.sources_only = opts.sources_only;
82
85
  if (typeof opts?.include_counts === 'boolean') body.include_counts = opts.include_counts;
83
86
  if (typeof opts?.limit === 'number') body.limit = opts.limit;
84
- return a.post('list', body);
87
+ return client.post('list', body);
85
88
  }
86
89
 
87
90
  /**
@@ -95,6 +98,7 @@ export async function fetchSourceCounts(
95
98
  agentId: string,
96
99
  projectId: string | undefined,
97
100
  source: string,
101
+ client: PackageApi,
98
102
  ): Promise<SourceInfo | null> {
99
103
  const res = await resolveList(agentId, projectId, {
100
104
  uri: `${source}://`,
@@ -102,7 +106,7 @@ export async function fetchSourceCounts(
102
106
  include: 'folders',
103
107
  include_counts: true,
104
108
  limit: 1,
105
- });
109
+ }, client);
106
110
  return res.sources?.[0] ?? null;
107
111
  }
108
112
 
@@ -112,8 +116,8 @@ export async function readFiles(params: {
112
116
  files: string[];
113
117
  /** `baseline` reads the pre-change snapshot (for the Changes diff card). */
114
118
  read_version?: 'current' | 'baseline';
115
- }): Promise<FSReadResponse> {
116
- return (await api()).post('read', params);
119
+ }, client?: PackageApi): Promise<FSReadResponse> {
120
+ return (client ?? await tryGetPackageApiImperativeAsync('brain-core')).post('read', params);
117
121
  }
118
122
 
119
123
  export async function listSourceConfigs(params: {
@@ -121,20 +125,20 @@ export async function listSourceConfigs(params: {
121
125
  projectId?: string;
122
126
  scope?: 'project' | 'user' | 'agent';
123
127
  observed?: boolean;
124
- }): Promise<SourceConfigRecord[]> {
128
+ }, client: PackageApi): Promise<SourceConfigRecord[]> {
125
129
  const qs: Record<string, string> = { agentId: params.agentId };
126
130
  if (params.projectId) qs.projectId = params.projectId;
127
131
  if (params.scope) qs.scope = params.scope;
128
132
  if (params.observed) qs.observed = '1';
129
- return (await api()).get('sources', qs);
133
+ return client.get('sources', qs);
130
134
  }
131
135
 
132
136
  export async function updateSourceConfig(params: {
133
137
  agentId: string;
134
138
  projectId?: string;
135
139
  config: UpdateSourceConfigRequest;
136
- }): Promise<SourceConfigRecord> {
137
- return (await api()).patch('sources', {
140
+ }, client: PackageApi): Promise<SourceConfigRecord> {
141
+ return client.patch('sources', {
138
142
  agentId: params.agentId,
139
143
  ...(params.projectId ? { projectId: params.projectId } : {}),
140
144
  ...params.config,
@@ -149,8 +153,8 @@ export async function triggerSourceSync(params: {
149
153
  agentId: string;
150
154
  projectId?: string;
151
155
  source: string;
152
- }): Promise<TriggerSourceSyncResponse> {
153
- return (await api()).post('sources/sync', params);
156
+ }, client: PackageApi): Promise<TriggerSourceSyncResponse> {
157
+ return client.post('sources/sync', params);
154
158
  }
155
159
 
156
160
  /** Queue job status for one source (or every visible source when omitted). */
@@ -158,11 +162,11 @@ export async function getSyncStatus(params: {
158
162
  agentId: string;
159
163
  projectId?: string;
160
164
  source?: string;
161
- }): Promise<{ source?: string; job?: SyncJobSnapshotRecord | null; jobs?: SyncJobSnapshotRecord[] }> {
165
+ }, client: PackageApi): Promise<{ source?: string; job?: SyncJobSnapshotRecord | null; jobs?: SyncJobSnapshotRecord[] }> {
162
166
  const qs: Record<string, string> = { agentId: params.agentId };
163
167
  if (params.projectId) qs.projectId = params.projectId;
164
168
  if (params.source) qs.source = params.source;
165
- return (await api()).get('sources/sync-status', qs);
169
+ return client.get('sources/sync-status', qs);
166
170
  }
167
171
 
168
172
  /**
@@ -174,8 +178,8 @@ export async function setSourceEnabled(params: {
174
178
  projectId?: string;
175
179
  source: string;
176
180
  enabled: boolean | 'auto';
177
- }): Promise<SourceConfigRecord> {
178
- return (await api()).post('sources/enabled', {
181
+ }, client: PackageApi): Promise<SourceConfigRecord> {
182
+ return client.post('sources/enabled', {
179
183
  agentId: params.agentId,
180
184
  ...(params.projectId ? { projectId: params.projectId } : {}),
181
185
  source: params.source,
@@ -237,11 +241,11 @@ export type DiscoverableSourceSuggestion = {
237
241
  export async function listDiscoverableSources(params: {
238
242
  agentId: string;
239
243
  projectId?: string;
240
- }): Promise<{ suggestions: DiscoverableSourceSuggestion[] }> {
244
+ }, client: PackageApi): Promise<{ suggestions: DiscoverableSourceSuggestion[] }> {
241
245
  const qs = new URLSearchParams();
242
246
  qs.set('agentId', params.agentId);
243
247
  if (params.projectId) qs.set('projectId', params.projectId);
244
- return (await api()).get('sources/discoverable', Object.fromEntries(qs));
248
+ return client.get('sources/discoverable', Object.fromEntries(qs));
245
249
  }
246
250
 
247
251
  // ---------------------------------------------------------------------------
@@ -283,10 +287,10 @@ export async function getGitRepos(params: {
283
287
  agentId: string;
284
288
  projectId?: string;
285
289
  source: string;
286
- }): Promise<{ ok: boolean; repos: GitRepoInfo[] }> {
290
+ }, client: PackageApi): Promise<{ ok: boolean; repos: GitRepoInfo[] }> {
287
291
  const qs: Record<string, string> = { agentId: params.agentId, source: params.source };
288
292
  if (params.projectId) qs.projectId = params.projectId;
289
- return (await api()).get('git/repos', qs);
293
+ return client.get('git/repos', qs);
290
294
  }
291
295
 
292
296
  /**
@@ -299,7 +303,7 @@ export async function getGitStatus(params: {
299
303
  projectId?: string;
300
304
  source: string;
301
305
  repo?: string;
302
- }): Promise<{
306
+ }, client: PackageApi): Promise<{
303
307
  ok: boolean;
304
308
  status: GitControlStatus;
305
309
  /** Bucket `+/-` totals for the section headers, summed server-side over the
@@ -308,7 +312,7 @@ export async function getGitStatus(params: {
308
312
  }> {
309
313
  const qs: Record<string, string> = { agentId: params.agentId, source: params.source, ...repoQuery(params.repo) };
310
314
  if (params.projectId) qs.projectId = params.projectId;
311
- return (await api()).get('git/status', qs);
315
+ return client.get('git/status', qs);
312
316
  }
313
317
 
314
318
  /** Local branch list for the (G2.3) branch-switcher. */
@@ -317,10 +321,10 @@ export async function getGitBranches(params: {
317
321
  projectId?: string;
318
322
  source: string;
319
323
  repo?: string;
320
- }): Promise<{ ok: boolean; branches: GitBranchInfo[]; truncated?: boolean }> {
324
+ }, client: PackageApi): Promise<{ ok: boolean; branches: GitBranchInfo[]; truncated?: boolean }> {
321
325
  const qs: Record<string, string> = { agentId: params.agentId, source: params.source, ...repoQuery(params.repo) };
322
326
  if (params.projectId) qs.projectId = params.projectId;
323
- return (await api()).get('git/branch', qs);
327
+ return client.get('git/branch', qs);
324
328
  }
325
329
 
326
330
  /**
@@ -356,7 +360,7 @@ export async function getGitDiff(params: {
356
360
  commit?: string;
357
361
  base?: string;
358
362
  head?: string;
359
- }): Promise<
363
+ }, client: PackageApi): Promise<
360
364
  | {
361
365
  ok: true;
362
366
  diff: string;
@@ -390,7 +394,7 @@ export async function getGitDiff(params: {
390
394
  if (typeof params.head === 'string') qs.head = params.head;
391
395
  if (typeof params.staged === 'boolean') qs.staged = params.staged ? '1' : '0';
392
396
  if (params.projectId) qs.projectId = params.projectId;
393
- return (await api()).get('git/diff', qs);
397
+ return client.get('git/diff', qs);
394
398
  }
395
399
 
396
400
  /**
@@ -414,13 +418,13 @@ export async function getGitLog(params: {
414
418
  maxCount?: number;
415
419
  skip?: number;
416
420
  ref?: string;
417
- }): Promise<{ ok: boolean; commits: GitGraphCommit[]; hasMore: boolean; outgoing?: string[] }> {
421
+ }, client: PackageApi): Promise<{ ok: boolean; commits: GitGraphCommit[]; hasMore: boolean; outgoing?: string[] }> {
418
422
  const qs: Record<string, string> = { agentId: params.agentId, source: params.source, ...repoQuery(params.repo) };
419
423
  if (params.projectId) qs.projectId = params.projectId;
420
424
  if (typeof params.maxCount === 'number') qs.maxCount = String(params.maxCount);
421
425
  if (typeof params.skip === 'number') qs.skip = String(params.skip);
422
426
  if (params.ref) qs.ref = params.ref;
423
- return (await api()).get('git/log', qs);
427
+ return client.get('git/log', qs);
424
428
  }
425
429
 
426
430
  /**
@@ -444,13 +448,13 @@ export async function getGitLogStats(params: {
444
448
  maxCount?: number;
445
449
  skip?: number;
446
450
  ref?: string;
447
- }): Promise<GitLogStatsResponse> {
451
+ }, client: PackageApi): Promise<GitLogStatsResponse> {
448
452
  const qs: Record<string, string> = { agentId: params.agentId, source: params.source, ...repoQuery(params.repo) };
449
453
  if (params.projectId) qs.projectId = params.projectId;
450
454
  if (typeof params.maxCount === 'number') qs.maxCount = String(params.maxCount);
451
455
  if (typeof params.skip === 'number') qs.skip = String(params.skip);
452
456
  if (params.ref) qs.ref = params.ref;
453
- return (await api()).get('git/log-stats', qs);
457
+ return client.get('git/log-stats', qs);
454
458
  }
455
459
 
456
460
  /**
@@ -469,7 +473,7 @@ export async function getGitCommitFiles(params: {
469
473
  source: string;
470
474
  repo?: string;
471
475
  sha: string;
472
- }): Promise<
476
+ }, client: PackageApi): Promise<
473
477
  | { ok: true; sha: string; files: GitCommitFileChange[] }
474
478
  | { ok: false; code: 'unavailable'; sha: string }
475
479
  > {
@@ -480,7 +484,7 @@ export async function getGitCommitFiles(params: {
480
484
  sha: params.sha,
481
485
  };
482
486
  if (params.projectId) qs.projectId = params.projectId;
483
- return (await api()).get('git/commit', qs);
487
+ return client.get('git/commit', qs);
484
488
  }
485
489
 
486
490
  /**
@@ -498,7 +502,7 @@ export async function getGitOutgoing(params: {
498
502
  projectId?: string;
499
503
  source: string;
500
504
  repo?: string;
501
- }): Promise<{
505
+ }, client: PackageApi): Promise<{
502
506
  ok: boolean;
503
507
  // Present on the `ok:true` shapes (ready | honest no-upstream). A DEEP failure
504
508
  // (non-repo / unborn HEAD / any git error) is a typed refusal `{ok:false,
@@ -511,7 +515,7 @@ export async function getGitOutgoing(params: {
511
515
  }> {
512
516
  const qs: Record<string, string> = { agentId: params.agentId, source: params.source, ...repoQuery(params.repo) };
513
517
  if (params.projectId) qs.projectId = params.projectId;
514
- return (await api()).get('git/outgoing', qs);
518
+ return client.get('git/outgoing', qs);
515
519
  }
516
520
 
517
521
  /**
@@ -531,7 +535,7 @@ export async function getGitShow(params: {
531
535
  repo?: string;
532
536
  path: string;
533
537
  rev: string;
534
- }): Promise<
538
+ }, client: PackageApi): Promise<
535
539
  | { ok: true; content: string; path: string; rev: string }
536
540
  | { ok: false; code: 'not_a_blob' | 'too_large' | 'binary' | 'unavailable'; path: string; rev: string }
537
541
  > {
@@ -543,7 +547,7 @@ export async function getGitShow(params: {
543
547
  rev: params.rev,
544
548
  };
545
549
  if (params.projectId) qs.projectId = params.projectId;
546
- return (await api()).get('git/show', qs);
550
+ return client.get('git/show', qs);
547
551
  }
548
552
 
549
553
  // ---------------------------------------------------------------------------
@@ -560,8 +564,6 @@ export async function getGitShow(params: {
560
564
  // recovered from), surfaced for the best-effort undo affordance.
561
565
  // ---------------------------------------------------------------------------
562
566
 
563
- const git = () => api();
564
-
565
567
  /**
566
568
  * The typed rescue carrier a destructive op returns (G2.5) — drives one-click
567
569
  * UNDO via `restoreGit`. `stash` → `git stash apply <ref>` (discarded content);
@@ -577,8 +579,8 @@ export async function stagePaths(params: {
577
579
  source: string;
578
580
  repo?: string;
579
581
  paths: string[];
580
- }): Promise<{ ok: boolean; staged: string[] | 'hunk' }> {
581
- return (await git()).post('git/stage', {
582
+ }, client: PackageApi): Promise<{ ok: boolean; staged: string[] | 'hunk' }> {
583
+ return client.post('git/stage', {
582
584
  source: params.source,
583
585
  ...repoBody(params.repo),
584
586
  paths: params.paths,
@@ -594,8 +596,8 @@ export async function unstagePaths(params: {
594
596
  source: string;
595
597
  repo?: string;
596
598
  paths: string[];
597
- }): Promise<{ ok: boolean; unstaged: string[] | 'hunk' }> {
598
- return (await git()).post('git/unstage', {
599
+ }, client: PackageApi): Promise<{ ok: boolean; unstaged: string[] | 'hunk' }> {
600
+ return client.post('git/unstage', {
599
601
  source: params.source,
600
602
  ...repoBody(params.repo),
601
603
  paths: params.paths,
@@ -614,8 +616,8 @@ export async function stageHunk(params: {
614
616
  source: string;
615
617
  repo?: string;
616
618
  hunk: string;
617
- }): Promise<{ ok: boolean; staged: string[] | 'hunk' }> {
618
- return (await git()).post('git/stage', {
619
+ }, client: PackageApi): Promise<{ ok: boolean; staged: string[] | 'hunk' }> {
620
+ return client.post('git/stage', {
619
621
  source: params.source,
620
622
  ...repoBody(params.repo),
621
623
  hunk: params.hunk,
@@ -631,8 +633,8 @@ export async function unstageHunk(params: {
631
633
  source: string;
632
634
  repo?: string;
633
635
  hunk: string;
634
- }): Promise<{ ok: boolean; unstaged: string[] | 'hunk' }> {
635
- return (await git()).post('git/unstage', {
636
+ }, client: PackageApi): Promise<{ ok: boolean; unstaged: string[] | 'hunk' }> {
637
+ return client.post('git/unstage', {
636
638
  source: params.source,
637
639
  ...repoBody(params.repo),
638
640
  hunk: params.hunk,
@@ -653,8 +655,8 @@ export async function discardPaths(params: {
653
655
  source: string;
654
656
  repo?: string;
655
657
  paths: string[];
656
- }): Promise<{ ok: boolean; discarded: string[]; rescue?: GitRescue }> {
657
- return (await git()).post('git/discard', {
658
+ }, client: PackageApi): Promise<{ ok: boolean; discarded: string[]; rescue?: GitRescue }> {
659
+ return client.post('git/discard', {
658
660
  source: params.source,
659
661
  ...repoBody(params.repo),
660
662
  paths: params.paths,
@@ -671,8 +673,8 @@ export async function commitGit(params: {
671
673
  repo?: string;
672
674
  message: string;
673
675
  amend?: boolean;
674
- }): Promise<{ ok: boolean; commit: string }> {
675
- return (await git()).post('git/commit', {
676
+ }, client: PackageApi): Promise<{ ok: boolean; commit: string }> {
677
+ return client.post('git/commit', {
676
678
  source: params.source,
677
679
  ...repoBody(params.repo),
678
680
  message: params.message,
@@ -690,8 +692,8 @@ export async function createGitBranch(params: {
690
692
  repo?: string;
691
693
  name: string;
692
694
  startPoint?: string;
693
- }): Promise<{ ok: boolean; branch: string; action: 'create' }> {
694
- return (await git()).post('git/branch', {
695
+ }, client: PackageApi): Promise<{ ok: boolean; branch: string; action: 'create' }> {
696
+ return client.post('git/branch', {
695
697
  source: params.source,
696
698
  ...repoBody(params.repo),
697
699
  action: 'create',
@@ -714,8 +716,8 @@ export async function deleteGitBranch(params: {
714
716
  repo?: string;
715
717
  name: string;
716
718
  force?: boolean;
717
- }): Promise<{ ok: boolean; branch: string; action: 'delete'; rescue?: GitRescue }> {
718
- return (await git()).post('git/branch', {
719
+ }, client: PackageApi): Promise<{ ok: boolean; branch: string; action: 'delete'; rescue?: GitRescue }> {
720
+ return client.post('git/branch', {
719
721
  source: params.source,
720
722
  ...repoBody(params.repo),
721
723
  action: 'delete',
@@ -738,8 +740,8 @@ export async function restoreGit(params: {
738
740
  source: string;
739
741
  repo?: string;
740
742
  rescue: GitRescue;
741
- }): Promise<{ ok: boolean; restored: 'stash' | 'branch' }> {
742
- return (await git()).post('git/restore', {
743
+ }, client: PackageApi): Promise<{ ok: boolean; restored: 'stash' | 'branch' }> {
744
+ return client.post('git/restore', {
743
745
  source: params.source,
744
746
  ...repoBody(params.repo),
745
747
  rescue: params.rescue,
@@ -758,8 +760,8 @@ export async function checkoutGitBranch(params: {
758
760
  source: string;
759
761
  repo?: string;
760
762
  ref: string;
761
- }): Promise<{ ok: boolean; checkout: string }> {
762
- return (await git()).post('git/checkout', {
763
+ }, client: PackageApi): Promise<{ ok: boolean; checkout: string }> {
764
+ return client.post('git/checkout', {
763
765
  source: params.source,
764
766
  ...repoBody(params.repo),
765
767
  ref: params.ref,
@@ -781,8 +783,8 @@ export async function fetchGit(params: {
781
783
  projectId?: string;
782
784
  source: string;
783
785
  repo?: string;
784
- }): Promise<{ ok: boolean; op: 'fetch'; host: string; status?: GitControlStatus }> {
785
- return (await git()).post('git/fetch', {
786
+ }, client: PackageApi): Promise<{ ok: boolean; op: 'fetch'; host: string; status?: GitControlStatus }> {
787
+ return client.post('git/fetch', {
786
788
  source: params.source,
787
789
  ...repoBody(params.repo),
788
790
  ...(params.projectId ? { projectId: params.projectId } : {}),
@@ -796,8 +798,8 @@ export async function pullGit(params: {
796
798
  projectId?: string;
797
799
  source: string;
798
800
  repo?: string;
799
- }): Promise<{ ok: boolean; op: 'pull'; host: string; status?: GitControlStatus }> {
800
- return (await git()).post('git/pull', {
801
+ }, client: PackageApi): Promise<{ ok: boolean; op: 'pull'; host: string; status?: GitControlStatus }> {
802
+ return client.post('git/pull', {
801
803
  source: params.source,
802
804
  ...repoBody(params.repo),
803
805
  ...(params.projectId ? { projectId: params.projectId } : {}),
@@ -811,8 +813,8 @@ export async function pushGit(params: {
811
813
  projectId?: string;
812
814
  source: string;
813
815
  repo?: string;
814
- }): Promise<{ ok: boolean; op: 'push'; host: string }> {
815
- return (await git()).post('git/push', {
816
+ }, client: PackageApi): Promise<{ ok: boolean; op: 'push'; host: string }> {
817
+ return client.post('git/push', {
816
818
  source: params.source,
817
819
  ...repoBody(params.repo),
818
820
  ...(params.projectId ? { projectId: params.projectId } : {}),
@@ -836,8 +838,8 @@ export async function searchFiles(params: {
836
838
  created_before?: string;
837
839
  include_siblings?: boolean;
838
840
  limit?: number;
839
- }): Promise<FSSearchResponse> {
840
- return (await api()).post('search', params);
841
+ }, client: PackageApi): Promise<FSSearchResponse> {
842
+ return client.post('search', params);
841
843
  }
842
844
 
843
845
  /**
@@ -855,14 +857,14 @@ export async function uploadFile(params: {
855
857
  file: File;
856
858
  uri?: string;
857
859
  tags?: string[];
858
- }): Promise<FSUploadResponse> {
860
+ }, client: PackageApi): Promise<FSUploadResponse> {
859
861
  const form = new FormData();
860
862
  form.append('agentId', params.agentId);
861
863
  if (params.projectId) form.append('projectId', params.projectId);
862
864
  form.append('file', params.file);
863
865
  if (params.uri) form.append('uri', params.uri);
864
866
  if (params.tags?.length) form.append('tags', params.tags.join(','));
865
- return (await api()).upload('upload', form);
867
+ return client.upload('upload', form);
866
868
  }
867
869
 
868
870
  /**
@@ -901,8 +903,9 @@ export type FSWriteRequest = {
901
903
 
902
904
  export async function writeFile(
903
905
  params: { agentId: string; projectId?: string } & FSWriteRequest,
906
+ client: PackageApi,
904
907
  ): Promise<FSWriteResponse> {
905
- return (await api()).post('write', params);
908
+ return client.post('write', params);
906
909
  }
907
910
 
908
911
  /**
@@ -927,8 +930,8 @@ export async function approveFileReview(params: {
927
930
  uri?: string;
928
931
  expectedFingerprint?: string;
929
932
  acknowledgeCurrentState?: true;
930
- }): Promise<FSReviewApproveResponse> {
931
- return (await api()).post('approve', params);
933
+ }, client: PackageApi): Promise<FSReviewApproveResponse> {
934
+ return client.post('approve', params);
932
935
  }
933
936
 
934
937
  // ---------------------------------------------------------------------------
@@ -942,8 +945,8 @@ export async function approveFileReview(params: {
942
945
  export type { PendingChangeRecord, PendingPreview, PendingReviewIntent } from '@neuralis/brain-core/domain/pending-change';
943
946
  import type { PendingChangeRecord, PendingPreview } from '@neuralis/brain-core/domain/pending-change';
944
947
 
945
- export async function previewPendingChange(params: { agentId: string; projectId?: string; id: string }): Promise<PendingPreview> {
946
- const result = await (await api()).post('pending', { ...params, action: 'preview' }) as { preview: PendingPreview };
948
+ export async function previewPendingChange(params: { agentId: string; projectId?: string; id: string }, client: PackageApi): Promise<PendingPreview> {
949
+ const result = await client.post('pending', { ...params, action: 'preview' }) as { preview: PendingPreview };
947
950
  return result.preview;
948
951
  }
949
952
 
@@ -970,8 +973,9 @@ export type PendingChangesQuery = {
970
973
  */
971
974
  export async function listPendingChanges(
972
975
  params: PendingChangesQuery,
976
+ client: PackageApi,
973
977
  ): Promise<{ ok: boolean; changes: PendingChangeRecord[]; orphanIds: string[] }> {
974
- const res = await (await api()).post('pending', params) as {
978
+ const res = await client.post('pending', params) as {
975
979
  ok?: boolean; changes?: PendingChangeRecord[]; orphanIds?: string[];
976
980
  };
977
981
  return {
@@ -985,10 +989,10 @@ export async function listPendingChanges(
985
989
  * The caller's visible pending COUNT — the list's own per-record floor, no orphan
986
990
  * probe and no rows on the wire. Feeds the Changes badge.
987
991
  */
988
- export async function countPendingChanges(params: { agentId: string; projectId?: string }): Promise<number> {
992
+ export async function countPendingChanges(params: { agentId: string; projectId?: string }, client: PackageApi): Promise<number> {
989
993
  const qs: Record<string, string> = { agentId: params.agentId, count_only: '1' };
990
994
  if (params.projectId) qs.projectId = params.projectId;
991
- const res = await (await api()).get('pending', qs) as { count?: number };
995
+ const res = await client.get('pending', qs) as { count?: number };
992
996
  return typeof res?.count === 'number' ? res.count : 0;
993
997
  }
994
998
 
@@ -998,8 +1002,8 @@ export async function revertPendingChange(params: {
998
1002
  id: string;
999
1003
  expectedFingerprint?: string;
1000
1004
  acknowledgeCurrentState?: true;
1001
- }): Promise<{ ok: boolean; id: string; uri?: string; error?: string }> {
1002
- return (await api()).post('pending', { ...params, action: 'revert' }) as Promise<{ ok: boolean; id: string; uri?: string; error?: string }>;
1005
+ }, client: PackageApi): Promise<{ ok: boolean; id: string; uri?: string; error?: string }> {
1006
+ return client.post('pending', { ...params, action: 'revert' }) as Promise<{ ok: boolean; id: string; uri?: string; error?: string }>;
1003
1007
  }
1004
1008
 
1005
1009
  /** Scan the caller's visible pending changes for ORPHANED rows — backing target
@@ -1009,8 +1013,8 @@ export async function scanOrphanedPending(params: {
1009
1013
  agentId: string;
1010
1014
  projectId?: string;
1011
1015
  conversationId?: string;
1012
- }): Promise<{ ok: boolean; orphans: PendingChangeRecord[] }> {
1013
- const res = await (await api()).post('pending', { ...params, action: 'scan-orphans' }) as { ok?: boolean; orphans?: PendingChangeRecord[] };
1016
+ }, client: PackageApi): Promise<{ ok: boolean; orphans: PendingChangeRecord[] }> {
1017
+ const res = await client.post('pending', { ...params, action: 'scan-orphans' }) as { ok?: boolean; orphans?: PendingChangeRecord[] };
1014
1018
  return { ok: res?.ok !== false, orphans: Array.isArray(res?.orphans) ? res.orphans : [] };
1015
1019
  }
1016
1020
 
@@ -1020,8 +1024,8 @@ export async function discardPendingChange(params: {
1020
1024
  agentId: string;
1021
1025
  projectId?: string;
1022
1026
  id: string;
1023
- }): Promise<{ ok: boolean; id: string; uri?: string; error?: string }> {
1024
- return (await api()).post('pending', { ...params, action: 'discard' }) as Promise<{ ok: boolean; id: string; uri?: string; error?: string }>;
1027
+ }, client: PackageApi): Promise<{ ok: boolean; id: string; uri?: string; error?: string }> {
1028
+ return client.post('pending', { ...params, action: 'discard' }) as Promise<{ ok: boolean; id: string; uri?: string; error?: string }>;
1025
1029
  }
1026
1030
 
1027
1031
  /** DISMISS ONE live-source pending record — the op-aware "accept-and-stop-
@@ -1034,8 +1038,8 @@ export async function dismissPendingChange(params: {
1034
1038
  id: string;
1035
1039
  expectedFingerprint?: string;
1036
1040
  acknowledgeCurrentState?: true;
1037
- }): Promise<{ ok: boolean; id: string; uri?: string; error?: string; retryable?: boolean }> {
1038
- return (await api()).post('pending', { ...params, action: 'dismiss' }) as Promise<{ ok: boolean; id: string; uri?: string; error?: string; retryable?: boolean }>;
1041
+ }, client: PackageApi): Promise<{ ok: boolean; id: string; uri?: string; error?: string; retryable?: boolean }> {
1042
+ return client.post('pending', { ...params, action: 'dismiss' }) as Promise<{ ok: boolean; id: string; uri?: string; error?: string; retryable?: boolean }>;
1039
1043
  }
1040
1044
 
1041
1045
  /** Bulk-discard every orphaned pending change the caller can write (the Repair
@@ -1044,8 +1048,8 @@ export async function discardOrphanedPending(params: {
1044
1048
  agentId: string;
1045
1049
  projectId?: string;
1046
1050
  conversationId?: string;
1047
- }): Promise<{ ok: boolean; discarded: number }> {
1048
- const res = await (await api()).post('pending', { ...params, action: 'discard-orphans' }) as { ok?: boolean; discarded?: number };
1051
+ }, client: PackageApi): Promise<{ ok: boolean; discarded: number }> {
1052
+ const res = await client.post('pending', { ...params, action: 'discard-orphans' }) as { ok?: boolean; discarded?: number };
1049
1053
  return { ok: res?.ok !== false, discarded: typeof res?.discarded === 'number' ? res.discarded : 0 };
1050
1054
  }
1051
1055
 
@@ -1066,16 +1070,16 @@ export function getRawFileUrl(agentId: string, uri: string, projectId?: string):
1066
1070
  export async function checkVectorHealth(params: {
1067
1071
  agentId: string;
1068
1072
  projectId?: string;
1069
- }): Promise<Record<string, unknown>> {
1070
- return (await api()).post('health', params);
1073
+ }, client: PackageApi): Promise<Record<string, unknown>> {
1074
+ return client.post('health', params);
1071
1075
  }
1072
1076
 
1073
1077
  /** Expensive integrity scan (orphan + duplicate detection) — explicit only. */
1074
1078
  export async function scanVectorHealth(params: {
1075
1079
  agentId: string;
1076
1080
  projectId?: string;
1077
- }): Promise<{ orphanChunkCount?: number; duplicateGroups?: number; generatedAt?: string }> {
1078
- return (await api()).post('health/scan', params);
1081
+ }, client: PackageApi): Promise<{ orphanChunkCount?: number; duplicateGroups?: number; generatedAt?: string }> {
1082
+ return client.post('health/scan', params);
1079
1083
  }
1080
1084
 
1081
1085
  export async function runHealthAction(params: {
@@ -1084,12 +1088,12 @@ export async function runHealthAction(params: {
1084
1088
  action: 'gc' | 'repair-orphans' | 'deduplicate' | 'repair-pending';
1085
1089
  dryRun?: boolean;
1086
1090
  retentionHours?: number;
1087
- }): Promise<Record<string, unknown>> {
1088
- return (await api()).post('health/gc', params);
1091
+ }, client: PackageApi): Promise<Record<string, unknown>> {
1092
+ return client.post('health/gc', params);
1089
1093
  }
1090
1094
 
1091
- export async function createSource(params: CreateSourceRequest): Promise<SourceConfigRecord> {
1092
- return (await api()).post('sources', params);
1095
+ export async function createSource(params: CreateSourceRequest, client: PackageApi): Promise<SourceConfigRecord> {
1096
+ return client.post('sources', params);
1093
1097
  }
1094
1098
 
1095
1099
  export async function deleteSource(params: {
@@ -1101,19 +1105,19 @@ export async function deleteSource(params: {
1101
1105
  * false/omitted, only the config and in-memory connector binding are
1102
1106
  * removed; vectors stay in Qdrant. */
1103
1107
  purgeVectors?: boolean;
1104
- }): Promise<{ ok: true; purgeJob?: SyncJobSnapshotRecord }> {
1108
+ }, client: PackageApi): Promise<{ ok: true; purgeJob?: SyncJobSnapshotRecord }> {
1105
1109
  const qs = new URLSearchParams({ agentId: params.agentId });
1106
1110
  if (params.projectId) qs.set('projectId', params.projectId);
1107
1111
  if (params.purgeVectors) qs.set('purge', '1');
1108
- return (await api()).del(`sources/${encodeURIComponent(params.source)}?${qs.toString()}`);
1112
+ return client.del(`sources/${encodeURIComponent(params.source)}?${qs.toString()}`);
1109
1113
  }
1110
1114
 
1111
1115
  export async function resetSync(params: {
1112
1116
  agentId: string;
1113
1117
  projectId?: string;
1114
1118
  source: string;
1115
- }): Promise<{ ok: true; source: string }> {
1116
- return (await api()).post('sources/reset', params);
1119
+ }, client: PackageApi): Promise<{ ok: true; source: string }> {
1120
+ return client.post('sources/reset', params);
1117
1121
  }
1118
1122
 
1119
1123
  /**
@@ -1124,8 +1128,8 @@ export async function reindexSource(params: {
1124
1128
  agentId: string;
1125
1129
  projectId?: string;
1126
1130
  source: string;
1127
- }): Promise<SyncJobSnapshotRecord> {
1128
- return (await api()).post('sources/reindex', params);
1131
+ }, client: PackageApi): Promise<SyncJobSnapshotRecord> {
1132
+ return client.post('sources/reindex', params);
1129
1133
  }
1130
1134
 
1131
1135
  export type IndexPurgeCounts = { removedParents: number; removedChunks: number; retained: number; unresolved: number; canMaintain: boolean };
@@ -1133,8 +1137,8 @@ export type IndexPurgeSelector = { kind: 'source' } | { kind: 'folder' | 'file';
1133
1137
  export async function purgeSourceIndex(params: {
1134
1138
  agentId: string; projectId?: string; source: string;
1135
1139
  selector: IndexPurgeSelector; mode: 'estimate' | 'apply'; obsoleteOnly?: boolean;
1136
- }): Promise<IndexPurgeCounts> {
1137
- return (await api()).post('sources/purge', params);
1140
+ }, client: PackageApi): Promise<IndexPurgeCounts> {
1141
+ return client.post('sources/purge', params);
1138
1142
  }
1139
1143
 
1140
1144
  /** The scope of a forced re-embed: the whole source, one `folder`, or one `uri` (full URIs). */
@@ -1191,12 +1195,20 @@ function normalizeReembedEstimate(raw: unknown): ReembedEstimate | null {
1191
1195
  }
1192
1196
 
1193
1197
  /**
1194
- * Estimate a forced re-embed of the scope. The route answers BEFORE it touches
1195
- * the queue or the source's sync markers — an estimate has no side effect.
1198
+ * `reembed` = every file in scope again (`force`); `pending` = only the files
1199
+ * whose semantic embedding is missing or stale (`embeddingOnly`, the debt pass).
1200
+ */
1201
+ export type ReembedKind = 'reembed' | 'pending';
1202
+ const reembedVerb = (kind: ReembedKind) => (kind === 'pending' ? { embeddingOnly: true } : { force: true });
1203
+
1204
+ /**
1205
+ * Estimate the scope. The route answers BEFORE it touches the queue or the
1206
+ * source's sync markers — an estimate has no side effect. For `pending` the
1207
+ * figures are an upper bound: the whole scope, of which only the owed part runs.
1196
1208
  */
1197
- export async function estimateReembed(params: ReembedScope): Promise<ReembedEstimate | null> {
1209
+ export async function estimateReembed(params: ReembedScope, kind: ReembedKind, client: PackageApi): Promise<ReembedEstimate | null> {
1198
1210
  return normalizeReembedEstimate(
1199
- await (await api()).post<unknown>('sources/reindex', { ...params, force: true, estimate: true }),
1211
+ await client.post<unknown>('sources/reindex', { ...params, ...reembedVerb(kind), estimate: true }),
1200
1212
  );
1201
1213
  }
1202
1214
 
@@ -1207,8 +1219,10 @@ export async function estimateReembed(params: ReembedScope): Promise<ReembedEsti
1207
1219
  */
1208
1220
  export async function startReembed(
1209
1221
  params: ReembedScope,
1222
+ kind: ReembedKind,
1223
+ client: PackageApi,
1210
1224
  ): Promise<{ documents: number | null; truncated: boolean; job: SyncJobSnapshotRecord | null }> {
1211
- const raw = await (await api()).post<Record<string, unknown> | null>('sources/reindex', { ...params, force: true });
1225
+ const raw = await client.post<Record<string, unknown> | null>('sources/reindex', { ...params, ...reembedVerb(kind) });
1212
1226
  const job = raw?.job && typeof raw.job === 'object' ? (raw.job as SyncJobSnapshotRecord) : null;
1213
1227
  return { documents: finiteOrNull(raw?.documents), truncated: raw?.truncated === true, job };
1214
1228
  }
@@ -1221,14 +1235,14 @@ export async function cancelSync(params: {
1221
1235
  agentId: string;
1222
1236
  projectId?: string;
1223
1237
  source?: string;
1224
- }): Promise<{ ok: true; source?: string; cancelled: boolean | number }> {
1225
- return (await api()).post('sources/cancel', params);
1238
+ }, client: PackageApi): Promise<{ ok: true; source?: string; cancelled: boolean | number }> {
1239
+ return client.post('sources/cancel', params);
1226
1240
  }
1227
1241
 
1228
1242
  export async function getSourcesHealth(params: {
1229
1243
  agentId: string;
1230
1244
  projectId?: string;
1231
- }): Promise<Array<{
1245
+ }, client: PackageApi): Promise<Array<{
1232
1246
  source: string;
1233
1247
  source_kind: string;
1234
1248
  sync_status: string;
@@ -1236,7 +1250,7 @@ export async function getSourcesHealth(params: {
1236
1250
  }>> {
1237
1251
  const qs: Record<string, string> = { agentId: params.agentId };
1238
1252
  if (params.projectId) qs.projectId = params.projectId;
1239
- return (await api()).get('sources/health', qs);
1253
+ return client.get('sources/health', qs);
1240
1254
  }
1241
1255
 
1242
1256
  /**
@@ -1253,10 +1267,10 @@ export async function browseDirectories(params: {
1253
1267
  path: string;
1254
1268
  agentId: string;
1255
1269
  projectId?: string;
1256
- }): Promise<{ entries: Array<{ name: string; path: string; type: 'directory' }> }> {
1270
+ }, client: PackageApi): Promise<{ entries: Array<{ name: string; path: string; type: 'directory' }> }> {
1257
1271
  const qs: Record<string, string> = { path: params.path, agentId: params.agentId };
1258
1272
  if (params.projectId) qs.projectId = params.projectId;
1259
- return (await api()).get('sources/browse', qs);
1273
+ return client.get('sources/browse', qs);
1260
1274
  }
1261
1275
 
1262
1276
  export type SourceKindRecord = {
@@ -1287,10 +1301,10 @@ export type SourceKindSchema = {
1287
1301
  defaultSyncExcludes?: string[];
1288
1302
  };
1289
1303
 
1290
- export async function listSourceKinds(): Promise<{ kinds: SourceKindRecord[] }> {
1291
- return (await api()).get('sources/kinds', {});
1304
+ export async function listSourceKinds(client: PackageApi): Promise<{ kinds: SourceKindRecord[] }> {
1305
+ return client.get('sources/kinds', {});
1292
1306
  }
1293
1307
 
1294
- export async function getSourceKindSchema(kind: string): Promise<SourceKindSchema> {
1295
- return (await api()).get(`sources/kinds/${encodeURIComponent(kind)}/schema`, {});
1308
+ export async function getSourceKindSchema(kind: string, client: PackageApi): Promise<SourceKindSchema> {
1309
+ return client.get(`sources/kinds/${encodeURIComponent(kind)}/schema`, {});
1296
1310
  }