@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.
package/build/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@futdevpro/fdp-agent-memory",
|
|
3
|
-
"version": "1.1.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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": {
|