@neuralis/brain-core 0.3.1 → 0.4.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 (371) hide show
  1. package/README.md +88 -1417
  2. package/app/README.md +4 -4
  3. package/app/cards/FilesystemCardShell.tsx +42 -4
  4. package/app/cards/FilesystemChangeCard.tsx +34 -11
  5. package/app/cards/README.md +6 -5
  6. package/app/cards/diffUtils.ts +99 -1
  7. package/app/filesystem/FilesystemHost.tsx +24 -2
  8. package/app/filesystem/README.md +1 -1
  9. package/app/filesystem/api/README.md +3 -3
  10. package/app/filesystem/api/index.ts +38 -14
  11. package/app/filesystem/api/projectPackages.ts +13 -102
  12. package/app/filesystem/domain/types.ts +30 -10
  13. package/app/filesystem/hooks/README.md +4 -4
  14. package/app/filesystem/hooks/useDiscoverableSources.ts +19 -30
  15. package/app/filesystem/hooks/useFilesystemSSE.ts +42 -2
  16. package/app/filesystem/host/README.md +6 -4
  17. package/app/filesystem/host/buildFilesystemHostValue.ts +28 -2
  18. package/app/filesystem/host/installFilesystemHostComponents.tsx +1 -1
  19. package/app/filesystem/lib/sourceKindForm.ts +210 -27
  20. package/app/filesystem/lib/treeVisualState.tsx +98 -4
  21. package/app/filesystem/store/README.md +1 -0
  22. package/app/filesystem/store/filesystemStore.ts +99 -8
  23. package/app/filesystem/store/gitSlice.ts +5 -0
  24. package/app/filesystem/store/helpers.ts +17 -0
  25. package/app/filesystem/store/listSlice.ts +8 -0
  26. package/app/filesystem/ui/CodeEditor.tsx +18 -3
  27. package/app/filesystem/ui/DiscoverDock.tsx +5 -1
  28. package/app/filesystem/ui/FileEditor.tsx +15 -10
  29. package/app/filesystem/ui/FileTree.tsx +75 -24
  30. package/app/filesystem/ui/FilesystemWidget.tsx +10 -2
  31. package/app/filesystem/ui/FolderPicker.tsx +251 -0
  32. package/app/filesystem/ui/GitControlPanel.tsx +7 -2
  33. package/app/filesystem/ui/PackagesPanel.tsx +52 -374
  34. package/app/filesystem/ui/PendingChangesPanel.tsx +1 -1
  35. package/app/filesystem/ui/PolicyEditor.tsx +109 -24
  36. package/app/filesystem/ui/README.md +30 -23
  37. package/app/filesystem/ui/RawMediaPreview.tsx +58 -0
  38. package/app/filesystem/ui/SourceBranchHeader.tsx +4 -4
  39. package/app/filesystem/ui/SourcesPanel.tsx +502 -342
  40. package/app/filesystem/ui/Toolbar.tsx +1 -2
  41. package/app/filesystem/ui/VectorHealthPanel.tsx +2 -2
  42. package/app/shared/filesystem.png +0 -0
  43. package/dist/app/host.js +58 -46
  44. package/dist/scripts/sourceRootPairV1.d.ts +47 -0
  45. package/dist/scripts/sourceRootPairV1.d.ts.map +1 -0
  46. package/dist/scripts/sourceRootPairV1.js +147 -0
  47. package/dist/scripts/sourceRootPairV1.js.map +1 -0
  48. package/dist/scripts/sourceToFolderV1.d.ts +56 -0
  49. package/dist/scripts/sourceToFolderV1.d.ts.map +1 -0
  50. package/dist/scripts/sourceToFolderV1.js +152 -0
  51. package/dist/scripts/sourceToFolderV1.js.map +1 -0
  52. package/dist/scripts/sourceToHostV1.d.ts +56 -0
  53. package/dist/scripts/sourceToHostV1.d.ts.map +1 -0
  54. package/dist/scripts/sourceToHostV1.js +132 -0
  55. package/dist/scripts/sourceToHostV1.js.map +1 -0
  56. package/dist/src/channels/filesystem.d.ts +1 -1
  57. package/dist/src/channels/filesystem.js +1 -1
  58. package/dist/src/connectors/AppSourceConfigStore.d.ts +17 -3
  59. package/dist/src/connectors/AppSourceConfigStore.d.ts.map +1 -1
  60. package/dist/src/connectors/AppSourceConfigStore.js +46 -6
  61. package/dist/src/connectors/AppSourceConfigStore.js.map +1 -1
  62. package/dist/src/connectors/HostConnector.d.ts +201 -0
  63. package/dist/src/connectors/HostConnector.d.ts.map +1 -0
  64. package/dist/src/connectors/HostConnector.js +903 -0
  65. package/dist/src/connectors/HostConnector.js.map +1 -0
  66. package/dist/src/connectors/inProcessTransport.d.ts +131 -0
  67. package/dist/src/connectors/inProcessTransport.d.ts.map +1 -0
  68. package/dist/src/connectors/inProcessTransport.js +447 -0
  69. package/dist/src/connectors/inProcessTransport.js.map +1 -0
  70. package/dist/src/domain/access/callerPermissions.d.ts +29 -0
  71. package/dist/src/domain/access/callerPermissions.d.ts.map +1 -1
  72. package/dist/src/domain/access/callerPermissions.js +85 -5
  73. package/dist/src/domain/access/callerPermissions.js.map +1 -1
  74. package/dist/src/domain/access/nativeLocalFence.d.ts +65 -0
  75. package/dist/src/domain/access/nativeLocalFence.d.ts.map +1 -0
  76. package/dist/src/domain/access/nativeLocalFence.js +171 -0
  77. package/dist/src/domain/access/nativeLocalFence.js.map +1 -0
  78. package/dist/src/domain/access/uriPermission.js +3 -3
  79. package/dist/src/domain/access/uriPermission.js.map +1 -1
  80. package/dist/src/domain/byteRange.d.ts +15 -0
  81. package/dist/src/domain/byteRange.d.ts.map +1 -0
  82. package/dist/src/domain/byteRange.js +30 -0
  83. package/dist/src/domain/byteRange.js.map +1 -0
  84. package/dist/src/domain/defaultPermissions.d.ts.map +1 -1
  85. package/dist/src/domain/defaultPermissions.js +29 -0
  86. package/dist/src/domain/defaultPermissions.js.map +1 -1
  87. package/dist/src/domain/mime.d.ts +11 -19
  88. package/dist/src/domain/mime.d.ts.map +1 -1
  89. package/dist/src/domain/mime.js +13 -102
  90. package/dist/src/domain/mime.js.map +1 -1
  91. package/dist/src/domain/paths.d.ts.map +1 -1
  92. package/dist/src/domain/paths.js +5 -3
  93. package/dist/src/domain/paths.js.map +1 -1
  94. package/dist/src/domain/scopeAccessCtx.d.ts +2 -2
  95. package/dist/src/domain/scopeAccessCtx.js +2 -2
  96. package/dist/src/domain/sourceConfig.d.ts +52 -19
  97. package/dist/src/domain/sourceConfig.d.ts.map +1 -1
  98. package/dist/src/domain/sourceConfig.js +103 -19
  99. package/dist/src/domain/sourceConfig.js.map +1 -1
  100. package/dist/src/domain/sourcePackages.d.ts +8 -8
  101. package/dist/src/domain/sourcePackages.d.ts.map +1 -1
  102. package/dist/src/domain/sourceRootPair.d.ts +88 -0
  103. package/dist/src/domain/sourceRootPair.d.ts.map +1 -0
  104. package/dist/src/domain/sourceRootPair.js +108 -0
  105. package/dist/src/domain/sourceRootPair.js.map +1 -0
  106. package/dist/src/domain/syncTypes.d.ts +8 -1
  107. package/dist/src/domain/syncTypes.d.ts.map +1 -1
  108. package/dist/src/domain/syncTypes.js +1 -0
  109. package/dist/src/domain/syncTypes.js.map +1 -1
  110. package/dist/src/domain/types.d.ts +32 -2
  111. package/dist/src/domain/types.d.ts.map +1 -1
  112. package/dist/src/domain/uri.d.ts.map +1 -1
  113. package/dist/src/domain/uri.js +3 -2
  114. package/dist/src/domain/uri.js.map +1 -1
  115. package/dist/src/embeddings/clients/GeminiEmbedder.d.ts.map +1 -1
  116. package/dist/src/embeddings/clients/GeminiEmbedder.js +2 -5
  117. package/dist/src/embeddings/clients/GeminiEmbedder.js.map +1 -1
  118. package/dist/src/embeddings/clients/OpenAIEmbedder.d.ts.map +1 -1
  119. package/dist/src/embeddings/clients/OpenAIEmbedder.js +2 -3
  120. package/dist/src/embeddings/clients/OpenAIEmbedder.js.map +1 -1
  121. package/dist/src/embeddings/clients/QwenEmbedder.d.ts +2 -0
  122. package/dist/src/embeddings/clients/QwenEmbedder.d.ts.map +1 -1
  123. package/dist/src/embeddings/clients/QwenEmbedder.js +10 -2
  124. package/dist/src/embeddings/clients/QwenEmbedder.js.map +1 -1
  125. package/dist/src/embeddings/clients/VoyageEmbedder.d.ts +2 -0
  126. package/dist/src/embeddings/clients/VoyageEmbedder.d.ts.map +1 -1
  127. package/dist/src/embeddings/clients/VoyageEmbedder.js +8 -1
  128. package/dist/src/embeddings/clients/VoyageEmbedder.js.map +1 -1
  129. package/dist/src/embeddings/factory.d.ts +5 -3
  130. package/dist/src/embeddings/factory.d.ts.map +1 -1
  131. package/dist/src/embeddings/factory.js +7 -3
  132. package/dist/src/embeddings/factory.js.map +1 -1
  133. package/dist/src/embeddings/models.d.ts +1 -1
  134. package/dist/src/embeddings/models.d.ts.map +1 -1
  135. package/dist/src/embeddings/retry.js +1 -1
  136. package/dist/src/embeddings/retry.js.map +1 -1
  137. package/dist/src/embeddings/types.d.ts +6 -0
  138. package/dist/src/embeddings/types.d.ts.map +1 -1
  139. package/dist/src/embeddings/types.js +11 -0
  140. package/dist/src/embeddings/types.js.map +1 -1
  141. package/dist/src/events/pending.d.ts +1 -1
  142. package/dist/src/events/pending.js +1 -1
  143. package/dist/src/git/GitRunner.d.ts +110 -30
  144. package/dist/src/git/GitRunner.d.ts.map +1 -1
  145. package/dist/src/git/GitRunner.js +511 -199
  146. package/dist/src/git/GitRunner.js.map +1 -1
  147. package/dist/src/git/GitWatchRegistry.d.ts +41 -35
  148. package/dist/src/git/GitWatchRegistry.d.ts.map +1 -1
  149. package/dist/src/git/GitWatchRegistry.js +61 -79
  150. package/dist/src/git/GitWatchRegistry.js.map +1 -1
  151. package/dist/src/git/gitPlace.d.ts +61 -0
  152. package/dist/src/git/gitPlace.d.ts.map +1 -0
  153. package/dist/src/git/gitPlace.js +74 -0
  154. package/dist/src/git/gitPlace.js.map +1 -0
  155. package/dist/src/git/sourceGitControl.d.ts +33 -21
  156. package/dist/src/git/sourceGitControl.d.ts.map +1 -1
  157. package/dist/src/git/sourceGitControl.js +211 -95
  158. package/dist/src/git/sourceGitControl.js.map +1 -1
  159. package/dist/src/git/sourceGitStatus.js +1 -1
  160. package/dist/src/git/sourceGitStatus.js.map +1 -1
  161. package/dist/src/git/untrackedStats.js +1 -1
  162. package/dist/src/git/untrackedStats.js.map +1 -1
  163. package/dist/src/index.d.ts +2 -1
  164. package/dist/src/index.d.ts.map +1 -1
  165. package/dist/src/index.js +2 -1
  166. package/dist/src/index.js.map +1 -1
  167. package/dist/src/lifecycle.d.ts +9 -12
  168. package/dist/src/lifecycle.d.ts.map +1 -1
  169. package/dist/src/lifecycle.js +2 -1
  170. package/dist/src/lifecycle.js.map +1 -1
  171. package/dist/src/routes/approve.d.ts +1 -1
  172. package/dist/src/routes/approve.js +1 -1
  173. package/dist/src/routes/events.d.ts +1 -1
  174. package/dist/src/routes/events.js +1 -1
  175. package/dist/src/routes/git.d.ts +7 -7
  176. package/dist/src/routes/git.d.ts.map +1 -1
  177. package/dist/src/routes/git.js +201 -72
  178. package/dist/src/routes/git.js.map +1 -1
  179. package/dist/src/routes/health.d.ts +6 -6
  180. package/dist/src/routes/health.js +12 -12
  181. package/dist/src/routes/helpers/sourceNotConfigured.d.ts +1 -1
  182. package/dist/src/routes/helpers/sourceNotConfigured.js +1 -1
  183. package/dist/src/routes/helpers/uriGuard.d.ts +1 -1
  184. package/dist/src/routes/helpers/uriGuard.d.ts.map +1 -1
  185. package/dist/src/routes/helpers/uriGuard.js +3 -2
  186. package/dist/src/routes/helpers/uriGuard.js.map +1 -1
  187. package/dist/src/routes/helpers.d.ts +11 -4
  188. package/dist/src/routes/helpers.d.ts.map +1 -1
  189. package/dist/src/routes/helpers.js +13 -6
  190. package/dist/src/routes/helpers.js.map +1 -1
  191. package/dist/src/routes/list.d.ts +1 -1
  192. package/dist/src/routes/list.d.ts.map +1 -1
  193. package/dist/src/routes/list.js +3 -4
  194. package/dist/src/routes/list.js.map +1 -1
  195. package/dist/src/routes/pending.d.ts +4 -4
  196. package/dist/src/routes/pending.js +9 -9
  197. package/dist/src/routes/policies.d.ts +10 -8
  198. package/dist/src/routes/policies.d.ts.map +1 -1
  199. package/dist/src/routes/policies.js +31 -25
  200. package/dist/src/routes/policies.js.map +1 -1
  201. package/dist/src/routes/raw.d.ts +1 -1
  202. package/dist/src/routes/raw.d.ts.map +1 -1
  203. package/dist/src/routes/raw.js +66 -12
  204. package/dist/src/routes/raw.js.map +1 -1
  205. package/dist/src/routes/read.d.ts +1 -1
  206. package/dist/src/routes/read.js +1 -1
  207. package/dist/src/routes/search.d.ts +1 -1
  208. package/dist/src/routes/search.js +1 -1
  209. package/dist/src/routes/sources.d.ts +63 -6
  210. package/dist/src/routes/sources.d.ts.map +1 -1
  211. package/dist/src/routes/sources.js +494 -382
  212. package/dist/src/routes/sources.js.map +1 -1
  213. package/dist/src/routes/upload.d.ts +1 -1
  214. package/dist/src/routes/upload.js +1 -1
  215. package/dist/src/routes/write.d.ts +2 -2
  216. package/dist/src/routes/write.js +2 -2
  217. package/dist/src/services/BridgeService.d.ts +21 -35
  218. package/dist/src/services/BridgeService.d.ts.map +1 -1
  219. package/dist/src/services/BridgeService.js +42 -88
  220. package/dist/src/services/BridgeService.js.map +1 -1
  221. package/dist/src/services/FilesystemService.d.ts +4 -3
  222. package/dist/src/services/FilesystemService.d.ts.map +1 -1
  223. package/dist/src/services/FilesystemService.js +112 -34
  224. package/dist/src/services/FilesystemService.js.map +1 -1
  225. package/dist/src/services/FilesystemUiService.d.ts +4 -1
  226. package/dist/src/services/FilesystemUiService.d.ts.map +1 -1
  227. package/dist/src/services/FilesystemUiService.js +66 -25
  228. package/dist/src/services/FilesystemUiService.js.map +1 -1
  229. package/dist/src/services/SyncScheduler.d.ts +12 -4
  230. package/dist/src/services/SyncScheduler.d.ts.map +1 -1
  231. package/dist/src/services/SyncScheduler.js +37 -8
  232. package/dist/src/services/SyncScheduler.js.map +1 -1
  233. package/dist/src/services/baselineRepair.d.ts +13 -3
  234. package/dist/src/services/baselineRepair.d.ts.map +1 -1
  235. package/dist/src/services/baselineRepair.js +13 -3
  236. package/dist/src/services/baselineRepair.js.map +1 -1
  237. package/dist/src/services/declaredSources.d.ts +132 -43
  238. package/dist/src/services/declaredSources.d.ts.map +1 -1
  239. package/dist/src/services/declaredSources.js +118 -45
  240. package/dist/src/services/declaredSources.js.map +1 -1
  241. package/dist/src/store/dataFormats.d.ts +17 -2
  242. package/dist/src/store/dataFormats.d.ts.map +1 -1
  243. package/dist/src/store/dataFormats.js +18 -3
  244. package/dist/src/store/dataFormats.js.map +1 -1
  245. package/dist/src/sync/DeltaSyncRunner.d.ts.map +1 -1
  246. package/dist/src/sync/DeltaSyncRunner.js +144 -4
  247. package/dist/src/sync/DeltaSyncRunner.js.map +1 -1
  248. package/dist/src/sync/SyncJobQueue.d.ts +7 -2
  249. package/dist/src/sync/SyncJobQueue.d.ts.map +1 -1
  250. package/dist/src/sync/SyncJobQueue.js +16 -10
  251. package/dist/src/sync/SyncJobQueue.js.map +1 -1
  252. package/dist/src/sync/SyncWatchService.d.ts +21 -4
  253. package/dist/src/sync/SyncWatchService.d.ts.map +1 -1
  254. package/dist/src/sync/SyncWatchService.js +115 -10
  255. package/dist/src/sync/SyncWatchService.js.map +1 -1
  256. package/dist/src/sync/categoryInference.d.ts +1 -1
  257. package/dist/src/sync/categoryInference.js +1 -1
  258. package/dist/src/tools/execCtx.d.ts +2 -2
  259. package/dist/src/tools/execCtx.js +2 -2
  260. package/dist/src/tools/fs_read.d.ts.map +1 -1
  261. package/dist/src/tools/fs_read.js +5 -0
  262. package/dist/src/tools/fs_read.js.map +1 -1
  263. package/dist/src/usecases/admitSourceRoot.d.ts +65 -0
  264. package/dist/src/usecases/admitSourceRoot.d.ts.map +1 -0
  265. package/dist/src/usecases/admitSourceRoot.js +85 -0
  266. package/dist/src/usecases/admitSourceRoot.js.map +1 -0
  267. package/dist/src/usecases/browseSourceFolders.d.ts +85 -0
  268. package/dist/src/usecases/browseSourceFolders.d.ts.map +1 -0
  269. package/dist/src/usecases/browseSourceFolders.js +210 -0
  270. package/dist/src/usecases/browseSourceFolders.js.map +1 -0
  271. package/dist/src/usecases/createDeclaredSources.d.ts +13 -2
  272. package/dist/src/usecases/createDeclaredSources.d.ts.map +1 -1
  273. package/dist/src/usecases/createDeclaredSources.js +39 -0
  274. package/dist/src/usecases/createDeclaredSources.js.map +1 -1
  275. package/dist/src/usecases/embeddingBacklog.js +1 -1
  276. package/dist/src/usecases/embeddingBacklog.js.map +1 -1
  277. package/dist/src/usecases/list.d.ts.map +1 -1
  278. package/dist/src/usecases/list.js +83 -26
  279. package/dist/src/usecases/list.js.map +1 -1
  280. package/dist/src/usecases/listAttachableDevices.d.ts +13 -0
  281. package/dist/src/usecases/listAttachableDevices.d.ts.map +1 -0
  282. package/dist/src/usecases/listAttachableDevices.js +10 -0
  283. package/dist/src/usecases/listAttachableDevices.js.map +1 -0
  284. package/dist/src/usecases/listSourcePackages.d.ts.map +1 -1
  285. package/dist/src/usecases/listSourcePackages.js +2 -5
  286. package/dist/src/usecases/listSourcePackages.js.map +1 -1
  287. package/dist/src/usecases/purgeExcludedPoints.d.ts.map +1 -1
  288. package/dist/src/usecases/purgeExcludedPoints.js +3 -2
  289. package/dist/src/usecases/purgeExcludedPoints.js.map +1 -1
  290. package/dist/src/usecases/readFiles.d.ts.map +1 -1
  291. package/dist/src/usecases/readFiles.js +99 -1
  292. package/dist/src/usecases/readFiles.js.map +1 -1
  293. package/dist/src/usecases/reconcileSourcePackageRoots.d.ts +1 -1
  294. package/dist/src/usecases/reconcileSourcePackageRoots.d.ts.map +1 -1
  295. package/dist/src/usecases/reconcileSourcePackageRoots.js +2 -1
  296. package/dist/src/usecases/reconcileSourcePackageRoots.js.map +1 -1
  297. package/dist/src/usecases/revokePrincipal.d.ts +7 -5
  298. package/dist/src/usecases/revokePrincipal.d.ts.map +1 -1
  299. package/dist/src/usecases/revokePrincipal.js +29 -7
  300. package/dist/src/usecases/revokePrincipal.js.map +1 -1
  301. package/dist/src/usecases/scheduleSourceSync.d.ts +7 -0
  302. package/dist/src/usecases/scheduleSourceSync.d.ts.map +1 -1
  303. package/dist/src/usecases/scheduleSourceSync.js +6 -5
  304. package/dist/src/usecases/scheduleSourceSync.js.map +1 -1
  305. package/dist/src/usecases/syncPointWrites.d.ts +2 -0
  306. package/dist/src/usecases/syncPointWrites.d.ts.map +1 -1
  307. package/dist/src/usecases/syncPointWrites.js +5 -1
  308. package/dist/src/usecases/syncPointWrites.js.map +1 -1
  309. package/dist/src/usecases/triggerSourceSync.d.ts +46 -0
  310. package/dist/src/usecases/triggerSourceSync.d.ts.map +1 -0
  311. package/dist/src/usecases/triggerSourceSync.js +75 -0
  312. package/dist/src/usecases/triggerSourceSync.js.map +1 -0
  313. package/dist/src/usecases/uploadBinary.d.ts +2 -1
  314. package/dist/src/usecases/uploadBinary.d.ts.map +1 -1
  315. package/dist/src/usecases/uploadBinary.js +2 -2
  316. package/dist/src/usecases/uploadBinary.js.map +1 -1
  317. package/dist/src/usecases/vector/endpointGuard.d.ts +1 -1
  318. package/dist/src/usecases/vector/endpointGuard.js +1 -1
  319. package/dist/src/usecases/vectorMaintenance.js +1 -1
  320. package/dist/src/usecases/vectorMaintenance.js.map +1 -1
  321. package/dist/src/usecases/write/content.js +1 -1
  322. package/dist/src/vector/qdrantClient.d.ts +1 -1
  323. package/dist/src/vector/qdrantClient.js +1 -1
  324. package/dist/src/wiring.d.ts +3 -0
  325. package/dist/src/wiring.d.ts.map +1 -1
  326. package/dist/src/wiring.js +72 -6
  327. package/dist/src/wiring.js.map +1 -1
  328. package/dist/tools/fs_list.json +1 -1
  329. package/dist/tools/fs_read.json +1 -1
  330. package/dist/tools/fs_search.json +1 -1
  331. package/dist/tools/fs_write.json +1 -1
  332. package/instructions/brain-model.md +1 -1
  333. package/package.json +212 -114
  334. package/rules/brain-rules.md +2 -2
  335. package/skills/brain-start/SKILL.md +1 -1
  336. package/skills/connect-business-data/SKILL.md +3 -3
  337. package/skills/create-package/SKILL.md +26 -26
  338. package/skills/create-package/references/config-and-credentials.md +16 -13
  339. package/skills/create-package/references/connectors-and-uri-policies.md +39 -25
  340. package/skills/create-package/references/manifest-and-discovery.md +12 -12
  341. package/skills/create-package/references/runtime-and-build.md +19 -19
  342. package/skills/create-package/references/skills-and-context.md +36 -20
  343. package/skills/create-package/references/surfaces-and-design.md +16 -16
  344. package/skills/create-package/references/team-and-workflows.md +2 -2
  345. package/skills/create-package/references/test-and-ship.md +21 -21
  346. package/skills/create-package/references/tools-and-schemas.md +5 -5
  347. package/skills/create-package/scripts/{check-package.sh → check-package.mjs} +79 -65
  348. package/skills/create-package/scripts/{verify-loaded.sh → verify-loaded.mjs} +156 -162
  349. package/skills/git/SKILL.md +53 -51
  350. package/skills/manage-files/SKILL.md +22 -25
  351. package/skills/manage-sources/SKILL.md +128 -87
  352. package/skills/manage-uri-policy/SKILL.md +18 -15
  353. package/skills/organize/SKILL.md +1 -1
  354. package/skills/sync/SKILL.md +3 -3
  355. package/tools/fs_list.json +1 -1
  356. package/tools/fs_read.json +1 -1
  357. package/tools/fs_search.json +1 -1
  358. package/tools/fs_write.json +1 -1
  359. package/workflows/sources-digest.json +1 -1
  360. package/dist/src/connectors/LocalDiskConnector.d.ts +0 -171
  361. package/dist/src/connectors/LocalDiskConnector.d.ts.map +0 -1
  362. package/dist/src/connectors/LocalDiskConnector.js +0 -1233
  363. package/dist/src/connectors/LocalDiskConnector.js.map +0 -1
  364. package/docs/drive-overview.md +0 -59
  365. package/skills/manage-files/scripts/copy.sh +0 -7
  366. package/skills/manage-files/scripts/create.sh +0 -7
  367. package/skills/manage-files/scripts/mkdir.sh +0 -7
  368. package/skills/manage-files/scripts/modify.sh +0 -7
  369. package/skills/manage-files/scripts/upload.sh +0 -16
  370. package/skills/manage-files/scripts/write.sh +0 -29
  371. package/skills/manage-sources/scripts/reembed.sh +0 -23
@@ -1 +1 @@
1
- {"version":3,"file":"fs_read.js","sourceRoot":"","sources":["../../../src/tools/fs_read.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fs_read.js","sourceRoot":"","sources":["../../../src/tools/fs_read.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,65 @@
1
+ import type { HostAuditSink } from '@neuralis/package-system/contracts';
2
+ import { type SourceRootStack } from '../domain/sourceRootPair.js';
3
+ /** The create route's refusal of a root pair: one code, never a path. */
4
+ export declare const SOURCE_ROOT_PAIR_MISMATCH: {
5
+ readonly code: 'source_root_pair_mismatch';
6
+ readonly error: 'connection.config.hostRoot does not match the folder this server derives for the root — omit it and the server fills it in.';
7
+ };
8
+ /** A folder on this server sent without a root. */
9
+ export declare const SOURCE_ROOT_REQUIRED: {
10
+ readonly code: 'source_root_required';
11
+ readonly error: 'A folder on this server needs a root.';
12
+ };
13
+ /** A `neuralis-tree:` root that is not a source-relative folder, or carries a machine half. */
14
+ export declare const SOURCE_ANCHOR_INVALID: {
15
+ readonly code: 'source_anchor_invalid';
16
+ readonly error: 'A Neuralis-tree root names a folder relative to the tree (no `..`) and takes no host path.';
17
+ };
18
+ /** A `neuralis-tree:` root on a plane with no attachable Neuralis tree (Docker without the `--neuralis` overlay). */
19
+ export declare const SOURCE_ANCHOR_UNRESOLVABLE: {
20
+ readonly code: 'source_anchor_unresolvable';
21
+ readonly error: 'The Neuralis tree is not available on this server.';
22
+ };
23
+ type Connection = {
24
+ kind: string;
25
+ config?: unknown;
26
+ };
27
+ export type AdmittedSourceRoot = {
28
+ connection: Connection;
29
+ auditHandSet?: (userId: string, projectId: string, source: string) => void;
30
+ } | {
31
+ status: 400;
32
+ body: typeof SOURCE_ROOT_PAIR_MISMATCH | typeof SOURCE_ROOT_REQUIRED | typeof SOURCE_ANCHOR_INVALID | typeof SOURCE_ANCHOR_UNRESOLVABLE;
33
+ };
34
+ /**
35
+ * The root PAIR of an in-process folder on create (`domain/sourceRootPair.ts`):
36
+ * the server derives the half the client did not anchor, so the gates judge,
37
+ * and the store keeps, the pair this server would write for that root. A
38
+ * supplied half that contradicts the derivation answers 400. A half NOTHING
39
+ * derives (a hand-made bind the mount table does not know) is a statement about
40
+ * the host filesystem outside every known table: kept only for a caller holding
41
+ * `sources.privileged` (`mayHandSet`), who may attach `/` anyway, and audited
42
+ * through the host sink — no sink, no hand-set pair. A root-less folder on this
43
+ * server is refused here, never stored to be dropped from every listing by the
44
+ * kind's validator. A Neuralis-tree anchor is resolved by the ONE root resolver
45
+ * on every plane, so it never takes a stored machine half — and an anchor this
46
+ * plane cannot open is refused here, not attached to stay unreachable. Another
47
+ * kind, or a device folder, passes through untouched.
48
+ */
49
+ export declare function admitSourceRoot(input: {
50
+ connection: Connection;
51
+ stack: SourceRootStack;
52
+ mayHandSet: boolean;
53
+ audit?: HostAuditSink;
54
+ }): AdmittedSourceRoot;
55
+ /**
56
+ * `work`'s answer, or `null` when it needed a Neuralis-tree anchor this plane
57
+ * cannot open (`SourceAnchorUnresolvableError`). A gate that cannot resolve a
58
+ * zone never judges it: the edit is refused, the listing reads "not attachable".
59
+ * Any other error propagates.
60
+ */
61
+ export declare function unlessAnchorUnresolvable<T>(work: Promise<T>): Promise<{
62
+ value: T;
63
+ } | null>;
64
+ export {};
65
+ //# sourceMappingURL=admitSourceRoot.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admitSourceRoot.d.ts","sourceRoot":"","sources":["../../../src/usecases/admitSourceRoot.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAC;AAGxE,OAAO,EAAwC,KAAK,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAEzG,yEAAyE;AACzE,eAAO,MAAM,yBAAyB;aACpC,IAAI,EAAE,2BAA2B;aACjC,KAAK,EAAE,6HAA6H;CAC5H,CAAC;AACX,mDAAmD;AACnD,eAAO,MAAM,oBAAoB;aAAK,IAAI,EAAE,sBAAsB;aAAE,KAAK,EAAE,uCAAuC;CAAW,CAAC;AAC9H,+FAA+F;AAC/F,eAAO,MAAM,qBAAqB;aAAK,IAAI,EAAE,uBAAuB;aAAE,KAAK,EAAE,4FAA4F;CAAW,CAAC;AACrL,qHAAqH;AACrH,eAAO,MAAM,0BAA0B;aAAK,IAAI,EAAE,4BAA4B;aAAE,KAAK,EAAE,oDAAoD;CAAW,CAAC;AAEvJ,KAAK,UAAU,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC;AACrD,MAAM,MAAM,kBAAkB,GAC1B;IAAE,UAAU,EAAE,UAAU,CAAC;IAAC,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,CAAA;CAAE,GACtG;IAAE,MAAM,EAAE,GAAG,CAAC;IAAC,IAAI,EAAE,OAAO,yBAAyB,GAAG,OAAO,oBAAoB,GAAG,OAAO,qBAAqB,GAAG,OAAO,0BAA0B,CAAA;CAAE,CAAC;AAE7J;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE;IACrC,UAAU,EAAE,UAAU,CAAC;IACvB,KAAK,EAAE,eAAe,CAAC;IACvB,UAAU,EAAE,OAAO,CAAC;IACpB,KAAK,CAAC,EAAE,aAAa,CAAC;CACvB,GAAG,kBAAkB,CA+BrB;AAED;;;;;GAKG;AACH,wBAAsB,wBAAwB,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC;IAAE,KAAK,EAAE,CAAC,CAAA;CAAE,GAAG,IAAI,CAAC,CAOhG"}
@@ -0,0 +1,85 @@
1
+ import { HOST_SOURCE_KIND, sourcePlane } from '@neuralis/package-system/contracts';
2
+ import { SourceAnchorUnresolvableError, resolveLocalRoot, treeAnchorPath } from '../connectors/inProcessTransport.js';
3
+ import { judgeSourceRootPair, sourceRootPlane } from '../domain/sourceRootPair.js';
4
+ /** The create route's refusal of a root pair: one code, never a path. */
5
+ export const SOURCE_ROOT_PAIR_MISMATCH = {
6
+ code: 'source_root_pair_mismatch',
7
+ error: 'connection.config.hostRoot does not match the folder this server derives for the root — omit it and the server fills it in.',
8
+ };
9
+ /** A folder on this server sent without a root. */
10
+ export const SOURCE_ROOT_REQUIRED = { code: 'source_root_required', error: 'A folder on this server needs a root.' };
11
+ /** A `neuralis-tree:` root that is not a source-relative folder, or carries a machine half. */
12
+ export const SOURCE_ANCHOR_INVALID = { code: 'source_anchor_invalid', error: 'A Neuralis-tree root names a folder relative to the tree (no `..`) and takes no host path.' };
13
+ /** A `neuralis-tree:` root on a plane with no attachable Neuralis tree (Docker without the `--neuralis` overlay). */
14
+ export const SOURCE_ANCHOR_UNRESOLVABLE = { code: 'source_anchor_unresolvable', error: 'The Neuralis tree is not available on this server.' };
15
+ /**
16
+ * The root PAIR of an in-process folder on create (`domain/sourceRootPair.ts`):
17
+ * the server derives the half the client did not anchor, so the gates judge,
18
+ * and the store keeps, the pair this server would write for that root. A
19
+ * supplied half that contradicts the derivation answers 400. A half NOTHING
20
+ * derives (a hand-made bind the mount table does not know) is a statement about
21
+ * the host filesystem outside every known table: kept only for a caller holding
22
+ * `sources.privileged` (`mayHandSet`), who may attach `/` anyway, and audited
23
+ * through the host sink — no sink, no hand-set pair. A root-less folder on this
24
+ * server is refused here, never stored to be dropped from every listing by the
25
+ * kind's validator. A Neuralis-tree anchor is resolved by the ONE root resolver
26
+ * on every plane, so it never takes a stored machine half — and an anchor this
27
+ * plane cannot open is refused here, not attached to stay unreachable. Another
28
+ * kind, or a device folder, passes through untouched.
29
+ */
30
+ export function admitSourceRoot(input) {
31
+ const { connection, stack } = input;
32
+ const config = (connection.config ?? {});
33
+ if (sourcePlane(connection.kind, config) !== 'local')
34
+ return { connection };
35
+ if (typeof config.root !== 'string' || config.root.length === 0) {
36
+ return connection.kind === HOST_SOURCE_KIND ? { status: 400, body: SOURCE_ROOT_REQUIRED } : { connection };
37
+ }
38
+ const anchored = treeAnchorPath(config.root);
39
+ if (anchored !== null) {
40
+ if (anchored === false || config.hostRoot !== undefined)
41
+ return { status: 400, body: SOURCE_ANCHOR_INVALID };
42
+ try {
43
+ resolveLocalRoot({ configured: config.root, hostRoot: undefined, projectRoot: '', isDocker: stack.isDocker, source: '' });
44
+ }
45
+ catch (error) {
46
+ if (error instanceof SourceAnchorUnresolvableError)
47
+ return { status: 400, body: SOURCE_ANCHOR_UNRESOLVABLE };
48
+ throw error;
49
+ }
50
+ return { connection };
51
+ }
52
+ const verdict = judgeSourceRootPair({ root: config.root, hostRoot: config.hostRoot }, sourceRootPlane(stack));
53
+ if (verdict.kind === 'mismatch')
54
+ return { status: 400, body: SOURCE_ROOT_PAIR_MISMATCH };
55
+ const rest = { ...config };
56
+ delete rest.hostRoot;
57
+ const paired = { kind: connection.kind, config: { ...rest, ...verdict.pair } };
58
+ if (verdict.kind === 'derived')
59
+ return { connection: paired };
60
+ const audit = input.audit;
61
+ if (!audit || !input.mayHandSet)
62
+ return { status: 400, body: SOURCE_ROOT_PAIR_MISMATCH };
63
+ const { root, hostRoot } = verdict.pair;
64
+ return {
65
+ connection: paired,
66
+ auditHandSet: (userId, projectId, source) => audit({ action: 'source.host_root_set', userId, target: source, details: { projectId, root, hostRoot } }),
67
+ };
68
+ }
69
+ /**
70
+ * `work`'s answer, or `null` when it needed a Neuralis-tree anchor this plane
71
+ * cannot open (`SourceAnchorUnresolvableError`). A gate that cannot resolve a
72
+ * zone never judges it: the edit is refused, the listing reads "not attachable".
73
+ * Any other error propagates.
74
+ */
75
+ export async function unlessAnchorUnresolvable(work) {
76
+ try {
77
+ return { value: await work };
78
+ }
79
+ catch (error) {
80
+ if (error instanceof SourceAnchorUnresolvableError)
81
+ return null;
82
+ throw error;
83
+ }
84
+ }
85
+ //# sourceMappingURL=admitSourceRoot.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admitSourceRoot.js","sourceRoot":"","sources":["../../../src/usecases/admitSourceRoot.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,85 @@
1
+ /**
2
+ * `GET /sources/browse` — one level of FOLDERS, the step that precedes attaching
3
+ * a source. Two planes, one rule: **you may browse exactly what you would be
4
+ * allowed to attach.**
5
+ *
6
+ * - **This server** (`browseServerFolders`). The route admits `sources.mount`
7
+ * (the attach act's own gate) and hands over the gates it owns: the shared
8
+ * protected-root table (`/`, the App Zone and the Neuralis tree cost
9
+ * `sources.privileged` here exactly as at attach time), matched IS-or-UNDER
10
+ * so a parent stays walkable while a protected child is simply absent
11
+ * (hidden-not-locked), and the native folder fence. Natively any absolute
12
+ * path the gates admit; in Docker the `/mounts` zone and every folder under
13
+ * it, never above it. The gate runs on the lexical path AND again on the
14
+ * `realpath` — a symlink whose literal path is innocent can still point at
15
+ * `/`, a protected zone or out of `/mounts`.
16
+ * - **The caller's own device** (`browseDeviceFolders`). The device plane's
17
+ * ONE attach gate (agent-core's `mayAttach`: the device's owner holding
18
+ * `device.own`, nothing else — `sources.mount` is a manager default and never
19
+ * reaches somebody's machine) decides; every other caller gets ONE fixed
20
+ * refusal, the same bytes for an unknown id. The device's broker clamps the
21
+ * path against the folders its owner allowed THIS host, lexically before any
22
+ * realpath, so a refusal says nothing about existence. An empty path lists
23
+ * those allowed folders (where the picker starts).
24
+ *
25
+ * Invariant 9 on both planes: a failure never carries the path or an errno —
26
+ * one stable sentence on this server, a fixed code from a device; the operator
27
+ * reads the detail in the server log. Cost: one `readdir` + `realpath` per call
28
+ * here; one broker `/fs/list` (≤ 2 000 entries, folder names only on the way
29
+ * back) or one `/ceiling/roots` per call on a device. No cache, no timer.
30
+ */
31
+ import type { AgentCoreApi } from '@neuralis/agent-core';
32
+ /** One stable sentence for every server-side browse failure (invariant 9). */
33
+ export declare const BROWSE_UNREADABLE = "That path is not available.";
34
+ /** The ONE answer to every caller the device attach gate does not admit — an unknown id included. */
35
+ export declare const DEVICE_BROWSE_REFUSAL = "Only the device's owner may browse it.";
36
+ /** The container's bind-mount zone: the only folders a Docker deployment can attach. */
37
+ export declare const DOCKER_MOUNTS_ROOT = "/mounts";
38
+ export type BrowseEntry = {
39
+ name: string;
40
+ path: string;
41
+ type: 'directory';
42
+ access?: 'read' | 'write';
43
+ };
44
+ export type BrowseAnswer = {
45
+ status: number;
46
+ body: Record<string, unknown>;
47
+ };
48
+ /** The gates `routes/sources.ts` owns, bound to the caller. */
49
+ export type ServerBrowseGates = {
50
+ /** Features the caller lacks to enumerate `candidate` (the protected-root table + the table-independent floor). */
51
+ missingFeatures(candidate: string): string[];
52
+ /** Hidden-not-locked: may the caller SEE this child at all? */
53
+ childVisible(child: string): boolean;
54
+ /** Whole-host discovery (the Windows drive letters) — `sources.privileged`. */
55
+ mayBrowseDrives(): boolean;
56
+ privilegedFeature: string;
57
+ privilegedRoots: readonly string[];
58
+ /** The native fence's project zone, or `null` where the fence does not apply (Docker). */
59
+ fenceProject(): Promise<string | null>;
60
+ };
61
+ /** One level of folders on THIS server — the route has already admitted `sources.mount`. */
62
+ export declare function browseServerFolders(input: {
63
+ rawPath: string;
64
+ isDocker: boolean;
65
+ mountsRoot?: string;
66
+ }, gates: ServerBrowseGates): Promise<BrowseAnswer>;
67
+ /** The device half of agent-core's cross-package API the picker reads. */
68
+ export type DeviceBrowsePort = Pick<NonNullable<AgentCoreApi['devices']>, 'listFolder' | 'ceilingRoots'>;
69
+ /**
70
+ * One level of folders on the caller's OWN paired device, or (empty path) the
71
+ * folders that device allows THIS host. `allowed` is the route's attach verdict
72
+ * (`devices.mayAttach`); agent-core re-checks it on every call. A device that
73
+ * cannot answer (offline, an older CLI, the folder outside what it allows) is a
74
+ * 200 with `state` = that fixed code and no entries — the picker says which,
75
+ * and a typed path still attaches (the create re-checks everything).
76
+ */
77
+ export declare function browseDeviceFolders(input: {
78
+ device: string;
79
+ rawPath: string;
80
+ allowed: boolean;
81
+ }, devices: DeviceBrowsePort | undefined, session: {
82
+ userId: string;
83
+ grantedFeatures: string[];
84
+ }): Promise<BrowseAnswer>;
85
+ //# sourceMappingURL=browseSourceFolders.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browseSourceFolders.d.ts","sourceRoot":"","sources":["../../../src/usecases/browseSourceFolders.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAKH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAIzD,8EAA8E;AAC9E,eAAO,MAAM,iBAAiB,gCAAgC,CAAC;AAC/D,qGAAqG;AACrG,eAAO,MAAM,qBAAqB,2CAA2C,CAAC;AAC9E,wFAAwF;AACxF,eAAO,MAAM,kBAAkB,YAAY,CAAC;AAE5C,MAAM,MAAM,WAAW,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,WAAW,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAA;CAAE,CAAC;AACvG,MAAM,MAAM,YAAY,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,CAAC;AAE7E,+DAA+D;AAC/D,MAAM,MAAM,iBAAiB,GAAG;IAC9B,mHAAmH;IACnH,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC7C,+DAA+D;IAC/D,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;IACrC,+EAA+E;IAC/E,eAAe,IAAI,OAAO,CAAC;IAC3B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,eAAe,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,0FAA0F;IAC1F,YAAY,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;CACxC,CAAC;AAoDF,4FAA4F;AAC5F,wBAAsB,mBAAmB,CACvC,KAAK,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,OAAO,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,EAClE,KAAK,EAAE,iBAAiB,GACvB,OAAO,CAAC,YAAY,CAAC,CA8DvB;AAED,0EAA0E;AAC1E,MAAM,MAAM,gBAAgB,GAAG,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,EAAE,YAAY,GAAG,cAAc,CAAC,CAAC;AAEzG;;;;;;;GAOG;AACH,wBAAsB,mBAAmB,CACvC,KAAK,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,EAC5D,OAAO,EAAE,gBAAgB,GAAG,SAAS,EACrC,OAAO,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,eAAe,EAAE,MAAM,EAAE,CAAA;CAAE,GACrD,OAAO,CAAC,YAAY,CAAC,CA0BvB"}
@@ -0,0 +1,210 @@
1
+ /**
2
+ * `GET /sources/browse` — one level of FOLDERS, the step that precedes attaching
3
+ * a source. Two planes, one rule: **you may browse exactly what you would be
4
+ * allowed to attach.**
5
+ *
6
+ * - **This server** (`browseServerFolders`). The route admits `sources.mount`
7
+ * (the attach act's own gate) and hands over the gates it owns: the shared
8
+ * protected-root table (`/`, the App Zone and the Neuralis tree cost
9
+ * `sources.privileged` here exactly as at attach time), matched IS-or-UNDER
10
+ * so a parent stays walkable while a protected child is simply absent
11
+ * (hidden-not-locked), and the native folder fence. Natively any absolute
12
+ * path the gates admit; in Docker the `/mounts` zone and every folder under
13
+ * it, never above it. The gate runs on the lexical path AND again on the
14
+ * `realpath` — a symlink whose literal path is innocent can still point at
15
+ * `/`, a protected zone or out of `/mounts`.
16
+ * - **The caller's own device** (`browseDeviceFolders`). The device plane's
17
+ * ONE attach gate (agent-core's `mayAttach`: the device's owner holding
18
+ * `device.own`, nothing else — `sources.mount` is a manager default and never
19
+ * reaches somebody's machine) decides; every other caller gets ONE fixed
20
+ * refusal, the same bytes for an unknown id. The device's broker clamps the
21
+ * path against the folders its owner allowed THIS host, lexically before any
22
+ * realpath, so a refusal says nothing about existence. An empty path lists
23
+ * those allowed folders (where the picker starts).
24
+ *
25
+ * Invariant 9 on both planes: a failure never carries the path or an errno —
26
+ * one stable sentence on this server, a fixed code from a device; the operator
27
+ * reads the detail in the server log. Cost: one `readdir` + `realpath` per call
28
+ * here; one broker `/fs/list` (≤ 2 000 entries, folder names only on the way
29
+ * back) or one `/ceiling/roots` per call on a device. No cache, no timer.
30
+ */
31
+ import { readdir, realpath, stat } from 'node:fs/promises';
32
+ import { platform } from 'node:os';
33
+ import { dirname, isAbsolute, join, posix, resolve } from 'node:path';
34
+ import { hostPathFlavour, isFilesystemRoot, isPathInside } from '@neuralis/package-system/paths';
35
+ import { NATIVE_LOCAL_REFUSAL, nativeLocalPlacement } from '../domain/access/nativeLocalFence.js';
36
+ /** One stable sentence for every server-side browse failure (invariant 9). */
37
+ export const BROWSE_UNREADABLE = 'That path is not available.';
38
+ /** The ONE answer to every caller the device attach gate does not admit — an unknown id included. */
39
+ export const DEVICE_BROWSE_REFUSAL = "Only the device's owner may browse it.";
40
+ /** The container's bind-mount zone: the only folders a Docker deployment can attach. */
41
+ export const DOCKER_MOUNTS_ROOT = '/mounts';
42
+ const refusedFeature = (feature) => ({ status: 403, body: { error: `Browsing this path requires the ${feature} feature.` } });
43
+ const unreadable = () => ({ status: 400, body: { error: BROWSE_UNREADABLE } });
44
+ /** The visible, non-dot sub-folders of `real`, sorted, as entries under `real`. */
45
+ async function listFolders(real, visible) {
46
+ const entries = await readdir(real, { withFileTypes: true });
47
+ return entries.filter((e) => e.isDirectory() && !e.name.startsWith('.'))
48
+ .sort((a, b) => a.name.localeCompare(b.name))
49
+ .map((e) => ({ name: e.name, path: join(real, e.name), type: 'directory' }))
50
+ .filter((e) => visible(e.path));
51
+ }
52
+ /**
53
+ * Docker: `/mounts` and anything under it — the zone's bind mounts and their
54
+ * sub-folders (an attach there derives its `hostRoot` from the bind, so a
55
+ * sub-folder works like the bind itself). Empty path ⇒ the zone. Outside the
56
+ * zone, lexically or by its realpath, is the one unreadable answer: the zone is
57
+ * the whole of what a container can attach. A zone that does not exist yet
58
+ * ("no mounts configured") is an empty list, not an error.
59
+ */
60
+ async function browseDockerMounts(rawPath, gates, zone) {
61
+ const requested = rawPath || zone;
62
+ if (requested.includes('\0') || !posix.isAbsolute(requested))
63
+ return unreadable();
64
+ const canonical = posix.resolve(requested);
65
+ if (!isPathInside(zone, canonical, posix))
66
+ return unreadable();
67
+ let real;
68
+ let realZone;
69
+ try {
70
+ realZone = await realpath(zone);
71
+ }
72
+ catch {
73
+ return canonical === zone ? { status: 200, body: { entries: [], atRoot: true } } : unreadable();
74
+ }
75
+ try {
76
+ real = await realpath(canonical);
77
+ }
78
+ catch {
79
+ return unreadable();
80
+ }
81
+ if (!isPathInside(realZone, real, posix))
82
+ return unreadable();
83
+ for (const candidate of new Set([canonical, real])) {
84
+ const missing = gates.missingFeatures(candidate);
85
+ if (missing.length > 0)
86
+ return refusedFeature(missing[0]);
87
+ }
88
+ try {
89
+ return { status: 200, body: { entries: await listFolders(real, gates.childVisible), atRoot: real === realZone } };
90
+ }
91
+ catch (err) {
92
+ console.warn('[sources/browse] readdir failed:', err instanceof Error ? err.message : String(err));
93
+ return unreadable();
94
+ }
95
+ }
96
+ /** One level of folders on THIS server — the route has already admitted `sources.mount`. */
97
+ export async function browseServerFolders(input, gates) {
98
+ if (input.isDocker)
99
+ return browseDockerMounts(input.rawPath, gates, input.mountsRoot ?? DOCKER_MOUNTS_ROOT);
100
+ const rawPath = input.rawPath;
101
+ if (!rawPath)
102
+ return { status: 400, body: { error: 'Missing path parameter' } };
103
+ // A NUL byte survives `resolve()` unchanged and would slip past every string
104
+ // comparison in the table before `readdir` rejects it.
105
+ if (rawPath.includes('\0'))
106
+ return unreadable();
107
+ // A relative path would resolve against the SERVER process cwd — never what
108
+ // the caller meant, and it also closes the drive-relative `C:foo` form.
109
+ if (!isAbsolute(rawPath))
110
+ return { status: 400, body: { error: 'Path must be absolute' } };
111
+ // ONE canonical value from here on: the gate, the root test, the readdir and
112
+ // the child paths all use it.
113
+ const canonical = resolve(rawPath);
114
+ const denied = gates.missingFeatures(canonical);
115
+ if (denied.length > 0)
116
+ return refusedFeature(denied[0]);
117
+ const fenceRoot = await gates.fenceProject();
118
+ const fenceProject = fenceRoot ? resolve(fenceRoot) : '';
119
+ if (fenceRoot !== null && nativeLocalPlacement(canonical, fenceProject, gates.privilegedRoots) === 'outside') {
120
+ return { status: 403, body: NATIVE_LOCAL_REFUSAL };
121
+ }
122
+ // `resolve` is purely LEXICAL — re-run the same gate on the real path.
123
+ let real;
124
+ try {
125
+ real = await realpath(canonical);
126
+ }
127
+ catch {
128
+ return unreadable();
129
+ }
130
+ if (real !== canonical) {
131
+ const deniedReal = gates.missingFeatures(real);
132
+ if (deniedReal.length > 0)
133
+ return refusedFeature(deniedReal[0]);
134
+ }
135
+ const realProject = fenceProject ? await realpath(fenceProject).catch(() => fenceProject) : '';
136
+ const placement = fenceRoot === null ? null : nativeLocalPlacement(real, realProject, gates.privilegedRoots);
137
+ if (placement === 'outside')
138
+ return { status: 403, body: NATIVE_LOCAL_REFUSAL };
139
+ // Whole-host discovery by definition — the drive letters ARE the host. The
140
+ // filesystem-root floor already required the privileged feature; this second
141
+ // check keeps that true even if the table ever changes.
142
+ if (platform() === 'win32' && dirname(real) === real) {
143
+ if (!gates.mayBrowseDrives())
144
+ return refusedFeature(gates.privilegedFeature);
145
+ const drives = [];
146
+ for (const letter of 'ABCDEFGHIJKLMNOPQRSTUVWXYZ') {
147
+ try {
148
+ await stat(`${letter}:\\`);
149
+ drives.push({ name: `${letter}:\\`, path: `${letter}:\\`, type: 'directory' });
150
+ }
151
+ catch { /* skip */ }
152
+ }
153
+ return { status: 200, body: { entries: drives, atRoot: true } };
154
+ }
155
+ try {
156
+ const visible = (child) => gates.childVisible(child)
157
+ // Natively an ANCESTOR lists only the children on the way to an attachable root.
158
+ && (placement !== 'ancestor' || nativeLocalPlacement(child, realProject, gates.privilegedRoots) !== 'outside');
159
+ // The "up" control's one answer — the kernel's root predicate, so a
160
+ // Windows drive root ends the climb exactly like `/`.
161
+ return { status: 200, body: { entries: await listFolders(real, visible), atRoot: isFilesystemRoot(real) } };
162
+ }
163
+ catch (err) {
164
+ // Never the raw message: it carries the absolute path and tells "does not
165
+ // exist" from "cannot be read" — an existence oracle over the host.
166
+ console.warn('[sources/browse] readdir failed:', err instanceof Error ? err.message : String(err));
167
+ return unreadable();
168
+ }
169
+ }
170
+ /**
171
+ * One level of folders on the caller's OWN paired device, or (empty path) the
172
+ * folders that device allows THIS host. `allowed` is the route's attach verdict
173
+ * (`devices.mayAttach`); agent-core re-checks it on every call. A device that
174
+ * cannot answer (offline, an older CLI, the folder outside what it allows) is a
175
+ * 200 with `state` = that fixed code and no entries — the picker says which,
176
+ * and a typed path still attaches (the create re-checks everything).
177
+ */
178
+ export async function browseDeviceFolders(input, devices, session) {
179
+ const refused = { status: 403, body: { error: DEVICE_BROWSE_REFUSAL } };
180
+ if (!input.allowed || !devices)
181
+ return refused;
182
+ const { device, rawPath } = input;
183
+ if (!rawPath) {
184
+ const roots = await devices.ceilingRoots(session, device);
185
+ if (!roots.ok)
186
+ return roots.code === 'refused' ? refused : { status: 200, body: { entries: [], atRoot: true, roots: true, state: roots.code } };
187
+ const write = new Set(roots.write);
188
+ const all = [...new Set([...roots.read, ...roots.write])].sort((a, b) => a.localeCompare(b));
189
+ const entries = all.map((p) => ({ name: p, path: p, type: 'directory', access: write.has(p) ? 'write' : 'read' }));
190
+ return { status: 200, body: { entries, atRoot: true, roots: true, state: 'ok' } };
191
+ }
192
+ if (rawPath.includes('\0') || rawPath.length > 4096)
193
+ return unreadable();
194
+ if (!hostPathFlavour(rawPath).isAbsolute(rawPath))
195
+ return { status: 400, body: { error: 'Path must be absolute' } };
196
+ const listing = await devices.listFolder(session, device, rawPath);
197
+ if (!listing.ok)
198
+ return listing.code === 'refused' ? refused : { status: 200, body: { entries: [], atRoot: false, state: listing.code } };
199
+ return {
200
+ status: 200,
201
+ body: {
202
+ entries: listing.entries.map((e) => ({ ...e, type: 'directory' })),
203
+ atRoot: isFilesystemRoot(rawPath),
204
+ state: 'ok',
205
+ ...(listing.truncated ? { truncated: true } : {}),
206
+ ...(listing.symlinks > 0 ? { symlinks: listing.symlinks } : {}),
207
+ },
208
+ };
209
+ }
210
+ //# sourceMappingURL=browseSourceFolders.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browseSourceFolders.js","sourceRoot":"","sources":["../../../src/usecases/browseSourceFolders.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import type { ConnectorHierarchicalPermissions, ConnectorPathPermission, PackageSourceDeclaration } from '@neuralis/package-system/contracts';
2
- import type { RuntimeStackInfo } from '@neuralis/package-system/paths';
2
+ import { type RuntimeStackInfo } from '@neuralis/package-system/paths';
3
3
  import type { SourceConfigPort, SourceConfigScope } from '../connectors/types.js';
4
4
  import type { SourceConfig } from '../domain/sourceConfig.js';
5
5
  type RepairLogger = {
@@ -24,9 +24,20 @@ type RepairLogger = {
24
24
  */
25
25
  export type DeclaredSourceFailure = {
26
26
  source: string;
27
- reason: 'baselines_unresolvable' | 'write_failed' | 'binding_failed';
27
+ reason: 'baselines_unresolvable' | 'root_outside_project' | 'write_failed' | 'binding_failed';
28
28
  error: string;
29
29
  };
30
+ /**
31
+ * Does a declared in-process folder's root leave its project zone on disk? The
32
+ * kernel validator already keeps a declared root project-relative (no `..`, no
33
+ * absolute path), so the LEXICAL path stays inside; what it never sees is a
34
+ * symlink standing at that path. This is the route's realpath arm for the third
35
+ * producer: the folder's REAL path must stay inside the project zone's real
36
+ * path, on either plane (natively the fence's own rule; in a container the zone
37
+ * is still the only place a declaration may name). A root that does not exist
38
+ * yet cannot point anywhere and passes; no known projects root ⇒ no judgement.
39
+ */
40
+ export declare function declaredRootLeavesProject(config: Pick<SourceConfig, 'connection'>, runtimeStack: RuntimeStackInfo | null, projectId: string): Promise<boolean>;
30
41
  export declare function createMissingDeclaredSources(deps: {
31
42
  sourceConfigs: SourceConfigPort;
32
43
  bindSource: (scope: SourceConfigScope, config: SourceConfig) => Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"createDeclaredSources.d.ts","sourceRoot":"","sources":["../../../src/usecases/createDeclaredSources.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gCAAgC,EAAE,uBAAuB,EAAE,wBAAwB,EAAE,MAAM,oCAAoC,CAAC;AAC9I,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAEvE,OAAO,KAAK,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAClF,OAAO,KAAK,EAA2B,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAGvF,KAAK,YAAY,GAAG;IAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;IAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAA;CAAE,CAAC;AAEnJ;;;;;;;;;;;;;;;GAeG;AACH,MAAM,MAAM,qBAAqB,GAAG;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,wBAAwB,GAAG,cAAc,GAAG,gBAAgB,CAAC;IACrE,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,wBAAsB,4BAA4B,CAChD,IAAI,EAAE;IACJ,aAAa,EAAE,gBAAgB,CAAC;IAChC,UAAU,EAAE,CAAC,KAAK,EAAE,iBAAiB,EAAE,MAAM,EAAE,YAAY,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9E,aAAa,EAAE,MAAM,CAAC;IACtB,gFAAgF;IAChF,kBAAkB,EAAE,SAAS,MAAM,EAAE,CAAC;IACtC,qBAAqB,EAAE,MAAM,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,gCAAgC,CAAC,CAAC,CAAC;IAC9F,kBAAkB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,uBAAuB,EAAE,CAAC;IAChE,YAAY,EAAE,gBAAgB,GAAG,IAAI,CAAC;IACtC,GAAG,EAAE,MAAM,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,YAAY,CAAC;CACvB,EACD,MAAM,EAAE;IACN,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACtB,KAAK,EAAE,aAAa,CAAC;QAAE,aAAa,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,wBAAwB,CAAA;KAAE,CAAC,CAAC;CACjF,GACA,OAAO,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,qBAAqB,EAAE,CAAA;CAAE,CAAC,CA8EhF"}
1
+ {"version":3,"file":"createDeclaredSources.d.ts","sourceRoot":"","sources":["../../../src/usecases/createDeclaredSources.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gCAAgC,EAAE,uBAAuB,EAAE,wBAAwB,EAAE,MAAM,oCAAoC,CAAC;AAI9I,OAAO,EAAgB,KAAK,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAErF,OAAO,KAAK,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAClF,OAAO,KAAK,EAA2B,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAGvF,KAAK,YAAY,GAAG;IAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;IAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAA;CAAE,CAAC;AAEnJ;;;;;;;;;;;;;;;GAeG;AACH,MAAM,MAAM,qBAAqB,GAAG;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,wBAAwB,GAAG,sBAAsB,GAAG,cAAc,GAAG,gBAAgB,CAAC;IAC9F,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF;;;;;;;;;GASG;AACH,wBAAsB,yBAAyB,CAC7C,MAAM,EAAE,IAAI,CAAC,YAAY,EAAE,YAAY,CAAC,EACxC,YAAY,EAAE,gBAAgB,GAAG,IAAI,EACrC,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,OAAO,CAAC,CAelB;AAED,wBAAsB,4BAA4B,CAChD,IAAI,EAAE;IACJ,aAAa,EAAE,gBAAgB,CAAC;IAChC,UAAU,EAAE,CAAC,KAAK,EAAE,iBAAiB,EAAE,MAAM,EAAE,YAAY,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9E,aAAa,EAAE,MAAM,CAAC;IACtB,gFAAgF;IAChF,kBAAkB,EAAE,SAAS,MAAM,EAAE,CAAC;IACtC,qBAAqB,EAAE,MAAM,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,gCAAgC,CAAC,CAAC,CAAC;IAC9F,kBAAkB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,uBAAuB,EAAE,CAAC;IAChE,YAAY,EAAE,gBAAgB,GAAG,IAAI,CAAC;IACtC,GAAG,EAAE,MAAM,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,YAAY,CAAC;CACvB,EACD,MAAM,EAAE;IACN,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACtB,KAAK,EAAE,aAAa,CAAC;QAAE,aAAa,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,wBAAwB,CAAA;KAAE,CAAC,CAAC;CACjF,GACA,OAAO,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,qBAAqB,EAAE,CAAA;CAAE,CAAC,CAoFhF"}
@@ -1,6 +1,39 @@
1
+ import { realpath } from 'node:fs/promises';
2
+ import path from 'node:path';
3
+ import { HOST_SOURCE_KIND, sourcePlane } from '@neuralis/package-system/contracts';
4
+ import { isPathInside } from '@neuralis/package-system/paths';
1
5
  import { applyTrustedSourceBaselines, manifestBaselineScheme } from '@neuralis/package-system/policies';
2
6
  import { buildDeclaredSourceConfig, isOwnDataZoneDeclaration } from '../services/declaredSources.js';
3
7
  import { SOURCE_BASELINE_REPAIR_VERSION } from '../services/baselineRepair.js';
8
+ /**
9
+ * Does a declared in-process folder's root leave its project zone on disk? The
10
+ * kernel validator already keeps a declared root project-relative (no `..`, no
11
+ * absolute path), so the LEXICAL path stays inside; what it never sees is a
12
+ * symlink standing at that path. This is the route's realpath arm for the third
13
+ * producer: the folder's REAL path must stay inside the project zone's real
14
+ * path, on either plane (natively the fence's own rule; in a container the zone
15
+ * is still the only place a declaration may name). A root that does not exist
16
+ * yet cannot point anywhere and passes; no known projects root ⇒ no judgement.
17
+ */
18
+ export async function declaredRootLeavesProject(config, runtimeStack, projectId) {
19
+ const { kind, config: connection } = config.connection;
20
+ if (kind !== HOST_SOURCE_KIND || sourcePlane(kind, connection) !== 'local')
21
+ return false;
22
+ const root = typeof connection.root === 'string' ? connection.root : '';
23
+ if (!root || !runtimeStack?.projectsRoot)
24
+ return false;
25
+ const projectRoot = path.join(runtimeStack.projectsRoot, projectId);
26
+ const lexical = path.resolve(projectRoot, root);
27
+ let real;
28
+ try {
29
+ real = await realpath(lexical);
30
+ }
31
+ catch {
32
+ return !isPathInside(projectRoot, lexical);
33
+ }
34
+ const realProject = await realpath(projectRoot).catch(() => projectRoot);
35
+ return !isPathInside(realProject, real);
36
+ }
4
37
  export async function createMissingDeclaredSources(deps, target) {
5
38
  const { projectId, userId, existing } = target;
6
39
  let created = 0;
@@ -32,6 +65,12 @@ export async function createMissingDeclaredSources(deps, target) {
32
65
  skipped += 1;
33
66
  continue;
34
67
  }
68
+ if (await declaredRootLeavesProject(built, deps.runtimeStack, projectId)) {
69
+ const error = 'the declared folder resolves outside this project on disk';
70
+ failed.push({ source: decl.source, reason: 'root_outside_project', error });
71
+ deps.logger?.warn?.('declared-source create refused: root outside the project zone', { source: decl.source, projectId });
72
+ continue;
73
+ }
35
74
  let complete;
36
75
  try {
37
76
  const applied = applyTrustedSourceBaselines({