@futdevpro/fdp-agent-memory 1.1.21 → 1.1.112

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 (89) hide show
  1. package/build/package.json +2 -2
  2. package/build/src/_cli/_commands/find-duplicates.command.js +41 -16
  3. package/build/src/_cli/_commands/scan-projects.command.js +113 -113
  4. package/build/src/_cli/_commands/scan.command.js +2 -0
  5. package/build/src/_cli/_commands/serve.command.js +110 -10
  6. package/build/src/_cli/_services/fam-client.service.js +25 -1
  7. package/build/src/_cli/register-commands.js +28 -0
  8. package/build/src/_collections/config-catalog.const.js +152 -33
  9. package/build/src/_collections/error-codes.const.js +2 -0
  10. package/build/src/_collections/fam-console.util.js +38 -260
  11. package/build/src/_collections/fam-db-models.const.js +2 -0
  12. package/build/src/_collections/fam-entry-bootstrap.util.js +20 -6
  13. package/build/src/_collections/fam-error-context.util.js +1 -0
  14. package/build/src/_collections/fam-mcp-bridge.util.js +15 -1
  15. package/build/src/_collections/fam-operation-queue.service.js +85 -0
  16. package/build/src/_collections/fam-project-discovery.util.js +148 -0
  17. package/build/src/_collections/fam-request-origin.util.js +41 -0
  18. package/build/src/_collections/fam-retry.util.js +48 -0
  19. package/build/src/_collections/fam-scan-progress-sink.service.js +26 -0
  20. package/build/src/_collections/title.const.js +26 -26
  21. package/build/src/_enums/fam-rule-scope.type-enum.js +25 -0
  22. package/build/src/_models/data-models/fam-entry.data-model.js +29 -0
  23. package/build/src/_models/data-models/fam-memory.data-model.js +5 -0
  24. package/build/src/_models/data-models/fam-rules.data-model.js +24 -0
  25. package/build/src/_models/data-models/fam-scan-job.data-model.js +73 -0
  26. package/build/src/_models/data-models/fam-scope.data-model.js +9 -0
  27. package/build/src/_modules/capture/_services/fam-auto-capture.control-service.js +1 -1
  28. package/build/src/_modules/embedding/_services/fam-dedup-warn.control-service.js +40 -0
  29. package/build/src/_modules/embedding/_services/fam-duplicate-scan.control-service.js +74 -16
  30. package/build/src/_modules/embedding/_services/fam-embedding-bootstrap.control-service.js +50 -0
  31. package/build/src/_modules/embedding/_services/fam-embedding-pipeline.control-service.js +32 -6
  32. package/build/src/_modules/embedding/_services/fam-embedding.control-service.js +142 -9
  33. package/build/src/_modules/embedding/_services/fam-entry.data-service.js +32 -1
  34. package/build/src/_modules/embedding/_services/fam-hydration-coordinator.control-service.js +159 -0
  35. package/build/src/_modules/embedding/_services/fam-lmstudio-embedding.provider.js +41 -4
  36. package/build/src/_modules/embedding/_services/fam-vector-search.control-service.js +67 -12
  37. package/build/src/_modules/embedding/index.js +5 -1
  38. package/build/src/_modules/ingest/_collections/fam-file-routing.util.js +10 -0
  39. package/build/src/_modules/ingest/_collections/fam-frontmatter.util.js +134 -0
  40. package/build/src/_modules/ingest/_collections/fam-project-identity.util.js +30 -0
  41. package/build/src/_modules/ingest/_collections/fam-scan-progress.util.js +5 -2
  42. package/build/src/_modules/ingest/_collections/fam-scan-summary.util.js +55 -29
  43. package/build/src/_modules/ingest/_collections/fam-split-chunker.util.js +139 -0
  44. package/build/src/_modules/ingest/_models/interfaces/fam-scan-job.interface.js +2 -0
  45. package/build/src/_modules/ingest/_services/fam-chunker.control-service.js +10 -0
  46. package/build/src/_modules/ingest/_services/fam-delta-compare.util.js +68 -1
  47. package/build/src/_modules/ingest/_services/fam-ingest-run.data-service.js +1 -1
  48. package/build/src/_modules/ingest/_services/fam-ingest.control-service.js +177 -37
  49. package/build/src/_modules/ingest/_services/fam-scan-job.control-service.js +429 -0
  50. package/build/src/_modules/ingest/_services/fam-scan-job.data-service.js +34 -0
  51. package/build/src/_modules/ingest/_services/fam-scan.control-service.js +6 -4
  52. package/build/src/_modules/ingest/index.js +6 -1
  53. package/build/src/_modules/mcp/_collections/fam-core-tools.const.js +1 -1
  54. package/build/src/_modules/mcp/_services/fam-capability-registry.service.js +264 -41
  55. package/build/src/_modules/mcp/_services/fam-read-tool.service.js +71 -1
  56. package/build/src/_modules/mcp/_services/fam-write-tool.service.js +36 -0
  57. package/build/src/_modules/migration/_services/fam-claude-mem-import.control-service.js +1 -1
  58. package/build/src/_modules/retrieval/_collections/fam-lexical-match.util.js +69 -0
  59. package/build/src/_modules/retrieval/_collections/fam-memory-activation.util.js +66 -0
  60. package/build/src/_modules/retrieval/_collections/fam-rule-injection.util.js +125 -0
  61. package/build/src/_modules/retrieval/_collections/fam-rule-propagation.util.js +95 -0
  62. package/build/src/_modules/retrieval/_collections/fam-rule-scope-context.util.js +74 -0
  63. package/build/src/_modules/retrieval/_services/fam-global-rule.control-service.js +82 -0
  64. package/build/src/_modules/retrieval/_services/fam-memory-cold-search.control-service.js +121 -0
  65. package/build/src/_modules/retrieval/_services/fam-memory-dormancy.control-service.js +99 -0
  66. package/build/src/_modules/retrieval/_services/fam-memory-reactivation.control-service.js +68 -0
  67. package/build/src/_modules/retrieval/_services/fam-retrieval-candidate.data-service.js +15 -2
  68. package/build/src/_modules/retrieval/_services/fam-retrieval.control-service.js +197 -5
  69. package/build/src/_modules/retrieval/_services/fam-rule-injection.control-service.js +102 -0
  70. package/build/src/_modules/retrieval/index.js +12 -1
  71. package/build/src/_modules/scope-reference/_collections/fam-scope-maintenance.util.js +134 -0
  72. package/build/src/_modules/scope-reference/_services/fam-scope-maintenance.control-service.js +423 -0
  73. package/build/src/_modules/scope-reference/_services/fam-scope-resolver.control-service.js +2 -2
  74. package/build/src/_modules/scope-reference/_services/fam-scope.data-service.js +25 -0
  75. package/build/src/_modules/scope-reference/index.js +4 -1
  76. package/build/src/_routes/server/api/api.controller.js +324 -23
  77. package/build/src/_routes/server/api/fam-doctor.control-service.js +156 -0
  78. package/build/src/_routes/server/config/config.control-service.js +2 -2
  79. package/build/src/app.server.js +29 -27
  80. package/client-dist/{chunk-YXHWCJ5O.js → chunk-GF3FJP7E.js} +71 -71
  81. package/client-dist/chunk-NMUCMQY6.js +1 -0
  82. package/client-dist/favicon.ico +0 -0
  83. package/client-dist/index.html +3 -3
  84. package/client-dist/main-YK4YIVAQ.js +2 -0
  85. package/package.json +2 -2
  86. package/build/src/_cli/_collections/fam-project-discovery.util.js +0 -98
  87. package/build/src/_collections/fam-heap-guard.control-service.js +0 -176
  88. package/client-dist/chunk-I77GXVAQ.js +0 -1
  89. package/client-dist/main-PJPEDVJT.js +0 -2
@@ -66,9 +66,37 @@ function registerFAMCommands(program, version) {
66
66
  ];
67
67
  for (const command of famCommands) {
68
68
  applyExitMapping(command);
69
+ if (SERVER_DEPENDENT_COMMANDS.has(command.name())) {
70
+ attachEnsureServerHook(command);
71
+ }
69
72
  program.addCommand(command);
70
73
  }
71
74
  }
75
+ /**
76
+ * A szerver-függő (REST-et hívó) data-parancsok — ezekre rákötjük az auto-ensure pre-action hook-ot (user-FR
77
+ * 2026-06-22: „minden fam funkciónak gondoskodnia kell a fam elindításáról"). A környezet-szintű parancsok
78
+ * (`init`/`doctor`/`validate-env`/…) É a szerver-életciklust kezelő `start`/`serve` KIMARADNAK (azok nem a
79
+ * futó primary-t hívják, vagy MAGUK a szerver).
80
+ */
81
+ const SERVER_DEPENDENT_COMMANDS = new Set([
82
+ 'read', 'write', 'scan', 'scan-projects', 'import', 'export', 'capture',
83
+ 'config', 'stats', 'find-duplicates', 'errors', 'migrate', 'seed-example',
84
+ ]);
85
+ /**
86
+ * Az auto-ensure pre-action hook rákötése egy szerver-függő parancsra (a commander a hook-ot a parancs ÉS
87
+ * az al-parancsai action-jére is meghívja, így a `config get`/`import claude-mem` is fedett). Best-effort: ha
88
+ * az ensure elhasal, a parancs a SAJÁT `unreachable` hibáját adja (no-silent-failure, dsgn-008) — nem dob itt.
89
+ */
90
+ function attachEnsureServerHook(command) {
91
+ command.hook('preAction', async () => {
92
+ try {
93
+ await serve_command_1.FAM_Serve_Util.ensureRunning();
94
+ }
95
+ catch {
96
+ /* best-effort auto-ensure — a tényleges elérhetetlenséget a parancs HTTP-rétege jelzi tiszta hibával */
97
+ }
98
+ });
99
+ }
72
100
  /**
73
101
  * A dsgn-010 §3 exit-kód-mapping rákötése egy FAM parancsra ÉS minden al-parancsára (rekurzívan): a
74
102
  * commander használati/argument-hibái `2`-vel lépnek ki (a parancs-handler-ek `0`/`1`/`3` kódjait a
@@ -26,6 +26,11 @@ const GLOBAL_ONLY = [fam_config_level_type_enum_1.FAM_ConfigLevel.global];
26
26
  */
27
27
  exports.SCAN_IGNORE_PATTERNS_DEFAULT = [
28
28
  '**/node_modules/**', '**/.git/**', '**/build/**', '**/dist/**', '**/coverage/**',
29
+ // Workspace-szintű HARD-kizárás (user-direktíva 2026-06-24, KRITIKUS — „SEMMIT nem akarunk szkennelni, ami a
30
+ // Stale-ben van!!!"). Az archív/elavult projektek (`STALE-projects/`, pl. `fury`) + a sablon-junk
31
+ // (`TEMPLATE-projects/`, `{{PROJECT_NAME}}`) SOHA nem korpusz-anyag — még explicit cél-útvonalon sem. (A
32
+ // felderítés külön, garantáltan kihagyja őket: FAM_ProjectDiscovery_Util.SKIP_DIRS.)
33
+ '**/STALE-projects/**', '**/TEMPLATE-projects/**',
29
34
  // Framework build-/futás-cache + generált kimenet (FAM-REV-056) — sosem forrás, gyakran minifikált/bináris-
30
35
  // szerű (pl. az Angular `.angular/cache/.../babel-webpack` ezreket számláló, embed-timeout-ot okozó junk-ja).
31
36
  '**/.angular/**', '**/.nx/**', '**/.cache/**', '**/.turbo/**', '**/.next/**', '**/.nuxt/**', '**/.svelte-kit/**',
@@ -45,6 +50,11 @@ exports.SCAN_IGNORE_PATTERNS_DEFAULT = [
45
50
  // lowercase NEM matchelné a Unity `Logs/`-át).
46
51
  '**/Library/**', '**/Temp/**', '**/Obj/**', '**/obj/**', '**/bin/**', '**/Logs/**', '**/Build/**', '**/Builds/**',
47
52
  '**/.vs/**', '**/*.csproj', '**/*.sln', '**/*.meta', '**/*.unity', '**/*.prefab', '**/*.asset',
53
+ // Agent-/böngésző-state (lokális futás-melléktermék, SOHA nem korpusz-anyag): `.local-state` (pl. agent
54
+ // browser-automation profil) + Chromium-profil/cache — lockolt SQLite + bináris blobok (Login Data /
55
+ // Cookies / Web Data = SZEMÉLYES adat), olvashatatlanok + junk. (Lelet 2026-06-22: fdp-assistant/__agent/
56
+ // .local-state = 403 MB / 2452 fájl → 2208 `FAM-SCAN-READ-001`. Az `__agent` MAGA MARAD — csak a state junk.)
57
+ '**/.local-state/**', '**/browser-profiles/**', '**/Cache_Data/**',
48
58
  // A `.fdpfamignore` SAJÁT MAGÁT kizárja: ignore-spec-ként OLVASSUK (FAM_FamIgnore_Util.loadFromDir,
49
59
  // a walk/routing megkerülésével), de SOHA nem ingesteljük content-ként (a router amúgy is skip-elné).
50
60
  '**/.fdpfamignore',
@@ -69,13 +79,35 @@ exports.CONFIG_CATALOG = {
69
79
  description: 'A topK effektív felső korlátja (CCAP DEFAULT_PAGE_SIZE=50, cap 500).',
70
80
  },
71
81
  'read.maxTokens': {
72
- type: 'number', default: 6000, min: 256, max: 32000, integer: true, levels: ALL_LEVELS,
73
- description: 'Az agent context védelme (max token a read-válaszban).',
82
+ type: 'number', default: 4000, min: 256, max: 32000, integer: true, levels: ALL_LEVELS,
83
+ description: 'Az agent context védelme + a read-válasz INLINE-tartása (max token; ~4 char/token). A read-tool '
84
+ + 'ÉRVÉNYESÍTI (FAM-REV: korábban dead-config volt → korlátlan hit-tartalom → a host fájlba mentette a választ). '
85
+ + 'A budget felett a hit-tartalom levágódik + a túlcsorduló hit-ek elhagyva (`truncated:true`).',
86
+ },
87
+ 'write.dedupWarnEnabled': {
88
+ type: 'boolean', default: true, levels: ALL_LEVELS,
89
+ description: 'Near-duplikátum-FIGYELMEZTETÉS íráskor (user-FR 2026-06-25): a `create` UTÁN a friss vektorral '
90
+ + 'megkeresi a tár legközelebbi szomszédait; ha valamelyik a `write.dedupWarnThreshold` FÖLÖTT van, a write-'
91
+ + 'válasz `warnings`-ába kerül („majdnem ugyanaz, mint X — érdemes UPDATE-elni"). NEM blokkol (a duplikáció-'
92
+ + 'keletkezés megelőzése). `false` → nincs ellenőrzés (nulla extra munka, mert a friss vektor úgyis kész).',
93
+ },
94
+ 'write.dedupWarnThreshold': {
95
+ type: 'number', default: 0.93, min: 0.5, max: 1.0, levels: ALL_LEVELS,
96
+ description: 'A near-duplikátum-warning koszinusz-küszöbe (0..1; default 0.93): e FÖLÖTT egy meglévő entry '
97
+ + '„majdnem azonosnak" számít az új tartalommal → figyelmeztetés. Magasabb = csak a szinte-teljes egyezésre '
98
+ + 'jelez; alacsonyabb = agresszívebb (több figyelmeztetés). CSAK jelzés, sosem blokkol.',
74
99
  },
75
100
  'read.minScore': {
76
101
  type: 'number', default: 0.0, min: 0.0, max: 1.0, levels: ALL_LEVELS,
77
102
  description: 'Minimum similarity-score küszöb (CCAP default 0 = nincs vágás).',
78
103
  },
104
+ 'read.hydrationWaitMs': {
105
+ type: 'number', default: 180000, min: 0, max: 600000, integer: true, levels: ALL_LEVELS,
106
+ description: 'A readiness-coordinator hidratálás-bevárás felső korlátja ms-ban: a `read`/`search` MEGVÁRJA a '
107
+ + 'tár pool-jának (kezdő VAGY újra-) hidratálását ahelyett, hogy `FAM-VEC-SEARCH-001 pool ÜRES`-t dobna. '
108
+ + '0 = nincs várakozás (azonnali hiba, ha még nem kész). Boot-kor a ~290k-vektor hidratálás percekig tarthat → '
109
+ + 'a default 180s ezt fedi; time-out után tiszta „még hidratál, próbáld újra" hiba (a következő hívás már kész).',
110
+ },
79
111
  'read.relevanceFloor': {
80
112
  type: 'number', default: 0.5, min: 0.0, max: 1.0, levels: ALL_LEVELS,
81
113
  description: 'Confidence-padló a nyers cosine score-on: a relevancia-JELZÉSEK (totalRelevant / '
@@ -87,11 +119,27 @@ exports.CONFIG_CATALOG = {
87
119
  'read.importChunkWeight': {
88
120
  type: 'number', default: 0.4, min: 0.0, max: 1.0, levels: ALL_LEVELS,
89
121
  description: 'Az import-only chunkok (`chunkType:"imports"`) read-idejű rangsor-szorzója (FAM-REV-060). '
90
- + 'A szimbólum-név query-knél az import-sorok (`import { X } from "./y"`) magas cosine-t kapnak, de '
122
+ + 'A szimbólum-név query-knél az import-sorok (`import { X: X } from "./y"`) magas cosine-t kapnak, de '
91
123
  + 'alacsony az ÉRTÉKük (csak import, nem definíció) → e szorzóval a `finalScore = score × weight × '
92
124
  + 'importChunkWeight` a definíció-chunkok ALÁ rangsorolja őket. READ-time (nincs re-embed); a nyers '
93
125
  + 'cosine score (relevancia-jelzések) NEM változik, csak a ranking. 1 = nincs csökkentés.',
94
126
  },
127
+ 'read.importSourceWeight': {
128
+ type: 'number', default: 0.85, min: 0.0, max: 1.0, levels: ALL_LEVELS,
129
+ description: 'Az import-FORRÁSÚ (`source.type:"import"`, pl. claude-mem-import) entry-k read-idejű rangsor-'
130
+ + 'szorzója (R2, 2026-06-22 eval-lelet). A `memory`/`knowledge` táron a 33k import ZAJA elnyomta a kurált '
131
+ + '(`manual`/`agent`/scan) tanulságokat → e szorzóval (`finalScore × importSourceWeight`) a kurált FÖLÉ '
132
+ + 'rangsorol. READ-time (nincs re-embed); a nyers cosine NEM változik, csak a ranking. 1 = kikapcsolva.',
133
+ },
134
+ 'read.keywordWeight': {
135
+ type: 'number', default: 0.6, min: 0.0, max: 5.0, levels: ALL_LEVELS,
136
+ description: 'Hibrid LEXIKAI (keyword/term-overlap) boost súlya (Improvement 2, eval-lelet 2026-06-25): a tiszta-'
137
+ + 'vektor `read` ELVÉTI a literal-keyword választ (a koszinusz alacsony a query-megfogalmazásra; a `grep` '
138
+ + 'azonnal hozza). A finalScore-t `× (1 + keywordWeight × lexicalScore)` szorzóval BOOST-only emeli, ahol a '
139
+ + 'lexicalScore (0..1) a query disztinktív term-jeinek átfedése az entry szövegével (content+heading+forrás-út). '
140
+ + 'A tiszta-szemantikus találat (lexical 0) SOHA nem süllyed (×1). READ-time (nincs re-embed). `0` = pure-vektor '
141
+ + '(régi viselkedés). Default 0.6.',
142
+ },
95
143
  'read.denseResultRatio': {
96
144
  type: 'number', default: 2.0, min: 1.0, max: 50.0, levels: ALL_LEVELS,
97
145
  description: 'Dense-jelzés ratio-kapuja: totalRelevant >= ratio*topK → denseResults (dsgn-005 §4.2).',
@@ -104,6 +152,77 @@ exports.CONFIG_CATALOG = {
104
152
  type: 'string', default: 'weighted', enumValues: ['weighted', 'raw', 'recency'], levels: ALL_LEVELS,
105
153
  description: 'Score-rendezés módja (súlyozott / nyers / recency).',
106
154
  },
155
+ // --- 4.1b. Memory Activation Model — decay/reactivation/dormancy (fogyasztó: dsgn-013) ---
156
+ 'memory.activationEnabled': {
157
+ type: 'boolean', default: true, levels: ALL_LEVELS,
158
+ description: 'Memory Activation Model (dsgn-013): a felidézés-alapú lazy-decay rangsor-szorzó a `memory` táron. '
159
+ + 'A frissen/gyakran FELIDÉZETT memória felül-, a régóta érintetlen alul-rangsorol (de sosem tűnik el, '
160
+ + 'csak kisebb a súlya). `false` → a decay-mentes (mai) viselkedés. CSAK a memory tárra hat.',
161
+ },
162
+ 'memory.decayHalfLifeDays': {
163
+ type: 'number', default: 90, min: 1, max: 3650, integer: true, levels: ALL_LEVELS,
164
+ description: 'A recency-decay FELEZŐDÉSI ideje napban (Ebbinghaus-görbe, dsgn-013 §2): ennyi nap inaktivitás '
165
+ + '(nem-felidézés) után a recency-faktor a felére csökken. Nagyobb = lassabb felejtés. Default 90.',
166
+ },
167
+ 'memory.floorWeight': {
168
+ type: 'number', default: 0.05, min: 0, max: 1, levels: ALL_LEVELS,
169
+ description: 'A memória-decay ALSÓ KORLÁTJA (dsgn-013 §2): az effektív szorzó sosem esik ez alá → a régi memória '
170
+ + 'lesüllyed a rangsorban, de a vektor-keresésben MÉG MEGTALÁLHATÓ (`> 0` → a `weight ≤ 0 → kizárt` szabályt '
171
+ + 'nem lépi át). `0` = a degradáció akár teljesen elnyomhat (de a tartalom akkor is megmarad Mongo-ban).',
172
+ },
173
+ 'memory.maxFrequencyBoost': {
174
+ type: 'number', default: 2.5, min: 1, max: 100, levels: ALL_LEVELS,
175
+ description: 'A felidézés-gyakoriság (frequency) rangsor-boost FELSŐ KORLÁTJA (eval-lelet 2026-06-25): a nyers '
176
+ + '`1 + log2(1+recallCount)` KORLÁTLAN (gyakran-felidézett entry-re ~5×), ami multiplikatívan elnyomja a '
177
+ + 'koszinusz-relevanciát (a „forró" de alig-releváns memória eltemeti a releváns „hideget"). Itt plafonozzuk. '
178
+ + 'Default 2.5. Nagyobb = a gyakoriság erősebben rangsorol (a régi korlátlan viselkedéshez állítsd magasra).',
179
+ },
180
+ 'memory.activationWeight': {
181
+ type: 'number', default: 0.35, min: 0, max: 1, levels: ALL_LEVELS,
182
+ description: 'Az aktiváció-szorzó TEMPER-súlya (α, eval-lelet 2026-06-25): a nyers decay-szorzót az 1 felé húzza '
183
+ + '(`1 + α·(raw−1)`) → az aktiváció FINOMAN modulál, a koszinusz-RELEVANCIA dominál (de a recent/frequent még '
184
+ + 'kissé előrébb). MINDKÉT véglet kompresszálódik: a „forró" entry nem boostolódik túl, ÉS a releváns „hideg" '
185
+ + 'entry nem zuhan a floor-ra. `1` = a régi (temper-mentes) viselkedés. Default 0.35.',
186
+ },
187
+ 'memory.reactivateOnRead': {
188
+ type: 'boolean', default: true, levels: ALL_LEVELS,
189
+ description: 'Reaktiváció-on-read (dsgn-013 §4): a `read` által VISSZAADOTT memory-hitek „új energiát kapnak" '
190
+ + '(lastRecalledAt=most, recallCount++, dormant=false) — a felidézés megerősíti az emléket (feljebb rangsorol, '
191
+ + 'és ha alvó volt, visszakerül a hot készletbe). Async, NEM blokkolja a read-et. `false` → nincs frissítés.',
192
+ },
193
+ 'memory.dormancyEnabled': {
194
+ type: 'boolean', default: true, levels: GLOBAL_ONLY,
195
+ description: 'Dormancy (dsgn-013 §5): a régóta-nem-felidézett, ritkán-használt memóriák ALVÓ-vá jelölése — NEM '
196
+ + 'hidratálódnak a hot LVS-poolba (RAM-/boot-spórolás), de COLD (Mongo) kereséssel elérhetők + megtaláláskor '
197
+ + 'reaktiválódnak. SOHA nem törlés. `false` → minden memória hidratálódik (a mai viselkedés).',
198
+ },
199
+ 'memory.dormantMinAgeDays': {
200
+ type: 'number', default: 180, min: 1, max: 3650, integer: true, levels: GLOBAL_ONLY,
201
+ description: 'A DORMANT-küszöb minimális inaktivitása napban (dsgn-013 §5.1): egy memória CSAK akkor lehet alvó, '
202
+ + 'ha legalább ennyi napja nem idéztük fel (biztonsági alsó kor — a friss memória sosem alvó). Default 180.',
203
+ },
204
+ 'memory.dormantMaxRecallCount': {
205
+ type: 'number', default: 2, min: 0, max: 1000, integer: true, levels: GLOBAL_ONLY,
206
+ description: 'A DORMANT-küszöb recall-gátja (dsgn-013 §5.1): a memória CSAK akkor lehet alvó, ha ennél kevesebbszer '
207
+ + 'idéztük fel — a gyakran-használt (≥ ennyi recall) memória SOHA nem alvó. Default 2.',
208
+ },
209
+ 'memory.coldSearchEnabled': {
210
+ type: 'boolean', default: true, levels: ALL_LEVELS,
211
+ description: 'Cold-search (dsgn-013 §5.3): ha egy memória-read a HOT poolból kevés találatot ad (a dormant entry-k '
212
+ + 'nincsenek ott), a dormant készleten Mongo-oldali koszinusz-keresés fut (lassabb, de teljes), és a talált '
213
+ + 'entry-ket REAKTIVÁLJA (visszakerülnek a hot készletbe). `false` → a dormant entry-k csak re-scan/aktiváláskor jönnek vissza.',
214
+ },
215
+ 'memory.coldSearchMaxCandidates': {
216
+ type: 'number', default: 5000, min: 100, max: 100000, integer: true, levels: ALL_LEVELS,
217
+ description: 'A cold-search dormant-scan FELSŐ KORLÁTJA (biztonsági memóriakorlát, dsgn-013 §5.3): a Mongo-koszinusz '
218
+ + 'legfeljebb ennyi dormant entry vektorát tölti be egy keresésnél. Default 5000.',
219
+ },
220
+ 'memory.supersededPenalty': {
221
+ type: 'number', default: 0.25, min: 0, max: 1, levels: ALL_LEVELS,
222
+ description: 'A LEVÁLTOTT (superseded) memória ranking-PENALTYje (dsgn-013 §6): egy additív memory-fájl régi, már '
223
+ + 'átírt tartalma (pl. kompaktált MEMORY.md korábbi bejegyzései) ezzel a szorzóval süllyed a rangsorban — a friss '
224
+ + 'verzió fölébe kerül, de a régi MEGMARAD (cold-kereshető). `1` = nincs penalty; `0` = teljesen elnyomott (de megőrzött).',
225
+ },
107
226
  // --- 4.2. Chunking — fájl-típusonként (fogyasztó: dsgn-004) ---
108
227
  'chunk.ts.maxSize': {
109
228
  type: 'number', default: 1500, min: 200, max: 8000, integer: true, levels: ALL_LEVELS,
@@ -236,10 +355,19 @@ exports.CONFIG_CATALOG = {
236
355
  + 'KÖZÖTT vár (az utolsó után nem), és a `dryRun` NEM vár (nincs valódi embed-munka).',
237
356
  },
238
357
  'scan.projectCooldownMs': {
239
- type: 'number', default: 0, min: 0, max: 60000, integer: true, levels: ALL_LEVELS,
240
- description: 'Kikapcsolható cooldown (ms) a PROJEKTEK KÖZÉ a `scan-projects` soros multi-scan-jében — a sok-'
241
- + 'projektes (L2/L6) beolvasás ne thrash-elje a gépet. Default `0` = KIKAPCSOLVA; nagy futásra pl. 2000–'
242
- + '5000. A CLI `--cooldown <ms>` felülírja ezt a config-default-ot (a projektek KÖZÖTT vár, az utolsó után nem).',
358
+ type: 'number', default: 10000, min: 0, max: 60000, integer: true, levels: ALL_LEVELS,
359
+ description: 'Cooldown (ms) a PROJEKTEK KÖZÉ a `scan-projects` soros multi-scan-jében — a sok-projektes '
360
+ + '(L2/L6) beolvasás ne thrash-elje a gépet. Default `10000` (10s). FELTÉTELES (user-FR 2026-06-22): CSAK '
361
+ + 'akkor vár, ha az ELŐZŐ projekt VALÓDI embed-munkát végzett ( `scan.projectCooldownMinChunks` új+módosult '
362
+ + 'chunk) — ha minden `equal` volt (0 embed), nincs gép-terhelés → NINCS cooldown. `0` = teljesen KI. A CLI '
363
+ + '`--cooldown <ms>` felülírja. (A projektek KÖZÖTT vár, az utolsó után nem.)',
364
+ },
365
+ 'scan.projectCooldownMinChunks': {
366
+ type: 'number', default: 100, min: 0, max: 100000, integer: true, levels: ALL_LEVELS,
367
+ description: 'A feltételes projekt-cooldown küszöbe (user-FR 2026-06-22): a `scan-projects` CSAK akkor vár a '
368
+ + 'projektek között, ha az előző projekt ennyi VAGY több új+módosult (ténylegesen embeddelt) chunkot termelt. '
369
+ + 'Default `100` — a kis/`equal`-csak projektek után nincs felesleges szünet (a cooldown a helyi embed-terhelés '
370
+ + 'tehermentesítésére van). `0` = mindig vár (ha a cooldownMs > 0).',
243
371
  },
244
372
  'scan.estimateMsPerChunk': {
245
373
  type: 'number', default: 250, min: 1, max: 10000, integer: true, levels: ALL_LEVELS,
@@ -251,6 +379,20 @@ exports.CONFIG_CATALOG = {
251
379
  description: 'A futás-közbeni scan-progress log min. időköze (ms) — a nagy scan haladását ennyente jelzi '
252
380
  + 'a konzolon (`[famIngest]` activity-sor). A végső 100% mindig kibocsátódik.',
253
381
  },
382
+ 'scan.stallThresholdMs': {
383
+ type: 'number', default: 120000, min: 5000, max: 1800000, integer: true, levels: ALL_LEVELS,
384
+ description: 'STALL-küszöb (ms, FEAT-008 Phase 5 — „jobb job kezelés"): ha egy FUTÓ scan-job ennyi ideje nem '
385
+ + 'mutat haladást (sem per-target befejezés, sem within-target progress), a `status`-ban `stalled:true` jelenik '
386
+ + 'meg. CSAK JELZÉS (nem szakítja meg automatikusan) — a user/CLI dönt (poll tovább / `cancel`). Az LM Studio '
387
+ + 'crash/hang determinisztikus felismeréséhez. Default `120000` (2 perc).',
388
+ },
389
+ 'scan.maxResumeCount': {
390
+ type: 'number', default: 5, min: 0, max: 100, integer: true, levels: ALL_LEVELS,
391
+ description: 'AUTO-RESUME cap (FEAT-008 Phase 5): egy megszakadt job-ot a szerver legfeljebb ennyiszer indít újra '
392
+ + 'a startup-resume-on. Efölött a job `failed` (failureReason="resume-cap túllépve") — így egy folyton-elakadó '
393
+ + '(pl. mindig ugyanazon a tartalmon összeomló) job nem indul újra a végtelenségig minden restartkor. `0` = '
394
+ + 'soha ne resume-olj automatikusan.',
395
+ },
254
396
  // --- 4.6. Reference / scope (fogyasztó: dsgn-002) ---
255
397
  'reference.cacheTtlMs': {
256
398
  type: 'number', default: 60000, min: 0, max: 3600000, integer: true, levels: GLOBAL_ONLY,
@@ -269,32 +411,9 @@ exports.CONFIG_CATALOG = {
269
411
  type: 'number', default: 20, min: 1, max: 200, integer: true, levels: GLOBAL_TABLE,
270
412
  description: 'Párhuzamos ingest flow-limit (CCAP DEFAULT_INGEST_FLOW_LIMIT=20, cap 200).',
271
413
  },
272
- // --- 4.8. Memória / heap-guard (OOM-hibakezelés, fogyasztó: FAM_HeapGuard_ControlService) ---
273
- 'memory.guardEnabled': {
274
- type: 'boolean', default: true, levels: GLOBAL_ONLY,
275
- description: 'A heap-guard (OOM-hibakezelés) be/ki. `true` (default): watchdog (heap-arány + GC-hányad) + a '
276
- + 'nehéz write-ek (scan/import/re-embed) load-shed-je critical nyomásnál + graceful-exit a near-limit '
277
- + 'zónában (a kriptikus exit-134 helyett). `false`: csak a crash-handlerek (uncaught/unhandled) aktívak.',
278
- },
279
- 'memory.warnRatio': {
280
- type: 'number', default: 0.70, min: 0.1, max: 1.0, levels: GLOBAL_ONLY,
281
- description: 'Heap-arány (used/limit), ami fölött a guard `warn` szintet jelez (log; még nincs load-shed).',
282
- },
283
- 'memory.shedRatio': {
284
- type: 'number', default: 0.82, min: 0.1, max: 1.0, levels: GLOBAL_ONLY,
285
- description: 'Heap-arány, ami fölött `critical` → a nehéz write-ek (scan/import/re-embed) 503-mal elutasítva '
286
- + '(a könnyű read/create/update fut tovább). A GC-hányad ≥60% is critical-t vált (mark-compact thrash-jel).',
287
- },
288
- 'memory.exitRatio': {
289
- type: 'number', default: 0.92, min: 0.1, max: 1.0, levels: GLOBAL_ONLY,
290
- description: 'Heap-arány, ami fölött tartósan (GC-vel sem csökken) a guard TISZTÁN kilép (exit 137) → a `fam '
291
- + 'serve` ps1 prediktíven újraindít. A kriptikus „Ineffective mark-compacts" exit-134 elkerülése. shed < exit ajánlott.',
292
- },
293
- 'memory.pollMs': {
294
- type: 'number', default: 3000, min: 500, max: 60000, integer: true, levels: GLOBAL_ONLY,
295
- description: 'A heap-watchdog mintavételi időköze (ms) + a GC-hányad gördülő-ablaka. Kisebb = gyorsabb '
296
- + 'reakció a hirtelen növekedésre, több CPU. 3000 = jó alapérték.',
297
- },
414
+ // (Az OOM-hibakezelés/heap-guard configja a BEDROCK `DyNTS_global_settings.memoryGuard`-ban van — NEM FAM-config:
415
+ // a bedrock `DyNTS_MemoryGuard`-ot a base App auto-installálja, a FAM a thresholdokat az `overrideDynamoNTSGlobalSettings`-ben
416
+ // állítja. Ezért nincs FAM `memory.*` config-kulcs.)
298
417
  'patterns.defaultWeight': {
299
418
  type: 'number', default: 5, min: 0, levels: [fam_config_level_type_enum_1.FAM_ConfigLevel.table], tableOnly: fam_table_type_enum_1.FAM_Table.codingPatterns,
300
419
  description: 'A coding_patterns tár default retrieval-súlya (CCAP weight 5; csak coding_patterns).',
@@ -111,6 +111,8 @@ exports.FAM_ERROR_CODES = {
111
111
  // --- Vector (FAM-VEC-*) ---
112
112
  /** Mongo→in-memory pool hidratálás sikertelen boot-on (BFR-AM-001). */
113
113
  vecHydrate: 'FAM-VEC-HYDRATE-001',
114
+ /** A hidratálás-bevárás (readiness-coordinator) hibája: a tár hidratálása MEGBUKOTT vagy a várakozás time-outolt. */
115
+ vecHydrateWait: 'FAM-VEC-HYDRATE-002',
114
116
  /** vectorSearch hiba (dimenzió / üres pool / searchMode). */
115
117
  vecSearch: 'FAM-VEC-SEARCH-001',
116
118
  /** contentVector Mongo-persist sikertelen (BFR-AM-005). */