@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.
- package/README.md +26 -35
- package/app/README.md +1 -1
- package/app/cards/DiffView.tsx +9 -7
- package/app/cards/README.md +1 -1
- package/app/cards/diffLine.tsx +2 -4
- package/app/filesystem/README.md +4 -4
- package/app/filesystem/api/README.md +3 -3
- package/app/filesystem/api/index.ts +137 -123
- package/app/filesystem/domain/types.ts +36 -5
- package/app/filesystem/hooks/README.md +5 -5
- package/app/filesystem/hooks/useDiscoverableSources.ts +4 -2
- package/app/filesystem/hooks/useFilesystemSSE.ts +31 -23
- package/app/filesystem/hooks/useGitChangesInventory.ts +4 -2
- package/app/filesystem/host/README.md +3 -2
- package/app/filesystem/host/installFilesystemHostComponents.tsx +22 -9
- package/app/filesystem/store/README.md +11 -7
- package/app/filesystem/store/filesystemStore.ts +454 -162
- package/app/filesystem/store/gitSlice.ts +6 -6
- package/app/filesystem/store/listSlice.ts +10 -6
- package/app/filesystem/store/searchSlice.ts +27 -4
- package/app/filesystem/ui/FileEditor.tsx +48 -35
- package/app/filesystem/ui/FileTree.tsx +10 -9
- package/app/filesystem/ui/FileTreeSearch.tsx +29 -2
- package/app/filesystem/ui/GitCommitChangesView.tsx +5 -3
- package/app/filesystem/ui/GitCommitGraph.tsx +6 -5
- package/app/filesystem/ui/GitControlPanel.tsx +14 -13
- package/app/filesystem/ui/GitDiffView.tsx +2 -1
- package/app/filesystem/ui/GitFileDiff.tsx +7 -6
- package/app/filesystem/ui/PendingChangesPanel.tsx +88 -28
- package/app/filesystem/ui/PendingReviewDialog.tsx +52 -24
- package/app/filesystem/ui/README.md +8 -7
- package/app/filesystem/ui/ReembedDialog.tsx +22 -9
- package/app/filesystem/ui/SourceDeleteConfirm.tsx +1 -1
- package/app/filesystem/ui/SourcesPanel.tsx +135 -42
- package/app/filesystem/ui/VectorHealthPanel.tsx +20 -4
- package/app/filesystem/ui/pendingChangesModel.ts +9 -5
- package/dist/app/chunks/{astro-LRAFGXNX.js → astro-B2J4AS2D.js} +1 -1
- package/dist/app/chunks/bash-KY6SAQTH.js +1 -0
- package/dist/app/chunks/c-OBOPYVZ7.js +1 -0
- package/dist/app/chunks/{chunk-5H7ZCOD3.js → chunk-2X3GNKJ3.js} +1 -1
- package/dist/app/chunks/{chunk-XIFGTNRM.js → chunk-JPJIVRFI.js} +1 -1
- package/dist/app/chunks/{chunk-RH3QY5LF.js → chunk-LEFIFWND.js} +1 -1
- package/dist/app/chunks/{chunk-G4RZ3UNX.js → chunk-N6RXX3PH.js} +1 -1
- package/dist/app/chunks/{chunk-QXXJ73P5.js → chunk-PZAW4HPB.js} +1 -1
- package/dist/app/chunks/{chunk-3QLE7Y4L.js → chunk-ZBYWWTO6.js} +1 -1
- package/dist/app/chunks/cpp-TVWVOTEQ.js +1 -0
- package/dist/app/chunks/css-MANZBYA4.js +1 -0
- package/dist/app/chunks/{elixir-M36XROA6.js → elixir-S725Z7EH.js} +1 -1
- package/dist/app/chunks/{elm-7BG6QAIK.js → elm-5WUUSTNB.js} +1 -1
- package/dist/app/chunks/graphql-UGOPR3WU.js +1 -0
- package/dist/app/chunks/html-F6FWTBSG.js +1 -0
- package/dist/app/chunks/java-ANIVV5H5.js +1 -0
- package/dist/app/chunks/javascript-IH374YWG.js +1 -0
- package/dist/app/chunks/json-WGGVVXSB.js +1 -0
- package/dist/app/chunks/jsx-OTXJQD32.js +1 -0
- package/dist/app/chunks/{latex-ZWK7SXB6.js → latex-QCZNITGN.js} +1 -1
- package/dist/app/chunks/lua-4CRZ64PU.js +1 -0
- package/dist/app/chunks/{nginx-2L6VRV3A.js → nginx-V4CYS7WR.js} +1 -1
- package/dist/app/chunks/{perl-PBUAXXK6.js → perl-BHTX7F5B.js} +1 -1
- package/dist/app/chunks/{php-QJX57PA6.js → php-AYGJ5WYZ.js} +1 -1
- package/dist/app/chunks/r-4YFCFA4B.js +1 -0
- package/dist/app/chunks/{ruby-RLOWMVPO.js → ruby-42NMJWAL.js} +1 -1
- package/dist/app/chunks/{scss-B5CAI3HR.js → scss-XD7VU2CU.js} +1 -1
- package/dist/app/chunks/sql-B55MH6JJ.js +1 -0
- package/dist/app/chunks/{svelte-GT3D4C44.js → svelte-WR3QPIJU.js} +1 -1
- package/dist/app/chunks/tsx-S73GAE2L.js +1 -0
- package/dist/app/chunks/typescript-NEWOAB5Z.js +1 -0
- package/dist/app/chunks/{vue-JOW62MHD.js → vue-CCDS4VZK.js} +1 -1
- package/dist/app/chunks/xml-UXKAGLDR.js +1 -0
- package/dist/app/chunks/yaml-UMWKDTK7.js +1 -0
- package/dist/app/host.js +46 -46
- package/dist/scripts/embeddingLockV3.d.ts +30 -0
- package/dist/scripts/embeddingLockV3.d.ts.map +1 -0
- package/dist/scripts/embeddingLockV3.js +100 -0
- package/dist/scripts/embeddingLockV3.js.map +1 -0
- package/dist/scripts/vectorProofV1.d.ts +90 -0
- package/dist/scripts/vectorProofV1.d.ts.map +1 -0
- package/dist/scripts/vectorProofV1.js +220 -0
- package/dist/scripts/vectorProofV1.js.map +1 -0
- package/dist/src/config/env.d.ts +21 -0
- package/dist/src/config/env.d.ts.map +1 -1
- package/dist/src/config/env.js +55 -0
- package/dist/src/config/env.js.map +1 -1
- package/dist/src/connectors/AppSourceConfigStore.d.ts +12 -2
- package/dist/src/connectors/AppSourceConfigStore.d.ts.map +1 -1
- package/dist/src/connectors/AppSourceConfigStore.js +48 -40
- package/dist/src/connectors/AppSourceConfigStore.js.map +1 -1
- package/dist/src/connectors/LocalDiskConnector.d.ts +11 -14
- package/dist/src/connectors/LocalDiskConnector.d.ts.map +1 -1
- package/dist/src/connectors/LocalDiskConnector.js +87 -107
- package/dist/src/connectors/LocalDiskConnector.js.map +1 -1
- package/dist/src/connectors/sourceConfigMutation.d.ts +11 -1
- package/dist/src/connectors/sourceConfigMutation.d.ts.map +1 -1
- package/dist/src/connectors/sourceConfigMutation.js +36 -3
- package/dist/src/connectors/sourceConfigMutation.js.map +1 -1
- package/dist/src/domain/chunker.js +8 -3
- package/dist/src/domain/chunker.js.map +1 -1
- package/dist/src/domain/healthTypes.d.ts +11 -0
- package/dist/src/domain/healthTypes.d.ts.map +1 -1
- package/dist/src/domain/mime.d.ts +1 -0
- package/dist/src/domain/mime.d.ts.map +1 -1
- package/dist/src/domain/mime.js +48 -0
- package/dist/src/domain/mime.js.map +1 -1
- package/dist/src/domain/pendingChange.d.ts +7 -0
- package/dist/src/domain/pendingChange.d.ts.map +1 -1
- package/dist/src/domain/pendingChange.js +11 -0
- package/dist/src/domain/pendingChange.js.map +1 -1
- package/dist/src/domain/sourceConfig.d.ts +7 -14
- package/dist/src/domain/sourceConfig.d.ts.map +1 -1
- package/dist/src/domain/sourceConfig.js +1 -13
- package/dist/src/domain/sourceConfig.js.map +1 -1
- package/dist/src/domain/sourcePackages.d.ts +11 -2
- package/dist/src/domain/sourcePackages.d.ts.map +1 -1
- package/dist/src/domain/syncTrigger.d.ts +2 -3
- package/dist/src/domain/syncTrigger.d.ts.map +1 -1
- package/dist/src/domain/syncTrigger.js +2 -3
- package/dist/src/domain/syncTrigger.js.map +1 -1
- package/dist/src/domain/syncTypes.d.ts +21 -4
- package/dist/src/domain/syncTypes.d.ts.map +1 -1
- package/dist/src/domain/syncTypes.js.map +1 -1
- package/dist/src/domain/text.d.ts +3 -0
- package/dist/src/domain/text.d.ts.map +1 -1
- package/dist/src/domain/text.js +5 -0
- package/dist/src/domain/text.js.map +1 -1
- package/dist/src/domain/types.d.ts +9 -0
- package/dist/src/domain/types.d.ts.map +1 -1
- package/dist/src/embeddings/clients/GeminiEmbedder.d.ts.map +1 -1
- package/dist/src/embeddings/clients/GeminiEmbedder.js +11 -5
- package/dist/src/embeddings/clients/GeminiEmbedder.js.map +1 -1
- package/dist/src/embeddings/clients/OllamaEmbedder.d.ts.map +1 -1
- package/dist/src/embeddings/clients/OllamaEmbedder.js +13 -6
- package/dist/src/embeddings/clients/OllamaEmbedder.js.map +1 -1
- package/dist/src/embeddings/clients/OpenAIEmbedder.d.ts.map +1 -1
- package/dist/src/embeddings/clients/OpenAIEmbedder.js +12 -9
- package/dist/src/embeddings/clients/OpenAIEmbedder.js.map +1 -1
- package/dist/src/embeddings/clients/QwenEmbedder.d.ts.map +1 -1
- package/dist/src/embeddings/clients/QwenEmbedder.js +12 -5
- package/dist/src/embeddings/clients/QwenEmbedder.js.map +1 -1
- package/dist/src/embeddings/clients/VoyageEmbedder.d.ts.map +1 -1
- package/dist/src/embeddings/clients/VoyageEmbedder.js +12 -5
- package/dist/src/embeddings/clients/VoyageEmbedder.js.map +1 -1
- package/dist/src/embeddings/factory.d.ts +2 -0
- package/dist/src/embeddings/factory.d.ts.map +1 -1
- package/dist/src/embeddings/factory.js +23 -3
- package/dist/src/embeddings/factory.js.map +1 -1
- package/dist/src/embeddings/lock.d.ts +22 -11
- package/dist/src/embeddings/lock.d.ts.map +1 -1
- package/dist/src/embeddings/lock.js +47 -29
- package/dist/src/embeddings/lock.js.map +1 -1
- package/dist/src/embeddings/retry.d.ts +5 -0
- package/dist/src/embeddings/retry.d.ts.map +1 -1
- package/dist/src/embeddings/retry.js +35 -0
- package/dist/src/embeddings/retry.js.map +1 -1
- package/dist/src/events/pending.d.ts +56 -0
- package/dist/src/events/pending.d.ts.map +1 -0
- package/dist/src/events/pending.js +108 -0
- package/dist/src/events/pending.js.map +1 -0
- package/dist/src/events/source.d.ts +60 -14
- package/dist/src/events/source.d.ts.map +1 -1
- package/dist/src/events/source.js +149 -31
- package/dist/src/events/source.js.map +1 -1
- package/dist/src/events/vector.d.ts +33 -0
- package/dist/src/events/vector.d.ts.map +1 -0
- package/dist/src/events/vector.js +57 -0
- package/dist/src/events/vector.js.map +1 -0
- package/dist/src/git/GitRunner.d.ts.map +1 -1
- package/dist/src/git/GitRunner.js +11 -8
- package/dist/src/git/GitRunner.js.map +1 -1
- package/dist/src/git/sourceGitControl.d.ts.map +1 -1
- package/dist/src/git/sourceGitControl.js +2 -1
- package/dist/src/git/sourceGitControl.js.map +1 -1
- package/dist/src/index.d.ts +5 -4
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +4 -3
- package/dist/src/index.js.map +1 -1
- package/dist/src/lifecycle.d.ts +20 -4
- package/dist/src/lifecycle.d.ts.map +1 -1
- package/dist/src/lifecycle.js +5 -1
- package/dist/src/lifecycle.js.map +1 -1
- package/dist/src/routes/health.js +6 -1
- package/dist/src/routes/health.js.map +1 -1
- package/dist/src/routes/pending.d.ts.map +1 -1
- package/dist/src/routes/pending.js +2 -1
- package/dist/src/routes/pending.js.map +1 -1
- package/dist/src/routes/sources.d.ts.map +1 -1
- package/dist/src/routes/sources.js +60 -11
- package/dist/src/routes/sources.js.map +1 -1
- package/dist/src/services/BridgeService.d.ts +2 -2
- package/dist/src/services/BridgeService.d.ts.map +1 -1
- package/dist/src/services/BridgeService.js +11 -2
- package/dist/src/services/BridgeService.js.map +1 -1
- package/dist/src/services/FilesystemService.d.ts +3 -1
- package/dist/src/services/FilesystemService.d.ts.map +1 -1
- package/dist/src/services/FilesystemService.js +3 -1
- package/dist/src/services/FilesystemService.js.map +1 -1
- package/dist/src/services/FilesystemUiService.js +1 -1
- package/dist/src/services/FilesystemUiService.js.map +1 -1
- package/dist/src/services/SyncScheduler.d.ts.map +1 -1
- package/dist/src/services/SyncScheduler.js +0 -14
- package/dist/src/services/SyncScheduler.js.map +1 -1
- package/dist/src/services/VectorHealthService.d.ts.map +1 -1
- package/dist/src/services/VectorHealthService.js +2 -46
- package/dist/src/services/VectorHealthService.js.map +1 -1
- package/dist/src/services/baselineRepair.d.ts +2 -2
- package/dist/src/services/baselineRepair.js +2 -2
- package/dist/src/services/declaredSources.d.ts +8 -1
- package/dist/src/services/declaredSources.d.ts.map +1 -1
- package/dist/src/services/declaredSources.js +19 -19
- package/dist/src/services/declaredSources.js.map +1 -1
- package/dist/src/store/dataFormats.d.ts +14 -3
- package/dist/src/store/dataFormats.d.ts.map +1 -1
- package/dist/src/store/dataFormats.js +15 -5
- package/dist/src/store/dataFormats.js.map +1 -1
- package/dist/src/sync/DeltaSyncRunner.d.ts.map +1 -1
- package/dist/src/sync/DeltaSyncRunner.js +78 -243
- package/dist/src/sync/DeltaSyncRunner.js.map +1 -1
- package/dist/src/sync/SyncJobQueue.d.ts +33 -4
- package/dist/src/sync/SyncJobQueue.d.ts.map +1 -1
- package/dist/src/sync/SyncJobQueue.js +179 -19
- package/dist/src/sync/SyncJobQueue.js.map +1 -1
- package/dist/src/sync/moveDetector.d.ts +2 -1
- package/dist/src/sync/moveDetector.d.ts.map +1 -1
- package/dist/src/sync/moveDetector.js +2 -1
- package/dist/src/sync/moveDetector.js.map +1 -1
- package/dist/src/tools/fs_search.d.ts.map +1 -1
- package/dist/src/tools/fs_search.js +8 -0
- package/dist/src/tools/fs_search.js.map +1 -1
- package/dist/src/tools/fs_write.js +3 -1
- package/dist/src/tools/fs_write.js.map +1 -1
- package/dist/src/usecases/chunkUpsert.d.ts +4 -0
- package/dist/src/usecases/chunkUpsert.d.ts.map +1 -1
- package/dist/src/usecases/chunkUpsert.js +103 -60
- package/dist/src/usecases/chunkUpsert.js.map +1 -1
- package/dist/src/usecases/embeddingBacklog.d.ts +31 -0
- package/dist/src/usecases/embeddingBacklog.d.ts.map +1 -0
- package/dist/src/usecases/embeddingBacklog.js +244 -0
- package/dist/src/usecases/embeddingBacklog.js.map +1 -0
- package/dist/src/usecases/listSourcePackages.js +17 -1
- package/dist/src/usecases/listSourcePackages.js.map +1 -1
- package/dist/src/usecases/mediaLane.d.ts +11 -4
- package/dist/src/usecases/mediaLane.d.ts.map +1 -1
- package/dist/src/usecases/mediaLane.js +67 -30
- package/dist/src/usecases/mediaLane.js.map +1 -1
- package/dist/src/usecases/pendingReview.d.ts.map +1 -1
- package/dist/src/usecases/pendingReview.js +24 -7
- package/dist/src/usecases/pendingReview.js.map +1 -1
- package/dist/src/usecases/purgeExcludedPoints.d.ts +2 -0
- package/dist/src/usecases/purgeExcludedPoints.d.ts.map +1 -1
- package/dist/src/usecases/purgeExcludedPoints.js +3 -2
- package/dist/src/usecases/purgeExcludedPoints.js.map +1 -1
- package/dist/src/usecases/readFiles.d.ts.map +1 -1
- package/dist/src/usecases/readFiles.js +33 -6
- package/dist/src/usecases/readFiles.js.map +1 -1
- package/dist/src/usecases/reconcileSourcePackageRoots.d.ts +31 -0
- package/dist/src/usecases/reconcileSourcePackageRoots.d.ts.map +1 -0
- package/dist/src/usecases/reconcileSourcePackageRoots.js +114 -0
- package/dist/src/usecases/reconcileSourcePackageRoots.js.map +1 -0
- package/dist/src/usecases/searchFiles.d.ts.map +1 -1
- package/dist/src/usecases/searchFiles.js +62 -64
- package/dist/src/usecases/searchFiles.js.map +1 -1
- package/dist/src/usecases/syncIndexedFile.d.ts +42 -0
- package/dist/src/usecases/syncIndexedFile.d.ts.map +1 -0
- package/dist/src/usecases/syncIndexedFile.js +242 -0
- package/dist/src/usecases/syncIndexedFile.js.map +1 -0
- package/dist/src/usecases/syncPointWrites.d.ts +5 -0
- package/dist/src/usecases/syncPointWrites.d.ts.map +1 -1
- package/dist/src/usecases/syncPointWrites.js +32 -5
- package/dist/src/usecases/syncPointWrites.js.map +1 -1
- package/dist/src/usecases/uploadBinary.d.ts.map +1 -1
- package/dist/src/usecases/uploadBinary.js +36 -49
- package/dist/src/usecases/uploadBinary.js.map +1 -1
- package/dist/src/usecases/vector/endpointGuard.js +2 -1
- package/dist/src/usecases/vector/endpointGuard.js.map +1 -1
- package/dist/src/usecases/vector/estimate.d.ts +7 -4
- package/dist/src/usecases/vector/estimate.d.ts.map +1 -1
- package/dist/src/usecases/vector/estimate.js +8 -5
- package/dist/src/usecases/vector/estimate.js.map +1 -1
- package/dist/src/usecases/vector/rebuildGeneration.d.ts +29 -5
- package/dist/src/usecases/vector/rebuildGeneration.d.ts.map +1 -1
- package/dist/src/usecases/vector/rebuildGeneration.js +224 -82
- package/dist/src/usecases/vector/rebuildGeneration.js.map +1 -1
- package/dist/src/usecases/vectorMaintenance.d.ts +46 -4
- package/dist/src/usecases/vectorMaintenance.d.ts.map +1 -1
- package/dist/src/usecases/vectorMaintenance.js +190 -11
- package/dist/src/usecases/vectorMaintenance.js.map +1 -1
- package/dist/src/usecases/write/commit.d.ts +6 -8
- package/dist/src/usecases/write/commit.d.ts.map +1 -1
- package/dist/src/usecases/write/commit.js +96 -112
- package/dist/src/usecases/write/commit.js.map +1 -1
- package/dist/src/usecases/write/content.js +1 -2
- package/dist/src/usecases/write/content.js.map +1 -1
- package/dist/src/usecases/write/ports.d.ts +1 -0
- package/dist/src/usecases/write/ports.d.ts.map +1 -1
- package/dist/src/vector/FilesystemVectorIndex.d.ts +34 -3
- package/dist/src/vector/FilesystemVectorIndex.d.ts.map +1 -1
- package/dist/src/vector/FilesystemVectorIndex.js +254 -20
- package/dist/src/vector/FilesystemVectorIndex.js.map +1 -1
- package/dist/src/vector/InMemoryVectorIndex.d.ts +9 -2
- package/dist/src/vector/InMemoryVectorIndex.d.ts.map +1 -1
- package/dist/src/vector/InMemoryVectorIndex.js +25 -6
- package/dist/src/vector/InMemoryVectorIndex.js.map +1 -1
- package/dist/src/vector/QdrantVectorIndex.d.ts +35 -9
- package/dist/src/vector/QdrantVectorIndex.d.ts.map +1 -1
- package/dist/src/vector/QdrantVectorIndex.js +209 -90
- package/dist/src/vector/QdrantVectorIndex.js.map +1 -1
- package/dist/src/vector/qdrantFilter.d.ts +3 -1
- package/dist/src/vector/qdrantFilter.d.ts.map +1 -1
- package/dist/src/vector/qdrantFilter.js +2 -0
- package/dist/src/vector/qdrantFilter.js.map +1 -1
- package/dist/src/vector/types.d.ts +81 -0
- package/dist/src/vector/types.d.ts.map +1 -1
- package/dist/src/vector/types.js +2 -0
- package/dist/src/vector/types.js.map +1 -1
- package/dist/src/wiring.d.ts +6 -0
- package/dist/src/wiring.d.ts.map +1 -1
- package/dist/src/wiring.js +62 -3
- package/dist/src/wiring.js.map +1 -1
- package/dist/tools/fs_search.json +2 -2
- package/docs/drive-overview.md +2 -2
- package/instructions/brain-model.md +1 -1
- package/package.json +1000 -11
- package/rules/brain-rules.md +1 -1
- package/skills/connect-business-data/SKILL.md +6 -4
- package/skills/create-package/SKILL.md +14 -12
- package/skills/create-package/references/config-and-credentials.md +3 -3
- package/skills/create-package/references/connectors-and-uri-policies.md +5 -3
- package/skills/create-package/references/manifest-and-discovery.md +5 -4
- package/skills/create-package/references/runtime-and-build.md +9 -9
- package/skills/create-package/references/skills-and-context.md +3 -3
- package/skills/create-package/references/surfaces-and-design.md +9 -6
- package/skills/create-package/references/team-and-workflows.md +2 -2
- package/skills/create-package/references/test-and-ship.md +15 -15
- package/skills/create-package/references/tools-and-schemas.md +1 -1
- package/skills/create-package/scripts/check-package.sh +50 -4
- package/skills/create-package/scripts/verify-loaded.sh +16 -16
- package/skills/manage-files/SKILL.md +2 -2
- package/skills/manage-sources/SKILL.md +16 -15
- package/skills/manage-sources/scripts/reembed.sh +9 -3
- package/skills/sync/SKILL.md +4 -4
- package/tools/fs_search.json +2 -2
- package/app/filesystem/hooks/useContainerWidth.ts +0 -39
- package/dist/app/chunks/bash-M45GHPBQ.js +0 -1
- package/dist/app/chunks/c-X3REOAWD.js +0 -1
- package/dist/app/chunks/cpp-VOWI743W.js +0 -1
- package/dist/app/chunks/css-2ZVPHE25.js +0 -1
- package/dist/app/chunks/graphql-7V2NP54C.js +0 -1
- package/dist/app/chunks/html-UF3LFLNA.js +0 -1
- package/dist/app/chunks/java-PNTAU4L3.js +0 -1
- package/dist/app/chunks/javascript-4JJTQGEL.js +0 -1
- package/dist/app/chunks/json-VLQ6D3JH.js +0 -1
- package/dist/app/chunks/jsx-KQKSLAAH.js +0 -1
- package/dist/app/chunks/lua-UFPYUJ2O.js +0 -1
- package/dist/app/chunks/r-QEZB45SR.js +0 -1
- package/dist/app/chunks/sql-DTZHNUZP.js +0 -1
- package/dist/app/chunks/tsx-WPR2WRZD.js +0 -1
- package/dist/app/chunks/typescript-LWO362OA.js +0 -1
- package/dist/app/chunks/xml-A5H72RTS.js +0 -1
- package/dist/app/chunks/yaml-MXHSIJCI.js +0 -1
- package/dist/src/services/purgePendingNodes.d.ts +0 -32
- package/dist/src/services/purgePendingNodes.d.ts.map +0 -1
- package/dist/src/services/purgePendingNodes.js +0 -61
- package/dist/src/services/purgePendingNodes.js.map +0 -1
- /package/dist/app/chunks/{chunk-737Y24HS.js → chunk-3JASFUPF.js} +0 -0
- /package/dist/app/chunks/{chunk-DKD2L57N.js → chunk-6EYLOQ4F.js} +0 -0
- /package/dist/app/chunks/{chunk-KYH5EHHY.js → chunk-7YRZ5LOQ.js} +0 -0
- /package/dist/app/chunks/{chunk-6TC3DVWV.js → chunk-C7LU4RID.js} +0 -0
- /package/dist/app/chunks/{chunk-TY33BMKR.js → chunk-CD52YDZP.js} +0 -0
- /package/dist/app/chunks/{chunk-OLEIKJ3X.js → chunk-DCJKTCJ5.js} +0 -0
- /package/dist/app/chunks/{chunk-QLBZ4JR2.js → chunk-EXIU2KBV.js} +0 -0
- /package/dist/app/chunks/{chunk-SFUNBBEA.js → chunk-FDP4LO4P.js} +0 -0
- /package/dist/app/chunks/{chunk-BGRVFATT.js → chunk-HNETUS7U.js} +0 -0
- /package/dist/app/chunks/{chunk-4QNMHAIR.js → chunk-LBFZJEDR.js} +0 -0
- /package/dist/app/chunks/{chunk-TRRUHDPN.js → chunk-ULRXL5VM.js} +0 -0
- /package/dist/app/chunks/{chunk-S6B4WWIF.js → chunk-XJK47SMJ.js} +0 -0
- /package/dist/app/chunks/{chunk-DZ5C5FKI.js → chunk-YYAAIAU2.js} +0 -0
- /package/dist/app/chunks/{clojure-OC6KPSJO.js → clojure-4QCN4GHG.js} +0 -0
- /package/dist/app/chunks/{core-KGE7TQJ3.js → core-ZHTX3P2Q.js} +0 -0
- /package/dist/app/chunks/{csharp-E7VIFITL.js → csharp-HQWR4N52.js} +0 -0
- /package/dist/app/chunks/{dark-plus-BOSCZXE4.js → dark-plus-GYPKKZES.js} +0 -0
- /package/dist/app/chunks/{dart-6Y3X27SZ.js → dart-FO4TTVO2.js} +0 -0
- /package/dist/app/chunks/{diff-TR2NPA64.js → diff-SHANV4YC.js} +0 -0
- /package/dist/app/chunks/{dist-T32U2VVR.js → dist-WSDF34DM.js} +0 -0
- /package/dist/app/chunks/{docker-N33HOW54.js → docker-VX55HTDS.js} +0 -0
- /package/dist/app/chunks/{go-6DGG5UTP.js → go-5UCPEC6S.js} +0 -0
- /package/dist/app/chunks/{haskell-KK36PMMM.js → haskell-25PJ3OSG.js} +0 -0
- /package/dist/app/chunks/{ini-VHVQ5TPB.js → ini-BJIVD5MK.js} +0 -0
- /package/dist/app/chunks/{kotlin-44WS3JHE.js → kotlin-MNR6XOEQ.js} +0 -0
- /package/dist/app/chunks/{less-5WZ3KLAK.js → less-KA5JURX6.js} +0 -0
- /package/dist/app/chunks/{light-plus-HGGBC43G.js → light-plus-QXH2UUWZ.js} +0 -0
- /package/dist/app/chunks/{make-X7RXMVW7.js → make-LPD5KOCO.js} +0 -0
- /package/dist/app/chunks/{markdown-46IKUAIB.js → markdown-LMWF6MQR.js} +0 -0
- /package/dist/app/chunks/{mdx-DGLHDAO7.js → mdx-WPMNN5BS.js} +0 -0
- /package/dist/app/chunks/{nix-Q6FYQZLX.js → nix-QGWLUUMZ.js} +0 -0
- /package/dist/app/chunks/{powershell-L4KJJ6DK.js → powershell-7GSBBEFF.js} +0 -0
- /package/dist/app/chunks/{prisma-IKS4LVH2.js → prisma-FPMPQISO.js} +0 -0
- /package/dist/app/chunks/{proto-AYCDOTJO.js → proto-7KDX5Z2U.js} +0 -0
- /package/dist/app/chunks/{python-KXMCSAFQ.js → python-CFG4FTQW.js} +0 -0
- /package/dist/app/chunks/{rust-J3BC3P6V.js → rust-X7A37WU3.js} +0 -0
- /package/dist/app/chunks/{scala-AYIIHBJK.js → scala-OYHJSUG2.js} +0 -0
- /package/dist/app/chunks/{swift-QPHHCQD3.js → swift-PE7VNYW5.js} +0 -0
- /package/dist/app/chunks/{toml-UV7JK7K7.js → toml-ETQRDILP.js} +0 -0
|
@@ -45,7 +45,7 @@
|
|
|
45
45
|
#
|
|
46
46
|
# USAGE bash verify-loaded.sh <package-id> [--raw]
|
|
47
47
|
# <package-id> the manifest id, e.g. "@acme/reports" or "reports".
|
|
48
|
-
#
|
|
48
|
+
# A drop or source package: its instance URI, quoted.
|
|
49
49
|
# --raw dump both untouched JSON responses before the verdict,
|
|
50
50
|
# so you can self-diagnose if the shape ever drifts.
|
|
51
51
|
# EXIT 0 = loaded
|
|
@@ -58,7 +58,7 @@
|
|
|
58
58
|
#
|
|
59
59
|
# This script never accepts, prints or persists a token.
|
|
60
60
|
#
|
|
61
|
-
# Testing reference: https://docs.neuralisapp.com/
|
|
61
|
+
# Testing reference: https://docs.neuralisapp.com/package-system/testing
|
|
62
62
|
|
|
63
63
|
set -euo pipefail
|
|
64
64
|
|
|
@@ -75,17 +75,17 @@ done
|
|
|
75
75
|
|
|
76
76
|
manual_fallback() {
|
|
77
77
|
case "$PKG_ID" in
|
|
78
|
-
|
|
78
|
+
*://*)
|
|
79
79
|
cat >&2 <<'SRCFALLBACK'
|
|
80
80
|
|
|
81
81
|
Cannot verify programmatically. Do NOT record this package as working.
|
|
82
82
|
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
this way instead:
|
|
83
|
+
A SOURCE package never passes through the loader, so there is NO load line
|
|
84
|
+
in the server log (a drop's id has the same URI form and does get one).
|
|
85
|
+
Verify a source package this way instead:
|
|
86
86
|
|
|
87
87
|
1. Read your own <packages> block. A recognised source package appears as
|
|
88
|
-
"
|
|
88
|
+
"<rootUri> [active, source]" with its per-category counts.
|
|
89
89
|
Caveat: files that are switched OFF by default (rule files, identity
|
|
90
90
|
instructions) are dropped from that block, and a package with nothing
|
|
91
91
|
visible left is omitted entirely — so <packages> can under-report a
|
|
@@ -223,7 +223,7 @@ if (!entry && srcEntry) {
|
|
|
223
223
|
process.stdout.write(`SOURCE PACKAGE ${pkgId}\n`);
|
|
224
224
|
line('name', srcEntry.name || '(unnamed)');
|
|
225
225
|
line('source', `${srcEntry.source || '?'} (${srcEntry.connectorKind || '?'})`);
|
|
226
|
-
line('root', `${srcEntry.rootUri || '?'} (the id is
|
|
226
|
+
line('root', `${srcEntry.rootUri || '?'} (the id is this + ?project=…&scope=…)`);
|
|
227
227
|
line('recognized', `by ${srcEntry.reason}`);
|
|
228
228
|
line('enabled', srcEntry.enabled === false ? 'no' : 'yes');
|
|
229
229
|
for (const cat of ['skills', 'instructions', 'rules', 'agents', 'docs']) {
|
|
@@ -242,11 +242,11 @@ if (!entry) {
|
|
|
242
242
|
w(`ABSENT ${pkgId}\n`);
|
|
243
243
|
w(` Not among the ${diag.entries.length} installed and ${overSource.length} source package(s) the platform reports for you.\n\n`);
|
|
244
244
|
w('This is often correct by design, not a failure. Work through these in order:\n');
|
|
245
|
-
w(' 1. The id is wrong.
|
|
246
|
-
w(' prefix included ("@acme/reports" is not "reports"). A
|
|
247
|
-
w('
|
|
248
|
-
w('
|
|
249
|
-
w('
|
|
245
|
+
w(' 1. The id is wrong. A host-installed package is its manifest id EXACTLY,\n');
|
|
246
|
+
w(' scope prefix included ("@acme/reports" is not "reports"). A drop or SOURCE\n');
|
|
247
|
+
w(' package is its root URI, no trailing slash, plus project and scope:\n');
|
|
248
|
+
w(' "data://acme-pack?project=<p>&scope=project" — <packages> shows it short,\n');
|
|
249
|
+
w(' "data://acme-pack". Both lists below print the exact strings.\n');
|
|
250
250
|
w(' 2. It was never installed, or the install did not land where you think.\n');
|
|
251
251
|
w(' 3. It is disabled for this agent or conversation.\n');
|
|
252
252
|
w(' 4. You cannot see it: visibility is scoped per user and per agent, and a\n');
|
|
@@ -260,8 +260,8 @@ if (!entry) {
|
|
|
260
260
|
w(' package root or on the file itself. Once a sync has indexed the files they\n');
|
|
261
261
|
w(' show on the next stream — discovery is not cached behind a timer.\n');
|
|
262
262
|
|
|
263
|
-
if (pkgId.includes('://') && !pkgId.
|
|
264
|
-
w(
|
|
263
|
+
if (pkgId.includes('://') && !pkgId.includes('?')) {
|
|
264
|
+
w('\nNot a full id: an instance id ends in ?project=…&scope=… — the lists below print it.\n');
|
|
265
265
|
}
|
|
266
266
|
const rows = (title, items) => {
|
|
267
267
|
w(`\n${title}\n`);
|
|
@@ -271,7 +271,7 @@ if (!entry) {
|
|
|
271
271
|
};
|
|
272
272
|
rows(`Installed package ids the platform lists for you (${diag.entries.length}):`,
|
|
273
273
|
diag.entries.map((e) => [String(e.packageId), e.status && e.status !== 'loaded' ? `[${e.status}]` : '']));
|
|
274
|
-
rows(`Source package ids (${overSource.length}) —
|
|
274
|
+
rows(`Source package ids (${overSource.length}) — the root URI + ?project=…&scope=…:`,
|
|
275
275
|
overSource.map((p) => {
|
|
276
276
|
const files = ['skills', 'instructions', 'rules', 'agents', 'docs']
|
|
277
277
|
.reduce((n, c) => n + (Array.isArray(p[c]) ? p[c].length : 0), 0);
|
|
@@ -41,9 +41,9 @@ server-side **403** from `search.sh` even though the other scripts work.
|
|
|
41
41
|
- `/write` body = `{"agentId":"…","uri":"data://notes/plan.md","<verb>":…}` — the VERB is a KEY and its presence is the intent. Content verbs COMPOSE in one call, in a fixed order, as ONE write with ONE baseline: `create` (`{content, client_request_id?}` — never overwrites; a taken name lands BESIDE as `name-2.ext` and the response `uri` is where it went, so read it back), `overwrite` (`{content}` — refuses on a missing file and names `create`), `edit` (`[{old_string, new_string?, replace_all?, expected_replacements?}]`, applied in order, one failure discards all of them), `insert` (`{insert_text, insert_line?}` — inserts AFTER that line, `0` = start of file, omitted = append), `lines` (`{line_start, line_end, content}`), `fields` (`{category, status, pinned, tags{add,remove,set}, metadata}`). Structural verbs stand ALONE: `move`/`copy` (a destination uri or, for a file move, a bare new filename; `copy` may cross sources), `mkdir:true` (a real empty directory; not on `brain://`, where folders are implicit), `revert:true` (one-level undo), `delete:true` (a file, or a whole folder recursively). **A 2xx does not mean success** — a refusal is 200 with `ok:false`, so branch on `ok`. A `move` (or a `revert` that relocates or re-creates) onto a uri that already holds something answers `ok:false` + `error:"DESTINATION_EXISTS"` — nothing was overwritten; delete or rename the occupant first. A delete has ONE spelling, the `delete` key: `fields.status:"deleted"` is refused. `review` is never read from the body — a content edit (`overwrite`/`edit`/`insert`/`lines`) lands `pending_review` on every lane (visible and revertible in Changes); `create`/`move`/`copy`/`mkdir` land committed for a human interactive caller and `pending_review` from this ticket lane; `/upload` also journals agent-origin uploads as pending review; interactive human uploads land committed. Use `/write` for JSON text and `/upload` for multipart file bytes. A missing `agentId`/`uri` is a **400** naming the field, a body the server could not parse a **400** `Request body must be a JSON object`. A uri-policy denial is a **403 with no `ok` field**, a disabled source a **409** with `code:"source_disabled"`. A source slug this project does not have answers one of two ways, and BOTH mean "stop guessing this name": with a scheme (`zzz://a.md`) the uri gate answers **403 `uri_policy_denied`** first; without one (`notes.md`) you get **404 `code:"source_not_configured"`** carrying `availableSources` — the sources you CAN address. `/list` gives the 404 in both forms. Switch to a source from that list (or from `<runtime_stack>`); retrying the same name never works. `/read` is different again: it reports PER FILE inside a 200, so a denied or disabled source arrives as `{uri, error, code:"forbidden"}` — never a 409 — and a missing file as `code:"not_found"`. No code means the read failed for some other reason; do not conclude the file is gone. A folder delete or copy that partly succeeded reports what really happened: `affected` (files touched) and `failed` (the NAMES that could not be), so "failed" does not mean "nothing happened". `warning:"moved_with_source_retained"` on a move means the copy landed but the original could not be removed — BOTH copies exist on purpose; do not re-run the move. `indexed:false` means the bytes DID land and are readable, but search indexing was skipped or failed; report it, do not re-write. Sync retries failed indexing only for eligible files; excluded files remain unindexed. Every script here runs curl with `--fail-with-body`, so a non-2xx prints that body too — in the merged output the body comes FIRST and curl's own `curl: (22)` line after it, under a `--- stderr ---` separator, so read the whole output.
|
|
42
42
|
- `/search` body key is `search_mode` (semantic|filter|grep) — the SAME vocabulary as the `fs_search` tool; the legacy `mode` key is rejected with 400. The route forwards `search_mode`, `query`, `folder_uri`, `glob`, `category`, `tags`, `status`, `created_after`/`created_before`, `limit`, and the grep-only `path_glob`, `context` and `case_sensitive`. In `grep` mode the search is uri-policy `read`-gated (only paths the caller holds `read` policy on are grepped), the match is a FIXED STRING, and the answer carries `truncated` + `total_seen` — a cut set says so, so never read a full-looking list as proof that the rest is absent.
|
|
43
43
|
- `/raw` is a GET — pass the file URI via `URI=…` (no `BODY_JSON`). It always returns the full bytes, so `raw.sh` is unaffected by the response headers; what those headers say is a BROWSER instruction. Safe types (images except SVG, video, audio, PDF, text, JSON) are marked for inline display; SVG, HTML and XML are marked `attachment` so a person clicking the link downloads them instead of executing them on the app origin. Do not describe a `.svg` or `.html` you wrote as viewable in the browser — offer it as a download, or convert it to a raster image if a human needs to look at it.
|
|
44
|
-
- `/read` is at parity with the `fs_read` tool: the body takes `files[]` — each entry a URI string or `{"uri":"…","line_start":N,"line_end":M}` with that file's own window — plus `read_version`, batch-level `line_start`/`line_end` and `include_ids`. An entry that is neither shape is a **400**. If you only need the pre-edit content, a plain `/read` response already carries it: each file's `version.baseline.content`, with `available_versions` listing `baseline` exactly when one exists.
|
|
44
|
+
- `/read` is at parity with the `fs_read` tool: the body takes `files[]` — each entry a URI string or `{"uri":"…","line_start":N,"line_end":M}` with that file's own window — plus `read_version`, batch-level `line_start`/`line_end` and `include_ids`. An entry that is neither shape is a **400**. Text is a bounded preview; native media may accompany it, while unsupported/invalid binary data has a URI and marker. For a byte-exact binary copy use the authorized `/raw` byte lane and multipart `/upload`, never re-encode a text preview. If you only need the pre-edit content, a plain `/read` response already carries it: each file's `version.baseline.content`, with `available_versions` listing `baseline` exactly when one exists.
|
|
45
45
|
- `/upload` is **multipart/form-data**, NOT JSON — pass `FILE_PATH=…` `AGENT_ID=…` (required) plus optional `URI=…` / `TAGS=a,b`; a JSON body is rejected with 400. The 200 carries `indexed`: `false` means the bytes DID land but search indexing was skipped by the source selection or failed (provider outage/quota) — report it, do not re-upload. An eligible sync retries failed indexing; excluded uploads remain unindexed until the selection changes. The 200 also carries `mimeType`, and it may differ from what the upload declared: the stored type is resolved from the filename extension first, with the declared value kept only for an extension the platform does not know, and a common-image claim the leading bytes contradict falls back to `application/octet-stream`. Give the file a truthful extension and the stored type follows.
|
|
46
|
-
- `GET /pending` lists durable pending records inside the Changes workspace. `STATUS`, `SOURCE`, `OP`, and `LIMIT` filter the list; owner/scope and URI READ gates apply per record. Review begins with `POST /pending` `{action:"preview",id}`: it returns the current connector content separately from the recorded snapshot and saved baseline, typed missing/unavailable/binary/too-large states, `indexState`, `requiresAcknowledgement`, and `expectedFingerprint`. The preview is bounded by `pendingPreviewMaxBytes`; it never fabricates missing content or vectors. Resolve through `POST /approve` `{id,expectedFingerprint}` or `POST /pending` `{action:"revert"|"dismiss",id,expectedFingerprint}`. If the preview requires acknowledgement, inspect those states and include `acknowledgeCurrentState:true`; never auto-acknowledge an unseen preview. The server rechecks freshness and WRITE authority at apply: a changed fingerprint requires a new preview, and acknowledgement grants no missing permission. Bare legacy `/write revert:true` refuses unsafe pending recovery; ordinary non-pending one-level undo remains available. Approval/dismissal preserve the stored snapshot/index state (including recovery-only or absent index), rather than certifying current connector bytes as indexed. Terminal retries remain owner-gated and idempotent; `uri` is omitted without current READ and WRITE access. Revert restores the saved baseline and refuses missing baselines or occupied move destinations. Discard/Repair remain orphan-only, owner-gated operations; no transient outage is proof of orphanhood.
|
|
46
|
+
- `GET /pending` lists durable pending records inside the Changes workspace. `STATUS`, `SOURCE`, `OP`, and `LIMIT` filter the list; owner/scope and URI READ gates apply per record. Review begins with `POST /pending` `{action:"preview",id}`: it returns the current connector content separately from the recorded snapshot and saved baseline, typed missing/unavailable/binary/too-large states, `indexState`, `requiresAcknowledgement`, and `expectedFingerprint`. The preview is bounded by `pendingPreviewMaxBytes`; it never fabricates missing content or vectors. Resolve through `POST /approve` `{id,expectedFingerprint}` or `POST /pending` `{action:"revert"|"dismiss",id,expectedFingerprint}`. If the preview requires acknowledgement, inspect those states and include `acknowledgeCurrentState:true`; never auto-acknowledge an unseen preview. The server rechecks freshness and WRITE authority at apply: a changed fingerprint requires a new preview, and acknowledgement grants no missing permission. Bare legacy `/write revert:true` refuses unsafe pending recovery; ordinary non-pending one-level undo remains available. Approval/dismissal preserve the stored snapshot/index state (including recovery-only or absent index), rather than certifying current connector bytes as indexed. For a file the preview shows `missing` with a saved `journal-latest-write` baseline, an acknowledged approve/dismiss closes the review and the file stays gone; revert is the restore. Terminal retries remain owner-gated and idempotent; `uri` is omitted without current READ and WRITE access. Revert restores the saved baseline and refuses missing baselines or occupied move destinations. Discard/Repair remain orphan-only, owner-gated operations; no transient outage is proof of orphanhood.
|
|
47
47
|
|
|
48
48
|
|
|
49
49
|
The body shape is route-specific — refer to brain-core's
|
|
@@ -70,7 +70,7 @@ server-side source rows rather than the index-count survey.)
|
|
|
70
70
|
| Forget sync state (next tick re-walks; deletes nothing) | POST | `/sources/reset` | `drive.sync` | `reset.sh` |
|
|
71
71
|
| Rescan changes (full re-walk now; unchanged files keep their vectors; 202 + job) | POST | `/sources/reindex` | `drive.sync` | `reindex.sh` |
|
|
72
72
|
| Clean a file / folder / source index (estimate first) | POST | `/sources/purge` | `drive.mount` + `drive.sync` | `purge-index.sh` |
|
|
73
|
-
|
|
|
73
|
+
| Catch up embedding debt; FORCE=1 re-embeds (estimate first) | POST | `/sources/reindex` + `embeddingOnly` or `force` | `drive.sync` | `reembed.sh` |
|
|
74
74
|
|
|
75
75
|
> **`update` takes no `:slug`.** PATCH targets the bare `/sources` path; the
|
|
76
76
|
> source to patch is the body `source` field (the handler ignores the path).
|
|
@@ -151,6 +151,8 @@ server-side sync queue. Poll `sync-status.sh` (`SOURCE=<slug>`) until
|
|
|
151
151
|
with `SOURCE` stops one source's job mid-run; without it, every job on
|
|
152
152
|
sources you can see.
|
|
153
153
|
|
|
154
|
+
An embedding job can end `paused`: report `result.embedding.pausedReason` and partial counts. Resume is a new explicitly authorized `reembed.sh` request, using durable point debt; no saved job ID or automatic paid restart.
|
|
155
|
+
|
|
154
156
|
`sync.sh` refuses in two ways worth telling apart. **404** — the slug does not
|
|
155
157
|
resolve for you (it does not exist, or it is outside your scope; the two answer
|
|
156
158
|
alike on purpose). **400** — the source exists but carries no `sync` block, so
|
|
@@ -167,11 +169,14 @@ Per-action:
|
|
|
167
169
|
id or a UI label. An unregistered value is `404 Unknown kind "<x>"` for every caller.
|
|
168
170
|
- `PATH_ARG` — for `browse.sh` (we don't reuse `PATH`).
|
|
169
171
|
- `PURGE` — optional for `delete.sh`; `PURGE=1` (or `true`) enqueues an async
|
|
170
|
-
vector purge. Delete then returns **202 + `{purgeJob, …}`** (vs 200 normally).
|
|
172
|
+
vector purge. Delete then returns **202 + `{purgeJob, …}`** (vs 200 normally). Any delete
|
|
173
|
+
resolves the source's open notifications (its unread failure warnings) for you and its creator.
|
|
171
174
|
- `SOURCE` — source name for `sync.sh`, `reindex.sh`, `reset.sh`, `reembed.sh` (required) and
|
|
172
175
|
`cancel.sh`, `sync-status.sh` (optional).
|
|
173
176
|
- `FOLDER` / `URI` — `reembed.sh` scope (one of them, inside `SOURCE`; neither = the whole
|
|
174
|
-
source). `CONFIRM=1` starts
|
|
177
|
+
source). `CONFIRM=1` starts debt catchup; without it the script only ESTIMATES. `FORCE=1` selects a forced connector re-embed instead.
|
|
178
|
+
`SCOPE=platform` (catch-up only, whole source, needs `platform.vector.maintain`) catches up EVERY
|
|
179
|
+
writer's points of the source, not only yours — the way back after an operator dense clear.
|
|
175
180
|
- `ENABLED` — `true | false | auto` for `set-enabled.sh`.
|
|
176
181
|
- `BODY_JSON` — POST/PATCH bodies (`create.sh`, `update.sh`). Both MUST include
|
|
177
182
|
`source` + `permissions`; create additionally requires `connection.kind`. May also
|
|
@@ -182,7 +187,7 @@ Per-action:
|
|
|
182
187
|
means only matching files sync, and an exclude still wins. A `sync.media` object
|
|
183
188
|
(`{"images":true,"pdf":true,"video":false,"audio":false}`, absent key = that default)
|
|
184
189
|
picks which binary kinds a MULTIMODAL active model embeds; a text-only model embeds
|
|
185
|
-
none, and `lastSyncResult.mediaSkipped` counts what was left out. The `invalid` reason is a local PNG structural check before provider work; invalid input preserves existing indexed and recovery payloads. **`include` bounds the
|
|
190
|
+
none, and `lastSyncResult.mediaSkipped` counts what was left out; `lastSyncResult.binarySkipped` is the last count of binary files not indexed as text (a binary extension, or a NUL in the first `brainSyncBinarySniffChars` characters); `lastSyncResult.embeddingDegraded` lists the reasons (`quota`, `credentials`, `rate_limit`, …) when the embedder was unavailable during the pass — the files are indexed and text-searchable, their semantic embedding is owed and caught up by `reembed.sh` once the embedder answers. The `invalid` reason is a local PNG structural check before provider work; invalid input preserves existing indexed and recovery payloads. **`include` bounds the
|
|
186
191
|
INDEX, never the read.** What an agent can `fs_read` is set by the source ROOT and by
|
|
187
192
|
`permissions.paths[]` — so narrowing a wide source with `include` alone leaves every
|
|
188
193
|
file under that root readable. Re-root it, or add a path deny, or both.
|
|
@@ -228,22 +233,18 @@ SOURCE=scratch-demo FOLDER=scratch-demo://docs OBSOLETE_ONLY=false bash ${SKILL_
|
|
|
228
233
|
|
|
229
234
|
## Re-embed (a file, a folder, a source)
|
|
230
235
|
|
|
231
|
-
"Rescan changes" reuses unchanged indexed files, but rebuilds re-included recovery-only content. `reembed.sh`
|
|
232
|
-
scope is read again and embedded with the ACTIVE model, and nothing else about the source
|
|
233
|
-
changes. Run it WITHOUT `CONFIRM` first — it answers `{documents, estimate:{tokens,
|
|
234
|
-
relStdErr, usd, seconds}}` and changes nothing (`usd` is `null` for an unpriced model; the
|
|
235
|
-
count covers only files you may read). Show that to the user, then run it again with
|
|
236
|
-
`CONFIRM=1` (202 + job; poll `sync-status.sh`). A single file you may not read answers
|
|
236
|
+
"Rescan changes" reuses unchanged indexed files, but rebuilds re-included recovery-only content. `reembed.sh` catches up missing/stale indexed embeddings, including brain-only and unchanged legacy records. Its read-only estimate returns `estimate_kind:scope_upper_bound`: authorized indexed scope counts are an upper bound, not a provider quote; no provider call or job starts. Show the estimate before `CONFIRM=1` (202 + embedding job; poll `sync-status.sh`). Disabled embedding refuses: each `list.sh` row's `embedding_enabled` is the live platform switch, and while it is `false` `reembed.sh` answers 409 `embedding_disabled`; without an active dense generation the estimate refuses and a submitted job pauses as `metadata_only`, never activating a model. `FORCE=1` instead rereads and re-embeds the connector scope; its estimate includes `{documents,estimate:{tokens,relStdErr,usd,seconds}}` (`usd:null` for an unpriced model). A single file you may not read answers
|
|
237
237
|
`404`, exactly like a missing one. Switching the platform to a DIFFERENT model is not this:
|
|
238
238
|
that is the owner's rebuild in the admin Vector section.
|
|
239
239
|
|
|
240
240
|
## Package sources (`recognizesPackages`)
|
|
241
241
|
|
|
242
|
-
`create.sh` / `update.sh` accept `recognizesPackages` (boolean) in `BODY_JSON`.
|
|
243
|
-
|
|
244
|
-
instruction / rule / agent / docs
|
|
245
|
-
|
|
246
|
-
|
|
242
|
+
`create.sh` / `update.sh` accept `recognizesPackages` (boolean) in `BODY_JSON`. It does
|
|
243
|
+
NOT switch markdown discovery on — a synced source's markdown becomes source-package
|
|
244
|
+
contributions (skill / instruction / rule / agent / docs) either way; the flag lets the host
|
|
245
|
+
load the source as a runtime package source (create-package
|
|
246
|
+
`references/connectors-and-uri-policies.md` §Declare source instances owns the details). Two
|
|
247
|
+
server-side gates apply regardless of what you send (`src/routes/sources.ts`):
|
|
247
248
|
|
|
248
249
|
- **Owner/admin-STRENGTH only, measured by PRIORITY — not by role name.** The
|
|
249
250
|
gate passes a caller whose `priority` is at or above the built-in `admin`
|
|
@@ -2,19 +2,25 @@
|
|
|
2
2
|
set -euo pipefail
|
|
3
3
|
API_BASE="${NEURALIS_API:?NEURALIS_API not set; activate skill first}"
|
|
4
4
|
TOKEN="${NEURALIS_SESSION_TOKEN:?missing session ticket; activate the skill via execute action=\"skill\"}"
|
|
5
|
-
# Requires drive.sync (403 otherwise).
|
|
5
|
+
# Requires drive.sync (403 otherwise). FORCE=1 re-embeds with the ACTIVE model; otherwise catches up durable embedding debt — a
|
|
6
6
|
# file (URI), a folder's indexed files (FOLDER) or, with neither, the whole
|
|
7
7
|
# source — even when nothing changed. Default = the ESTIMATE only (changes
|
|
8
8
|
# nothing); CONFIRM=1 starts it (202 + job). Only files you may read count.
|
|
9
|
+
# SCOPE=platform (catch-up only, whole source, needs platform.vector.maintain)
|
|
10
|
+
# catches up EVERY writer's points of the source — the way back after a dense clear.
|
|
9
11
|
SOURCE="${SOURCE:?SOURCE is required}"
|
|
10
12
|
FOLDER="${FOLDER:-}"
|
|
11
13
|
URI="${URI:-}"
|
|
12
14
|
CONFIRM="${CONFIRM:-}"
|
|
13
|
-
|
|
15
|
+
FORCE="${FORCE:-}"
|
|
16
|
+
SCOPE="${SCOPE:-}"
|
|
17
|
+
BODY=$(jq -n --arg source "${SOURCE}" --arg folder "${FOLDER}" --arg uri "${URI}" --arg confirm "${CONFIRM}" --arg force "${FORCE}" --arg scope "${SCOPE}" \
|
|
14
18
|
'{ source: $source }
|
|
15
19
|
+ (if $folder == "" then {} else { folder: $folder } end)
|
|
16
20
|
+ (if $uri == "" then {} else { uri: $uri } end)
|
|
17
|
-
+ (if $
|
|
21
|
+
+ (if $force == "1" then {force: ($confirm == "1")} else {embeddingOnly: true} end)
|
|
22
|
+
+ (if $scope == "" then {} else {scope: $scope} end)
|
|
23
|
+
+ (if $confirm == "1" then {} else {estimate: true} end)')
|
|
18
24
|
curl --fail-with-body -sS -X POST \
|
|
19
25
|
-H "Authorization: Bearer ${TOKEN}" -H "X-Neuralis-Skill: manage-sources" \
|
|
20
26
|
-H "Content-Type: application/json" -d "${BODY}" \
|
package/skills/sync/SKILL.md
CHANGED
|
@@ -13,20 +13,20 @@ Trigger a delta sync for the brain-core filesystem.
|
|
|
13
13
|
|
|
14
14
|
1. Use `fs_list` with no `uri` first to identify configured sources, scopes, current sync status, and recent errors.
|
|
15
15
|
2. Call the brain-core source sync route for the intended source. The route answers 202 + a queue job snapshot — the sync runs in the background. Explicit sync requires `drive.sync`; source create/update/delete uses `drive.mount`; file writes use `drive.write`.
|
|
16
|
-
3. Poll `GET /sources/sync-status?source=<slug>` until the job finishes, then report the job `result` counts: `filesAdded`, `filesUpdated`, `filesRemoved`, `filesSkipped`, `filesMoved`, `chunksRemoved`, `chunksEmbedded` and `chunksSkipped`
|
|
16
|
+
3. Poll `GET /sources/sync-status?source=<slug>` until the job finishes, then report the job `result` counts: `filesAdded`, `filesUpdated`, `filesRemoved`, `filesSkipped`, `filesMoved`, `chunksRemoved`, `chunksEmbedded` and `chunksSkipped` plus `embeddingDegraded` (safe, deduplicated embedding stop reasons). Payload indexing can succeed with missing/stale embeddings; report that debt separately. Read the two flags before interpreting completion. `cancelled: true` is not a failure, but the run stopped early: the counts are partial and a re-run converges. `truncated: true` means the walk stopped at `filesScanCap`, so files past the cap were never examined and no deletion or move was inferred — call that a partial pass, never a completed sync.
|
|
17
17
|
4. If any errors occur, list them clearly with the affected source, scope, and file path.
|
|
18
|
-
5.
|
|
18
|
+
5. Distinguish live connector data, indexed payload and embedding freshness. Provider outage or disabled embedding preserves metadata/full-text indexing; semantic results may be old, or the response may fall back to filter search. Ordinary sync completion does not settle all embedding debt. Use `manage-sources` explicit debt catchup; terminal `paused` carries `result.embedding.pausedReason`, and Resume creates a new authorized job from durable debt.
|
|
19
19
|
|
|
20
20
|
## What a sync will and will not index
|
|
21
21
|
|
|
22
|
-
A file is
|
|
22
|
+
A file is indexed only when BOTH inputs allow it, and they are different kinds
|
|
23
23
|
of thing — say which one you mean when you report a missing file:
|
|
24
24
|
|
|
25
25
|
- the source's **exclude/include patterns** — a PREFERENCE the operator owns and
|
|
26
26
|
can edit at any time (`manage-sources`). A file missing for this reason is a
|
|
27
27
|
configuration answer, not a security one.
|
|
28
28
|
- the immutable **uri-policy read floor** — the security half. *What cannot be
|
|
29
|
-
READ cannot be
|
|
29
|
+
READ cannot be INDEXED*: a path a `floor:true` row denies `read` on is never
|
|
30
30
|
newly embedded, on every source including ones attached long before the floor
|
|
31
31
|
shipped, and no `include` whitelist resurrects it. There is no exclude entry to
|
|
32
32
|
add and none to remove.
|
package/tools/fs_search.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"title": "Search Filesystem Nodes",
|
|
4
4
|
"type": "object",
|
|
5
5
|
"additionalProperties": false,
|
|
6
|
-
"description": "Find files by meaning,
|
|
6
|
+
"description": "Find scoped files by meaning, indexed metadata/keywords or fixed-string live grep with line anchors (folder_uri required). Pair semantic and grep to cover index lag. Search before creating or claiming absence; every mode reports truncation.",
|
|
7
7
|
"properties": {
|
|
8
8
|
"search_mode": {
|
|
9
9
|
"type": "string",
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
"filter",
|
|
13
13
|
"grep"
|
|
14
14
|
],
|
|
15
|
-
"description": "
|
|
15
|
+
"description": "semantic (default): embeddings + indexed text; off/unavailable embedding → filter. Check effective_mode, embedding_degraded and row embedding_status (current/stale/missing/unknown). filter: metadata/keywords, no embed cost. grep: FIXED-STRING, never regex, needs folder_uri. glob alone → filter."
|
|
16
16
|
},
|
|
17
17
|
"query": {
|
|
18
18
|
"type": "string",
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
import { useEffect, useState, type RefObject } from 'react';
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Reports whether a container is "wide" (≥ threshold), with hysteresis so a diff's
|
|
5
|
-
* auto unified↔split flip does not strobe while the user drags the widget across the
|
|
6
|
-
* boundary. Becomes wide at `wideThresholdPx`, flips back to narrow only below
|
|
7
|
-
* `wideThresholdPx − hysteresisPx`.
|
|
8
|
-
*
|
|
9
|
-
* It reads `clientWidth` ONLY — never `scrollWidth` — so the observer callback cannot
|
|
10
|
-
* force a layout flush of its own. (Its sibling `useElementFits` did compare the two
|
|
11
|
-
* and was deleted in 2026-08: it had no consumer anywhere in `packages/*`.)
|
|
12
|
-
*/
|
|
13
|
-
export function useContainerWidth<T extends HTMLElement>(
|
|
14
|
-
ref: RefObject<T | null>,
|
|
15
|
-
options?: { wideThresholdPx?: number; hysteresisPx?: number },
|
|
16
|
-
): boolean {
|
|
17
|
-
const wideThresholdPx = options?.wideThresholdPx ?? 900;
|
|
18
|
-
const hysteresisPx = options?.hysteresisPx ?? 60;
|
|
19
|
-
const [isWide, setIsWide] = useState(false);
|
|
20
|
-
|
|
21
|
-
useEffect(() => {
|
|
22
|
-
const element = ref.current;
|
|
23
|
-
if (!element) {
|
|
24
|
-
setIsWide(false);
|
|
25
|
-
return;
|
|
26
|
-
}
|
|
27
|
-
const update = () => {
|
|
28
|
-
const width = element.clientWidth;
|
|
29
|
-
setIsWide((prev) => (prev ? width >= wideThresholdPx - hysteresisPx : width >= wideThresholdPx));
|
|
30
|
-
};
|
|
31
|
-
update();
|
|
32
|
-
if (typeof ResizeObserver === 'undefined') return undefined;
|
|
33
|
-
const observer = new ResizeObserver(() => update());
|
|
34
|
-
observer.observe(element);
|
|
35
|
-
return () => observer.disconnect();
|
|
36
|
-
}, [ref, wideThresholdPx, hysteresisPx]);
|
|
37
|
-
|
|
38
|
-
return isWide;
|
|
39
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{a as e}from"./chunk-TY33BMKR.js";import"./chunk-DCANE7XH.js";export{e as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{a}from"./chunk-QLBZ4JR2.js";import"./chunk-DCANE7XH.js";export{a as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{a}from"./chunk-G4RZ3UNX.js";import"./chunk-XIFGTNRM.js";import"./chunk-QLBZ4JR2.js";import"./chunk-DCANE7XH.js";export{a as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{a}from"./chunk-DKD2L57N.js";import"./chunk-DCANE7XH.js";export{a as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{a}from"./chunk-QXXJ73P5.js";import"./chunk-6TC3DVWV.js";import"./chunk-TRRUHDPN.js";import"./chunk-OLEIKJ3X.js";import"./chunk-KYH5EHHY.js";import"./chunk-DCANE7XH.js";export{a as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{a}from"./chunk-RH3QY5LF.js";import"./chunk-DKD2L57N.js";import"./chunk-OLEIKJ3X.js";import"./chunk-DCANE7XH.js";export{a as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{a}from"./chunk-BGRVFATT.js";import"./chunk-DCANE7XH.js";export{a as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{a}from"./chunk-OLEIKJ3X.js";import"./chunk-DCANE7XH.js";export{a as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{a}from"./chunk-DZ5C5FKI.js";import"./chunk-DCANE7XH.js";export{a as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{a}from"./chunk-KYH5EHHY.js";import"./chunk-DCANE7XH.js";export{a as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{a}from"./chunk-5H7ZCOD3.js";import"./chunk-QLBZ4JR2.js";import"./chunk-DCANE7XH.js";export{a as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{a}from"./chunk-737Y24HS.js";import"./chunk-DCANE7XH.js";export{a as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{a}from"./chunk-4QNMHAIR.js";import"./chunk-DCANE7XH.js";export{a as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{a}from"./chunk-TRRUHDPN.js";import"./chunk-DCANE7XH.js";export{a as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{a}from"./chunk-6TC3DVWV.js";import"./chunk-DCANE7XH.js";export{a as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{a}from"./chunk-3QLE7Y4L.js";import"./chunk-BGRVFATT.js";import"./chunk-DCANE7XH.js";export{a as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{a}from"./chunk-SFUNBBEA.js";import"./chunk-DCANE7XH.js";export{a as default};
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* One-time `_pending` boot self-heal (prudent-indexing-otter, Step C).
|
|
3
|
-
*
|
|
4
|
-
* The durable Pending-Changes journal + baseline blobs live under
|
|
5
|
-
* `data://brain-core/_pending/**` — sync-EXCLUDED (the runtime floor) precisely
|
|
6
|
-
* because the baseline blobs may hold sensitive file content that must NEVER be
|
|
7
|
-
* vectorized. Before this increment the fs write path vectorized EVERY create,
|
|
8
|
-
* so projects predating the floor can carry stale `_pending` nodes in Qdrant.
|
|
9
|
-
*
|
|
10
|
-
* This idempotent boot pass purges them per project — the proven `runPurge`
|
|
11
|
-
* bounded `deleteByFilter` shape (no full-project scroll, no client matching):
|
|
12
|
-
* a single server-side delete scoped to `projectId` + `folder_ancestors` =
|
|
13
|
-
* `data://brain-core/_pending` (chunks carry `folder_ancestors` too, so they are
|
|
14
|
-
* covered by the same filter). `_pending`-ONLY; general excluded-node cleanup
|
|
15
|
-
* rides the existing sync config-change reconcile.
|
|
16
|
-
*/
|
|
17
|
-
import type { SourceConfigPort } from '../connectors/types.js';
|
|
18
|
-
import type { VectorIndexPort } from '../vector/types.js';
|
|
19
|
-
import type { FilesystemNode } from '../domain/types.js';
|
|
20
|
-
export type PurgePendingResult = {
|
|
21
|
-
projects: number;
|
|
22
|
-
removed: number;
|
|
23
|
-
};
|
|
24
|
-
export declare function purgeStalePendingNodes(deps: {
|
|
25
|
-
sourceConfigs: SourceConfigPort;
|
|
26
|
-
getVector: (projectId: string) => Promise<VectorIndexPort<FilesystemNode>>;
|
|
27
|
-
logger?: {
|
|
28
|
-
info?: (msg: string, meta?: Record<string, unknown>) => void;
|
|
29
|
-
warn?: (msg: string, meta?: Record<string, unknown>) => void;
|
|
30
|
-
};
|
|
31
|
-
}): Promise<PurgePendingResult>;
|
|
32
|
-
//# sourceMappingURL=purgePendingNodes.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"purgePendingNodes.d.ts","sourceRoot":"","sources":["../../../src/services/purgePendingNodes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAKzD,MAAM,MAAM,kBAAkB,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAEvE,wBAAsB,sBAAsB,CAAC,IAAI,EAAE;IACjD,aAAa,EAAE,gBAAgB,CAAC;IAChC,SAAS,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,eAAe,CAAC,cAAc,CAAC,CAAC,CAAC;IAC3E,MAAM,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;QAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAA;KAAE,CAAC;CACzI,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAyC9B"}
|
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* One-time `_pending` boot self-heal (prudent-indexing-otter, Step C).
|
|
3
|
-
*
|
|
4
|
-
* The durable Pending-Changes journal + baseline blobs live under
|
|
5
|
-
* `data://brain-core/_pending/**` — sync-EXCLUDED (the runtime floor) precisely
|
|
6
|
-
* because the baseline blobs may hold sensitive file content that must NEVER be
|
|
7
|
-
* vectorized. Before this increment the fs write path vectorized EVERY create,
|
|
8
|
-
* so projects predating the floor can carry stale `_pending` nodes in Qdrant.
|
|
9
|
-
*
|
|
10
|
-
* This idempotent boot pass purges them per project — the proven `runPurge`
|
|
11
|
-
* bounded `deleteByFilter` shape (no full-project scroll, no client matching):
|
|
12
|
-
* a single server-side delete scoped to `projectId` + `folder_ancestors` =
|
|
13
|
-
* `data://brain-core/_pending` (chunks carry `folder_ancestors` too, so they are
|
|
14
|
-
* covered by the same filter). `_pending`-ONLY; general excluded-node cleanup
|
|
15
|
-
* rides the existing sync config-change reconcile.
|
|
16
|
-
*/
|
|
17
|
-
/** The folder-ancestor key the `_pending` journal + blob nodes carry. */
|
|
18
|
-
const PENDING_FOLDER_ANCESTOR = 'data://brain-core/_pending';
|
|
19
|
-
export async function purgeStalePendingNodes(deps) {
|
|
20
|
-
let scoped;
|
|
21
|
-
try {
|
|
22
|
-
scoped = await deps.sourceConfigs.listAll();
|
|
23
|
-
}
|
|
24
|
-
catch (err) {
|
|
25
|
-
deps.logger?.warn?.('pending purge: listAll failed', {
|
|
26
|
-
error: err instanceof Error ? err.message : String(err),
|
|
27
|
-
});
|
|
28
|
-
return { projects: 0, removed: 0 };
|
|
29
|
-
}
|
|
30
|
-
const projectIds = new Set();
|
|
31
|
-
for (const { scope } of scoped) {
|
|
32
|
-
if (scope.projectId)
|
|
33
|
-
projectIds.add(scope.projectId);
|
|
34
|
-
}
|
|
35
|
-
let removed = 0;
|
|
36
|
-
for (const projectId of projectIds) {
|
|
37
|
-
try {
|
|
38
|
-
const vector = await deps.getVector(projectId);
|
|
39
|
-
removed += await vector.deleteByFilter({
|
|
40
|
-
must: [
|
|
41
|
-
{ field: 'projectId', equals: projectId },
|
|
42
|
-
{ field: 'folder_ancestors', equals: PENDING_FOLDER_ANCESTOR },
|
|
43
|
-
],
|
|
44
|
-
});
|
|
45
|
-
}
|
|
46
|
-
catch (err) {
|
|
47
|
-
deps.logger?.warn?.('pending purge failed for project', {
|
|
48
|
-
projectId,
|
|
49
|
-
error: err instanceof Error ? err.message : String(err),
|
|
50
|
-
});
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
if (removed > 0) {
|
|
54
|
-
deps.logger?.info?.('stale _pending nodes purged', {
|
|
55
|
-
projects: projectIds.size,
|
|
56
|
-
removed,
|
|
57
|
-
});
|
|
58
|
-
}
|
|
59
|
-
return { projects: projectIds.size, removed };
|
|
60
|
-
}
|
|
61
|
-
//# sourceMappingURL=purgePendingNodes.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"purgePendingNodes.js","sourceRoot":"","sources":["../../../src/services/purgePendingNodes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAMH,yEAAyE;AACzE,MAAM,uBAAuB,GAAG,4BAA4B,CAAC;AAI7D,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,IAI5C;IACC,IAAI,MAAM,CAAC;IACX,IAAI,CAAC;QACH,MAAM,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC;IAC9C,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,+BAA+B,EAAE;YACnD,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;SACxD,CAAC,CAAC;QACH,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;IACrC,CAAC;IAED,MAAM,UAAU,GAAG,IAAI,GAAG,EAAU,CAAC;IACrC,KAAK,MAAM,EAAE,KAAK,EAAE,IAAI,MAAM,EAAE,CAAC;QAC/B,IAAI,KAAK,CAAC,SAAS;YAAE,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IACvD,CAAC;IAED,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;YAC/C,OAAO,IAAI,MAAM,MAAM,CAAC,cAAc,CAAC;gBACrC,IAAI,EAAE;oBACJ,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE;oBACzC,EAAE,KAAK,EAAE,kBAAkB,EAAE,MAAM,EAAE,uBAAuB,EAAE;iBAC/D;aACF,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,kCAAkC,EAAE;gBACtD,SAAS;gBACT,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;aACxD,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;QAChB,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,6BAA6B,EAAE;YACjD,QAAQ,EAAE,UAAU,CAAC,IAAI;YACzB,OAAO;SACR,CAAC,CAAC;IACL,CAAC;IACD,OAAO,EAAE,QAAQ,EAAE,UAAU,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC;AAChD,CAAC"}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|