@neurcode-ai/cli 0.17.0 → 0.19.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. package/README.md +3 -2
  2. package/dist/commands/brain.d.ts.map +1 -1
  3. package/dist/commands/brain.js +451 -0
  4. package/dist/commands/brain.js.map +1 -1
  5. package/dist/commands/policy.d.ts.map +1 -1
  6. package/dist/commands/policy.js +296 -0
  7. package/dist/commands/policy.js.map +1 -1
  8. package/dist/commands/runtime-adapter.d.ts +2 -1
  9. package/dist/commands/runtime-adapter.d.ts.map +1 -1
  10. package/dist/commands/runtime-adapter.js +51 -2
  11. package/dist/commands/runtime-adapter.js.map +1 -1
  12. package/dist/commands/session-hook.d.ts +17 -0
  13. package/dist/commands/session-hook.d.ts.map +1 -1
  14. package/dist/commands/session-hook.js +279 -14
  15. package/dist/commands/session-hook.js.map +1 -1
  16. package/dist/runtime-build.json +4 -4
  17. package/dist/utils/agent-adapter-setup.js +1 -1
  18. package/dist/utils/agent-adapter-setup.js.map +1 -1
  19. package/dist/utils/agent-guard.d.ts +1 -0
  20. package/dist/utils/agent-guard.d.ts.map +1 -1
  21. package/dist/utils/agent-guard.js +18 -6
  22. package/dist/utils/agent-guard.js.map +1 -1
  23. package/dist/utils/git-coverage.d.ts.map +1 -1
  24. package/dist/utils/git-coverage.js +1 -0
  25. package/dist/utils/git-coverage.js.map +1 -1
  26. package/dist/utils/local-repo-brain.d.ts +85 -0
  27. package/dist/utils/local-repo-brain.d.ts.map +1 -1
  28. package/dist/utils/local-repo-brain.js +259 -4
  29. package/dist/utils/local-repo-brain.js.map +1 -1
  30. package/dist/utils/proposed-change-analysis.d.ts +20 -0
  31. package/dist/utils/proposed-change-analysis.d.ts.map +1 -0
  32. package/dist/utils/proposed-change-analysis.js +448 -0
  33. package/dist/utils/proposed-change-analysis.js.map +1 -0
  34. package/dist/utils/repo-intelligence-v2.d.ts +28 -0
  35. package/dist/utils/repo-intelligence-v2.d.ts.map +1 -0
  36. package/dist/utils/repo-intelligence-v2.js +174 -0
  37. package/dist/utils/repo-intelligence-v2.js.map +1 -0
  38. package/dist/utils/v0-governance.d.ts +1 -1
  39. package/dist/utils/v0-governance.d.ts.map +1 -1
  40. package/dist/utils/v0-governance.js +86 -15
  41. package/dist/utils/v0-governance.js.map +1 -1
  42. package/package.json +12 -11
  43. package/LICENSE +0 -201
@@ -38,6 +38,7 @@ function isAdmissionSupportArtifactPath(path) {
38
38
  || normalized.startsWith('.neurcode/evidence/')
39
39
  || normalized.startsWith('.neurcode/executions/')
40
40
  || normalized.startsWith('.neurcode/runtime-events/')
41
+ || normalized.startsWith('.neurcode/cache/')
41
42
  || normalized.startsWith('.neurcode/brain/cache/')
42
43
  || normalized === '.neurcode/profile.json'
43
44
  || normalized === '.neurcode/active-session.json'
@@ -1 +1 @@
1
- {"version":3,"file":"git-coverage.js","sourceRoot":"","sources":["../../src/utils/git-coverage.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"git-coverage.js","sourceRoot":"","sources":["../../src/utils/git-coverage.ts"],"names":[],"mappings":"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"}
@@ -9,6 +9,8 @@ export interface LocalRepoBrainFileFact {
9
9
  bytes: number;
10
10
  lineCount: number;
11
11
  fileHash: string;
12
+ mtimeMs: number;
13
+ indexedAt: string;
12
14
  symbolCount: number;
13
15
  importCount: number;
14
16
  sensitiveKinds: LocalRepoBrainSensitiveKind[];
@@ -20,11 +22,21 @@ export interface LocalRepoBrainSymbolFact {
20
22
  file: string;
21
23
  line: number;
22
24
  exported: boolean;
25
+ local: boolean;
26
+ normalizedSignature: string | null;
27
+ normalizedSignatureHash: string | null;
23
28
  signatureHash: string;
24
29
  tokenFingerprintHash: string | null;
25
30
  arity: number | null;
26
31
  language: LocalRepoBrainLanguage;
27
32
  }
33
+ export interface LocalRepoBrainFreshness {
34
+ generatedAt: string;
35
+ gitHead: string | null;
36
+ gitDirty: boolean | null;
37
+ workingTreeStatus: 'clean' | 'dirty' | 'unknown';
38
+ freshnessBasis: 'git-head-and-working-tree' | 'filesystem-scan';
39
+ }
28
40
  export interface LocalRepoBrainImportEdge {
29
41
  fromFile: string;
30
42
  target: string;
@@ -69,6 +81,7 @@ export interface LocalRepoBrainArtifact {
69
81
  generatedAt: string;
70
82
  repoRootHash: string;
71
83
  artifactHash: string;
84
+ freshness: LocalRepoBrainFreshness;
72
85
  privacy: {
73
86
  sourceUploaded: false;
74
87
  sourceStored: false;
@@ -112,7 +125,72 @@ export interface LocalRepoBrainSearchResult {
112
125
  file: string | null;
113
126
  detail: string;
114
127
  }
128
+ export type RepoSymbolDuplicateMode = 'off' | 'warn' | 'block';
129
+ export type RepoSymbolPolicyVerdict = 'ok' | 'warn' | 'block' | 'not_evaluated';
130
+ export interface RepoSymbolPolicySymbolRef {
131
+ file: string;
132
+ name: string;
133
+ kind: LocalRepoBrainSymbolKind;
134
+ language: LocalRepoBrainLanguage;
135
+ exported: boolean;
136
+ local: boolean;
137
+ line: number;
138
+ normalizedSignature: string | null;
139
+ normalizedSignatureHash: string | null;
140
+ signatureHash: string;
141
+ }
142
+ export interface RepoSymbolDuplicateFinding {
143
+ schemaVersion: 'neurcode.repo-symbol-duplicate.v1';
144
+ classification: 'deterministic_symbol_duplicate';
145
+ policyMode: RepoSymbolDuplicateMode;
146
+ verdict: 'warn' | 'block';
147
+ strength: 'exported_symbol' | 'same_function_name' | 'same_local_symbol_name';
148
+ changed: RepoSymbolPolicySymbolRef;
149
+ existing: RepoSymbolPolicySymbolRef[];
150
+ evidence: {
151
+ sourceFree: true;
152
+ repoBrainArtifactHash: string;
153
+ repoBrainGeneratedAt: string;
154
+ repoBrainGitHead: string | null;
155
+ repoBrainWorkingTreeStatus: LocalRepoBrainFreshness['workingTreeStatus'];
156
+ matchingFiles: string[];
157
+ existingSymbolCount: number;
158
+ reasonCodes: string[];
159
+ };
160
+ message: string;
161
+ provenance: 'repo-brain-index';
162
+ }
163
+ export interface RepoSymbolPolicyEvaluation {
164
+ schemaVersion: 'neurcode.repo-symbol-policy.v1';
165
+ evaluated: boolean;
166
+ verdict: RepoSymbolPolicyVerdict;
167
+ policyMode: RepoSymbolDuplicateMode;
168
+ classification: 'deterministic_symbol_duplicate' | 'not_evaluated' | 'clean';
169
+ reason: string;
170
+ artifactHash: string | null;
171
+ generatedAt: string | null;
172
+ freshness: LocalRepoBrainFreshness | null;
173
+ findings: RepoSymbolDuplicateFinding[];
174
+ advisorySimilarity: {
175
+ classification: 'advisory_similarity';
176
+ evaluated: false;
177
+ reason: string;
178
+ };
179
+ privacy: {
180
+ sourceUploaded: false;
181
+ sourceStored: false;
182
+ diffStored: false;
183
+ promptStored: false;
184
+ evaluatedInMemoryOnly: true;
185
+ };
186
+ }
187
+ export declare function localRepoBrainLanguageFor(filePath: string): LocalRepoBrainLanguage;
115
188
  export declare function sensitiveKindsFor(filePath: string): LocalRepoBrainSensitiveKind[];
189
+ export declare function analyzeLocalProposedSource(filePath: string, source: string): {
190
+ language: LocalRepoBrainLanguage;
191
+ symbols: LocalRepoBrainSymbolFact[];
192
+ imports: LocalRepoBrainImportEdge[];
193
+ };
116
194
  export declare function localRepoBrainPath(projectRoot: string): string;
117
195
  export declare function localRepoBrainMarkdownPath(projectRoot: string): string;
118
196
  export declare function buildLocalRepoBrain(projectRoot: string, options?: BuildLocalRepoBrainOptions): LocalRepoBrainArtifact;
@@ -122,6 +200,13 @@ export declare function writeLocalRepoBrain(projectRoot: string, artifact: Local
122
200
  };
123
201
  export declare function readLocalRepoBrain(projectRoot: string): LocalRepoBrainArtifact | null;
124
202
  export declare function renderLocalRepoBrainMarkdown(artifact: LocalRepoBrainArtifact): string;
203
+ export declare function evaluateRepoSymbolDuplicatePolicy(input: {
204
+ projectRoot: string;
205
+ filePath: string;
206
+ proposedSource: string | null;
207
+ proposedSymbols?: LocalRepoBrainSymbolFact[];
208
+ policyMode?: RepoSymbolDuplicateMode;
209
+ }): RepoSymbolPolicyEvaluation;
125
210
  export interface RepoBrainFileFacts {
126
211
  filePath: string;
127
212
  sensitiveKinds: string[];
@@ -1 +1 @@
1
- {"version":3,"file":"local-repo-brain.d.ts","sourceRoot":"","sources":["../../src/utils/local-repo-brain.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"local-repo-brain.d.ts","sourceRoot":"","sources":["../../src/utils/local-repo-brain.ts"],"names":[],"mappings":"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"}
@@ -1,13 +1,16 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.LOCAL_REPO_BRAIN_SCHEMA_VERSION = void 0;
4
+ exports.localRepoBrainLanguageFor = localRepoBrainLanguageFor;
4
5
  exports.sensitiveKindsFor = sensitiveKindsFor;
6
+ exports.analyzeLocalProposedSource = analyzeLocalProposedSource;
5
7
  exports.localRepoBrainPath = localRepoBrainPath;
6
8
  exports.localRepoBrainMarkdownPath = localRepoBrainMarkdownPath;
7
9
  exports.buildLocalRepoBrain = buildLocalRepoBrain;
8
10
  exports.writeLocalRepoBrain = writeLocalRepoBrain;
9
11
  exports.readLocalRepoBrain = readLocalRepoBrain;
10
12
  exports.renderLocalRepoBrainMarkdown = renderLocalRepoBrainMarkdown;
13
+ exports.evaluateRepoSymbolDuplicatePolicy = evaluateRepoSymbolDuplicatePolicy;
11
14
  exports.getRepoBrainContext = getRepoBrainContext;
12
15
  exports.formatRepoBrainFactsForMessage = formatRepoBrainFactsForMessage;
13
16
  exports.searchLocalRepoBrain = searchLocalRepoBrain;
@@ -99,7 +102,7 @@ function moduleKey(filePath) {
99
102
  }
100
103
  return parts[0] || 'root';
101
104
  }
102
- function languageFor(filePath) {
105
+ function localRepoBrainLanguageFor(filePath) {
103
106
  const ext = (0, node_path_1.extname)(filePath).toLowerCase();
104
107
  if (ext === '.ts' || ext === '.tsx')
105
108
  return 'typescript';
@@ -214,6 +217,13 @@ function arityFrom(params) {
214
217
  return 0;
215
218
  return trimmed.split(',').map((part) => part.trim()).filter(Boolean).length;
216
219
  }
220
+ function normalizedSignature(language, kind, arity) {
221
+ if (!['typescript', 'javascript', 'python'].includes(language))
222
+ return null;
223
+ if (!['function', 'class', 'interface', 'type', 'const'].includes(kind))
224
+ return null;
225
+ return `${language}:${kind}:arity=${arity == null ? 'unknown' : arity}`;
226
+ }
217
227
  function lineNumberAt(source, index) {
218
228
  return source.slice(0, index).split(/\r?\n/).length;
219
229
  }
@@ -232,13 +242,18 @@ function extractSymbols(filePath, source, language) {
232
242
  const line = lineNumberAt(source, match.index || 0);
233
243
  const params = paramsIndex == null ? undefined : match[paramsIndex];
234
244
  const exported = exportedByPattern || /^\s*export\b/.test(matchText);
245
+ const arity = arityFrom(params);
246
+ const normalized = normalizedSignature(language, kind, arity);
235
247
  symbols.push({
236
248
  name,
237
249
  kind,
238
250
  file: filePath,
239
251
  line,
240
252
  exported,
241
- arity: arityFrom(params),
253
+ local: !exported,
254
+ arity,
255
+ normalizedSignature: normalized,
256
+ normalizedSignatureHash: normalized ? shortHash(normalized) : null,
242
257
  signatureHash: shortHash(`${language}:${kind}:${name}:${params || ''}`),
243
258
  tokenFingerprintHash: normalizeTokenFingerprint(matchText),
244
259
  language,
@@ -317,6 +332,15 @@ function extractImports(filePath, source, language, fileSet) {
317
332
  }
318
333
  return imports;
319
334
  }
335
+ function analyzeLocalProposedSource(filePath, source) {
336
+ const normalizedFilePath = normalizePath(filePath);
337
+ const language = localRepoBrainLanguageFor(normalizedFilePath);
338
+ return {
339
+ language,
340
+ symbols: extractSymbols(normalizedFilePath, source, language),
341
+ imports: extractImports(normalizedFilePath, source, language, new Set([normalizedFilePath])),
342
+ };
343
+ }
320
344
  function discoverCodeownersFiles(projectRoot) {
321
345
  try {
322
346
  const output = (0, node_child_process_1.execFileSync)('git', ['ls-files', '-co', '--exclude-standard'], {
@@ -425,6 +449,44 @@ function buildReuseFindings(symbols, options = {}) {
425
449
  })
426
450
  .slice(0, 50);
427
451
  }
452
+ function gitHead(projectRoot) {
453
+ try {
454
+ const out = (0, node_child_process_1.execFileSync)('git', ['rev-parse', 'HEAD'], {
455
+ cwd: projectRoot,
456
+ encoding: 'utf8',
457
+ stdio: ['ignore', 'pipe', 'ignore'],
458
+ }).trim();
459
+ return out || null;
460
+ }
461
+ catch {
462
+ return null;
463
+ }
464
+ }
465
+ function gitDirty(projectRoot) {
466
+ try {
467
+ const out = (0, node_child_process_1.execFileSync)('git', ['status', '--short'], {
468
+ cwd: projectRoot,
469
+ encoding: 'utf8',
470
+ stdio: ['ignore', 'pipe', 'ignore'],
471
+ maxBuffer: 1024 * 1024 * 4,
472
+ });
473
+ return out.trim().length > 0;
474
+ }
475
+ catch {
476
+ return null;
477
+ }
478
+ }
479
+ function buildFreshness(projectRoot, generatedAt) {
480
+ const head = gitHead(projectRoot);
481
+ const dirty = gitDirty(projectRoot);
482
+ return {
483
+ generatedAt,
484
+ gitHead: head,
485
+ gitDirty: dirty,
486
+ workingTreeStatus: dirty === null ? 'unknown' : dirty ? 'dirty' : 'clean',
487
+ freshnessBasis: head ? 'git-head-and-working-tree' : 'filesystem-scan',
488
+ };
489
+ }
428
490
  function buildModules(files) {
429
491
  const map = new Map();
430
492
  for (const file of files) {
@@ -490,7 +552,11 @@ function buildHotspots(files, imports) {
490
552
  .slice(0, 40);
491
553
  }
492
554
  function artifactHashInput(artifact) {
493
- return JSON.stringify(artifact);
555
+ return JSON.stringify({
556
+ ...artifact,
557
+ freshness: artifact.freshness ? { ...artifact.freshness, generatedAt: null } : artifact.freshness,
558
+ files: artifact.files.map((file) => ({ ...file, indexedAt: null, mtimeMs: 0 })),
559
+ });
494
560
  }
495
561
  function localRepoBrainPath(projectRoot) {
496
562
  return (0, node_path_1.join)(projectRoot, '.neurcode', 'repo-brain', 'index.json');
@@ -500,6 +566,7 @@ function localRepoBrainMarkdownPath(projectRoot) {
500
566
  }
501
567
  function buildLocalRepoBrain(projectRoot, options = {}) {
502
568
  const generatedAt = options.generatedAt || new Date().toISOString();
569
+ const freshness = buildFreshness(projectRoot, generatedAt);
503
570
  const maxFiles = Math.max(1, Math.min(50000, options.maxFiles || 8000));
504
571
  const maxBytesPerFile = Math.max(2048, Math.min(2_000_000, options.maxBytesPerFile || 350_000));
505
572
  const candidates = listRepoFiles(projectRoot, maxFiles);
@@ -535,7 +602,7 @@ function buildLocalRepoBrain(projectRoot, options = {}) {
535
602
  filesSkipped += 1;
536
603
  continue;
537
604
  }
538
- const language = languageFor(filePath);
605
+ const language = localRepoBrainLanguageFor(filePath);
539
606
  const fileSymbols = extractSymbols(filePath, source, language);
540
607
  const fileImports = extractImports(filePath, source, language, fileSet);
541
608
  bytesIndexed += stat.size;
@@ -548,6 +615,8 @@ function buildLocalRepoBrain(projectRoot, options = {}) {
548
615
  bytes: stat.size,
549
616
  lineCount: source.split(/\r?\n/).length,
550
617
  fileHash: shortHash(source),
618
+ mtimeMs: Math.floor(stat.mtimeMs),
619
+ indexedAt: generatedAt,
551
620
  symbolCount: fileSymbols.length,
552
621
  importCount: fileImports.length,
553
622
  sensitiveKinds: sensitiveKindsFor(filePath),
@@ -561,6 +630,7 @@ function buildLocalRepoBrain(projectRoot, options = {}) {
561
630
  const core = {
562
631
  schemaVersion: exports.LOCAL_REPO_BRAIN_SCHEMA_VERSION,
563
632
  repoRootHash: hash(projectRoot),
633
+ freshness,
564
634
  privacy: {
565
635
  sourceUploaded: false,
566
636
  sourceStored: false,
@@ -572,6 +642,7 @@ function buildLocalRepoBrain(projectRoot, options = {}) {
572
642
  'symbol names and kinds',
573
643
  'line numbers',
574
644
  'counts',
645
+ 'mtime and index freshness metadata',
575
646
  'hashes and token fingerprints',
576
647
  'import targets',
577
648
  'CODEOWNERS owner tokens',
@@ -639,6 +710,9 @@ function renderLocalRepoBrainMarkdown(artifact) {
639
710
  lines.push('');
640
711
  lines.push(`Generated: ${artifact.generatedAt}`);
641
712
  lines.push(`Artifact hash: ${artifact.artifactHash}`);
713
+ if (artifact.freshness) {
714
+ lines.push(`Freshness: ${artifact.freshness.workingTreeStatus} (${artifact.freshness.gitHead ? `HEAD ${artifact.freshness.gitHead.slice(0, 12)}` : 'no git HEAD'})`);
715
+ }
642
716
  lines.push('');
643
717
  lines.push('## Source-free guarantee');
644
718
  lines.push('- No source code is uploaded.');
@@ -686,6 +760,187 @@ function renderLocalRepoBrainMarkdown(artifact) {
686
760
  lines.push('');
687
761
  return lines.join('\n');
688
762
  }
763
+ function defaultAdvisorySimilarity() {
764
+ return {
765
+ classification: 'advisory_similarity',
766
+ evaluated: false,
767
+ reason: 'Semantic similarity, token-fingerprint resemblance, and architecture judgment are advisory only and do not participate in deterministic duplicate enforcement.',
768
+ };
769
+ }
770
+ function symbolPolicyPrivacy() {
771
+ return {
772
+ sourceUploaded: false,
773
+ sourceStored: false,
774
+ diffStored: false,
775
+ promptStored: false,
776
+ evaluatedInMemoryOnly: true,
777
+ };
778
+ }
779
+ function notEvaluatedSymbolPolicy(policyMode, reason, artifact = null) {
780
+ return {
781
+ schemaVersion: 'neurcode.repo-symbol-policy.v1',
782
+ evaluated: false,
783
+ verdict: 'not_evaluated',
784
+ policyMode,
785
+ classification: 'not_evaluated',
786
+ reason,
787
+ artifactHash: artifact?.artifactHash ?? null,
788
+ generatedAt: artifact?.generatedAt ?? null,
789
+ freshness: artifact?.freshness ?? null,
790
+ findings: [],
791
+ advisorySimilarity: defaultAdvisorySimilarity(),
792
+ privacy: symbolPolicyPrivacy(),
793
+ };
794
+ }
795
+ function cleanSymbolPolicy(policyMode, artifact) {
796
+ return {
797
+ schemaVersion: 'neurcode.repo-symbol-policy.v1',
798
+ evaluated: true,
799
+ verdict: 'ok',
800
+ policyMode,
801
+ classification: 'clean',
802
+ reason: 'No same-name symbols were found in the same repo language for the proposed write.',
803
+ artifactHash: artifact.artifactHash,
804
+ generatedAt: artifact.generatedAt,
805
+ freshness: artifact.freshness ?? null,
806
+ findings: [],
807
+ advisorySimilarity: defaultAdvisorySimilarity(),
808
+ privacy: symbolPolicyPrivacy(),
809
+ };
810
+ }
811
+ function symbolPolicyRef(symbol) {
812
+ return {
813
+ file: symbol.file,
814
+ name: symbol.name,
815
+ kind: symbol.kind,
816
+ language: symbol.language,
817
+ exported: symbol.exported,
818
+ local: symbol.local ?? !symbol.exported,
819
+ line: symbol.line,
820
+ normalizedSignature: symbol.normalizedSignature ?? null,
821
+ normalizedSignatureHash: symbol.normalizedSignatureHash ?? null,
822
+ signatureHash: symbol.signatureHash,
823
+ };
824
+ }
825
+ function policyCandidate(symbol) {
826
+ if (symbol.kind === 'method')
827
+ return false;
828
+ if (!['typescript', 'javascript', 'python'].includes(symbol.language))
829
+ return false;
830
+ if (!symbol.name || JS_TS_RESERVED_WORDS.has(symbol.name))
831
+ return false;
832
+ return !isTestPath(symbol.file);
833
+ }
834
+ function duplicateStrength(changed, existing) {
835
+ if (changed.exported && existing.some((symbol) => symbol.exported))
836
+ return 'exported_symbol';
837
+ if (changed.kind === 'function' || existing.some((symbol) => symbol.kind === 'function'))
838
+ return 'same_function_name';
839
+ return 'same_local_symbol_name';
840
+ }
841
+ function duplicateReasonCodes(strength) {
842
+ const base = ['same_symbol_name', 'same_repo_language', 'source_free_repo_brain'];
843
+ if (strength === 'exported_symbol')
844
+ return [...base, 'exported_symbol_name'];
845
+ if (strength === 'same_function_name')
846
+ return [...base, 'function_name'];
847
+ return [...base, 'local_symbol_name'];
848
+ }
849
+ function duplicateMessage(finding) {
850
+ const files = finding.evidence.matchingFiles.slice(0, 4).join(', ');
851
+ const subject = finding.strength === 'exported_symbol'
852
+ ? 'exported symbol'
853
+ : finding.strength === 'same_function_name'
854
+ ? 'function name'
855
+ : 'local symbol name';
856
+ return `Deterministic symbol duplicate: ${subject} ${finding.changed.name} already exists in ${finding.changed.language} file(s): ${files}.`;
857
+ }
858
+ function evaluateRepoSymbolDuplicatePolicy(input) {
859
+ const policyMode = input.policyMode || 'warn';
860
+ if (policyMode === 'off') {
861
+ return notEvaluatedSymbolPolicy(policyMode, 'repoSymbolDuplicateMode is off.');
862
+ }
863
+ const artifact = readLocalRepoBrain(input.projectRoot);
864
+ if (!artifact) {
865
+ return notEvaluatedSymbolPolicy(policyMode, 'Local repo brain is missing; run neurcode brain index.');
866
+ }
867
+ if ((!input.proposedSource || !input.proposedSource.trim()) &&
868
+ (!input.proposedSymbols || input.proposedSymbols.length === 0)) {
869
+ return notEvaluatedSymbolPolicy(policyMode, 'No proposed source text was available from the host hook payload.', artifact);
870
+ }
871
+ const language = localRepoBrainLanguageFor(input.filePath);
872
+ if (!['typescript', 'javascript', 'python'].includes(language)) {
873
+ return notEvaluatedSymbolPolicy(policyMode, `Unsupported language for deterministic symbol duplicate policy: ${language}.`, artifact);
874
+ }
875
+ const proposedSymbols = (input.proposedSymbols ??
876
+ extractSymbols(input.filePath, input.proposedSource ?? '', language)).filter(policyCandidate);
877
+ if (proposedSymbols.length === 0) {
878
+ return cleanSymbolPolicy(policyMode, artifact);
879
+ }
880
+ const existingSymbols = artifact.symbols.filter((symbol) => policyCandidate(symbol) &&
881
+ symbol.language === language &&
882
+ symbol.file !== input.filePath);
883
+ const findings = [];
884
+ const seen = new Set();
885
+ for (const changed of proposedSymbols) {
886
+ const matches = existingSymbols
887
+ .filter((symbol) => symbol.name === changed.name)
888
+ .sort((a, b) => a.file.localeCompare(b.file) || a.line - b.line);
889
+ if (matches.length === 0)
890
+ continue;
891
+ const strength = duplicateStrength(changed, matches);
892
+ const matchingFiles = [...new Set(matches.map((symbol) => symbol.file))].sort();
893
+ const key = `${changed.name}:${changed.kind}:${changed.language}:${matchingFiles.join('|')}`;
894
+ if (seen.has(key))
895
+ continue;
896
+ seen.add(key);
897
+ const partial = {
898
+ schemaVersion: 'neurcode.repo-symbol-duplicate.v1',
899
+ classification: 'deterministic_symbol_duplicate',
900
+ policyMode,
901
+ verdict: policyMode === 'block' ? 'block' : 'warn',
902
+ strength,
903
+ changed: symbolPolicyRef(changed),
904
+ existing: matches.slice(0, 12).map(symbolPolicyRef),
905
+ evidence: {
906
+ sourceFree: true,
907
+ repoBrainArtifactHash: artifact.artifactHash,
908
+ repoBrainGeneratedAt: artifact.generatedAt,
909
+ repoBrainGitHead: artifact.freshness?.gitHead ?? null,
910
+ repoBrainWorkingTreeStatus: artifact.freshness?.workingTreeStatus ?? 'unknown',
911
+ matchingFiles,
912
+ existingSymbolCount: matches.length,
913
+ reasonCodes: duplicateReasonCodes(strength),
914
+ },
915
+ provenance: 'repo-brain-index',
916
+ };
917
+ findings.push({ ...partial, message: duplicateMessage(partial) });
918
+ }
919
+ if (findings.length === 0)
920
+ return cleanSymbolPolicy(policyMode, artifact);
921
+ const verdict = policyMode === 'block' ? 'block' : 'warn';
922
+ const rank = (finding) => finding.strength === 'exported_symbol' ? 0 : finding.strength === 'same_function_name' ? 1 : 2;
923
+ return {
924
+ schemaVersion: 'neurcode.repo-symbol-policy.v1',
925
+ evaluated: true,
926
+ verdict,
927
+ policyMode,
928
+ classification: 'deterministic_symbol_duplicate',
929
+ reason: verdict === 'block'
930
+ ? 'Deterministic same-name symbol duplicate policy is configured to block.'
931
+ : 'Deterministic same-name symbol duplicate policy is configured to warn.',
932
+ artifactHash: artifact.artifactHash,
933
+ generatedAt: artifact.generatedAt,
934
+ freshness: artifact.freshness ?? null,
935
+ findings: findings
936
+ .sort((a, b) => rank(a) - rank(b) ||
937
+ a.changed.name.localeCompare(b.changed.name) ||
938
+ a.changed.file.localeCompare(b.changed.file))
939
+ .slice(0, 20),
940
+ advisorySimilarity: defaultAdvisorySimilarity(),
941
+ privacy: symbolPolicyPrivacy(),
942
+ };
943
+ }
689
944
  function queryTokens(query) {
690
945
  return query.toLowerCase().match(/[a-z0-9_./-]+/g) || [];
691
946
  }