@futdevpro/fdp-agent-memory 1.1.115 → 1.1.116

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.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@futdevpro/fdp-agent-memory",
3
- "version": "1.1.115",
3
+ "version": "1.1.116",
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": {
@@ -46,6 +46,16 @@ class FAM_EmbeddingBootstrap_ControlService {
46
46
  catch (error) {
47
47
  fsm_dynamo_1.DyFM_Log.warn(`[FAM bootstrap] ENV-config seed sikertelen: ${error?.message}`);
48
48
  }
49
+ // HETI AUTO RE-SCAN + DELETE-SYNC (dispatch „Problem 2", 2026-07-26): az in-process ütemező telepítése MÁR ITT,
50
+ // a lassú boot-karbantartás (hidratálás/scope/resume/dormancy) ELŐTT — hogy a heti-slot timer BIZTOSAN felkerüljön
51
+ // az event-loopra, függetlenül attól, meddig tart egy nagy korpusz hidratálása (a `setInterval` az `await`-ok alatt
52
+ // is tüzel; a lentebbi lépések egyike sem gátolhatja a telepítést). A tick maga vár a hidratálás végéig + best-effort.
53
+ try {
54
+ fam_scan_scheduler_control_service_1.FAM_ScanScheduler_ControlService.getInstance().install();
55
+ }
56
+ catch (error) {
57
+ fsm_dynamo_1.DyFM_Log.warn(`[FAM bootstrap] heti re-scan scheduler telepítése sikertelen: ${error?.message}`);
58
+ }
49
59
  // A readiness-coordinator hidratálás-bevárás time-outja a `read.hydrationWaitMs` config-ból (a hidratálás
50
60
  // ELŐTT, hogy a `beginBoot` után érkező read-ek már a helyes időkorláttal várjanak). Best-effort (default 180s).
51
61
  try {
@@ -63,6 +73,10 @@ class FAM_EmbeddingBootstrap_ControlService {
63
73
  catch (error) {
64
74
  fsm_dynamo_1.DyFM_Log.warn(`[FAM bootstrap] vektor-pool hidratálás sikertelen: ${error?.message}`);
65
75
  }
76
+ // A hidratálás UTÁN AZONNAL egy scheduler-tick (fire-and-forget): a heti catch-up így PROMPT lefut a hidratálás
77
+ // végén (nem kell a 10-perces intervallumra várni), és FÜGGETLEN a lentebbi (potenciálisan lassú) boot-karbantartástól.
78
+ // A tick maga best-effort + a hidratálás-kaput már átlépte (complete), így itt biztonságosan indíthat re-scant.
79
+ void fam_scan_scheduler_control_service_1.FAM_ScanScheduler_ControlService.getInstance().tick(Date.now());
66
80
  // Scope-integritás self-check (user-FR 2026-06-22): a rendszer MAGÁTÓL ismerje fel az árva/duplikált
67
81
  // scope-okat (boot után, best-effort — a takarítás `merge_scopes`, nem itt). Csak figyelmeztet, nem ír.
68
82
  try {
@@ -98,15 +112,6 @@ class FAM_EmbeddingBootstrap_ControlService {
98
112
  catch (error) {
99
113
  fsm_dynamo_1.DyFM_Log.warn(`[FAM bootstrap] memory-dormancy sweep sikertelen: ${error?.message}`);
100
114
  }
101
- // HETI AUTO RE-SCAN + DELETE-SYNC (dispatch „Problem 2", 2026-07-26): az in-process ütemező telepítése — a heti
102
- // slotot (default hétfő 07:00) figyeli + boot-catch-up-ol. A reconcile-logika már létezik; ez csak az ütemezés.
103
- // Best-effort (a telepítés hibája nem buktatja a bootot; a scheduler maga is best-effort végig).
104
- try {
105
- fam_scan_scheduler_control_service_1.FAM_ScanScheduler_ControlService.getInstance().install();
106
- }
107
- catch (error) {
108
- fsm_dynamo_1.DyFM_Log.warn(`[FAM bootstrap] heti re-scan scheduler telepítése sikertelen: ${error?.message}`);
109
- }
110
115
  }
111
116
  }
112
117
  exports.FAM_EmbeddingBootstrap_ControlService = FAM_EmbeddingBootstrap_ControlService;
@@ -6,6 +6,7 @@ const fam_config_level_type_enum_1 = require("../../../_enums/fam-config-level.t
6
6
  const config_control_service_1 = require("../../../_routes/server/config/config.control-service");
7
7
  const fam_scan_job_control_service_1 = require("./fam-scan-job.control-service");
8
8
  const fam_scan_job_data_service_1 = require("./fam-scan-job.data-service");
9
+ const embedding_1 = require("../../embedding");
9
10
  /**
10
11
  * `FAM_ScanScheduler_ControlService` (2026-07-26, dispatch „Problem 2") — a HETI automatikus TELJES FAM re-scan +
11
12
  * törlés-szinkron (reconcile/delta) IN-PROCESS ütemezője. A reconcile-logika MÁR LÉTEZIK (a scan orphan-soft-delete-eli
@@ -13,6 +14,10 @@ const fam_scan_job_data_service_1 = require("./fam-scan-job.data-service");
13
14
  * FAM-tartalom naprakész maradjon anélkül, hogy manuálisan re-scannelni kellene.
14
15
  *
15
16
  * **Slot:** LOKÁLIS idő `scan.weeklyRescanDayOfWeek` (default 1 = hétfő) @ `scan.weeklyRescanHour`:00 (default 7 → 07:00).
17
+ * **Telepítés (KRITIKUS):** a `boot()` a scheduler-t a LEHETŐ LEGKORÁBBAN (a lassú boot-karbantartás — hidratálás/scope-
18
+ * integritás/resume/dormancy — ELŐTT) telepíti, hogy a timer BIZTOSAN felkerüljön az event-loopra, függetlenül attól,
19
+ * hogy egy nagy korpusz hidratálása/karbantartása meddig tart (a `setInterval` az `await`-ok alatt is tüzel). A tick
20
+ * viszont a **hidratálás befejeztéig NEM indít re-scant** (erőforrás-kontenció ellen) — a következő tick bepótol.
16
21
  * **Catch-up:** egy fix időközű tick (10 perc) figyeli, hogy a LEGUTÓBBI elmúlt slot óta futott-e már (`scan.weeklyRescanLastRunAt`).
17
22
  * Ha a szerver a slot-időben nem futott (down/restart), a következő indításkor BEPÓTOL — a heti freshness így restart-tűrő.
18
23
  * **Restart-storm ellen:** a `lastRunAt` a config-store-ban perzisztál → egy héten belüli restart NEM indít újabb re-scant.
@@ -50,7 +55,7 @@ class FAM_ScanScheduler_ControlService {
50
55
  if (typeof this.timer.unref === 'function') {
51
56
  this.timer.unref();
52
57
  }
53
- fsm_dynamo_1.DyFM_Log.info(`[FAM scanScheduler] heti re-scan figyelő telepítve (tick ${FAM_ScanScheduler_ControlService.CHECK_INTERVAL_MS / 60000} percenként).`);
58
+ fsm_dynamo_1.DyFM_Log.log(`[FAM scanScheduler] heti re-scan figyelő telepítve (tick ${FAM_ScanScheduler_ControlService.CHECK_INTERVAL_MS / 60000} percenként).`);
54
59
  void this.tick(Date.now());
55
60
  }
56
61
  /** A timer leállítása (teszt / graceful). */
@@ -76,6 +81,12 @@ class FAM_ScanScheduler_ControlService {
76
81
  if (enabled === false) {
77
82
  return;
78
83
  }
84
+ // HIDRATÁLÁS-KAPU: a scheduler-t a boot ELEJÉN telepítjük (nem a lassú boot-karbantartás mögött), ezért a
85
+ // tick a hidratálás ALATT is tüzelhet — de ILYENKOR NE indítsunk TELJES re-scant (erőforrás-kontenció a
86
+ // 100k+ vektor hidratálásával). Nem rögzítünk lastRun-t → a következő tick (a hidratálás után) BEPÓTOL.
87
+ if (!embedding_1.FAM_VectorSearch_ControlService.getInstance().hydrationSummary().complete) {
88
+ return;
89
+ }
79
90
  const day = await this.resolveNum(config, 'scan.weeklyRescanDayOfWeek', 1);
80
91
  const hour = await this.resolveNum(config, 'scan.weeklyRescanHour', 7);
81
92
  const lastRun = await this.resolveNum(config, 'scan.weeklyRescanLastRunAt', 0);
@@ -103,14 +114,14 @@ class FAM_ScanScheduler_ControlService {
103
114
  const root = typeof rootValue === 'string' ? rootValue.trim() : '';
104
115
  if (root) {
105
116
  await fam_scan_job_control_service_1.FAM_ScanJob_ControlService.getInstance().start({ root: root, sourceLocation: root, origin: origin, waitMs: 0 });
106
- fsm_dynamo_1.DyFM_Log.info(`[FAM scanScheduler] heti TELJES re-scan + reconcile INDÍTVA (root: ${root}).`);
117
+ fsm_dynamo_1.DyFM_Log.log(`[FAM scanScheduler] heti TELJES re-scan + reconcile INDÍTVA (root: ${root}).`);
107
118
  return;
108
119
  }
109
120
  // Zero-config: a legutóbbi durable scan-job feloldott cél-specjei (ugyanaz a cél-halmaz, reconcile-lel).
110
121
  const targets = await this.loadLatestScannedTargets();
111
122
  if (targets && targets.length) {
112
123
  await fam_scan_job_control_service_1.FAM_ScanJob_ControlService.getInstance().start({ projects: targets, origin: origin, waitMs: 0 });
113
- fsm_dynamo_1.DyFM_Log.info(`[FAM scanScheduler] heti TELJES re-scan + reconcile INDÍTVA (${targets.length} cél a legutóbbi scan-ből).`);
124
+ fsm_dynamo_1.DyFM_Log.log(`[FAM scanScheduler] heti TELJES re-scan + reconcile INDÍTVA (${targets.length} cél a legutóbbi scan-ből).`);
114
125
  return;
115
126
  }
116
127
  fsm_dynamo_1.DyFM_Log.warn('[FAM scanScheduler] heti re-scan esedékes, DE nincs cél: állítsd be a `scan.weeklyRescanRoot`-ot '
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@futdevpro/fdp-agent-memory",
3
- "version": "1.1.115",
3
+ "version": "1.1.116",
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": {