@nxuss/lemma 1.37.0 → 1.39.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 +9 -6
- package/bin/brain-ingest.js +86 -27
- package/bin/doctor.js +31 -4
- package/bin/init.js +98 -60
- package/dashboard/dist/assets/index-DNTQXLER.css +1 -0
- package/dashboard/dist/assets/index-DzL_Zu3m.js +452 -0
- package/dashboard/dist/index.html +2 -2
- package/dist/cjs/cli/gitHooks.d.ts +9 -2
- package/dist/cjs/cli/gitHooks.d.ts.map +1 -1
- package/dist/cjs/cli/gitHooks.js +31 -4
- package/dist/cjs/cli/gitHooks.js.map +1 -1
- package/dist/cjs/cli/hostHooks.d.ts +13 -1
- package/dist/cjs/cli/hostHooks.d.ts.map +1 -1
- package/dist/cjs/cli/hostHooks.js +34 -4
- 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 +42 -5
- package/dist/cjs/cli/lemma-proxy.js.map +1 -1
- package/dist/cjs/infra/analyzers/index.d.ts +0 -2
- package/dist/cjs/infra/analyzers/index.d.ts.map +1 -1
- package/dist/cjs/infra/analyzers/index.js +1 -6
- package/dist/cjs/infra/analyzers/index.js.map +1 -1
- package/dist/cjs/infra/cli.d.ts +4 -0
- package/dist/cjs/infra/cli.d.ts.map +1 -1
- package/dist/cjs/infra/cli.js +6 -199
- package/dist/cjs/infra/cli.js.map +1 -1
- package/dist/cjs/infra/index.d.ts +1 -3
- package/dist/cjs/infra/index.d.ts.map +1 -1
- package/dist/cjs/infra/index.js +1 -16
- package/dist/cjs/infra/index.js.map +1 -1
- package/dist/cjs/infra/mcp-tools.d.ts.map +1 -1
- package/dist/cjs/infra/mcp-tools.js +8 -453
- package/dist/cjs/infra/mcp-tools.js.map +1 -1
- package/dist/cjs/infra/types.d.ts +0 -101
- package/dist/cjs/infra/types.d.ts.map +1 -1
- package/dist/cjs/infra/types.js +2 -1
- package/dist/cjs/infra/types.js.map +1 -1
- package/dist/cjs/mcp/index.js +33 -10
- 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 +8 -21
- package/dist/cjs/mcp/prompts.js.map +1 -1
- package/dist/cjs/mcp/tool-profiles.d.ts +8 -3
- package/dist/cjs/mcp/tool-profiles.d.ts.map +1 -1
- package/dist/cjs/mcp/tool-profiles.js +25 -54
- package/dist/cjs/mcp/tool-profiles.js.map +1 -1
- package/dist/cjs/mcp/tools/memory.d.ts +8 -0
- package/dist/cjs/mcp/tools/memory.d.ts.map +1 -1
- package/dist/cjs/mcp/tools/memory.js +154 -125
- package/dist/cjs/mcp/tools/memory.js.map +1 -1
- package/dist/cjs/mcp/tools.d.ts.map +1 -1
- package/dist/cjs/mcp/tools.js +11 -6
- package/dist/cjs/mcp/tools.js.map +1 -1
- package/dist/cjs/mcp/workspaceShared.d.ts.map +1 -1
- package/dist/cjs/mcp/workspaceShared.js +13 -12
- package/dist/cjs/mcp/workspaceShared.js.map +1 -1
- package/dist/cjs/proxy/ProjectRegistry.d.ts +44 -0
- package/dist/cjs/proxy/ProjectRegistry.d.ts.map +1 -1
- package/dist/cjs/proxy/ProjectRegistry.js +92 -3
- package/dist/cjs/proxy/ProjectRegistry.js.map +1 -1
- package/dist/cjs/subconscious/HostRecall.d.ts +36 -3
- package/dist/cjs/subconscious/HostRecall.d.ts.map +1 -1
- package/dist/cjs/subconscious/HostRecall.js +164 -37
- package/dist/cjs/subconscious/HostRecall.js.map +1 -1
- package/dist/cjs/subconscious/NarrowEvidence.d.ts +47 -0
- package/dist/cjs/subconscious/NarrowEvidence.d.ts.map +1 -0
- package/dist/cjs/subconscious/NarrowEvidence.js +252 -0
- package/dist/cjs/subconscious/NarrowEvidence.js.map +1 -0
- package/dist/cjs/subconscious/TheBrainV2.d.ts +37 -0
- package/dist/cjs/subconscious/TheBrainV2.d.ts.map +1 -1
- package/dist/cjs/subconscious/TheBrainV2.js +147 -15
- package/dist/cjs/subconscious/TheBrainV2.js.map +1 -1
- package/dist/cjs/subconscious/freshness/LocalFsResolver.d.ts.map +1 -1
- package/dist/cjs/subconscious/freshness/LocalFsResolver.js +17 -0
- package/dist/cjs/subconscious/freshness/LocalFsResolver.js.map +1 -1
- package/dist/cjs/subconscious/recallDigest.d.ts +42 -0
- package/dist/cjs/subconscious/recallDigest.d.ts.map +1 -0
- package/dist/cjs/subconscious/recallDigest.js +94 -0
- package/dist/cjs/subconscious/recallDigest.js.map +1 -0
- package/dist/cjs/utils/OtherLanguageSymbols.d.ts +31 -0
- package/dist/cjs/utils/OtherLanguageSymbols.d.ts.map +1 -0
- package/dist/cjs/utils/OtherLanguageSymbols.js +283 -0
- package/dist/cjs/utils/OtherLanguageSymbols.js.map +1 -0
- package/dist/cjs/utils/SavingsLedger.d.ts +27 -0
- package/dist/cjs/utils/SavingsLedger.d.ts.map +1 -1
- package/dist/cjs/utils/SavingsLedger.js +51 -0
- package/dist/cjs/utils/SavingsLedger.js.map +1 -1
- package/dist/cjs/utils/StoreDraft.d.ts +12 -0
- package/dist/cjs/utils/StoreDraft.d.ts.map +1 -1
- package/dist/cjs/utils/StoreDraft.js +53 -1
- package/dist/cjs/utils/StoreDraft.js.map +1 -1
- package/dist/cjs/utils/SymbolSurgicalContext.d.ts +2 -0
- package/dist/cjs/utils/SymbolSurgicalContext.d.ts.map +1 -1
- package/dist/cjs/utils/SymbolSurgicalContext.js +1 -0
- package/dist/cjs/utils/SymbolSurgicalContext.js.map +1 -1
- package/dist/cjs/utils/reportSavings.d.ts +17 -4
- package/dist/cjs/utils/reportSavings.d.ts.map +1 -1
- package/dist/cjs/utils/reportSavings.js +67 -22
- package/dist/cjs/utils/reportSavings.js.map +1 -1
- package/dist/esm/cli/gitHooks.d.ts +9 -2
- package/dist/esm/cli/gitHooks.d.ts.map +1 -1
- package/dist/esm/cli/gitHooks.js +31 -4
- package/dist/esm/cli/gitHooks.js.map +1 -1
- package/dist/esm/cli/hostHooks.d.ts +13 -1
- package/dist/esm/cli/hostHooks.d.ts.map +1 -1
- package/dist/esm/cli/hostHooks.js +32 -3
- 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 +42 -5
- package/dist/esm/cli/lemma-proxy.js.map +1 -1
- package/dist/esm/infra/analyzers/index.d.ts +0 -2
- package/dist/esm/infra/analyzers/index.d.ts.map +1 -1
- package/dist/esm/infra/analyzers/index.js +0 -2
- package/dist/esm/infra/analyzers/index.js.map +1 -1
- package/dist/esm/infra/cli.d.ts +4 -0
- package/dist/esm/infra/cli.d.ts.map +1 -1
- package/dist/esm/infra/cli.js +6 -199
- package/dist/esm/infra/cli.js.map +1 -1
- package/dist/esm/infra/index.d.ts +1 -3
- package/dist/esm/infra/index.d.ts.map +1 -1
- package/dist/esm/infra/index.js +1 -3
- package/dist/esm/infra/index.js.map +1 -1
- package/dist/esm/infra/mcp-tools.d.ts.map +1 -1
- package/dist/esm/infra/mcp-tools.js +9 -454
- package/dist/esm/infra/mcp-tools.js.map +1 -1
- package/dist/esm/infra/types.d.ts +0 -101
- package/dist/esm/infra/types.d.ts.map +1 -1
- package/dist/esm/infra/types.js +2 -1
- package/dist/esm/infra/types.js.map +1 -1
- package/dist/esm/mcp/index.js +33 -10
- 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 +8 -21
- package/dist/esm/mcp/prompts.js.map +1 -1
- package/dist/esm/mcp/tool-profiles.d.ts +8 -3
- package/dist/esm/mcp/tool-profiles.d.ts.map +1 -1
- package/dist/esm/mcp/tool-profiles.js +25 -54
- package/dist/esm/mcp/tool-profiles.js.map +1 -1
- package/dist/esm/mcp/tools/memory.d.ts +8 -0
- package/dist/esm/mcp/tools/memory.d.ts.map +1 -1
- package/dist/esm/mcp/tools/memory.js +156 -128
- package/dist/esm/mcp/tools/memory.js.map +1 -1
- package/dist/esm/mcp/tools.d.ts.map +1 -1
- package/dist/esm/mcp/tools.js +12 -7
- package/dist/esm/mcp/tools.js.map +1 -1
- package/dist/esm/mcp/workspaceShared.d.ts.map +1 -1
- package/dist/esm/mcp/workspaceShared.js +13 -12
- package/dist/esm/mcp/workspaceShared.js.map +1 -1
- package/dist/esm/proxy/ProjectRegistry.d.ts +44 -0
- package/dist/esm/proxy/ProjectRegistry.d.ts.map +1 -1
- package/dist/esm/proxy/ProjectRegistry.js +91 -2
- package/dist/esm/proxy/ProjectRegistry.js.map +1 -1
- package/dist/esm/subconscious/HostRecall.d.ts +36 -3
- package/dist/esm/subconscious/HostRecall.d.ts.map +1 -1
- package/dist/esm/subconscious/HostRecall.js +159 -36
- package/dist/esm/subconscious/HostRecall.js.map +1 -1
- package/dist/esm/subconscious/NarrowEvidence.d.ts +47 -0
- package/dist/esm/subconscious/NarrowEvidence.d.ts.map +1 -0
- package/dist/esm/subconscious/NarrowEvidence.js +211 -0
- package/dist/esm/subconscious/NarrowEvidence.js.map +1 -0
- package/dist/esm/subconscious/TheBrainV2.d.ts +37 -0
- package/dist/esm/subconscious/TheBrainV2.d.ts.map +1 -1
- package/dist/esm/subconscious/TheBrainV2.js +146 -14
- package/dist/esm/subconscious/TheBrainV2.js.map +1 -1
- package/dist/esm/subconscious/freshness/LocalFsResolver.d.ts.map +1 -1
- package/dist/esm/subconscious/freshness/LocalFsResolver.js +17 -0
- package/dist/esm/subconscious/freshness/LocalFsResolver.js.map +1 -1
- package/dist/esm/subconscious/recallDigest.d.ts +42 -0
- package/dist/esm/subconscious/recallDigest.d.ts.map +1 -0
- package/dist/esm/subconscious/recallDigest.js +87 -0
- package/dist/esm/subconscious/recallDigest.js.map +1 -0
- package/dist/esm/utils/OtherLanguageSymbols.d.ts +31 -0
- package/dist/esm/utils/OtherLanguageSymbols.d.ts.map +1 -0
- package/dist/esm/utils/OtherLanguageSymbols.js +275 -0
- package/dist/esm/utils/OtherLanguageSymbols.js.map +1 -0
- package/dist/esm/utils/SavingsLedger.d.ts +27 -0
- package/dist/esm/utils/SavingsLedger.d.ts.map +1 -1
- package/dist/esm/utils/SavingsLedger.js +51 -0
- package/dist/esm/utils/SavingsLedger.js.map +1 -1
- package/dist/esm/utils/StoreDraft.d.ts +12 -0
- package/dist/esm/utils/StoreDraft.d.ts.map +1 -1
- package/dist/esm/utils/StoreDraft.js +52 -1
- package/dist/esm/utils/StoreDraft.js.map +1 -1
- package/dist/esm/utils/SymbolSurgicalContext.d.ts +2 -0
- 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/reportSavings.d.ts +17 -4
- package/dist/esm/utils/reportSavings.d.ts.map +1 -1
- package/dist/esm/utils/reportSavings.js +65 -22
- package/dist/esm/utils/reportSavings.js.map +1 -1
- package/package.json +2 -1
- package/dashboard/dist/assets/index-BoeQau6n.css +0 -1
- package/dashboard/dist/assets/index-Clf3qR64.js +0 -451
- package/dist/cjs/infra/analyzers/DriftDetector.d.ts +0 -4
- package/dist/cjs/infra/analyzers/DriftDetector.d.ts.map +0 -1
- package/dist/cjs/infra/analyzers/DriftDetector.js +0 -88
- package/dist/cjs/infra/analyzers/DriftDetector.js.map +0 -1
- package/dist/cjs/infra/analyzers/InfraAnalyzer.d.ts +0 -3
- package/dist/cjs/infra/analyzers/InfraAnalyzer.d.ts.map +0 -1
- package/dist/cjs/infra/analyzers/InfraAnalyzer.js +0 -73
- package/dist/cjs/infra/analyzers/InfraAnalyzer.js.map +0 -1
- package/dist/cjs/infra/config.d.ts +0 -17
- package/dist/cjs/infra/config.d.ts.map +0 -1
- package/dist/cjs/infra/config.js +0 -111
- package/dist/cjs/infra/config.js.map +0 -1
- package/dist/cjs/infra/errorCause.d.ts +0 -36
- package/dist/cjs/infra/errorCause.d.ts.map +0 -1
- package/dist/cjs/infra/errorCause.js +0 -143
- package/dist/cjs/infra/errorCause.js.map +0 -1
- package/dist/cjs/infra/providers/InfraProvider.d.ts +0 -9
- package/dist/cjs/infra/providers/InfraProvider.d.ts.map +0 -1
- package/dist/cjs/infra/providers/InfraProvider.js +0 -3
- package/dist/cjs/infra/providers/InfraProvider.js.map +0 -1
- package/dist/cjs/infra/providers/JenkinsProvider.d.ts +0 -16
- package/dist/cjs/infra/providers/JenkinsProvider.d.ts.map +0 -1
- package/dist/cjs/infra/providers/JenkinsProvider.js +0 -193
- package/dist/cjs/infra/providers/JenkinsProvider.js.map +0 -1
- package/dist/cjs/infra/providers/OKDProvider.d.ts +0 -24
- package/dist/cjs/infra/providers/OKDProvider.d.ts.map +0 -1
- package/dist/cjs/infra/providers/OKDProvider.js +0 -296
- package/dist/cjs/infra/providers/OKDProvider.js.map +0 -1
- package/dist/cjs/infra/providers/TerraformProvider.d.ts +0 -17
- package/dist/cjs/infra/providers/TerraformProvider.d.ts.map +0 -1
- package/dist/cjs/infra/providers/TerraformProvider.js +0 -111
- package/dist/cjs/infra/providers/TerraformProvider.js.map +0 -1
- package/dist/cjs/infra/providers/index.d.ts +0 -9
- package/dist/cjs/infra/providers/index.d.ts.map +0 -1
- package/dist/cjs/infra/providers/index.js +0 -34
- package/dist/cjs/infra/providers/index.js.map +0 -1
- package/dist/cjs/infra/templates/jenkins/index.d.ts +0 -15
- package/dist/cjs/infra/templates/jenkins/index.d.ts.map +0 -1
- package/dist/cjs/infra/templates/jenkins/index.js +0 -128
- package/dist/cjs/infra/templates/jenkins/index.js.map +0 -1
- package/dist/cjs/infra/templates/okd/index.d.ts +0 -31
- package/dist/cjs/infra/templates/okd/index.d.ts.map +0 -1
- package/dist/cjs/infra/templates/okd/index.js +0 -149
- package/dist/cjs/infra/templates/okd/index.js.map +0 -1
- package/dist/esm/infra/analyzers/DriftDetector.d.ts +0 -4
- package/dist/esm/infra/analyzers/DriftDetector.d.ts.map +0 -1
- package/dist/esm/infra/analyzers/DriftDetector.js +0 -84
- package/dist/esm/infra/analyzers/DriftDetector.js.map +0 -1
- package/dist/esm/infra/analyzers/InfraAnalyzer.d.ts +0 -3
- package/dist/esm/infra/analyzers/InfraAnalyzer.d.ts.map +0 -1
- package/dist/esm/infra/analyzers/InfraAnalyzer.js +0 -70
- package/dist/esm/infra/analyzers/InfraAnalyzer.js.map +0 -1
- package/dist/esm/infra/config.d.ts +0 -17
- package/dist/esm/infra/config.d.ts.map +0 -1
- package/dist/esm/infra/config.js +0 -101
- package/dist/esm/infra/config.js.map +0 -1
- package/dist/esm/infra/errorCause.d.ts +0 -36
- package/dist/esm/infra/errorCause.d.ts.map +0 -1
- package/dist/esm/infra/errorCause.js +0 -138
- package/dist/esm/infra/errorCause.js.map +0 -1
- package/dist/esm/infra/providers/InfraProvider.d.ts +0 -9
- package/dist/esm/infra/providers/InfraProvider.d.ts.map +0 -1
- package/dist/esm/infra/providers/InfraProvider.js +0 -2
- package/dist/esm/infra/providers/InfraProvider.js.map +0 -1
- package/dist/esm/infra/providers/JenkinsProvider.d.ts +0 -16
- package/dist/esm/infra/providers/JenkinsProvider.d.ts.map +0 -1
- package/dist/esm/infra/providers/JenkinsProvider.js +0 -186
- package/dist/esm/infra/providers/JenkinsProvider.js.map +0 -1
- package/dist/esm/infra/providers/OKDProvider.d.ts +0 -24
- package/dist/esm/infra/providers/OKDProvider.d.ts.map +0 -1
- package/dist/esm/infra/providers/OKDProvider.js +0 -292
- package/dist/esm/infra/providers/OKDProvider.js.map +0 -1
- package/dist/esm/infra/providers/TerraformProvider.d.ts +0 -17
- package/dist/esm/infra/providers/TerraformProvider.d.ts.map +0 -1
- package/dist/esm/infra/providers/TerraformProvider.js +0 -107
- package/dist/esm/infra/providers/TerraformProvider.js.map +0 -1
- package/dist/esm/infra/providers/index.d.ts +0 -9
- package/dist/esm/infra/providers/index.d.ts.map +0 -1
- package/dist/esm/infra/providers/index.js +0 -27
- package/dist/esm/infra/providers/index.js.map +0 -1
- package/dist/esm/infra/templates/jenkins/index.d.ts +0 -15
- package/dist/esm/infra/templates/jenkins/index.d.ts.map +0 -1
- package/dist/esm/infra/templates/jenkins/index.js +0 -124
- package/dist/esm/infra/templates/jenkins/index.js.map +0 -1
- package/dist/esm/infra/templates/okd/index.d.ts +0 -31
- package/dist/esm/infra/templates/okd/index.d.ts.map +0 -1
- package/dist/esm/infra/templates/okd/index.js +0 -142
- package/dist/esm/infra/templates/okd/index.js.map +0 -1
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
* has no reason to. This module answers a host PostToolUse hook payload with the same kind of
|
|
9
9
|
* note, at the same three moments:
|
|
10
10
|
*
|
|
11
|
-
* - Reading a file the Brain has memories about →
|
|
11
|
+
* - Reading a file the Brain has memories about → a digest of the most relevant (recallDigest).
|
|
12
12
|
* - Editing a file a documented FAILED attempt depends on → a warning. Plain "this will go
|
|
13
13
|
* stale" notes stay off for native edits: they are the common case and not worth context.
|
|
14
14
|
* - A verdict command (test/build/lint) failing with an error the Brain already has a recorded
|
|
@@ -28,12 +28,13 @@
|
|
|
28
28
|
*/
|
|
29
29
|
import fs from 'fs';
|
|
30
30
|
import path from 'path';
|
|
31
|
-
import { deriveProjectId, entrySource, getBrain } from './TheBrainV2.js';
|
|
31
|
+
import { deriveProjectId, entrySource, getBrain, tokenize } from './TheBrainV2.js';
|
|
32
32
|
import { repoRoot } from './TeamBrain.js';
|
|
33
33
|
import { extractFailure, hookVerdict, isVerdictCommand } from '../utils/FixCapture.js';
|
|
34
34
|
import { ageLabel } from '../utils/ageLabel.js';
|
|
35
35
|
import { consumeStoreDraft } from '../utils/StoreDraft.js';
|
|
36
36
|
import { staleMcpProcessNote } from '../mcp/staleBuild.js';
|
|
37
|
+
import { digestFileHits, formatFileDigest, recallableHits } from './recallDigest.js';
|
|
37
38
|
const STATE_FILE = path.join('.lemma', 'session', 'host-recall.json');
|
|
38
39
|
/**
|
|
39
40
|
* BM25 similarity is normalized against the corpus, so the top result of any query scores
|
|
@@ -75,12 +76,12 @@ function fileNote(brain, toolName, filePath) {
|
|
|
75
76
|
return null;
|
|
76
77
|
const name = path.basename(filePath);
|
|
77
78
|
if (READ_TOOLS.has(toolName)) {
|
|
78
|
-
const
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
return { key: `read::${path.resolve(filePath)}::${ids.join(',')}`, text };
|
|
79
|
+
const hits = recallableHits(brain, result.hits);
|
|
80
|
+
if (hits.length === 0)
|
|
81
|
+
return null;
|
|
82
|
+
const ids = hits.map((h) => h.id).sort();
|
|
83
|
+
const digest = digestFileHits(brain, hits);
|
|
84
|
+
return { key: `read::${path.resolve(filePath)}::${ids.join(',')}`, text: formatFileDigest(name, digest), offered: digest.ids, trigger: 'read' };
|
|
84
85
|
}
|
|
85
86
|
// Native edits: only the escalated case. "N memories will go stale" on every edit is noise.
|
|
86
87
|
if (result.failedHits.length === 0)
|
|
@@ -89,6 +90,8 @@ function fileNote(brain, toolName, filePath) {
|
|
|
89
90
|
return {
|
|
90
91
|
key: `edit::${path.resolve(filePath)}::${failedIds.join(',')}`,
|
|
91
92
|
text: `⚠️ Lemma Brain: ${failedIds.join(', ')} document an approach to ${name} that was tried and FAILED. get_memory them before continuing down this path.`,
|
|
93
|
+
offered: failedIds,
|
|
94
|
+
trigger: 'edit',
|
|
92
95
|
};
|
|
93
96
|
}
|
|
94
97
|
function headlineTerms(text) {
|
|
@@ -133,6 +136,8 @@ function failureNote(brain, root, output) {
|
|
|
133
136
|
return {
|
|
134
137
|
key: `fix::${match.id}`,
|
|
135
138
|
text: `🧠 Lemma Brain has a recorded fix for a failure like this one (id ${match.id}): "${match.query.slice(0, 120)}". get_memory ${match.id} for the files and diff that fixed it.`,
|
|
139
|
+
offered: [match.id],
|
|
140
|
+
trigger: 'failure',
|
|
136
141
|
};
|
|
137
142
|
}
|
|
138
143
|
/**
|
|
@@ -140,9 +145,13 @@ function failureNote(brain, root, output) {
|
|
|
140
145
|
* Never throws: a recall hint must never be the reason a tool call reports an error.
|
|
141
146
|
*/
|
|
142
147
|
export function recallForHookPayload(payload, cwd, brain) {
|
|
148
|
+
return hookRecall(payload, cwd, brain)?.text ?? '';
|
|
149
|
+
}
|
|
150
|
+
/** recallForHookPayload with what the note offered, for reporting. Null when there's no note. */
|
|
151
|
+
export function hookRecall(payload, cwd, brain) {
|
|
143
152
|
try {
|
|
144
153
|
if (!payload || typeof payload !== 'object')
|
|
145
|
-
return
|
|
154
|
+
return null;
|
|
146
155
|
const p = payload;
|
|
147
156
|
const toolName = typeof p.tool_name === 'string' ? p.tool_name : '';
|
|
148
157
|
const root = repoRoot(cwd || p.cwd || process.cwd());
|
|
@@ -151,31 +160,31 @@ export function recallForHookPayload(payload, cwd, brain) {
|
|
|
151
160
|
if (READ_TOOLS.has(toolName) || EDIT_TOOLS.has(toolName)) {
|
|
152
161
|
const raw = p.tool_input?.file_path ?? p.tool_input?.notebook_path;
|
|
153
162
|
if (typeof raw !== 'string' || !raw)
|
|
154
|
-
return
|
|
163
|
+
return null;
|
|
155
164
|
const filePath = path.isAbsolute(raw) ? raw : path.join(root, raw);
|
|
156
165
|
note = fileNote(b, toolName, filePath);
|
|
157
166
|
}
|
|
158
167
|
else if (toolName === 'Bash') {
|
|
159
168
|
const command = p.tool_input?.command;
|
|
160
169
|
if (typeof command !== 'string' || !isVerdictCommand(command))
|
|
161
|
-
return
|
|
170
|
+
return null;
|
|
162
171
|
const verdict = hookVerdict(p);
|
|
163
172
|
if (!verdict || verdict.passed)
|
|
164
|
-
return
|
|
173
|
+
return null;
|
|
165
174
|
note = failureNote(b, root, verdict.output);
|
|
166
175
|
}
|
|
167
176
|
if (!note)
|
|
168
|
-
return
|
|
177
|
+
return null;
|
|
169
178
|
const sessionId = typeof p.session_id === 'string' ? p.session_id : '';
|
|
170
179
|
const state = readState(root, sessionId);
|
|
171
180
|
if (state.noted.includes(note.key))
|
|
172
|
-
return
|
|
181
|
+
return null;
|
|
173
182
|
state.noted.push(note.key);
|
|
174
183
|
writeState(root, state);
|
|
175
|
-
return note.text;
|
|
184
|
+
return { text: note.text, offered: note.offered, trigger: note.trigger };
|
|
176
185
|
}
|
|
177
186
|
catch {
|
|
178
|
-
return
|
|
187
|
+
return null;
|
|
179
188
|
}
|
|
180
189
|
}
|
|
181
190
|
/**
|
|
@@ -190,20 +199,52 @@ export function isStatusQuestion(prompt) {
|
|
|
190
199
|
}
|
|
191
200
|
/** At most this many memories are named in one prompt note. */
|
|
192
201
|
const MAX_PROMPT_HITS = 3;
|
|
193
|
-
/**
|
|
202
|
+
/**
|
|
203
|
+
* Share of the prompt's information (IDF-weighted) a memory headline must carry: the best-ranked
|
|
204
|
+
* memory needs PROMPT_TOP_COVERAGE, the next ones PROMPT_MIN_COVERAGE. Measured on Lemma's own
|
|
205
|
+
* Brain: 13 of 35 real questions get the right memory and none a wrong one, while 1 of 40
|
|
206
|
+
* unrelated work prompts gets an offer. The lexical rank is right far more often than any
|
|
207
|
+
* single memory's coverage says, so the top result gets the lower bar.
|
|
208
|
+
*/
|
|
209
|
+
const PROMPT_TOP_COVERAGE = 0.4;
|
|
194
210
|
const PROMPT_MIN_COVERAGE = 0.5;
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
211
|
+
/** Prompts with fewer informative words ("run the tests", "commit and push") carry no topic. */
|
|
212
|
+
const PROMPT_MIN_UNITS = 3;
|
|
213
|
+
/** Each word of `text` with its index expansions (stem, synonym tag); stop words drop out. */
|
|
214
|
+
function wordUnits(text) {
|
|
215
|
+
const words = new Set(text
|
|
216
|
+
.normalize('NFD')
|
|
217
|
+
.replace(/[\u0300-\u036f]/g, '')
|
|
218
|
+
.toLowerCase()
|
|
219
|
+
.split(/[^a-z0-9]+/)
|
|
220
|
+
.filter(Boolean));
|
|
221
|
+
return [...words].map((w) => tokenize(w)).filter((u) => u.length > 0);
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* How much of what the prompt is about appears in a memory's headline: the IDF-weighted share
|
|
225
|
+
* of the prompt's words (or their stem / bilingual synonym) found among the headline's terms.
|
|
226
|
+
*
|
|
227
|
+
* This replaced "share of the headline found in the prompt", which needed a short prompt to
|
|
228
|
+
* restate half of a long, specific headline: measured on Lemma's own Brain it offered the right
|
|
229
|
+
* memory for 1 of 30 real questions; weighted toward the prompt's rare words it offers several
|
|
230
|
+
* times more and never a wrong one (thresholds above). Prompts with under PROMPT_MIN_UNITS
|
|
231
|
+
* informative words are skipped, which is where the false offers were. This note arrives unasked on every prompt, so it keeps
|
|
232
|
+
* a floor — search_memory, which the agent calls on purpose, does not.
|
|
233
|
+
*/
|
|
234
|
+
export function promptCoverage(headline, prompt, idf) {
|
|
235
|
+
const units = wordUnits(prompt);
|
|
236
|
+
if (units.length < PROMPT_MIN_UNITS)
|
|
200
237
|
return 0;
|
|
201
|
-
const
|
|
202
|
-
let
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
238
|
+
const head = new Set(tokenize(headline));
|
|
239
|
+
let total = 0;
|
|
240
|
+
let covered = 0;
|
|
241
|
+
for (const unit of units) {
|
|
242
|
+
const weight = Math.max(...unit.map(idf));
|
|
243
|
+
total += weight;
|
|
244
|
+
if (unit.some((t) => head.has(t)))
|
|
245
|
+
covered += weight;
|
|
246
|
+
}
|
|
247
|
+
return total > 0 ? covered / total : 0;
|
|
207
248
|
}
|
|
208
249
|
function promptKey(prompt) {
|
|
209
250
|
let h = 0;
|
|
@@ -212,27 +253,37 @@ function promptKey(prompt) {
|
|
|
212
253
|
return `prompt::${h}`;
|
|
213
254
|
}
|
|
214
255
|
export function recallForPrompt(payload, cwd, brain, options = {}) {
|
|
256
|
+
return promptRecall(payload, cwd, brain, options)?.text ?? '';
|
|
257
|
+
}
|
|
258
|
+
/** recallForPrompt with the memories it offered, for reporting. Null when there's nothing to say. */
|
|
259
|
+
export function promptRecall(payload, cwd, brain, options = {}) {
|
|
215
260
|
try {
|
|
216
261
|
if (!payload || typeof payload !== 'object')
|
|
217
|
-
return
|
|
262
|
+
return null;
|
|
218
263
|
const p = payload;
|
|
219
264
|
const prompt = typeof p.prompt === 'string' ? p.prompt.trim() : '';
|
|
220
265
|
// Slash commands and one-word replies carry no topic worth a lookup.
|
|
221
266
|
if (prompt.length < 12 || prompt.startsWith('/'))
|
|
222
|
-
return
|
|
267
|
+
return null;
|
|
223
268
|
const root = repoRoot(cwd || p.cwd || process.cwd());
|
|
224
269
|
const b = brain ?? getBrain();
|
|
225
270
|
const lines = [];
|
|
226
271
|
const hits = b
|
|
227
272
|
.search(prompt.slice(0, 600), 8, 0, { countStats: false, projectId: deriveProjectId(root), strictProject: true })
|
|
228
|
-
.filter((r) =>
|
|
273
|
+
.filter((r, rank) => promptCoverage(r.query, prompt, (t) => b.termIdf(t)) >= (rank === 0 ? PROMPT_TOP_COVERAGE : PROMPT_MIN_COVERAGE))
|
|
274
|
+
.filter((r) => {
|
|
275
|
+
const entry = b.getEntry(r.id);
|
|
276
|
+
return !entry || entrySource(entry) !== 'auto-git';
|
|
277
|
+
})
|
|
229
278
|
.slice(0, MAX_PROMPT_HITS);
|
|
230
279
|
if (hits.length > 0) {
|
|
280
|
+
// With the headline: an id alone gives the agent nothing to judge relevance by.
|
|
231
281
|
const described = hits.map((r) => {
|
|
232
282
|
const verdict = !r.fresh ? 'STALE' : r.untracked ? 'untracked' : 'fresh';
|
|
233
|
-
|
|
283
|
+
const head = r.query.replace(/\s+/g, ' ').trim();
|
|
284
|
+
return ` • ${r.id} (${verdict}, ${ageLabel(r.timestamp)}${r.outcome === 'failed' ? ', FAILED approach' : ''}): ${head.length > 110 ? `${head.slice(0, 109)}…` : head}`;
|
|
234
285
|
});
|
|
235
|
-
lines.push(`🧠 Lemma Brain has ${plural(hits.length, 'a memory', 'memories')} that may bear on this
|
|
286
|
+
lines.push(`🧠 Lemma Brain has ${plural(hits.length, 'a memory', 'memories')} that may bear on this:`, ...described, `get_memory the one that applies before relying on it; a STALE one must be re-checked against the current code.`);
|
|
236
287
|
}
|
|
237
288
|
if (isStatusQuestion(prompt)) {
|
|
238
289
|
lines.push('🧠 This is a status question: recalled memories and notes go stale as MRs merge and issues close. Verify live state (git fetch/log, gh/glab) before saying what is pending.');
|
|
@@ -242,9 +293,11 @@ export function recallForPrompt(payload, cwd, brain, options = {}) {
|
|
|
242
293
|
const out = [];
|
|
243
294
|
// Topical lines are deduped per prompt; the other two have their own one-shot rules.
|
|
244
295
|
const key = promptKey(prompt);
|
|
296
|
+
let offered = [];
|
|
245
297
|
if (lines.length > 0 && !state.noted.includes(key)) {
|
|
246
298
|
out.push(...lines);
|
|
247
299
|
state.noted.push(key);
|
|
300
|
+
offered = hits.map((r) => r.id);
|
|
248
301
|
}
|
|
249
302
|
// A build newer than the running MCP process is spoken once per host session: it is true
|
|
250
303
|
// until the user reconnects, and the tool-result suffix never reaches someone who does not
|
|
@@ -260,12 +313,82 @@ export function recallForPrompt(payload, cwd, brain, options = {}) {
|
|
|
260
313
|
if (draft)
|
|
261
314
|
out.push(draft);
|
|
262
315
|
if (out.length === 0)
|
|
263
|
-
return
|
|
316
|
+
return null;
|
|
264
317
|
writeState(root, state);
|
|
265
|
-
return out.join('\n');
|
|
318
|
+
return { text: out.join('\n'), offered, trigger: 'prompt' };
|
|
266
319
|
}
|
|
267
320
|
catch {
|
|
268
|
-
return
|
|
321
|
+
return null;
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
// ── SessionStart: the briefing that used to depend on the agent calling for it ──────────
|
|
325
|
+
//
|
|
326
|
+
// CLAUDE.md said "call get_project_onboarding at the start" and "search_memory before
|
|
327
|
+
// investigating". Both were prose the agent could weigh and skip — and did: a session could
|
|
328
|
+
// run start to finish on native tools and never learn the Brain held the answer. A SessionStart
|
|
329
|
+
// hook puts the essentials in context before the first prompt, with no tool call to forget.
|
|
330
|
+
/** Tools the playbook names, in one ToolSearch line for hosts that defer MCP schemas. */
|
|
331
|
+
export const PLAYBOOK_TOOLS = [
|
|
332
|
+
'search_memory',
|
|
333
|
+
'get_memory',
|
|
334
|
+
'verify_memory',
|
|
335
|
+
'store_memory',
|
|
336
|
+
'update_memory',
|
|
337
|
+
'read_workspace_file',
|
|
338
|
+
'search_workspace',
|
|
339
|
+
];
|
|
340
|
+
/**
|
|
341
|
+
* When to reach for Lemma — triggers, not judgment calls. "Use it when it adds value" let every
|
|
342
|
+
* individual call look cheaper native; these are the moments where Lemma does something the
|
|
343
|
+
* native tools can't, so there is no cheaper alternative to weigh.
|
|
344
|
+
*/
|
|
345
|
+
export const LEMMA_PLAYBOOK = [
|
|
346
|
+
'Lemma playbook — follow these triggers:',
|
|
347
|
+
' - Before investigating a bug, error or "why does X": search_memory with the error text or question.',
|
|
348
|
+
' - A 🧠 note names memories: get_memory the top one before re-deriving what it says.',
|
|
349
|
+
' - A fix is verified (tests pass, build succeeds, user confirms): store_memory with filePaths — the root cause, trap or failed approach, not a summary of what changed (git log has that).',
|
|
350
|
+
' - A memory turned out outdated or wrong: update_memory / forget_memory — never store a near-duplicate.',
|
|
351
|
+
' - Reading code you have not located yet, or that may hold secrets: search_workspace / read_workspace_file (they scrub keys).',
|
|
352
|
+
`If Lemma's tools are deferred, load them in ONE ToolSearch: select:${PLAYBOOK_TOOLS.map((t) => `mcp__lemma__${t}`).join(',')}`,
|
|
353
|
+
].join('\n');
|
|
354
|
+
const BRIEFING_MEMORIES = 3;
|
|
355
|
+
export function sessionBriefing(payload, cwd, brain) {
|
|
356
|
+
return sessionRecall(payload, cwd, brain)?.text ?? '';
|
|
357
|
+
}
|
|
358
|
+
/** sessionBriefing with the memories it named, for reporting. */
|
|
359
|
+
export function sessionRecall(payload, cwd, brain) {
|
|
360
|
+
try {
|
|
361
|
+
const p = payload && typeof payload === 'object' ? payload : {};
|
|
362
|
+
const root = repoRoot(cwd || p.cwd || process.cwd());
|
|
363
|
+
const b = brain ?? getBrain();
|
|
364
|
+
const projectId = deriveProjectId(root);
|
|
365
|
+
const lines = [];
|
|
366
|
+
let offered = [];
|
|
367
|
+
const { total, items } = b.list({ projectId, limit: 50 });
|
|
368
|
+
if (total === 0) {
|
|
369
|
+
lines.push(`🧠 Lemma is active in ${path.basename(root)}. The Brain has no memories for this project yet — store_memory once a fix is verified so the next session starts ahead.`);
|
|
370
|
+
}
|
|
371
|
+
else {
|
|
372
|
+
// Newest memories someone wrote on purpose; commit-log ingests are recalled per file instead.
|
|
373
|
+
const deliberate = items
|
|
374
|
+
.filter((i) => {
|
|
375
|
+
const entry = b.getEntry(i.id);
|
|
376
|
+
return !!entry && entrySource(entry) !== 'auto-git';
|
|
377
|
+
})
|
|
378
|
+
.slice(0, BRIEFING_MEMORIES);
|
|
379
|
+
lines.push(`🧠 Lemma is active in ${path.basename(root)}: the Brain holds ${total} ${plural(total, 'memory', 'memories')} for this project.`);
|
|
380
|
+
if (deliberate.length > 0) {
|
|
381
|
+
lines.push('Most recent decisions and fixes:');
|
|
382
|
+
const digest = digestFileHits(b, deliberate, BRIEFING_MEMORIES);
|
|
383
|
+
lines.push(...digest.lines);
|
|
384
|
+
offered = digest.ids;
|
|
385
|
+
}
|
|
386
|
+
}
|
|
387
|
+
lines.push(LEMMA_PLAYBOOK);
|
|
388
|
+
return { text: lines.join('\n'), offered, trigger: 'session' };
|
|
389
|
+
}
|
|
390
|
+
catch {
|
|
391
|
+
return null;
|
|
269
392
|
}
|
|
270
393
|
}
|
|
271
394
|
//# sourceMappingURL=HostRecall.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HostRecall.js","sourceRoot":"","sources":["../../../src/subconscious/HostRecall.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"HostRecall.js","sourceRoot":"","sources":["../../../src/subconscious/HostRecall.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* NarrowEvidence — track the code a memory talks about, not the whole file it lives in.
|
|
3
|
+
*
|
|
4
|
+
* A memory anchored to a whole file goes stale on any edit anywhere in that file. On Lemma's
|
|
5
|
+
* own Brain that was 29 of 38 memories, most of them pointing at hub files (lemma-proxy.ts,
|
|
6
|
+
* init.js, tools.ts) that change daily — so STALE stopped meaning anything and an agent could
|
|
7
|
+
* no longer tell a memory whose subject changed from one whose file merely got longer. The
|
|
8
|
+
* Brain already tracks symbols precisely; callers almost never pass them. A memory usually
|
|
9
|
+
* names what it is about (`stripComments`, `safeResolvePath`, `TheBrainV2.search`), so those
|
|
10
|
+
* names are read out of its text and tracked instead of the file.
|
|
11
|
+
*
|
|
12
|
+
* Two uses:
|
|
13
|
+
* - narrowEvidence: at store/update time, swap a code file for the symbols the text names.
|
|
14
|
+
* - narrowStaleEntry: for a memory already stale on a whole file, prove from git that the
|
|
15
|
+
* named symbols are unchanged since it was stored, and only then re-point it at them.
|
|
16
|
+
*/
|
|
17
|
+
import type { BrainEntry, SymbolRef } from './TheBrainV2.js';
|
|
18
|
+
/**
|
|
19
|
+
* Names in prose that look like code: camelCase, PascalCase with a second capital,
|
|
20
|
+
* snake_case, `Class.member`, or anything in backticks. A plain word ("search", "store") is
|
|
21
|
+
* left out even when a method has that name — prose uses it in its ordinary sense.
|
|
22
|
+
*/
|
|
23
|
+
export declare function codeIdentifiers(text: string): string[];
|
|
24
|
+
export interface NarrowResult {
|
|
25
|
+
filePaths: string[];
|
|
26
|
+
symbols: SymbolRef[];
|
|
27
|
+
/** Files swapped for symbols, as "file → a, b". Empty when nothing was narrowed. */
|
|
28
|
+
narrowed: string[];
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Swap each code file for the symbols `text` names in it. A file the text names nothing in
|
|
32
|
+
* (or that isn't code, or can't be read) stays tracked whole — narrowing only ever replaces
|
|
33
|
+
* a file with something the memory explicitly points at.
|
|
34
|
+
*/
|
|
35
|
+
export declare function narrowEvidence(filePaths: string[], text: string, root?: string): NarrowResult;
|
|
36
|
+
/**
|
|
37
|
+
* For a memory stale on whole files: the narrower evidence it can be re-pointed at, or null.
|
|
38
|
+
*
|
|
39
|
+
* Only returned when it is provable that what the memory talks about did not change. For each
|
|
40
|
+
* tracked file that changed, the content the memory was anchored to is recovered from the
|
|
41
|
+
* commit it was stored on — and accepted only if it hashes to exactly the stored hash (an
|
|
42
|
+
* uncommitted edit at store time would make the commit the wrong baseline). Every symbol the
|
|
43
|
+
* memory names in that file must then be textually identical then and now. A file that is
|
|
44
|
+
* unchanged stays tracked whole; anything unprovable leaves the memory stale.
|
|
45
|
+
*/
|
|
46
|
+
export declare function narrowStaleEntry(entry: Pick<BrainEntry, 'query' | 'response' | 'fileHashes' | 'symbolHashes' | 'claims' | 'gitCommit'>, root: string): NarrowResult | null;
|
|
47
|
+
//# sourceMappingURL=NarrowEvidence.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NarrowEvidence.d.ts","sourceRoot":"","sources":["../../../src/subconscious/NarrowEvidence.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAOH,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAQ1D;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAUtD;AAqDD,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,OAAO,EAAE,SAAS,EAAE,CAAC;IACrB,oFAAoF;IACpF,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,MAAsB,GAAG,YAAY,CAqB5G;AAkCD;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE,OAAO,GAAG,UAAU,GAAG,YAAY,GAAG,cAAc,GAAG,QAAQ,GAAG,WAAW,CAAC,EACtG,IAAI,EAAE,MAAM,GACX,YAAY,GAAG,IAAI,CAqCrB"}
|
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* NarrowEvidence — track the code a memory talks about, not the whole file it lives in.
|
|
3
|
+
*
|
|
4
|
+
* A memory anchored to a whole file goes stale on any edit anywhere in that file. On Lemma's
|
|
5
|
+
* own Brain that was 29 of 38 memories, most of them pointing at hub files (lemma-proxy.ts,
|
|
6
|
+
* init.js, tools.ts) that change daily — so STALE stopped meaning anything and an agent could
|
|
7
|
+
* no longer tell a memory whose subject changed from one whose file merely got longer. The
|
|
8
|
+
* Brain already tracks symbols precisely; callers almost never pass them. A memory usually
|
|
9
|
+
* names what it is about (`stripComments`, `safeResolvePath`, `TheBrainV2.search`), so those
|
|
10
|
+
* names are read out of its text and tracked instead of the file.
|
|
11
|
+
*
|
|
12
|
+
* Two uses:
|
|
13
|
+
* - narrowEvidence: at store/update time, swap a code file for the symbols the text names.
|
|
14
|
+
* - narrowStaleEntry: for a memory already stale on a whole file, prove from git that the
|
|
15
|
+
* named symbols are unchanged since it was stored, and only then re-point it at them.
|
|
16
|
+
*/
|
|
17
|
+
import fs from 'fs';
|
|
18
|
+
import path from 'path';
|
|
19
|
+
import crypto from 'crypto';
|
|
20
|
+
import { execFileSync } from 'child_process';
|
|
21
|
+
import * as ts from 'typescript';
|
|
22
|
+
import { findOtherLanguageSymbol, supportsOtherLanguage } from '../utils/OtherLanguageSymbols.js';
|
|
23
|
+
const CODE_EXT = /\.(ts|tsx|js|jsx|mjs|cjs|mts|cts)$/i;
|
|
24
|
+
/** A symbol bigger than this share of its file is the file (a class wrapping everything). */
|
|
25
|
+
const MAX_SYMBOL_SHARE = 0.4;
|
|
26
|
+
const MAX_SYMBOLS_PER_FILE = 8;
|
|
27
|
+
/**
|
|
28
|
+
* Names in prose that look like code: camelCase, PascalCase with a second capital,
|
|
29
|
+
* snake_case, `Class.member`, or anything in backticks. A plain word ("search", "store") is
|
|
30
|
+
* left out even when a method has that name — prose uses it in its ordinary sense.
|
|
31
|
+
*/
|
|
32
|
+
export function codeIdentifiers(text) {
|
|
33
|
+
const out = new Set();
|
|
34
|
+
for (const m of text.matchAll(/`([A-Za-z_$][\w$]*(?:\.[A-Za-z_$][\w$]*)?)(?:\(\))?`/g))
|
|
35
|
+
out.add(m[1]);
|
|
36
|
+
for (const m of text.matchAll(/(?<![\w$.])([A-Za-z_$][\w$]*(?:\.[A-Za-z_$][\w$]*)?)(?![\w$])/g)) {
|
|
37
|
+
const id = m[1];
|
|
38
|
+
if (id.length < 4)
|
|
39
|
+
continue;
|
|
40
|
+
const codeLike = id.includes('.') || id.includes('_') || /[a-z][A-Z]/.test(id) || /^[A-Z][a-z0-9]+[A-Z]/.test(id);
|
|
41
|
+
if (codeLike)
|
|
42
|
+
out.add(id);
|
|
43
|
+
}
|
|
44
|
+
return [...out];
|
|
45
|
+
}
|
|
46
|
+
function parse(fileName, content) {
|
|
47
|
+
return ts.createSourceFile(fileName, content, ts.ScriptTarget.Latest, true);
|
|
48
|
+
}
|
|
49
|
+
function declName(node) {
|
|
50
|
+
if ((ts.isFunctionDeclaration(node) || ts.isClassDeclaration(node) || ts.isInterfaceDeclaration(node) ||
|
|
51
|
+
ts.isTypeAliasDeclaration(node) || ts.isEnumDeclaration(node)) &&
|
|
52
|
+
node.name) {
|
|
53
|
+
return [node.name.text];
|
|
54
|
+
}
|
|
55
|
+
if (ts.isVariableStatement(node)) {
|
|
56
|
+
return node.declarationList.declarations.flatMap((d) => (ts.isIdentifier(d.name) ? [d.name.text] : []));
|
|
57
|
+
}
|
|
58
|
+
return [];
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* A declaration at the top of the file, or `Class.member`. Deliberately not the recursive
|
|
62
|
+
* lookup get_symbol_surgical_context uses: that one also finds locals and object properties
|
|
63
|
+
* (`filePath`, `loopId`), which prose names all the time and which are not what a memory is
|
|
64
|
+
* about. For these names both lookups land on the same node, so the hashes agree.
|
|
65
|
+
*/
|
|
66
|
+
function findDeclaration(sf, name) {
|
|
67
|
+
const [owner, member] = name.split('.');
|
|
68
|
+
const top = sf.statements.find((st) => declName(st).includes(owner));
|
|
69
|
+
if (!top)
|
|
70
|
+
return null;
|
|
71
|
+
if (!member)
|
|
72
|
+
return top;
|
|
73
|
+
if (!ts.isClassDeclaration(top))
|
|
74
|
+
return null;
|
|
75
|
+
return top.members.find((m) => m.name && ts.isIdentifier(m.name) && m.name.text === member) ?? null;
|
|
76
|
+
}
|
|
77
|
+
/** Text of each named symbol found in `content`, skipping ones as big as the file. */
|
|
78
|
+
function symbolTexts(fileName, content, names) {
|
|
79
|
+
const other = supportsOtherLanguage(fileName);
|
|
80
|
+
const sf = other ? null : parse(fileName, content);
|
|
81
|
+
const found = new Map();
|
|
82
|
+
for (const name of names) {
|
|
83
|
+
const text = other ? findOtherLanguageSymbol(fileName, content, name) : (() => {
|
|
84
|
+
const node = findDeclaration(sf, name);
|
|
85
|
+
return node ? node.getText(sf) : null;
|
|
86
|
+
})();
|
|
87
|
+
if (text === null)
|
|
88
|
+
continue;
|
|
89
|
+
if (text.length > content.length * MAX_SYMBOL_SHARE)
|
|
90
|
+
continue;
|
|
91
|
+
found.set(name, text);
|
|
92
|
+
if (found.size >= MAX_SYMBOLS_PER_FILE)
|
|
93
|
+
break;
|
|
94
|
+
}
|
|
95
|
+
return found;
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Swap each code file for the symbols `text` names in it. A file the text names nothing in
|
|
99
|
+
* (or that isn't code, or can't be read) stays tracked whole — narrowing only ever replaces
|
|
100
|
+
* a file with something the memory explicitly points at.
|
|
101
|
+
*/
|
|
102
|
+
export function narrowEvidence(filePaths, text, root = process.cwd()) {
|
|
103
|
+
const ids = codeIdentifiers(text);
|
|
104
|
+
const result = { filePaths: [], symbols: [], narrowed: [] };
|
|
105
|
+
for (const fp of filePaths) {
|
|
106
|
+
const abs = path.resolve(root, fp);
|
|
107
|
+
let found = new Map();
|
|
108
|
+
if (ids.length > 0 && (CODE_EXT.test(abs) || supportsOtherLanguage(abs))) {
|
|
109
|
+
try {
|
|
110
|
+
found = symbolTexts(abs, fs.readFileSync(abs, 'utf8'), ids);
|
|
111
|
+
}
|
|
112
|
+
catch {
|
|
113
|
+
// Unreadable: keep the file, whose hash will say MISSING honestly.
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
if (found.size === 0) {
|
|
117
|
+
result.filePaths.push(fp);
|
|
118
|
+
continue;
|
|
119
|
+
}
|
|
120
|
+
for (const name of found.keys())
|
|
121
|
+
result.symbols.push({ filePath: fp, symbolName: name });
|
|
122
|
+
result.narrowed.push(`${fp} → ${[...found.keys()].join(', ')}`);
|
|
123
|
+
}
|
|
124
|
+
return result;
|
|
125
|
+
}
|
|
126
|
+
function git(root, args) {
|
|
127
|
+
try {
|
|
128
|
+
return execFileSync('git', ['-C', root, ...args], { encoding: 'utf8', stdio: ['ignore', 'pipe', 'ignore'], maxBuffer: 32 * 1024 * 1024 });
|
|
129
|
+
}
|
|
130
|
+
catch {
|
|
131
|
+
return null;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
const sha256 = (s) => crypto.createHash('sha256').update(s).digest('hex');
|
|
135
|
+
/** Commits after the store commit searched for the anchored content. */
|
|
136
|
+
const MAX_BASELINE_COMMITS = 20;
|
|
137
|
+
/**
|
|
138
|
+
* The file as the memory was anchored to it. Usually that is the store commit, but a memory is
|
|
139
|
+
* often stored right after a fix and before it is committed — then the anchored content is in
|
|
140
|
+
* a later commit (the fix itself). Accepted only on an exact hash match either way.
|
|
141
|
+
*/
|
|
142
|
+
function baselineContent(top, commit, rel, storedHash) {
|
|
143
|
+
const at = git(top, ['show', `${commit}:${rel}`]);
|
|
144
|
+
if (at !== null && sha256(at) === storedHash)
|
|
145
|
+
return at;
|
|
146
|
+
const later = (git(top, ['log', '--reverse', '--format=%H', `${commit}..HEAD`, '--', rel]) || '')
|
|
147
|
+
.split('\n')
|
|
148
|
+
.filter(Boolean)
|
|
149
|
+
.slice(0, MAX_BASELINE_COMMITS);
|
|
150
|
+
for (const c of later) {
|
|
151
|
+
const content = git(top, ['show', `${c}:${rel}`]);
|
|
152
|
+
if (content !== null && sha256(content) === storedHash)
|
|
153
|
+
return content;
|
|
154
|
+
}
|
|
155
|
+
return null;
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* For a memory stale on whole files: the narrower evidence it can be re-pointed at, or null.
|
|
159
|
+
*
|
|
160
|
+
* Only returned when it is provable that what the memory talks about did not change. For each
|
|
161
|
+
* tracked file that changed, the content the memory was anchored to is recovered from the
|
|
162
|
+
* commit it was stored on — and accepted only if it hashes to exactly the stored hash (an
|
|
163
|
+
* uncommitted edit at store time would make the commit the wrong baseline). Every symbol the
|
|
164
|
+
* memory names in that file must then be textually identical then and now. A file that is
|
|
165
|
+
* unchanged stays tracked whole; anything unprovable leaves the memory stale.
|
|
166
|
+
*/
|
|
167
|
+
export function narrowStaleEntry(entry, root) {
|
|
168
|
+
if (!entry.fileHashes || !entry.gitCommit || (entry.claims && entry.claims.length > 0))
|
|
169
|
+
return null;
|
|
170
|
+
const top = git(root, ['rev-parse', '--show-toplevel'])?.trim();
|
|
171
|
+
if (!top)
|
|
172
|
+
return null;
|
|
173
|
+
const ids = codeIdentifiers(`${entry.query}\n${entry.response}`);
|
|
174
|
+
const rel = (abs) => path.relative(root, abs);
|
|
175
|
+
const result = { filePaths: [], symbols: [], narrowed: [] };
|
|
176
|
+
for (const [abs, storedHash] of Object.entries(entry.fileHashes)) {
|
|
177
|
+
let now;
|
|
178
|
+
try {
|
|
179
|
+
now = fs.readFileSync(abs, 'utf8');
|
|
180
|
+
}
|
|
181
|
+
catch {
|
|
182
|
+
return null;
|
|
183
|
+
}
|
|
184
|
+
if (sha256(now) === storedHash) {
|
|
185
|
+
result.filePaths.push(rel(abs));
|
|
186
|
+
continue;
|
|
187
|
+
}
|
|
188
|
+
if (!(CODE_EXT.test(abs) || supportsOtherLanguage(abs)) || ids.length === 0)
|
|
189
|
+
return null;
|
|
190
|
+
const then = baselineContent(top, entry.gitCommit, path.relative(top, abs), storedHash);
|
|
191
|
+
if (then === null)
|
|
192
|
+
return null;
|
|
193
|
+
const before = symbolTexts(abs, then, ids);
|
|
194
|
+
if (before.size === 0)
|
|
195
|
+
return null;
|
|
196
|
+
const after = symbolTexts(abs, now, [...before.keys()]);
|
|
197
|
+
for (const [name, text] of before)
|
|
198
|
+
if (after.get(name) !== text)
|
|
199
|
+
return null;
|
|
200
|
+
for (const name of before.keys())
|
|
201
|
+
result.symbols.push({ filePath: rel(abs), symbolName: name });
|
|
202
|
+
result.narrowed.push(`${rel(abs)} → ${[...before.keys()].join(', ')}`);
|
|
203
|
+
}
|
|
204
|
+
// Symbols it already tracked are kept as they are.
|
|
205
|
+
for (const key of Object.keys(entry.symbolHashes || {})) {
|
|
206
|
+
const sep = key.lastIndexOf('::');
|
|
207
|
+
result.symbols.push({ filePath: rel(key.substring(0, sep)), symbolName: key.substring(sep + 2) });
|
|
208
|
+
}
|
|
209
|
+
return result.narrowed.length > 0 ? result : null;
|
|
210
|
+
}
|
|
211
|
+
//# sourceMappingURL=NarrowEvidence.js.map
|