@nxuss/lemma 1.39.0 → 1.41.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.
- package/README.md +45 -14
- package/bin/brain-ingest.js +41 -0
- package/bin/init.js +92 -92
- package/bin/postinstall.js +58 -4
- package/dashboard/dist/assets/index-Ca05LJvs.js +453 -0
- package/dashboard/dist/assets/{index-DNTQXLER.css → index-DdEVyDRj.css} +1 -1
- package/dashboard/dist/index.html +2 -2
- package/dist/cjs/cli/hostHooks.d.ts +14 -1
- package/dist/cjs/cli/hostHooks.d.ts.map +1 -1
- package/dist/cjs/cli/hostHooks.js +53 -6
- package/dist/cjs/cli/hostHooks.js.map +1 -1
- package/dist/cjs/cli/lemma-proxy.d.ts.map +1 -1
- package/dist/cjs/cli/lemma-proxy.js +29 -10
- package/dist/cjs/cli/lemma-proxy.js.map +1 -1
- package/dist/cjs/contracts/evidence.d.ts +8 -1
- package/dist/cjs/contracts/evidence.d.ts.map +1 -1
- package/dist/cjs/mcp/cognitiveMap.d.ts.map +1 -1
- package/dist/cjs/mcp/cognitiveMap.js +6 -2
- package/dist/cjs/mcp/cognitiveMap.js.map +1 -1
- package/dist/cjs/mcp/index.js +21 -0
- package/dist/cjs/mcp/index.js.map +1 -1
- package/dist/cjs/mcp/prompts.d.ts +1 -1
- package/dist/cjs/mcp/prompts.d.ts.map +1 -1
- package/dist/cjs/mcp/prompts.js +6 -16
- package/dist/cjs/mcp/prompts.js.map +1 -1
- package/dist/cjs/mcp/tool-profiles.d.ts.map +1 -1
- package/dist/cjs/mcp/tool-profiles.js +8 -4
- package/dist/cjs/mcp/tool-profiles.js.map +1 -1
- package/dist/cjs/mcp/tools/context-tools.d.ts.map +1 -1
- package/dist/cjs/mcp/tools/context-tools.js +21 -17
- package/dist/cjs/mcp/tools/context-tools.js.map +1 -1
- package/dist/cjs/mcp/tools/devtools.d.ts.map +1 -1
- package/dist/cjs/mcp/tools/devtools.js +11 -1
- package/dist/cjs/mcp/tools/devtools.js.map +1 -1
- package/dist/cjs/mcp/tools/memory.d.ts.map +1 -1
- package/dist/cjs/mcp/tools/memory.js +82 -18
- package/dist/cjs/mcp/tools/memory.js.map +1 -1
- package/dist/cjs/mcp/tools/refactor.d.ts.map +1 -1
- package/dist/cjs/mcp/tools/refactor.js +129 -32
- package/dist/cjs/mcp/tools/refactor.js.map +1 -1
- package/dist/cjs/mcp/tools/workspace.d.ts.map +1 -1
- package/dist/cjs/mcp/tools/workspace.js +192 -49
- package/dist/cjs/mcp/tools/workspace.js.map +1 -1
- package/dist/cjs/mcp/tools.d.ts.map +1 -1
- package/dist/cjs/mcp/tools.js +95 -34
- package/dist/cjs/mcp/tools.js.map +1 -1
- package/dist/cjs/mcp/utils.d.ts.map +1 -1
- package/dist/cjs/mcp/utils.js +6 -1
- package/dist/cjs/mcp/utils.js.map +1 -1
- package/dist/cjs/mcp/workspaceShared.d.ts.map +1 -1
- package/dist/cjs/mcp/workspaceShared.js +14 -9
- package/dist/cjs/mcp/workspaceShared.js.map +1 -1
- package/dist/cjs/proxy/KeyManager.d.ts +10 -0
- package/dist/cjs/proxy/KeyManager.d.ts.map +1 -1
- package/dist/cjs/proxy/KeyManager.js +45 -8
- package/dist/cjs/proxy/KeyManager.js.map +1 -1
- package/dist/cjs/proxy/ProjectStore.d.ts.map +1 -1
- package/dist/cjs/proxy/ProjectStore.js +9 -6
- package/dist/cjs/proxy/ProjectStore.js.map +1 -1
- package/dist/cjs/security/SemanticScrubber.d.ts.map +1 -1
- package/dist/cjs/security/SemanticScrubber.js +19 -1
- package/dist/cjs/security/SemanticScrubber.js.map +1 -1
- package/dist/cjs/subconscious/HostRecall.d.ts +7 -5
- package/dist/cjs/subconscious/HostRecall.d.ts.map +1 -1
- package/dist/cjs/subconscious/HostRecall.js +130 -18
- package/dist/cjs/subconscious/HostRecall.js.map +1 -1
- package/dist/cjs/subconscious/NarrowEvidence.d.ts +6 -0
- package/dist/cjs/subconscious/NarrowEvidence.d.ts.map +1 -1
- package/dist/cjs/subconscious/NarrowEvidence.js +32 -47
- package/dist/cjs/subconscious/NarrowEvidence.js.map +1 -1
- package/dist/cjs/subconscious/TheBrainV2.d.ts +17 -1
- package/dist/cjs/subconscious/TheBrainV2.d.ts.map +1 -1
- package/dist/cjs/subconscious/TheBrainV2.js +101 -20
- package/dist/cjs/subconscious/TheBrainV2.js.map +1 -1
- package/dist/cjs/subconscious/freshness/LocalFsResolver.d.ts +3 -0
- package/dist/cjs/subconscious/freshness/LocalFsResolver.d.ts.map +1 -1
- package/dist/cjs/subconscious/freshness/LocalFsResolver.js +46 -13
- package/dist/cjs/subconscious/freshness/LocalFsResolver.js.map +1 -1
- package/dist/cjs/utils/AffectedTests.d.ts +1 -5
- package/dist/cjs/utils/AffectedTests.d.ts.map +1 -1
- package/dist/cjs/utils/AffectedTests.js +5 -37
- package/dist/cjs/utils/AffectedTests.js.map +1 -1
- package/dist/cjs/utils/AtomicFile.d.ts +14 -0
- package/dist/cjs/utils/AtomicFile.d.ts.map +1 -0
- package/dist/cjs/utils/AtomicFile.js +44 -0
- package/dist/cjs/utils/AtomicFile.js.map +1 -0
- package/dist/cjs/utils/AutoContextBundle.js +1 -1
- package/dist/cjs/utils/AutoContextBundle.js.map +1 -1
- package/dist/cjs/utils/BulkFileDigest.js +1 -1
- package/dist/cjs/utils/BulkFileDigest.js.map +1 -1
- package/dist/cjs/utils/CommandOutputDistiller.d.ts +10 -0
- package/dist/cjs/utils/CommandOutputDistiller.d.ts.map +1 -1
- package/dist/cjs/utils/CommandOutputDistiller.js +40 -2
- package/dist/cjs/utils/CommandOutputDistiller.js.map +1 -1
- package/dist/cjs/utils/ContextSqueezer.d.ts +49 -5
- package/dist/cjs/utils/ContextSqueezer.d.ts.map +1 -1
- package/dist/cjs/utils/ContextSqueezer.js +245 -24
- package/dist/cjs/utils/ContextSqueezer.js.map +1 -1
- package/dist/cjs/utils/FileLock.d.ts +2 -0
- package/dist/cjs/utils/FileLock.d.ts.map +1 -0
- package/dist/cjs/utils/FileLock.js +32 -0
- package/dist/cjs/utils/FileLock.js.map +1 -0
- package/dist/cjs/utils/FileOutline.d.ts +1 -1
- package/dist/cjs/utils/FileOutline.d.ts.map +1 -1
- package/dist/cjs/utils/FileOutline.js +5 -1
- package/dist/cjs/utils/FileOutline.js.map +1 -1
- package/dist/cjs/utils/FixCapture.d.ts.map +1 -1
- package/dist/cjs/utils/FixCapture.js +60 -3
- package/dist/cjs/utils/FixCapture.js.map +1 -1
- package/dist/cjs/utils/GitChanges.d.ts +11 -0
- package/dist/cjs/utils/GitChanges.d.ts.map +1 -0
- package/dist/cjs/utils/GitChanges.js +44 -0
- package/dist/cjs/utils/GitChanges.js.map +1 -0
- package/dist/cjs/utils/JsonKeys.d.ts +17 -0
- package/dist/cjs/utils/JsonKeys.d.ts.map +1 -0
- package/dist/cjs/utils/JsonKeys.js +75 -0
- package/dist/cjs/utils/JsonKeys.js.map +1 -0
- package/dist/cjs/utils/LineNumberMap.d.ts.map +1 -1
- package/dist/cjs/utils/LineNumberMap.js +27 -0
- package/dist/cjs/utils/LineNumberMap.js.map +1 -1
- package/dist/cjs/utils/LocalExclude.d.ts +3 -0
- package/dist/cjs/utils/LocalExclude.d.ts.map +1 -0
- package/dist/cjs/utils/LocalExclude.js +68 -0
- package/dist/cjs/utils/LocalExclude.js.map +1 -0
- package/dist/cjs/utils/OtherLanguageSymbols.d.ts.map +1 -1
- package/dist/cjs/utils/OtherLanguageSymbols.js +0 -7
- package/dist/cjs/utils/OtherLanguageSymbols.js.map +1 -1
- package/dist/cjs/utils/OutputDelta.d.ts +14 -2
- package/dist/cjs/utils/OutputDelta.d.ts.map +1 -1
- package/dist/cjs/utils/OutputDelta.js +22 -15
- package/dist/cjs/utils/OutputDelta.js.map +1 -1
- package/dist/cjs/utils/PatchMatcher.d.ts.map +1 -1
- package/dist/cjs/utils/PatchMatcher.js +26 -0
- package/dist/cjs/utils/PatchMatcher.js.map +1 -1
- package/dist/cjs/utils/ProLicense.d.ts +2 -0
- package/dist/cjs/utils/ProLicense.d.ts.map +1 -0
- package/dist/cjs/utils/ProLicense.js +31 -0
- package/dist/cjs/utils/ProLicense.js.map +1 -0
- package/dist/cjs/utils/RevivalThrottle.d.ts +9 -0
- package/dist/cjs/utils/RevivalThrottle.d.ts.map +1 -0
- package/dist/cjs/utils/RevivalThrottle.js +25 -0
- package/dist/cjs/utils/RevivalThrottle.js.map +1 -0
- package/dist/cjs/utils/RoiLedger.d.ts.map +1 -1
- package/dist/cjs/utils/RoiLedger.js +7 -3
- package/dist/cjs/utils/RoiLedger.js.map +1 -1
- package/dist/cjs/utils/SavingsLedger.d.ts +58 -18
- package/dist/cjs/utils/SavingsLedger.d.ts.map +1 -1
- package/dist/cjs/utils/SavingsLedger.js +333 -177
- package/dist/cjs/utils/SavingsLedger.js.map +1 -1
- package/dist/cjs/utils/SearchCache.d.ts +2 -2
- package/dist/cjs/utils/SearchCache.d.ts.map +1 -1
- package/dist/cjs/utils/SearchCache.js +8 -6
- package/dist/cjs/utils/SearchCache.js.map +1 -1
- package/dist/cjs/utils/SessionCapture.d.ts +65 -0
- package/dist/cjs/utils/SessionCapture.d.ts.map +1 -0
- package/dist/cjs/utils/SessionCapture.js +339 -0
- package/dist/cjs/utils/SessionCapture.js.map +1 -0
- package/dist/cjs/utils/SharedLedgerStore.d.ts.map +1 -1
- package/dist/cjs/utils/SharedLedgerStore.js +2 -1
- package/dist/cjs/utils/SharedLedgerStore.js.map +1 -1
- package/dist/cjs/utils/StaleDelta.d.ts +2 -0
- package/dist/cjs/utils/StaleDelta.d.ts.map +1 -0
- package/dist/cjs/utils/StaleDelta.js +60 -0
- package/dist/cjs/utils/StaleDelta.js.map +1 -0
- package/dist/cjs/utils/SurgicalASTInsert.d.ts.map +1 -1
- package/dist/cjs/utils/SurgicalASTInsert.js +2 -1
- package/dist/cjs/utils/SurgicalASTInsert.js.map +1 -1
- package/dist/cjs/utils/SymbolSurgicalContext.d.ts +2 -2
- package/dist/cjs/utils/SymbolSurgicalContext.d.ts.map +1 -1
- package/dist/cjs/utils/SymbolSurgicalContext.js +29 -62
- package/dist/cjs/utils/SymbolSurgicalContext.js.map +1 -1
- package/dist/cjs/utils/TokenBudgetedReader.d.ts.map +1 -1
- package/dist/cjs/utils/TokenBudgetedReader.js +56 -15
- package/dist/cjs/utils/TokenBudgetedReader.js.map +1 -1
- package/dist/cjs/utils/Utf8Guard.d.ts +23 -0
- package/dist/cjs/utils/Utf8Guard.d.ts.map +1 -0
- package/dist/cjs/utils/Utf8Guard.js +81 -0
- package/dist/cjs/utils/Utf8Guard.js.map +1 -0
- package/dist/cjs/utils/WorkspaceSearch.d.ts +8 -1
- package/dist/cjs/utils/WorkspaceSearch.d.ts.map +1 -1
- package/dist/cjs/utils/WorkspaceSearch.js +101 -13
- package/dist/cjs/utils/WorkspaceSearch.js.map +1 -1
- package/dist/cjs/utils/reportSavings.d.ts +3 -0
- package/dist/cjs/utils/reportSavings.d.ts.map +1 -1
- package/dist/cjs/utils/reportSavings.js +44 -5
- package/dist/cjs/utils/reportSavings.js.map +1 -1
- package/dist/cjs/utils/tsLoader.d.ts +5 -0
- package/dist/cjs/utils/tsLoader.d.ts.map +1 -0
- package/dist/cjs/utils/tsLoader.js +15 -0
- package/dist/cjs/utils/tsLoader.js.map +1 -0
- package/dist/esm/cli/hostHooks.d.ts +14 -1
- package/dist/esm/cli/hostHooks.d.ts.map +1 -1
- package/dist/esm/cli/hostHooks.js +52 -5
- package/dist/esm/cli/hostHooks.js.map +1 -1
- package/dist/esm/cli/lemma-proxy.d.ts.map +1 -1
- package/dist/esm/cli/lemma-proxy.js +30 -11
- package/dist/esm/cli/lemma-proxy.js.map +1 -1
- package/dist/esm/contracts/evidence.d.ts +8 -1
- package/dist/esm/contracts/evidence.d.ts.map +1 -1
- package/dist/esm/mcp/cognitiveMap.d.ts.map +1 -1
- package/dist/esm/mcp/cognitiveMap.js +6 -2
- package/dist/esm/mcp/cognitiveMap.js.map +1 -1
- package/dist/esm/mcp/index.js +22 -1
- package/dist/esm/mcp/index.js.map +1 -1
- package/dist/esm/mcp/prompts.d.ts +1 -1
- package/dist/esm/mcp/prompts.d.ts.map +1 -1
- package/dist/esm/mcp/prompts.js +6 -16
- package/dist/esm/mcp/prompts.js.map +1 -1
- package/dist/esm/mcp/tool-profiles.d.ts.map +1 -1
- package/dist/esm/mcp/tool-profiles.js +8 -4
- package/dist/esm/mcp/tool-profiles.js.map +1 -1
- package/dist/esm/mcp/tools/context-tools.d.ts.map +1 -1
- package/dist/esm/mcp/tools/context-tools.js +21 -17
- package/dist/esm/mcp/tools/context-tools.js.map +1 -1
- package/dist/esm/mcp/tools/devtools.d.ts.map +1 -1
- package/dist/esm/mcp/tools/devtools.js +11 -1
- package/dist/esm/mcp/tools/devtools.js.map +1 -1
- package/dist/esm/mcp/tools/memory.d.ts.map +1 -1
- package/dist/esm/mcp/tools/memory.js +83 -19
- package/dist/esm/mcp/tools/memory.js.map +1 -1
- package/dist/esm/mcp/tools/refactor.d.ts.map +1 -1
- package/dist/esm/mcp/tools/refactor.js +129 -32
- package/dist/esm/mcp/tools/refactor.js.map +1 -1
- package/dist/esm/mcp/tools/workspace.d.ts.map +1 -1
- package/dist/esm/mcp/tools/workspace.js +193 -50
- package/dist/esm/mcp/tools/workspace.js.map +1 -1
- package/dist/esm/mcp/tools.d.ts.map +1 -1
- package/dist/esm/mcp/tools.js +94 -33
- package/dist/esm/mcp/tools.js.map +1 -1
- package/dist/esm/mcp/utils.d.ts.map +1 -1
- package/dist/esm/mcp/utils.js +6 -1
- package/dist/esm/mcp/utils.js.map +1 -1
- package/dist/esm/mcp/workspaceShared.d.ts.map +1 -1
- package/dist/esm/mcp/workspaceShared.js +14 -9
- package/dist/esm/mcp/workspaceShared.js.map +1 -1
- package/dist/esm/proxy/KeyManager.d.ts +10 -0
- package/dist/esm/proxy/KeyManager.d.ts.map +1 -1
- package/dist/esm/proxy/KeyManager.js +43 -6
- package/dist/esm/proxy/KeyManager.js.map +1 -1
- package/dist/esm/proxy/ProjectStore.d.ts.map +1 -1
- package/dist/esm/proxy/ProjectStore.js +9 -6
- package/dist/esm/proxy/ProjectStore.js.map +1 -1
- package/dist/esm/security/SemanticScrubber.d.ts.map +1 -1
- package/dist/esm/security/SemanticScrubber.js +19 -1
- package/dist/esm/security/SemanticScrubber.js.map +1 -1
- package/dist/esm/subconscious/HostRecall.d.ts +7 -5
- package/dist/esm/subconscious/HostRecall.d.ts.map +1 -1
- package/dist/esm/subconscious/HostRecall.js +130 -19
- package/dist/esm/subconscious/HostRecall.js.map +1 -1
- package/dist/esm/subconscious/NarrowEvidence.d.ts +6 -0
- package/dist/esm/subconscious/NarrowEvidence.d.ts.map +1 -1
- package/dist/esm/subconscious/NarrowEvidence.js +24 -7
- package/dist/esm/subconscious/NarrowEvidence.js.map +1 -1
- package/dist/esm/subconscious/TheBrainV2.d.ts +17 -1
- package/dist/esm/subconscious/TheBrainV2.d.ts.map +1 -1
- package/dist/esm/subconscious/TheBrainV2.js +101 -20
- package/dist/esm/subconscious/TheBrainV2.js.map +1 -1
- package/dist/esm/subconscious/freshness/LocalFsResolver.d.ts +3 -0
- package/dist/esm/subconscious/freshness/LocalFsResolver.d.ts.map +1 -1
- package/dist/esm/subconscious/freshness/LocalFsResolver.js +46 -13
- package/dist/esm/subconscious/freshness/LocalFsResolver.js.map +1 -1
- package/dist/esm/utils/AffectedTests.d.ts +1 -5
- package/dist/esm/utils/AffectedTests.d.ts.map +1 -1
- package/dist/esm/utils/AffectedTests.js +2 -35
- package/dist/esm/utils/AffectedTests.js.map +1 -1
- package/dist/esm/utils/AtomicFile.d.ts +14 -0
- package/dist/esm/utils/AtomicFile.d.ts.map +1 -0
- package/dist/esm/utils/AtomicFile.js +37 -0
- package/dist/esm/utils/AtomicFile.js.map +1 -0
- package/dist/esm/utils/AutoContextBundle.js +1 -1
- package/dist/esm/utils/AutoContextBundle.js.map +1 -1
- package/dist/esm/utils/BulkFileDigest.js +1 -1
- package/dist/esm/utils/BulkFileDigest.js.map +1 -1
- package/dist/esm/utils/CommandOutputDistiller.d.ts +10 -0
- package/dist/esm/utils/CommandOutputDistiller.d.ts.map +1 -1
- package/dist/esm/utils/CommandOutputDistiller.js +39 -2
- package/dist/esm/utils/CommandOutputDistiller.js.map +1 -1
- package/dist/esm/utils/ContextSqueezer.d.ts +49 -5
- package/dist/esm/utils/ContextSqueezer.d.ts.map +1 -1
- package/dist/esm/utils/ContextSqueezer.js +242 -24
- package/dist/esm/utils/ContextSqueezer.js.map +1 -1
- package/dist/esm/utils/FileLock.d.ts +2 -0
- package/dist/esm/utils/FileLock.d.ts.map +1 -0
- package/dist/esm/utils/FileLock.js +29 -0
- package/dist/esm/utils/FileLock.js.map +1 -0
- package/dist/esm/utils/FileOutline.d.ts +1 -1
- package/dist/esm/utils/FileOutline.d.ts.map +1 -1
- package/dist/esm/utils/FileOutline.js +5 -1
- package/dist/esm/utils/FileOutline.js.map +1 -1
- package/dist/esm/utils/FixCapture.d.ts.map +1 -1
- package/dist/esm/utils/FixCapture.js +59 -2
- package/dist/esm/utils/FixCapture.js.map +1 -1
- package/dist/esm/utils/GitChanges.d.ts +11 -0
- package/dist/esm/utils/GitChanges.d.ts.map +1 -0
- package/dist/esm/utils/GitChanges.js +41 -0
- package/dist/esm/utils/GitChanges.js.map +1 -0
- package/dist/esm/utils/JsonKeys.d.ts +17 -0
- package/dist/esm/utils/JsonKeys.d.ts.map +1 -0
- package/dist/esm/utils/JsonKeys.js +71 -0
- package/dist/esm/utils/JsonKeys.js.map +1 -0
- package/dist/esm/utils/LineNumberMap.d.ts.map +1 -1
- package/dist/esm/utils/LineNumberMap.js +27 -0
- package/dist/esm/utils/LineNumberMap.js.map +1 -1
- package/dist/esm/utils/LocalExclude.d.ts +3 -0
- package/dist/esm/utils/LocalExclude.d.ts.map +1 -0
- package/dist/esm/utils/LocalExclude.js +62 -0
- package/dist/esm/utils/LocalExclude.js.map +1 -0
- package/dist/esm/utils/OtherLanguageSymbols.d.ts.map +1 -1
- package/dist/esm/utils/OtherLanguageSymbols.js +0 -7
- package/dist/esm/utils/OtherLanguageSymbols.js.map +1 -1
- package/dist/esm/utils/OutputDelta.d.ts +14 -2
- package/dist/esm/utils/OutputDelta.d.ts.map +1 -1
- package/dist/esm/utils/OutputDelta.js +22 -15
- package/dist/esm/utils/OutputDelta.js.map +1 -1
- package/dist/esm/utils/PatchMatcher.d.ts.map +1 -1
- package/dist/esm/utils/PatchMatcher.js +26 -0
- package/dist/esm/utils/PatchMatcher.js.map +1 -1
- package/dist/esm/utils/ProLicense.d.ts +2 -0
- package/dist/esm/utils/ProLicense.d.ts.map +1 -0
- package/dist/esm/utils/ProLicense.js +25 -0
- package/dist/esm/utils/ProLicense.js.map +1 -0
- package/dist/esm/utils/RevivalThrottle.d.ts +9 -0
- package/dist/esm/utils/RevivalThrottle.d.ts.map +1 -0
- package/dist/esm/utils/RevivalThrottle.js +22 -0
- package/dist/esm/utils/RevivalThrottle.js.map +1 -0
- package/dist/esm/utils/RoiLedger.d.ts.map +1 -1
- package/dist/esm/utils/RoiLedger.js +7 -3
- package/dist/esm/utils/RoiLedger.js.map +1 -1
- package/dist/esm/utils/SavingsLedger.d.ts +58 -18
- package/dist/esm/utils/SavingsLedger.d.ts.map +1 -1
- package/dist/esm/utils/SavingsLedger.js +333 -177
- package/dist/esm/utils/SavingsLedger.js.map +1 -1
- package/dist/esm/utils/SearchCache.d.ts +2 -2
- package/dist/esm/utils/SearchCache.d.ts.map +1 -1
- package/dist/esm/utils/SearchCache.js +8 -6
- package/dist/esm/utils/SearchCache.js.map +1 -1
- package/dist/esm/utils/SessionCapture.d.ts +65 -0
- package/dist/esm/utils/SessionCapture.d.ts.map +1 -0
- package/dist/esm/utils/SessionCapture.js +328 -0
- package/dist/esm/utils/SessionCapture.js.map +1 -0
- package/dist/esm/utils/SharedLedgerStore.d.ts.map +1 -1
- package/dist/esm/utils/SharedLedgerStore.js +2 -1
- package/dist/esm/utils/SharedLedgerStore.js.map +1 -1
- package/dist/esm/utils/StaleDelta.d.ts +2 -0
- package/dist/esm/utils/StaleDelta.d.ts.map +1 -0
- package/dist/esm/utils/StaleDelta.js +54 -0
- package/dist/esm/utils/StaleDelta.js.map +1 -0
- package/dist/esm/utils/SurgicalASTInsert.d.ts.map +1 -1
- package/dist/esm/utils/SurgicalASTInsert.js +2 -1
- package/dist/esm/utils/SurgicalASTInsert.js.map +1 -1
- package/dist/esm/utils/SymbolSurgicalContext.d.ts +2 -2
- package/dist/esm/utils/SymbolSurgicalContext.d.ts.map +1 -1
- package/dist/esm/utils/SymbolSurgicalContext.js +1 -1
- package/dist/esm/utils/SymbolSurgicalContext.js.map +1 -1
- package/dist/esm/utils/TokenBudgetedReader.d.ts.map +1 -1
- package/dist/esm/utils/TokenBudgetedReader.js +56 -15
- package/dist/esm/utils/TokenBudgetedReader.js.map +1 -1
- package/dist/esm/utils/Utf8Guard.d.ts +23 -0
- package/dist/esm/utils/Utf8Guard.d.ts.map +1 -0
- package/dist/esm/utils/Utf8Guard.js +74 -0
- package/dist/esm/utils/Utf8Guard.js.map +1 -0
- package/dist/esm/utils/WorkspaceSearch.d.ts +8 -1
- package/dist/esm/utils/WorkspaceSearch.d.ts.map +1 -1
- package/dist/esm/utils/WorkspaceSearch.js +100 -13
- package/dist/esm/utils/WorkspaceSearch.js.map +1 -1
- package/dist/esm/utils/reportSavings.d.ts +3 -0
- package/dist/esm/utils/reportSavings.d.ts.map +1 -1
- package/dist/esm/utils/reportSavings.js +42 -5
- package/dist/esm/utils/reportSavings.js.map +1 -1
- package/dist/esm/utils/tsLoader.d.ts +5 -0
- package/dist/esm/utils/tsLoader.d.ts.map +1 -0
- package/dist/esm/utils/tsLoader.js +13 -0
- package/dist/esm/utils/tsLoader.js.map +1 -0
- package/package.json +5 -5
- package/dashboard/dist/assets/index-DzL_Zu3m.js +0 -452
- package/dist/cjs/examples/basic-usage.d.ts +0 -12
- package/dist/cjs/examples/basic-usage.d.ts.map +0 -1
- package/dist/cjs/examples/basic-usage.js +0 -128
- package/dist/cjs/examples/basic-usage.js.map +0 -1
- package/dist/esm/examples/basic-usage.d.ts +0 -12
- package/dist/esm/examples/basic-usage.d.ts.map +0 -1
- package/dist/esm/examples/basic-usage.js +0 -126
- package/dist/esm/examples/basic-usage.js.map +0 -1
|
@@ -918,6 +918,31 @@ function hashSymbolsForFreshness(refs) {
|
|
|
918
918
|
}
|
|
919
919
|
return hashes;
|
|
920
920
|
}
|
|
921
|
+
/**
|
|
922
|
+
* Splits symbol refs into the ones the resolver can actually locate and the ones it cannot
|
|
923
|
+
* (a typo, a rename, a file that is not code). An unlocatable symbol hashes MISSING when it is
|
|
924
|
+
* stored and MISSING again when it is verified, so MISSING === MISSING and the memory could
|
|
925
|
+
* never go stale — the worst way for freshness to fail, because the reply still says
|
|
926
|
+
* "tracking N symbols". Callers track the whole file for those instead and say so.
|
|
927
|
+
*/
|
|
928
|
+
function partitionSymbolRefs(refs) {
|
|
929
|
+
const resolved = [];
|
|
930
|
+
const unresolved = [];
|
|
931
|
+
for (const ref of refs) {
|
|
932
|
+
const hash = defaultLocalResolver.hashSymbol(path.resolve(ref.filePath), ref.symbolName);
|
|
933
|
+
(hash && hash.raw !== 'MISSING' ? resolved : unresolved).push(ref);
|
|
934
|
+
}
|
|
935
|
+
return { resolved, unresolved };
|
|
936
|
+
}
|
|
937
|
+
/** `files` minus those that contain one of the tracked `symbols`; `dropped` lists what was removed. */
|
|
938
|
+
function dropFilesCoveredBySymbols(files, symbols) {
|
|
939
|
+
const covered = new Set(symbols.map((r) => path.resolve(r.filePath)));
|
|
940
|
+
const kept = [];
|
|
941
|
+
const dropped = [];
|
|
942
|
+
for (const f of files ?? [])
|
|
943
|
+
(covered.has(path.resolve(f)) ? dropped : kept).push(f);
|
|
944
|
+
return { files: kept, dropped };
|
|
945
|
+
}
|
|
921
946
|
/**
|
|
922
947
|
* Fase D companion to hashSymbolsForFreshness: same symbols, hashed after
|
|
923
948
|
* normalizeForFreshness strips comments/whitespace. Always computed alongside the raw hash
|
|
@@ -1120,7 +1145,7 @@ export function checkEntryFreshness(entry, resolver, resolveNode, depth = 0, vis
|
|
|
1120
1145
|
unverifiedFiles.push(relLabel(abs)); // fail-closed: cannot verify ⇒ not fresh
|
|
1121
1146
|
continue;
|
|
1122
1147
|
}
|
|
1123
|
-
if (currentHash !== storedHash)
|
|
1148
|
+
if (currentHash !== storedHash && resolver.hashFileLegacy?.(abs) !== storedHash)
|
|
1124
1149
|
staleFiles.push(relLabel(abs));
|
|
1125
1150
|
}
|
|
1126
1151
|
}
|
|
@@ -1135,7 +1160,7 @@ export function checkEntryFreshness(entry, resolver, resolveNode, depth = 0, vis
|
|
|
1135
1160
|
unverifiedFiles.push(label); // fail-closed: cannot verify ⇒ not fresh
|
|
1136
1161
|
continue;
|
|
1137
1162
|
}
|
|
1138
|
-
if (currentPair.raw === storedHash)
|
|
1163
|
+
if (currentPair.raw === storedHash || currentPair.rawLegacy === storedHash)
|
|
1139
1164
|
continue;
|
|
1140
1165
|
if (semanticDiff) {
|
|
1141
1166
|
const storedNormalized = entry.symbolNormalizedHashes?.[key];
|
|
@@ -1258,7 +1283,7 @@ export function checkClaimFreshness(claim, resolver, semanticDiff = false) {
|
|
|
1258
1283
|
unverifiedFiles.push(relLabel(abs));
|
|
1259
1284
|
continue;
|
|
1260
1285
|
}
|
|
1261
|
-
if (currentHash !== storedHash)
|
|
1286
|
+
if (currentHash !== storedHash && resolver.hashFileLegacy?.(abs) !== storedHash)
|
|
1262
1287
|
staleFiles.push(relLabel(abs));
|
|
1263
1288
|
}
|
|
1264
1289
|
}
|
|
@@ -1273,7 +1298,7 @@ export function checkClaimFreshness(claim, resolver, semanticDiff = false) {
|
|
|
1273
1298
|
unverifiedFiles.push(label);
|
|
1274
1299
|
continue;
|
|
1275
1300
|
}
|
|
1276
|
-
if (currentPair.raw === storedHash)
|
|
1301
|
+
if (currentPair.raw === storedHash || currentPair.rawLegacy === storedHash)
|
|
1277
1302
|
continue;
|
|
1278
1303
|
if (semanticDiff) {
|
|
1279
1304
|
const storedNormalized = claim.symbolNormalizedHashes?.[key];
|
|
@@ -1310,6 +1335,13 @@ export class TheBrainV2 {
|
|
|
1310
1335
|
this.diskStamp = null;
|
|
1311
1336
|
/** id -> ISO deletion time, for ids that must not come back through a merge. */
|
|
1312
1337
|
this.tombstones = new Map();
|
|
1338
|
+
/**
|
|
1339
|
+
* Ids a restore brought back that the on-disk meta.json still lists as deleted. save() absorbs
|
|
1340
|
+
* the peers' tombstones first, which re-added the one restore had just removed and dropped the
|
|
1341
|
+
* entry again: "Restored memory…" was followed by the memory vanishing at the next save. Skipped
|
|
1342
|
+
* by the absorb until a save has written meta.json without them.
|
|
1343
|
+
*/
|
|
1344
|
+
this.revived = new Set();
|
|
1313
1345
|
/**
|
|
1314
1346
|
* Last integrity incident on the corpus files (corrupt main file, undecryptable
|
|
1315
1347
|
* envelope, skipped sync). Set by load()/save()/syncIfChanged(), never cleared
|
|
@@ -1564,6 +1596,7 @@ export class TheBrainV2 {
|
|
|
1564
1596
|
}));
|
|
1565
1597
|
this.diskStamp = stampOf(ENTRIES_FILE);
|
|
1566
1598
|
this.dirty = false;
|
|
1599
|
+
this.revived.clear(); // meta.json no longer lists them
|
|
1567
1600
|
}
|
|
1568
1601
|
catch { /* fail silently */ }
|
|
1569
1602
|
finally {
|
|
@@ -1582,6 +1615,8 @@ export class TheBrainV2 {
|
|
|
1582
1615
|
*/
|
|
1583
1616
|
absorbPeerTombstones() {
|
|
1584
1617
|
for (const [id, at] of readTombstonesFile()) {
|
|
1618
|
+
if (this.revived.has(id))
|
|
1619
|
+
continue;
|
|
1585
1620
|
if (!this.tombstones.has(id))
|
|
1586
1621
|
this.tombstones.set(id, at);
|
|
1587
1622
|
const entry = this.entries.get(id);
|
|
@@ -1660,6 +1695,24 @@ export class TheBrainV2 {
|
|
|
1660
1695
|
};
|
|
1661
1696
|
}
|
|
1662
1697
|
}
|
|
1698
|
+
let unresolvedSymbols;
|
|
1699
|
+
let narrowedFiles;
|
|
1700
|
+
if (symbolRefs && symbolRefs.length > 0 && !options.evidence?.symbols) {
|
|
1701
|
+
const split = partitionSymbolRefs(symbolRefs);
|
|
1702
|
+
if (split.unresolved.length > 0) {
|
|
1703
|
+
unresolvedSymbols = split.unresolved;
|
|
1704
|
+
symbolRefs = split.resolved;
|
|
1705
|
+
filePaths = [...new Set([...(filePaths ?? []), ...split.unresolved.map((r) => r.filePath)])];
|
|
1706
|
+
}
|
|
1707
|
+
// A file whose symbols are tracked is not also tracked whole: the symbol is the narrower
|
|
1708
|
+
// claim, and the whole file would stale the memory on every unrelated edit to it (callers
|
|
1709
|
+
// routinely pass both: the file the symbol lives in, and the symbol).
|
|
1710
|
+
const narrowed = dropFilesCoveredBySymbols(filePaths, split.resolved);
|
|
1711
|
+
if (narrowed.dropped.length > 0) {
|
|
1712
|
+
filePaths = narrowed.files;
|
|
1713
|
+
narrowedFiles = narrowed.dropped;
|
|
1714
|
+
}
|
|
1715
|
+
}
|
|
1663
1716
|
// Conflict check: another entry about the exact same symbol, with the opposite
|
|
1664
1717
|
// outcome, is worth flagging before this one is even written — two memories about one
|
|
1665
1718
|
// function disagreeing on whether an approach works is a trap for whoever searches next.
|
|
@@ -1741,7 +1794,7 @@ export class TheBrainV2 {
|
|
|
1741
1794
|
this.recalcAvgDocLength();
|
|
1742
1795
|
this.evictIfOverCapacity();
|
|
1743
1796
|
this.scheduleSave();
|
|
1744
|
-
return { stored: true, reason: 'Stored successfully', id, conflicts, textConflicts, redactions };
|
|
1797
|
+
return { stored: true, reason: 'Stored successfully', id, conflicts, textConflicts, redactions, ...(unresolvedSymbols ? { unresolvedSymbols } : {}), ...(narrowedFiles ? { narrowedFiles } : {}) };
|
|
1745
1798
|
}
|
|
1746
1799
|
/**
|
|
1747
1800
|
* Evict the lowest-value entries once the Brain is over capacity. Value = hits (proven
|
|
@@ -2466,8 +2519,10 @@ export class TheBrainV2 {
|
|
|
2466
2519
|
this.bloom.add(entry.query.trim().toLowerCase().substring(0, 200));
|
|
2467
2520
|
}
|
|
2468
2521
|
// A restored id was deliberately brought back — its old tombstone must not suppress it.
|
|
2469
|
-
for (const id of this.entries.keys())
|
|
2470
|
-
this.tombstones.delete(id)
|
|
2522
|
+
for (const id of this.entries.keys()) {
|
|
2523
|
+
if (this.tombstones.delete(id))
|
|
2524
|
+
this.revived.add(id);
|
|
2525
|
+
}
|
|
2471
2526
|
this.scheduleSave();
|
|
2472
2527
|
return { ok: true, restored: entries.size, message: `Restored ${entries.size} memories from snapshot "${name}". The pre-restore state was snapshotted, so this is undoable too.` };
|
|
2473
2528
|
}
|
|
@@ -2550,6 +2605,7 @@ export class TheBrainV2 {
|
|
|
2550
2605
|
}
|
|
2551
2606
|
this.bloom.add(revived.query.trim().toLowerCase().substring(0, 200));
|
|
2552
2607
|
this.tombstones.delete(id);
|
|
2608
|
+
this.revived.add(id);
|
|
2553
2609
|
this.recalcAvgDocLength();
|
|
2554
2610
|
this.scheduleSave();
|
|
2555
2611
|
return { ok: true, message: `Restored memory "${id}" from the trash (${revived.hits || 0} prior reuse(s) kept). Its freshness will be re-judged on the next search.` };
|
|
@@ -2644,12 +2700,16 @@ export class TheBrainV2 {
|
|
|
2644
2700
|
if (hasNewTracking) {
|
|
2645
2701
|
// Re-point: the new tracking replaces the old wholesale rather than merging, because
|
|
2646
2702
|
// a moved symbol's old path must stop counting against the entry forever.
|
|
2647
|
-
|
|
2648
|
-
|
|
2649
|
-
|
|
2650
|
-
|
|
2703
|
+
// A symbol the resolver cannot locate would be "fresh" forever (MISSING === MISSING), so
|
|
2704
|
+
// its file is tracked whole instead, and the label says file, not symbol.
|
|
2705
|
+
const split = partitionSymbolRefs(opts.symbols ?? []);
|
|
2706
|
+
const files = dropFilesCoveredBySymbols([...new Set([...(opts.filePaths ?? []), ...split.unresolved.map((r) => r.filePath)])], split.resolved).files;
|
|
2707
|
+
entry.fileHashes = files.length ? hashFilesForFreshness(files) : undefined;
|
|
2708
|
+
entry.symbolHashes = split.resolved.length ? hashSymbolsForFreshness(split.resolved) : undefined;
|
|
2709
|
+
entry.symbolNormalizedHashes = split.resolved.length ? hashSymbolsNormalizedForFreshness(split.resolved) : undefined;
|
|
2710
|
+
for (const p of files)
|
|
2651
2711
|
retracked.push(rel(path.resolve(p)));
|
|
2652
|
-
for (const s of
|
|
2712
|
+
for (const s of split.resolved)
|
|
2653
2713
|
retracked.push(`${rel(path.resolve(s.filePath))}::${s.symbolName}`);
|
|
2654
2714
|
}
|
|
2655
2715
|
else {
|
|
@@ -2667,10 +2727,19 @@ export class TheBrainV2 {
|
|
|
2667
2727
|
const sep = key.lastIndexOf('::');
|
|
2668
2728
|
return { filePath: key.substring(0, sep), symbolName: key.substring(sep + 2) };
|
|
2669
2729
|
});
|
|
2670
|
-
|
|
2671
|
-
|
|
2730
|
+
// A symbol that no longer resolves keeps the hash it was stored with: re-hashing it would
|
|
2731
|
+
// write MISSING, which is what it will read as forever, and bless a deleted symbol.
|
|
2732
|
+
const gone = new Set(partitionSymbolRefs(refs).unresolved.map((r) => `${path.resolve(r.filePath)}::${r.symbolName}`));
|
|
2733
|
+
const rehashed = hashSymbolsForFreshness(refs);
|
|
2734
|
+
const rehashedNorm = hashSymbolsNormalizedForFreshness(refs);
|
|
2735
|
+
for (const key of gone) {
|
|
2736
|
+
rehashed[key] = entry.symbolHashes[key] ?? rehashed[key];
|
|
2737
|
+
rehashedNorm[key] = entry.symbolNormalizedHashes?.[key] ?? rehashedNorm[key];
|
|
2738
|
+
}
|
|
2739
|
+
entry.symbolHashes = rehashed;
|
|
2740
|
+
entry.symbolNormalizedHashes = rehashedNorm;
|
|
2672
2741
|
for (const r of refs)
|
|
2673
|
-
retracked.push(`${rel(r.filePath)}::${r.symbolName}`);
|
|
2742
|
+
retracked.push(`${rel(r.filePath)}::${r.symbolName}${gone.has(`${path.resolve(r.filePath)}::${r.symbolName}`) ? ' (no longer found — stays stale)' : ''}`);
|
|
2674
2743
|
}
|
|
2675
2744
|
if (entry.claims) {
|
|
2676
2745
|
for (const claim of entry.claims) {
|
|
@@ -3352,6 +3421,11 @@ export class TheBrainV2 {
|
|
|
3352
3421
|
*/
|
|
3353
3422
|
getStats(options = {}) {
|
|
3354
3423
|
this.syncIfChanged();
|
|
3424
|
+
// With projectId, every per-memory figure covers that project's memories only. Corpus-wide
|
|
3425
|
+
// ones (term index, bloom filter, file size, snapshots, tombstones) stay what they are, and
|
|
3426
|
+
// `unscopedEntries` still counts the memories that predate scoping, which belong to no project.
|
|
3427
|
+
const scopeId = options.projectId;
|
|
3428
|
+
let inScope = 0;
|
|
3355
3429
|
const base = {
|
|
3356
3430
|
totalEntries: this.entries.size,
|
|
3357
3431
|
totalTerms: this.invertedIndex.size,
|
|
@@ -3377,14 +3451,17 @@ export class TheBrainV2 {
|
|
|
3377
3451
|
const reuseBySource = {};
|
|
3378
3452
|
const projects = new Set();
|
|
3379
3453
|
for (const entry of this.entries.values()) {
|
|
3380
|
-
if (!entry.hits)
|
|
3381
|
-
neverHit++;
|
|
3382
|
-
if (entry.demerits)
|
|
3383
|
-
downvoted++;
|
|
3384
3454
|
if (entry.projectId === undefined)
|
|
3385
3455
|
unscoped++;
|
|
3386
3456
|
else
|
|
3387
3457
|
projects.add(entry.projectId);
|
|
3458
|
+
if (scopeId !== undefined && entry.projectId !== scopeId)
|
|
3459
|
+
continue;
|
|
3460
|
+
inScope++;
|
|
3461
|
+
if (!entry.hits)
|
|
3462
|
+
neverHit++;
|
|
3463
|
+
if (entry.demerits)
|
|
3464
|
+
downvoted++;
|
|
3388
3465
|
if (trackedArtifactCount(entry) === 0)
|
|
3389
3466
|
untracked++;
|
|
3390
3467
|
else if (entry.filePaths !== undefined || entry.symbols !== undefined ||
|
|
@@ -3425,7 +3502,11 @@ export class TheBrainV2 {
|
|
|
3425
3502
|
base.downvoted = downvoted;
|
|
3426
3503
|
base.bySource = bySource;
|
|
3427
3504
|
base.reuseBySource = reuseBySource;
|
|
3428
|
-
|
|
3505
|
+
if (scopeId !== undefined) {
|
|
3506
|
+
base.totalEntries = inScope;
|
|
3507
|
+
base.scopedTo = scopeId;
|
|
3508
|
+
}
|
|
3509
|
+
base.projects = scopeId !== undefined ? (projects.has(scopeId) ? 1 : 0) : projects.size;
|
|
3429
3510
|
base.unscopedEntries = unscoped;
|
|
3430
3511
|
base.untrackedEntries = untracked;
|
|
3431
3512
|
base.withClearPaths = withClearPaths;
|