@futdevpro/fdp-agent-memory 1.1.130 → 1.1.133
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/build/package.json +1 -1
- package/build/src/_collections/config-catalog.const.js +12 -0
- package/build/src/_collections/error-codes.const.js +2 -0
- package/build/src/_collections/fam-db-models.const.js +2 -0
- package/build/src/_models/data-models/fam-dup-audit.data-model.js +72 -0
- package/build/src/_modules/embedding/_collections/fam-dup-file-rollup.util.js +48 -0
- package/build/src/_modules/embedding/_collections/fam-dup-fork-pair.util.js +86 -0
- package/build/src/_modules/embedding/_services/fam-dup-audit-scheduler.control-service.js +140 -0
- package/build/src/_modules/embedding/_services/fam-dup-audit.control-service.js +141 -0
- package/build/src/_modules/embedding/_services/fam-dup-audit.data-service.js +66 -0
- package/build/src/_modules/embedding/_services/fam-dup-coverage.control-service.js +123 -0
- package/build/src/_modules/embedding/_services/fam-duplicate-scan.control-service.js +63 -10
- package/build/src/_modules/embedding/_services/fam-embedding-bootstrap.control-service.js +9 -0
- package/build/src/_modules/embedding/_services/fam-exact-duplication.control-service.js +309 -0
- package/build/src/_modules/embedding/index.js +16 -1
- package/build/src/_modules/mcp/_services/fam-capability-registry.service.js +67 -0
- package/build/src/_modules/retrieval/_collections/fam-rule-propagation.util.js +1 -1
- package/package.json +1 -1
|
@@ -337,6 +337,9 @@ class FAM_CapabilityRegistry_Service {
|
|
|
337
337
|
projects: { type: 'array', items: { type: 'string' }, description: 'Csak ezek a projektek (scopePath project-layer canonicalName).' },
|
|
338
338
|
excludeProjects: { type: 'array', items: { type: 'string' }, description: 'Kizárt projektek (fork-zaj — pl. ccap — elnyomása).' },
|
|
339
339
|
minProjects: { type: 'number', description: 'Csak a legalább ennyi KÜLÖNBÖZŐ projektet átfedő clusterek (default 2).' },
|
|
340
|
+
minContentLength: { type: 'number', description: 'Minimális content-hossz (karakter) — a rövid boilerplate-zaj kizárása a prefilterben (dup-v2).' },
|
|
341
|
+
suppressForkPairs: { type: 'boolean', description: 'A fork-gyanús projekt-párokra eső clusterek elnyomása a kimenetben (default false; dup-v2).' },
|
|
342
|
+
includeCoverage: { type: 'boolean', description: 'A lefedettség-preflight beágyazása az eredménybe (default true; dup-v2).' },
|
|
340
343
|
}),
|
|
341
344
|
handler: async (args) => {
|
|
342
345
|
const input = this.asObject(args);
|
|
@@ -352,9 +355,73 @@ class FAM_CapabilityRegistry_Service {
|
|
|
352
355
|
projects: this.asStringArray(input.projects),
|
|
353
356
|
excludeProjects: this.asStringArray(input.excludeProjects),
|
|
354
357
|
minProjects: this.asNumber(input.minProjects) ?? 2,
|
|
358
|
+
minContentLength: this.asNumber(input.minContentLength),
|
|
359
|
+
suppressForkPairs: input.suppressForkPairs === true,
|
|
360
|
+
includeCoverage: input.includeCoverage !== false,
|
|
355
361
|
}));
|
|
356
362
|
},
|
|
357
363
|
});
|
|
364
|
+
// detect_exact_duplication (dup-v2, task #20): EXACT (contentHash-azonos) duplikáció-mérés egyetlen
|
|
365
|
+
// Mongo-aggregációval — a TELJES szűrt halmazon fut (nincs maxEntries-cap, nincs vektor-számítás), így a
|
|
366
|
+
// flotta-szintű „mennyi az exact duplikáció?" kérdés kanonikus mérője. A near-dup scan (fent) a drift-elt
|
|
367
|
+
// másolatokra való; ez a bitre-azonos sokszorozódásra.
|
|
368
|
+
this.register({
|
|
369
|
+
name: 'detect_exact_duplication', category: category,
|
|
370
|
+
description: 'EXACT (contentHash-azonos) duplikáció-mérés (read-only; dup-v2 task #20): egyetlen Mongo-'
|
|
371
|
+
+ 'aggregáció a TELJES szűrt halmazon (a 300k-s codebase táron is cap nélkül fut). Kimenet: totals '
|
|
372
|
+
+ '(totalGroups/redundantCopies/wastedChars) + top-N csoport (wasted DESC, projekt-/repo-lefedettséggel '
|
|
373
|
+
+ '+ fájl-listával) + fork-pár statisztika (`forkPairs`) + a ≥4-projektes csoport-hash-ek + '
|
|
374
|
+
+ 'lefedettség-preflight (`coverage`, default be). A `suppressForkPairs` a fork-gyanús párokra eső '
|
|
375
|
+
+ 'csoportokat elnyomja a listából (a totals a mért valóság marad). A `minContentLength` a rövid '
|
|
376
|
+
+ 'boilerplate-zajt szűri (ajánlott: 200).',
|
|
377
|
+
inputSchema: this.objectSchema({
|
|
378
|
+
table: this.tableSchema(false),
|
|
379
|
+
pathRegex: { type: 'string', description: 'A sourceFilePath include-regexe (case-insensitive).' },
|
|
380
|
+
excludePathRegex: { type: 'string', description: 'A sourceFilePath exclude-regexe.' },
|
|
381
|
+
excludeRootRegex: { type: 'string', description: 'A source.root exclude-regexe (pl. "STALE-projects").' },
|
|
382
|
+
projects: { type: 'array', items: { type: 'string' }, description: 'Csak ezek a projektek (scopePath project-layer canonicalName).' },
|
|
383
|
+
excludeProjects: { type: 'array', items: { type: 'string' }, description: 'Kizárt projektek.' },
|
|
384
|
+
minProjects: { type: 'number', description: 'Csak a legalább ennyi KÜLÖNBÖZŐ projektet átfedő csoportok (default 1).' },
|
|
385
|
+
minContentLength: { type: 'number', description: 'Minimális content-hossz karakterben (default 0; ajánlott 200 a boilerplate-zaj ellen).' },
|
|
386
|
+
maxGroups: { type: 'number', description: 'A visszaadott top-csoportok száma (default 100, hard cap 500; a totals a teljes halmazon számolt).' },
|
|
387
|
+
maxFilesPerGroup: { type: 'number', description: 'Per-csoport fájl-lista cap (default 20; a filesTruncated jelzi a csonkolást).' },
|
|
388
|
+
suppressForkPairs: { type: 'boolean', description: 'A fork-gyanús projekt-párokra eső csoportok elnyomása a listából (default false).' },
|
|
389
|
+
includeCoverage: { type: 'boolean', description: 'A lefedettség-preflight beágyazása (default true).' },
|
|
390
|
+
}),
|
|
391
|
+
handler: async (args) => {
|
|
392
|
+
const input = this.asObject(args);
|
|
393
|
+
return this.ok(await embedding_1.FAM_ExactDuplication_ControlService.getInstance().run({
|
|
394
|
+
table: this.optionalTable(input.table),
|
|
395
|
+
pathRegex: this.asString(input.pathRegex),
|
|
396
|
+
excludePathRegex: this.asString(input.excludePathRegex),
|
|
397
|
+
excludeRootRegex: this.asString(input.excludeRootRegex),
|
|
398
|
+
projects: this.asStringArray(input.projects),
|
|
399
|
+
excludeProjects: this.asStringArray(input.excludeProjects),
|
|
400
|
+
minProjects: this.asNumber(input.minProjects),
|
|
401
|
+
minContentLength: this.asNumber(input.minContentLength),
|
|
402
|
+
maxGroups: this.asNumber(input.maxGroups),
|
|
403
|
+
maxFilesPerGroup: this.asNumber(input.maxFilesPerGroup),
|
|
404
|
+
suppressForkPairs: input.suppressForkPairs === true,
|
|
405
|
+
includeCoverage: input.includeCoverage !== false,
|
|
406
|
+
}));
|
|
407
|
+
},
|
|
408
|
+
});
|
|
409
|
+
// duplication_coverage_report (dup-v2, task #20): a dup-mérés lefedettség-preflight-je ÖNÁLLÓ eszközként —
|
|
410
|
+
// mely projektek hiányoznak (0 entry) vagy elavultak a korpuszból (a „nincs duplikáció X-szel" hamis-negatív
|
|
411
|
+
// gyanújának ellenőrzése a mérés ELŐTT/UTÁN).
|
|
412
|
+
this.register({
|
|
413
|
+
name: 'duplication_coverage_report', category: category,
|
|
414
|
+
description: 'A dup-mérés LEFEDETTSÉG-preflight riportja (read-only; dup-v2): a scope-fa project-layer '
|
|
415
|
+
+ 'listája × a tár per-projekt entry-száma + a legfrissebb entry kora. Kimenet: zeroEntryProjects '
|
|
416
|
+
+ '(a mérésből NÉMÁN kimaradók), staleProjects (> 8 nap), per-projekt sorok (entryCount DESC) + '
|
|
417
|
+
+ 'warnings. A dup-eredmény flotta-szintű értelmezésének előfeltétele.',
|
|
418
|
+
inputSchema: this.objectSchema({ table: this.tableSchema(false) }),
|
|
419
|
+
handler: async (args) => {
|
|
420
|
+
const input = this.asObject(args);
|
|
421
|
+
return this.ok(await embedding_1.FAM_DupCoverage_ControlService.getInstance()
|
|
422
|
+
.report(this.optionalTable(input.table) ?? fam_table_type_enum_1.FAM_Table.codebase));
|
|
423
|
+
},
|
|
424
|
+
});
|
|
358
425
|
}
|
|
359
426
|
/** maintenance → MP-2 (re-embed) + MP-3 (rebuild reference index). */
|
|
360
427
|
registerMaintenance() {
|
|
@@ -47,7 +47,7 @@ class FAM_RulePropagation_Util {
|
|
|
47
47
|
const lines = [];
|
|
48
48
|
lines.push(opts?.heading ?? '## FDP Agent Hard-Rules (synced from FAM)');
|
|
49
49
|
lines.push('');
|
|
50
|
-
lines.push('> Generated from the canonical rule set. Edit the rules in `documentations/rules/`, not here.');
|
|
50
|
+
lines.push('> Generated from the canonical rule set. Edit the rules in `fdp-documentations/rules/`, not here.');
|
|
51
51
|
for (const group of FAM_RulePropagation_Util.SCOPE_ORDER) {
|
|
52
52
|
const inScope = deduped
|
|
53
53
|
.filter((rule) => rule.ruleScope === group.scope)
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@futdevpro/fdp-agent-memory",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.133",
|
|
4
4
|
"description": "Local-first, vector-backed multi-table agent memory exposed as an MCP server (read/write/capabilities). Public, FDP-Templates-free, no auth.",
|
|
5
5
|
"private": false,
|
|
6
6
|
"publishConfig": {
|