@futdevpro/fdp-agent-memory 0.1.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.
- package/README.md +345 -0
- package/build/package.json +96 -0
- package/build/src/_assets/mcp-client-config/README.md +29 -0
- package/build/src/_assets/mcp-client-config/claude_desktop_config.json +15 -0
- package/build/src/_assets/mcp-client-config/mcp.json +15 -0
- package/build/src/_collections/config-catalog.const.js +180 -0
- package/build/src/_collections/config-error-codes.const.js +30 -0
- package/build/src/_collections/config-presets.const.js +25 -0
- package/build/src/_collections/error-banners.const.js +100 -0
- package/build/src/_collections/error-codes.const.js +150 -0
- package/build/src/_collections/fam-db-models.const.js +37 -0
- package/build/src/_collections/fam-entry-bootstrap.util.js +80 -0
- package/build/src/_collections/fam-error-context.util.js +90 -0
- package/build/src/_collections/fam-error-factory.util.js +64 -0
- package/build/src/_enums/fam-config-level.type-enum.js +15 -0
- package/build/src/_enums/fam-table.type-enum.js +20 -0
- package/build/src/_integration-tests/_helpers/fam-integration-test-setup.util.js +105 -0
- package/build/src/_models/data-models/fam-codebase.data-model.js +51 -0
- package/build/src/_models/data-models/fam-coding-patterns.data-model.js +58 -0
- package/build/src/_models/data-models/fam-config.data-model.js +68 -0
- package/build/src/_models/data-models/fam-documents.data-model.js +53 -0
- package/build/src/_models/data-models/fam-entry-base-properties.const.js +43 -0
- package/build/src/_models/data-models/fam-entry.data-model.js +81 -0
- package/build/src/_models/data-models/fam-error.data-model.js +88 -0
- package/build/src/_models/data-models/fam-ingest-run.data-model.js +74 -0
- package/build/src/_models/data-models/fam-knowledge.data-model.js +48 -0
- package/build/src/_models/data-models/fam-memory.data-model.js +55 -0
- package/build/src/_models/data-models/fam-reference.data-model.js +67 -0
- package/build/src/_models/data-models/fam-rules.data-model.js +51 -0
- package/build/src/_models/data-models/fam-scope.data-model.js +52 -0
- package/build/src/_models/interfaces/fam-common.interface.js +23 -0
- package/build/src/_models/interfaces/fam-config.interface.js +2 -0
- package/build/src/_models/interfaces/fam-error.interface.js +2 -0
- package/build/src/_modules/embedding/_collections/fam-embedding-pricing.const.js +22 -0
- package/build/src/_modules/embedding/_collections/fam-store-registry.const.js +63 -0
- package/build/src/_modules/embedding/_models/interfaces/fam-embedding-cost.interface.js +10 -0
- package/build/src/_modules/embedding/_models/interfaces/fam-embedding-provider.interface.js +2 -0
- package/build/src/_modules/embedding/_models/interfaces/fam-resolved-provider.interface.js +2 -0
- package/build/src/_modules/embedding/_services/fam-embedding-bootstrap.control-service.js +52 -0
- package/build/src/_modules/embedding/_services/fam-embedding-cost.control-service.js +175 -0
- package/build/src/_modules/embedding/_services/fam-embedding-pipeline.control-service.js +202 -0
- package/build/src/_modules/embedding/_services/fam-embedding-preset.control-service.js +66 -0
- package/build/src/_modules/embedding/_services/fam-embedding.control-service.js +253 -0
- package/build/src/_modules/embedding/_services/fam-entry.data-service.js +64 -0
- package/build/src/_modules/embedding/_services/fam-lmstudio-embedding.provider.js +112 -0
- package/build/src/_modules/embedding/_services/fam-mock-embedding.provider.js +64 -0
- package/build/src/_modules/embedding/_services/fam-openai-embedding.provider.js +64 -0
- package/build/src/_modules/embedding/_services/fam-vector-search.control-service.js +244 -0
- package/build/src/_modules/embedding/index.js +40 -0
- package/build/src/_modules/ingest/_collections/fam-content-hash.util.js +35 -0
- package/build/src/_modules/ingest/_collections/fam-file-routing.util.js +95 -0
- package/build/src/_modules/ingest/_collections/fam-glob-match.util.js +84 -0
- package/build/src/_modules/ingest/_collections/fam-md-chunker.util.js +164 -0
- package/build/src/_modules/ingest/_collections/fam-scan-path.util.js +91 -0
- package/build/src/_modules/ingest/_collections/fam-secret-exclude.util.js +54 -0
- package/build/src/_modules/ingest/_collections/fam-sliding-chunker.util.js +76 -0
- package/build/src/_modules/ingest/_collections/fam-ts-chunker.util.js +316 -0
- package/build/src/_modules/ingest/_models/interfaces/fam-ingest.interface.js +2 -0
- package/build/src/_modules/ingest/_services/fam-chunker.control-service.js +114 -0
- package/build/src/_modules/ingest/_services/fam-delta-compare.util.js +74 -0
- package/build/src/_modules/ingest/_services/fam-ingest-run.data-service.js +85 -0
- package/build/src/_modules/ingest/_services/fam-ingest.control-service.js +384 -0
- package/build/src/_modules/ingest/_services/fam-scan.control-service.js +211 -0
- package/build/src/_modules/ingest/index.js +46 -0
- package/build/src/_modules/mcp/_collections/fam-core-tools.const.js +186 -0
- package/build/src/_modules/mcp/_models/interfaces/fam-mcp.interface.js +31 -0
- package/build/src/_modules/mcp/_services/fam-capabilities-tool.service.js +111 -0
- package/build/src/_modules/mcp/_services/fam-capability-registry.service.js +1180 -0
- package/build/src/_modules/mcp/_services/fam-mcp-adapter.service.js +123 -0
- package/build/src/_modules/mcp/_services/fam-mcp-server.service.js +69 -0
- package/build/src/_modules/mcp/_services/fam-read-tool.service.js +99 -0
- package/build/src/_modules/mcp/_services/fam-write-tool.service.js +460 -0
- package/build/src/_modules/mcp/index.js +35 -0
- package/build/src/_modules/migration/_collections/fam-claude-mem-normalize.util.js +166 -0
- package/build/src/_modules/migration/_collections/fam-import-content-hash.util.js +38 -0
- package/build/src/_modules/migration/_collections/fam-target-mapping.util.js +90 -0
- package/build/src/_modules/migration/_enums/fam-claude-mem-source.type-enum.js +20 -0
- package/build/src/_modules/migration/_models/interfaces/fam-claude-mem.interface.js +26 -0
- package/build/src/_modules/migration/_services/fam-claude-mem-export-reader.service.js +134 -0
- package/build/src/_modules/migration/_services/fam-claude-mem-import.control-service.js +533 -0
- package/build/src/_modules/migration/_services/fam-claude-mem-sqlite-reader.service.js +144 -0
- package/build/src/_modules/migration/_services/fam-claude-mem-worker-reader.service.js +115 -0
- package/build/src/_modules/migration/_services/fam-import-dedup.data-service.js +102 -0
- package/build/src/_modules/migration/index.js +38 -0
- package/build/src/_modules/retrieval/_models/interfaces/fam-retrieval.interface.js +2 -0
- package/build/src/_modules/retrieval/_services/fam-retrieval-candidate.data-service.js +67 -0
- package/build/src/_modules/retrieval/_services/fam-retrieval-suggestions.util.js +182 -0
- package/build/src/_modules/retrieval/_services/fam-retrieval.control-service.js +282 -0
- package/build/src/_modules/retrieval/index.js +22 -0
- package/build/src/_modules/scope-reference/_collections/fam-fuzzy-match.util.js +86 -0
- package/build/src/_modules/scope-reference/_collections/fam-scope-normalize.util.js +47 -0
- package/build/src/_modules/scope-reference/_models/interfaces/fam-reference-resolution.interface.js +2 -0
- package/build/src/_modules/scope-reference/_models/interfaces/fam-resolution-trace.interface.js +2 -0
- package/build/src/_modules/scope-reference/_services/fam-reference.data-service.js +179 -0
- package/build/src/_modules/scope-reference/_services/fam-scope-resolver.control-service.js +473 -0
- package/build/src/_modules/scope-reference/_services/fam-scope.data-service.js +215 -0
- package/build/src/_modules/scope-reference/index.js +26 -0
- package/build/src/_routes/server/api/api.controller.js +400 -0
- package/build/src/_routes/server/client-app/client-app.control-service.js +132 -0
- package/build/src/_routes/server/client-app/client-app.controller.js +35 -0
- package/build/src/_routes/server/config/config.control-service.js +476 -0
- package/build/src/_routes/server/config/config.data-service.js +49 -0
- package/build/src/_routes/server/errors/errors.control-service.js +123 -0
- package/build/src/_routes/server/errors/errors.controller.js +65 -0
- package/build/src/_routes/server/errors/errors.data-service.js +80 -0
- package/build/src/_routes/server/server-status/server-status.control-service.js +19 -0
- package/build/src/_routes/server/server-status/server-status.controller.js +39 -0
- package/build/src/app.server.js +122 -0
- package/build/src/environments/environment.js +20 -0
- package/build/src/index.js +18 -0
- package/client-dist/chunk-GHKRM4SM.js +1 -0
- package/client-dist/chunk-LMTL7GA3.js +575 -0
- package/client-dist/index.html +17 -0
- package/client-dist/main-2KWB3QYK.js +2 -0
- package/client-dist/polyfills-HGDOEU5L.js +2 -0
- package/client-dist/styles-3J7JD5YE.css +1 -0
- package/package.json +96 -0
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.famError_dataParams = exports.FAM_Error_DataModel = void 0;
|
|
4
|
+
const fsm_dynamo_1 = require("@futdevpro/fsm-dynamo");
|
|
5
|
+
/**
|
|
6
|
+
* `FAM_Error` rekord (collection `fam_errors`, dsgn-008 §2). **REUSE, NEM reinvent** (dsgn-008 §1):
|
|
7
|
+
* `extends DyFM_Errors<DyFM_Error>` — a Dynamo error-record bázisa, ahonnan az **auto-dedup +
|
|
8
|
+
* occurrence-count** (`count`), a `level`/`source`/`message`/`stackTrace`/`versions`/`duplications`
|
|
9
|
+
* mind örökölt. A `DyNTS_Errors_DataService` (amit a `FAM_Error_DataService` terjeszt) ezeket
|
|
10
|
+
* kezeli — saját error-infra NEM épül.
|
|
11
|
+
*
|
|
12
|
+
* A `FAM_Error` a bázist a FAM-rétegekre szabott mezőkkel egészíti ki:
|
|
13
|
+
* - `errorCode` — a `FAM-<SVC>-<METHOD>-NNN` séma (a katalógus SSOT-ból, dsgn-008 §3),
|
|
14
|
+
* - `handled` — UI-ból / `list_errors` capability-ből "kezelve" jelölhető (dsgn-008 §5),
|
|
15
|
+
* - `contextSnapshot` — a diagnózis-kontextus (dsgn-008 §2, sensitive-szűrt — `FAM_ErrorContext_Util`).
|
|
16
|
+
*
|
|
17
|
+
* A dsgn-008 §2 `occurrenceCount` shape-mező a Dynamo-bázis **`count`**-jára képződik: a dedup-on a
|
|
18
|
+
* base `recordError` a `count`-ot növeli (azonos `message` → +1, nem új rekord). NEM teszünk rá
|
|
19
|
+
* getter-t a DataModel-re (az a `DyFM_DataProperties` mapped-type-ban kötelező séma-mezőt kívánna);
|
|
20
|
+
* a dsgn-008 §2 mezőnévre a `occurrenceCount(record)` statikus projekció ad hozzáférést, így a
|
|
21
|
+
* `list_errors`/UI a spec-mezőnévvel olvashat, a persisztált shape pedig változatlan (= Dynamo
|
|
22
|
+
* errors-record + FAM-mezők).
|
|
23
|
+
*/
|
|
24
|
+
class FAM_Error_DataModel extends fsm_dynamo_1.DyFM_Errors {
|
|
25
|
+
/** Egyedi, kereshető hibakód (`FAM-<SVC>-<METHOD>-NNN`, dsgn-008 §3 katalógus). */
|
|
26
|
+
errorCode;
|
|
27
|
+
/** "Kezelve" jelölés (UI / `list_errors`); default `false` (dsgn-008 §2/§5). */
|
|
28
|
+
handled = false;
|
|
29
|
+
/** Diagnózis-kontextus (dsgn-008 §2); sensitive-szűrt (`FAM_ErrorContext_Util`). */
|
|
30
|
+
contextSnapshot;
|
|
31
|
+
constructor(set) {
|
|
32
|
+
super(set);
|
|
33
|
+
if (set) {
|
|
34
|
+
fsm_dynamo_1.DyFM_Object.cleanAssign(this, set);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* A dsgn-008 §2 `occurrenceCount` projekció — a Dynamo-bázis `count` (default 1). A `list_errors`/
|
|
39
|
+
* UI ezt a spec-mezőnevet adja ki a rekordról (a `count` a dedup által növelt szám).
|
|
40
|
+
*/
|
|
41
|
+
static occurrenceCount(record) {
|
|
42
|
+
return record.count ?? 1;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
exports.FAM_Error_DataModel = FAM_Error_DataModel;
|
|
46
|
+
/**
|
|
47
|
+
* MongoDB data-params a `fam_errors` collection-höz (dsgn-008 §2). A `DyFM_errors_dataParams`
|
|
48
|
+
* (Dynamo errors-séma) tulajdonságait tükrözi (a dedup/occurrence/audit mezők), kiegészítve a
|
|
49
|
+
* FAM-specifikus `errorCode` / `handled` / `contextSnapshot` mezőkkel. NINCS `addArchive`: az
|
|
50
|
+
* error-rekord maga a tartós napló (a dedup felülír, nem archivál).
|
|
51
|
+
*
|
|
52
|
+
* A `contextSnapshot` `type:'object'` (Mongoose `Mixed`) — strukturált, de séma-szabad blob; a
|
|
53
|
+
* mező-halmaz a `FAM_ErrorContext` interfész (dsgn-008 §2), nem a Mongoose-séma kényszeríti.
|
|
54
|
+
*/
|
|
55
|
+
exports.famError_dataParams = new fsm_dynamo_1.DyFM_DataModel_Params({
|
|
56
|
+
dataName: 'fam_errors',
|
|
57
|
+
properties: {
|
|
58
|
+
// --- Dynamo errors-bázis (DyFM_errors_dataParams tükrözve) ---
|
|
59
|
+
flag: { type: 'string' },
|
|
60
|
+
issuer: { type: 'string', index: true },
|
|
61
|
+
username: { type: 'string' },
|
|
62
|
+
versions: { type: 'string[]' },
|
|
63
|
+
localTime: { type: 'string' },
|
|
64
|
+
region: { type: 'string' },
|
|
65
|
+
message: { type: 'string' },
|
|
66
|
+
exception: { type: 'string' },
|
|
67
|
+
exceptionObj: { type: 'any' },
|
|
68
|
+
stackTrace: { type: 'string[]' },
|
|
69
|
+
error: { type: 'any' },
|
|
70
|
+
count: { type: 'number' },
|
|
71
|
+
d_error: { type: 'DyFM_Error' },
|
|
72
|
+
additionalContent: { type: 'any' },
|
|
73
|
+
level: { type: 'DyFM_ErrorLevel', index: true },
|
|
74
|
+
priority: { type: 'number' },
|
|
75
|
+
duplications: { type: 'DyNTS_Error[]' },
|
|
76
|
+
category: { type: 'string', index: true },
|
|
77
|
+
fixAttempts: { type: 'any' },
|
|
78
|
+
lastFixedAt: { type: 'Date' },
|
|
79
|
+
lastFixedBy: { type: 'string' },
|
|
80
|
+
lastFixedInVersion: { type: 'string' },
|
|
81
|
+
lastFixHypothesis: { type: 'string' },
|
|
82
|
+
regressedAfterFix: { type: 'boolean' },
|
|
83
|
+
// --- FAM-specifikus (dsgn-008 §2) ---
|
|
84
|
+
errorCode: { type: 'string', index: true },
|
|
85
|
+
handled: { type: 'boolean', index: true },
|
|
86
|
+
contextSnapshot: { type: 'object' },
|
|
87
|
+
},
|
|
88
|
+
});
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.famIngestRun_dataParams = exports.FAM_IngestRun_DataModel = void 0;
|
|
4
|
+
const fsm_dynamo_1 = require("@futdevpro/fsm-dynamo");
|
|
5
|
+
/**
|
|
6
|
+
* `FAM_IngestRun` — ingest-futtatás összefoglaló (dsgn-001 §7 + dsgn-004 §5).
|
|
7
|
+
* Collection `fam_ingest_runs`; `extends DyFM_Metadata` (NEM `FAM_Entry`).
|
|
8
|
+
*
|
|
9
|
+
* Minden scan-művelet EGYETLEN ilyen rekordot ír; minden generált chunk megőrzi az
|
|
10
|
+
* `ingestRunId`-jét (`FAM_Entry.ingestRunId`) — így a run chunkjai csoportosan listázhatók/
|
|
11
|
+
* törölhetők (dsgn-004 §5). MP-4 a fogyasztó/író; itt a stabil minimál szerződés.
|
|
12
|
+
*
|
|
13
|
+
* `_id` = a `runId` (UUID v4).
|
|
14
|
+
*/
|
|
15
|
+
class FAM_IngestRun_DataModel extends fsm_dynamo_1.DyFM_Metadata {
|
|
16
|
+
/** A futtatás triggere. */
|
|
17
|
+
trigger;
|
|
18
|
+
/** Érintett tár(ak) — egy `scan-project` többet is érinthet. */
|
|
19
|
+
table;
|
|
20
|
+
/** Feloldott canonical scope (dsgn-002). */
|
|
21
|
+
scopePath = [];
|
|
22
|
+
/** A scan gyökere (projekt-relatív). */
|
|
23
|
+
rootPath;
|
|
24
|
+
/** Ténylegesen route-olt + chunkolt fájlok száma. */
|
|
25
|
+
filesProcessed;
|
|
26
|
+
/** Skip-routing + biztonsági szűrés miatt kihagyott fájlok száma. */
|
|
27
|
+
filesSkipped;
|
|
28
|
+
/** Generált chunkok összesen. */
|
|
29
|
+
chunkCount;
|
|
30
|
+
/** Delta-detection aggregátum (`new`/`modified`/`equal`/`deleted`). */
|
|
31
|
+
verdicts;
|
|
32
|
+
/** Embedding token-költség (dsgn-006; BEDROCK-FRS surface — `undefined`, ha nem elérhető). */
|
|
33
|
+
embedTokenCost;
|
|
34
|
+
/** A futtatás időtartama (ms). */
|
|
35
|
+
durationMs;
|
|
36
|
+
/** Futtatás-állapot (dsgn-004 §5). */
|
|
37
|
+
status;
|
|
38
|
+
/**
|
|
39
|
+
* Részleges hibák (dsgn-008) — per-fájl hiba nem buktatja az egész run-t.
|
|
40
|
+
* Minimál szerződés MP-1-ben (object[]); a `FAM_ErrorRef` shape pontosítása dsgn-008 / MP-4.
|
|
41
|
+
*/
|
|
42
|
+
errors = [];
|
|
43
|
+
constructor(set) {
|
|
44
|
+
super(set);
|
|
45
|
+
if (set) {
|
|
46
|
+
fsm_dynamo_1.DyFM_Object.cleanAssign(this, set);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
exports.FAM_IngestRun_DataModel = FAM_IngestRun_DataModel;
|
|
51
|
+
/**
|
|
52
|
+
* MongoDB data-params a `fam_ingest_runs` collection-höz (dsgn-004 §5).
|
|
53
|
+
*
|
|
54
|
+
* Stabil minimál szerződés (runId/table/scope/status/számlálók); a bővítés MP-4-ben additív
|
|
55
|
+
* (non-breaking). Nincs vektor-mező (a run nem retrieve-elhető tartalom).
|
|
56
|
+
*/
|
|
57
|
+
exports.famIngestRun_dataParams = new fsm_dynamo_1.DyFM_DataModel_Params({
|
|
58
|
+
dataName: 'fam_ingest_runs',
|
|
59
|
+
addArchive: true,
|
|
60
|
+
properties: {
|
|
61
|
+
trigger: { type: 'string', index: true },
|
|
62
|
+
table: { type: 'array' },
|
|
63
|
+
scopePath: { type: 'array', default: [] },
|
|
64
|
+
rootPath: { type: 'string' },
|
|
65
|
+
filesProcessed: { type: 'number' },
|
|
66
|
+
filesSkipped: { type: 'number' },
|
|
67
|
+
chunkCount: { type: 'number' },
|
|
68
|
+
verdicts: { type: 'object' },
|
|
69
|
+
embedTokenCost: { type: 'number' },
|
|
70
|
+
durationMs: { type: 'number' },
|
|
71
|
+
status: { type: 'string', index: true },
|
|
72
|
+
errors: { type: 'array', default: [] },
|
|
73
|
+
},
|
|
74
|
+
});
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.famKnowledge_dataParams = exports.FAM_Knowledge_DataModel = void 0;
|
|
4
|
+
const fsm_dynamo_1 = require("@futdevpro/fsm-dynamo");
|
|
5
|
+
const fam_entry_base_properties_const_1 = require("./fam-entry-base-properties.const");
|
|
6
|
+
const fam_entry_data_model_1 = require("./fam-entry.data-model");
|
|
7
|
+
/**
|
|
8
|
+
* `knowledge` tár (dsgn-001 §1/§4) — domain-tudás / fogalmak / definíciók / kapcsolatok.
|
|
9
|
+
*
|
|
10
|
+
* A `FAM_Entry` bázisra épül; per-tár mezők: `subject` (egysoros téma), `description` (részletes
|
|
11
|
+
* tudás) — a `content` ezek kombinációja a vektorizáláshoz. `kind` default `'knowledge'`.
|
|
12
|
+
*/
|
|
13
|
+
class FAM_Knowledge_DataModel extends fam_entry_data_model_1.FAM_Entry {
|
|
14
|
+
/** Egysoros téma / azonosító. */
|
|
15
|
+
subject;
|
|
16
|
+
/** Részletes tudás-tartalom (a `subject` kifejtése). */
|
|
17
|
+
description;
|
|
18
|
+
constructor(set) {
|
|
19
|
+
super(set);
|
|
20
|
+
if (set) {
|
|
21
|
+
fsm_dynamo_1.DyFM_Object.cleanAssign(this, set);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
exports.FAM_Knowledge_DataModel = FAM_Knowledge_DataModel;
|
|
26
|
+
/**
|
|
27
|
+
* MongoDB data-params a `knowledge` tárhoz (collection `fam_knowledge`, dsgn-001 §1).
|
|
28
|
+
*
|
|
29
|
+
* `contentVector` `vectorizedFrom: ['content', 'subject', 'description']` — a subject + description
|
|
30
|
+
* merge maximalizálja a retrieval-jelet (dsgn-001 §4; embedding-provider MP-2). `kind` default
|
|
31
|
+
* `'knowledge'`.
|
|
32
|
+
*/
|
|
33
|
+
exports.famKnowledge_dataParams = new fsm_dynamo_1.DyFM_DataModel_Params({
|
|
34
|
+
dataName: 'fam_knowledge',
|
|
35
|
+
addArchive: true,
|
|
36
|
+
properties: {
|
|
37
|
+
...fam_entry_base_properties_const_1.famEntryBaseProperties,
|
|
38
|
+
kind: { type: 'string', index: true, default: 'knowledge' },
|
|
39
|
+
contentVector: {
|
|
40
|
+
type: 'number[]',
|
|
41
|
+
vectorizedFrom: ['content', 'subject', 'description'],
|
|
42
|
+
vectorizeUseIndex: 'contentVector',
|
|
43
|
+
default: [],
|
|
44
|
+
},
|
|
45
|
+
subject: { type: 'string', index: true },
|
|
46
|
+
description: { type: 'string' },
|
|
47
|
+
},
|
|
48
|
+
});
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.famMemory_dataParams = exports.FAM_Memory_DataModel = void 0;
|
|
4
|
+
const fsm_dynamo_1 = require("@futdevpro/fsm-dynamo");
|
|
5
|
+
const fam_entry_base_properties_const_1 = require("./fam-entry-base-properties.const");
|
|
6
|
+
const fam_entry_data_model_1 = require("./fam-entry.data-model");
|
|
7
|
+
/**
|
|
8
|
+
* `memory` tár (dsgn-001 §1/§4) — történeti dolgok: session/development history, incidensek,
|
|
9
|
+
* megjegyzendő apróságok, lessons-learned (dsgn-001 §3).
|
|
10
|
+
*
|
|
11
|
+
* A `FAM_Entry` bázisra épül; per-tár mezők: `memoryType` (== `kind`), `sessionId`, `runId`,
|
|
12
|
+
* `instanceId`, `summarizedEntryIds` (rekurzív summary-referenciák — későbbi fázis foundation).
|
|
13
|
+
* `kind` default `'memory_entry'`.
|
|
14
|
+
*/
|
|
15
|
+
class FAM_Memory_DataModel extends fam_entry_data_model_1.FAM_Entry {
|
|
16
|
+
/** A memória-elem típusa (== `kind`: `session_history`|`summary`|`observation`|…). */
|
|
17
|
+
memoryType;
|
|
18
|
+
/** Forrás-session hivatkozás. */
|
|
19
|
+
sessionId;
|
|
20
|
+
/** Forrás-run hivatkozás. */
|
|
21
|
+
runId;
|
|
22
|
+
/** Forrás-instance hivatkozás. */
|
|
23
|
+
instanceId;
|
|
24
|
+
/** Rekurzív summary-referenciák (összegzett entry-`_id`-k — későbbi fázis foundation). */
|
|
25
|
+
summarizedEntryIds = [];
|
|
26
|
+
constructor(set) {
|
|
27
|
+
super(set);
|
|
28
|
+
if (set) {
|
|
29
|
+
fsm_dynamo_1.DyFM_Object.cleanAssign(this, set);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
exports.FAM_Memory_DataModel = FAM_Memory_DataModel;
|
|
34
|
+
/**
|
|
35
|
+
* MongoDB data-params a `memory` tárhoz (collection `fam_memory`, dsgn-001 §1).
|
|
36
|
+
*
|
|
37
|
+
* `contentVector` `vectorizedFrom: ['content']` — auto-embed mentéskor (embedding-provider MP-2).
|
|
38
|
+
* `kind` default `'memory_entry'` (dsgn-001 §4).
|
|
39
|
+
*/
|
|
40
|
+
exports.famMemory_dataParams = new fsm_dynamo_1.DyFM_DataModel_Params({
|
|
41
|
+
dataName: 'fam_memory',
|
|
42
|
+
addArchive: true,
|
|
43
|
+
properties: {
|
|
44
|
+
...fam_entry_base_properties_const_1.famEntryBaseProperties,
|
|
45
|
+
kind: { type: 'string', index: true, default: 'memory_entry' },
|
|
46
|
+
contentVector: {
|
|
47
|
+
type: 'number[]', vectorizedFrom: ['content'], vectorizeUseIndex: 'contentVector', default: [],
|
|
48
|
+
},
|
|
49
|
+
memoryType: { type: 'string', index: true },
|
|
50
|
+
sessionId: { type: 'string', index: true },
|
|
51
|
+
runId: { type: 'string', index: true },
|
|
52
|
+
instanceId: { type: 'string', index: true },
|
|
53
|
+
summarizedEntryIds: { type: 'string[]', default: [] },
|
|
54
|
+
},
|
|
55
|
+
});
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.famReference_dataParams = exports.FAM_Reference_DataModel = void 0;
|
|
4
|
+
const fsm_dynamo_1 = require("@futdevpro/fsm-dynamo");
|
|
5
|
+
/**
|
|
6
|
+
* `reference` helper-tár (dsgn-001 §5). NEM `FAM_Entry`-alapú (saját shape, `extends DyFM_Metadata`).
|
|
7
|
+
*
|
|
8
|
+
* Cél: alias/typo/fonetikus/STT-név → canonical fogalom ÉS scope-feloldás (dsgn-002). Soha nem
|
|
9
|
+
* önálló tudástár. A fuzzy-match a `contentVector`-on fut (canonicalTerm + description embedje).
|
|
10
|
+
*
|
|
11
|
+
* `addedBy` SZŰKÍTETT (`FAM_AddedBy_Constrained`): a `'scan'` / `'re-embed'` itt NEM értelmezett
|
|
12
|
+
* (dsgn-001 §6 megjegyzés).
|
|
13
|
+
*/
|
|
14
|
+
class FAM_Reference_DataModel extends fsm_dynamo_1.DyFM_Metadata {
|
|
15
|
+
/** A canonical (helyes) terminus (pl. `"Future Development Program Kft."`, `"Dynamo FSM"`). */
|
|
16
|
+
canonicalTerm;
|
|
17
|
+
/** Aliasok: typo + fonetikus + STT variánsok, amelyek a canonical terminusra mutatnak. */
|
|
18
|
+
aliasTerms = [];
|
|
19
|
+
/** Mit jelent / mire használt (a `canonicalTerm`-mel együtt adja a vektorizált tartalmat). */
|
|
20
|
+
description;
|
|
21
|
+
/** Vektorizált reprezentáció (canonicalTerm + description) — fuzzy match (embedding MP-2). */
|
|
22
|
+
contentVector = [];
|
|
23
|
+
/** Kategória (`project`|`package`|`concept`|`person`|`organization`|`scope-layer`). */
|
|
24
|
+
category;
|
|
25
|
+
/** Ha scope-feloldásra szolgál: melyik layer-re (pl. `'project'`). */
|
|
26
|
+
scopeLayer;
|
|
27
|
+
/** Ha az alias EGY konkrét scope-entitásra mutat. */
|
|
28
|
+
canonicalScopeRef;
|
|
29
|
+
/** Mely tárakra alkalmazandó (üres = mind). */
|
|
30
|
+
ragScopes = [];
|
|
31
|
+
/** Aktív-e — inaktív bejegyzés NEM expand-elődik (dsgn-002 §3.1). */
|
|
32
|
+
isActive = true;
|
|
33
|
+
/** Ki adta hozzá (szűkített: `manual` | `agent-write` | `import`). */
|
|
34
|
+
addedBy;
|
|
35
|
+
constructor(set) {
|
|
36
|
+
super(set);
|
|
37
|
+
if (set) {
|
|
38
|
+
fsm_dynamo_1.DyFM_Object.cleanAssign(this, set);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
exports.FAM_Reference_DataModel = FAM_Reference_DataModel;
|
|
43
|
+
/**
|
|
44
|
+
* MongoDB data-params a `reference` helper-tárhoz (collection `fam_reference`, dsgn-001 §1/§5).
|
|
45
|
+
*
|
|
46
|
+
* `contentVector` `vectorizedFrom: ['canonicalTerm', 'description']` — fuzzy alias-match
|
|
47
|
+
* (embedding-provider MP-2). `isActive` default `true` (dsgn-002 §3.1).
|
|
48
|
+
*/
|
|
49
|
+
exports.famReference_dataParams = new fsm_dynamo_1.DyFM_DataModel_Params({
|
|
50
|
+
dataName: 'fam_reference',
|
|
51
|
+
addArchive: true,
|
|
52
|
+
properties: {
|
|
53
|
+
canonicalTerm: { type: 'string', index: true, required: true },
|
|
54
|
+
aliasTerms: { type: 'string[]', index: true, default: [] },
|
|
55
|
+
description: { type: 'string' },
|
|
56
|
+
contentVector: {
|
|
57
|
+
type: 'number[]', vectorizedFrom: ['canonicalTerm', 'description'],
|
|
58
|
+
vectorizeUseIndex: 'contentVector', default: [],
|
|
59
|
+
},
|
|
60
|
+
category: { type: 'string', index: true },
|
|
61
|
+
scopeLayer: { type: 'string', index: true },
|
|
62
|
+
canonicalScopeRef: { type: 'object' },
|
|
63
|
+
ragScopes: { type: 'string[]', default: [] },
|
|
64
|
+
isActive: { type: 'boolean', index: true, default: true },
|
|
65
|
+
addedBy: { type: 'string', index: true },
|
|
66
|
+
},
|
|
67
|
+
});
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.famRules_dataParams = exports.FAM_Rules_DataModel = void 0;
|
|
4
|
+
const fsm_dynamo_1 = require("@futdevpro/fsm-dynamo");
|
|
5
|
+
const fam_entry_base_properties_const_1 = require("./fam-entry-base-properties.const");
|
|
6
|
+
const fam_entry_data_model_1 = require("./fam-entry.data-model");
|
|
7
|
+
/**
|
|
8
|
+
* `rules` tár (dsgn-001 §1/§4) — szabályok (coding / architecture / naming / behavior / …).
|
|
9
|
+
*
|
|
10
|
+
* A `FAM_Entry` bázisra épül; per-tár mezők: `category` (== `kind`), `isActive` (inaktív szabály
|
|
11
|
+
* NEM retrieve-elődik), `applicableScopes` (üres = globális), `dimensions`.
|
|
12
|
+
* `kind` default `'rule'`, `isActive` default `true` (dsgn-001 §4).
|
|
13
|
+
*/
|
|
14
|
+
class FAM_Rules_DataModel extends fam_entry_data_model_1.FAM_Entry {
|
|
15
|
+
/** Kategória (== `kind`; pl. `'coding'` / `'project'` / `'naming'`). */
|
|
16
|
+
category;
|
|
17
|
+
/** Aktív-e — inaktív szabály NEM kerül retrieve-be (dsgn-001 §4). */
|
|
18
|
+
isActive = true;
|
|
19
|
+
/** Alkalmazható scope-ok (üres = globális szabály). */
|
|
20
|
+
applicableScopes = [];
|
|
21
|
+
/** Dimenziók (`server`|`client`|`fullstack`|`devops`|`testing`). */
|
|
22
|
+
dimensions = [];
|
|
23
|
+
constructor(set) {
|
|
24
|
+
super(set);
|
|
25
|
+
if (set) {
|
|
26
|
+
fsm_dynamo_1.DyFM_Object.cleanAssign(this, set);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
exports.FAM_Rules_DataModel = FAM_Rules_DataModel;
|
|
31
|
+
/**
|
|
32
|
+
* MongoDB data-params a `rules` tárhoz (collection `fam_rules`, dsgn-001 §1).
|
|
33
|
+
*
|
|
34
|
+
* `contentVector` `vectorizedFrom: ['content']` — auto-embed mentéskor (dsgn-001 §8, dsgn-006 §3;
|
|
35
|
+
* embedding-provider bekötése MP-2). `kind` default `'rule'`, `isActive` default `true` (dsgn-001 §4).
|
|
36
|
+
*/
|
|
37
|
+
exports.famRules_dataParams = new fsm_dynamo_1.DyFM_DataModel_Params({
|
|
38
|
+
dataName: 'fam_rules',
|
|
39
|
+
addArchive: true,
|
|
40
|
+
properties: {
|
|
41
|
+
...fam_entry_base_properties_const_1.famEntryBaseProperties,
|
|
42
|
+
kind: { type: 'string', index: true, default: 'rule' },
|
|
43
|
+
contentVector: {
|
|
44
|
+
type: 'number[]', vectorizedFrom: ['content'], vectorizeUseIndex: 'contentVector', default: [],
|
|
45
|
+
},
|
|
46
|
+
category: { type: 'string', index: true },
|
|
47
|
+
isActive: { type: 'boolean', index: true, default: true },
|
|
48
|
+
applicableScopes: { type: 'array', default: [] },
|
|
49
|
+
dimensions: { type: 'string[]', index: true, default: [] },
|
|
50
|
+
},
|
|
51
|
+
});
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.famScope_dataParams = exports.FAM_Scope_DataModel = void 0;
|
|
4
|
+
const fsm_dynamo_1 = require("@futdevpro/fsm-dynamo");
|
|
5
|
+
/**
|
|
6
|
+
* `FAM_Scope` entitás (dsgn-002 §2). Normalizált scope-entitás + scope-fa (collection `fam_scopes`).
|
|
7
|
+
* `extends DyFM_Metadata` (NEM `FAM_Entry`).
|
|
8
|
+
*
|
|
9
|
+
* A scope NEM fix mezőhalmaz, hanem dinamikus lánc: akárhány layer, futásidőben bővíthető
|
|
10
|
+
* (dsgn-002 §1). A `_id` a `scopeId`; a `parentScopeId` adja a fa-struktúrát (null = gyökér).
|
|
11
|
+
*
|
|
12
|
+
* `createdBy` SZŰKÍTETT (`FAM_AddedBy_Constrained`): a `'scan'` / `'re-embed'` itt NEM értelmezett
|
|
13
|
+
* (dsgn-002 §2, dsgn-001 §6 megjegyzés).
|
|
14
|
+
*/
|
|
15
|
+
class FAM_Scope_DataModel extends fsm_dynamo_1.DyFM_Metadata {
|
|
16
|
+
/** Dinamikus layer-név (`'organization'`|`'project'`|`'module'`|… — szabad string, NEM fix). */
|
|
17
|
+
layer;
|
|
18
|
+
/** Normalizált canonical név. */
|
|
19
|
+
canonicalName;
|
|
20
|
+
/** A fölérendelt scope (fa-struktúra; null = gyökér). */
|
|
21
|
+
parentScopeId;
|
|
22
|
+
/** Denormalizált gyors-alias gyorsítótár (forrás: `fam_reference`; szinkron MP-3). */
|
|
23
|
+
aliases = [];
|
|
24
|
+
/** Leírás. */
|
|
25
|
+
description;
|
|
26
|
+
/** Ki hozta létre (szűkített: `manual` | `agent-write` | `import`). */
|
|
27
|
+
createdBy;
|
|
28
|
+
constructor(set) {
|
|
29
|
+
super(set);
|
|
30
|
+
if (set) {
|
|
31
|
+
fsm_dynamo_1.DyFM_Object.cleanAssign(this, set);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
exports.FAM_Scope_DataModel = FAM_Scope_DataModel;
|
|
36
|
+
/**
|
|
37
|
+
* MongoDB data-params a `fam_scopes` collection-höz (dsgn-002 §2).
|
|
38
|
+
*
|
|
39
|
+
* `aliases` default `[]`; nincs vektor-mező (a fuzzy alias-match a `fam_reference`-en fut).
|
|
40
|
+
*/
|
|
41
|
+
exports.famScope_dataParams = new fsm_dynamo_1.DyFM_DataModel_Params({
|
|
42
|
+
dataName: 'fam_scopes',
|
|
43
|
+
addArchive: true,
|
|
44
|
+
properties: {
|
|
45
|
+
layer: { type: 'string', index: true, required: true },
|
|
46
|
+
canonicalName: { type: 'string', index: true, required: true },
|
|
47
|
+
parentScopeId: { type: 'string', index: true },
|
|
48
|
+
aliases: { type: 'string[]', index: true, default: [] },
|
|
49
|
+
description: { type: 'string' },
|
|
50
|
+
createdBy: { type: 'string', index: true },
|
|
51
|
+
},
|
|
52
|
+
});
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.FAM_RECOMMENDED_TAGS = void 0;
|
|
4
|
+
const fam_table_type_enum_1 = require("../../_enums/fam-table.type-enum");
|
|
5
|
+
/**
|
|
6
|
+
* Per-tár ajánlott tag-vokabulár (dsgn-001 §3). DOKUMENTÁLT, NEM kényszerített: a `tags`
|
|
7
|
+
* típusa marad `string[]` (szabadon bővíthető — dsgn-001 §9.3). Ez csak felajánlott szótár
|
|
8
|
+
* az UI/CLI-nek és a konzisztens kategorizáláshoz.
|
|
9
|
+
*/
|
|
10
|
+
exports.FAM_RECOMMENDED_TAGS = {
|
|
11
|
+
[fam_table_type_enum_1.FAM_Table.rules]: ['coding', 'architecture', 'naming', 'behavior', 'security', 'project'],
|
|
12
|
+
[fam_table_type_enum_1.FAM_Table.documents]: ['spec', 'feature_request', 'bug_report', 'architecture_doc', 'dev_note', 'meeting_note', 'research_note'],
|
|
13
|
+
[fam_table_type_enum_1.FAM_Table.codebase]: ['source_file', 'symbol', 'function', 'class', 'interface', 'config', 'dataflow', 'runflow', 'module_summary'],
|
|
14
|
+
[fam_table_type_enum_1.FAM_Table.knowledge]: [
|
|
15
|
+
'fact', 'concept', 'definition', 'relationship',
|
|
16
|
+
'domain_knowledge', 'company_knowledge', 'user_knowledge', 'decision_rationale',
|
|
17
|
+
],
|
|
18
|
+
[fam_table_type_enum_1.FAM_Table.codingPatterns]: ['pattern', 'anti_pattern', 'recipe', 'example', 'template', 'migration_pattern', 'debugging_pattern'],
|
|
19
|
+
[fam_table_type_enum_1.FAM_Table.memory]: [
|
|
20
|
+
'session_history', 'development_history', 'decision_history', 'incident', 'lesson_learned',
|
|
21
|
+
'important_note', 'user_preference', 'project_event', 'temporary_context', 'resolved_issue',
|
|
22
|
+
],
|
|
23
|
+
};
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Embedding modell-ár táblázat (USD / 1000 input-token) — **BFR-AM-007 projekt-lokális workaround**
|
|
4
|
+
* (dsgn-006 §7, SP-2.4). A Dynamo NEM számol USD-t (nincs pricing-registry), ezért a cost-cap
|
|
5
|
+
* becsléséhez ITT tartunk egy konzervatív ár-táblát; a bedrock cost-aggregátor landolásakor (MP-15)
|
|
6
|
+
* ez lecserélődik a valós provider-számlára (a kulcs-szerződés stabil).
|
|
7
|
+
*
|
|
8
|
+
* A lokális providerek (LM Studio / mock) ára `0` — nincs USD-költség (dsgn-006 §7, csak telemetria).
|
|
9
|
+
* Az OpenAI árak a publikus listaár (2026-os szint, konzervatív felfelé kerekítve).
|
|
10
|
+
*/
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.FAM_EMBEDDING_CHARS_PER_TOKEN = exports.FAM_EMBEDDING_DEFAULT_OPENAI_PRICE_PER_1K = exports.FAM_EMBEDDING_PRICE_PER_1K_TOKENS = void 0;
|
|
13
|
+
/** USD / 1000 input-token modellenként (ismeretlen OpenAI-modell → a `defaultOpenAiPer1k` fallback). */
|
|
14
|
+
exports.FAM_EMBEDDING_PRICE_PER_1K_TOKENS = {
|
|
15
|
+
'text-embedding-3-large': 0.00013,
|
|
16
|
+
'text-embedding-3-small': 0.00002,
|
|
17
|
+
'text-embedding-ada-002': 0.0001,
|
|
18
|
+
};
|
|
19
|
+
/** Ismeretlen OpenAI-modell konzervatív fallback-ára (a legdrágább ismert modell ára). */
|
|
20
|
+
exports.FAM_EMBEDDING_DEFAULT_OPENAI_PRICE_PER_1K = 0.00013;
|
|
21
|
+
/** Egy token átlagos karakter-becslése (token-számláló nélküli becsléshez; ~4 char/token heurisztika). */
|
|
22
|
+
exports.FAM_EMBEDDING_CHARS_PER_TOKEN = 4;
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.FAM_StoreRegistry_Util = exports.FAM_STORE_REGISTRY = void 0;
|
|
4
|
+
const fam_table_type_enum_1 = require("../../../_enums/fam-table.type-enum");
|
|
5
|
+
const fam_codebase_data_model_1 = require("../../../_models/data-models/fam-codebase.data-model");
|
|
6
|
+
const fam_coding_patterns_data_model_1 = require("../../../_models/data-models/fam-coding-patterns.data-model");
|
|
7
|
+
const fam_documents_data_model_1 = require("../../../_models/data-models/fam-documents.data-model");
|
|
8
|
+
const fam_knowledge_data_model_1 = require("../../../_models/data-models/fam-knowledge.data-model");
|
|
9
|
+
const fam_memory_data_model_1 = require("../../../_models/data-models/fam-memory.data-model");
|
|
10
|
+
const fam_rules_data_model_1 = require("../../../_models/data-models/fam-rules.data-model");
|
|
11
|
+
/**
|
|
12
|
+
* A 6 fő RAG-tár registry-je (dsgn-001 §1). A `reference`/`scope`/`config`/`ingest` helper-tárak
|
|
13
|
+
* NEM vektorizáltak, ezért kimaradnak. A `dataParams` típusát a közös `FAM_Entry` bázisra szűkítjük
|
|
14
|
+
* (a per-tár mezők a vektor-réteg számára irrelevánsak — csak a közös `content`/`contentVector`/
|
|
15
|
+
* `embeddingStatus`/`scopePath`/`tags`/`kind`/`weight` kell).
|
|
16
|
+
*
|
|
17
|
+
* **FIGYELEM:** a `dataParams` generikus paramétere a konkrét per-tár modell (pl. `FAM_Codebase_DataModel`),
|
|
18
|
+
* de a registry a `FAM_Entry`-bázisra normalizál (widening — NEM `as`-cast). Ez safe, mert a per-tár
|
|
19
|
+
* modellek a `FAM_Entry`-t terjesztik ki, és a vektor-réteg CSAK a közös bázis-mezőket olvassa, az
|
|
20
|
+
* írást pedig atomikus `$set`-tel végzi (nem a teljes instance-en).
|
|
21
|
+
*/
|
|
22
|
+
exports.FAM_STORE_REGISTRY = [
|
|
23
|
+
{
|
|
24
|
+
table: fam_table_type_enum_1.FAM_Table.rules,
|
|
25
|
+
dataParams: fam_rules_data_model_1.famRules_dataParams,
|
|
26
|
+
vectorizedFrom: ['content'],
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
table: fam_table_type_enum_1.FAM_Table.documents,
|
|
30
|
+
dataParams: fam_documents_data_model_1.famDocuments_dataParams,
|
|
31
|
+
vectorizedFrom: ['content'],
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
table: fam_table_type_enum_1.FAM_Table.codebase,
|
|
35
|
+
dataParams: fam_codebase_data_model_1.famCodebase_dataParams,
|
|
36
|
+
vectorizedFrom: ['content', 'description'],
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
table: fam_table_type_enum_1.FAM_Table.knowledge,
|
|
40
|
+
dataParams: fam_knowledge_data_model_1.famKnowledge_dataParams,
|
|
41
|
+
vectorizedFrom: ['content', 'subject', 'description'],
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
table: fam_table_type_enum_1.FAM_Table.codingPatterns,
|
|
45
|
+
dataParams: fam_coding_patterns_data_model_1.famCodingPatterns_dataParams,
|
|
46
|
+
vectorizedFrom: ['content', 'patternName', 'description'],
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
table: fam_table_type_enum_1.FAM_Table.memory,
|
|
50
|
+
dataParams: fam_memory_data_model_1.famMemory_dataParams,
|
|
51
|
+
vectorizedFrom: ['content'],
|
|
52
|
+
},
|
|
53
|
+
];
|
|
54
|
+
/**
|
|
55
|
+
* Store-registry segéd (dependency-mentes statikus util — FDP-konvenció: nincs top-level export-function).
|
|
56
|
+
*/
|
|
57
|
+
class FAM_StoreRegistry_Util {
|
|
58
|
+
/** Egy tár registry-bejegyzése `FAM_Table` alapján (vagy undefined, ha nem fő/vektorizált tár). */
|
|
59
|
+
static getEntry(table) {
|
|
60
|
+
return exports.FAM_STORE_REGISTRY.find((entry) => entry.table === table);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
exports.FAM_StoreRegistry_Util = FAM_StoreRegistry_Util;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Embedding-költség surfacing típusok (dsgn-006 §7, SP-2.4) — **BFR-AM-007 projekt-lokális workaround**.
|
|
4
|
+
*
|
|
5
|
+
* A Dynamo OpenAI embedding-impl `onCostEvent`-et emittál (token-fogyasztás), de NEM számol USD-t
|
|
6
|
+
* (nincs Dynamo-pricing-registry). A FAM hívás-típusonként aggregál + token-becslésből USD-t becsül,
|
|
7
|
+
* amíg a bedrock cost-aggregátor (BFR-AM-007) landol. A kulcs-szerződés (`callType` + token + USD)
|
|
8
|
+
* stabil, hogy a bedrock-csere non-breaking legyen.
|
|
9
|
+
*/
|
|
10
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.FAM_EmbeddingBootstrap_ControlService = void 0;
|
|
4
|
+
const fsm_dynamo_1 = require("@futdevpro/fsm-dynamo");
|
|
5
|
+
const config_control_service_1 = require("../../../_routes/server/config/config.control-service");
|
|
6
|
+
const fam_vector_search_control_service_1 = require("./fam-vector-search.control-service");
|
|
7
|
+
/**
|
|
8
|
+
* `FAM_EmbeddingBootstrap_ControlService` (SP-2.2/2.4) — az embedding + vektor-réteg **boot-hook**-ja.
|
|
9
|
+
* Az `App.postProcess()` (a DB-connect + setup UTÁNI hook) hívja. Két lépés:
|
|
10
|
+
*
|
|
11
|
+
* 1. **ENV → config seed** (MP-7 `seedDefaultsFromEnv`): az `EMBEDDING_PROVIDER` / `OPENAI_EMBEDDING_MODEL`
|
|
12
|
+
* ENV-ből GLOBAL default-ot seedel (csak hiányzó kulcsra; a titok SOHA nem kerül DB-be — dsgn-007 §6).
|
|
13
|
+
* 2. **Boot-hidratálás** (dsgn-006 §4.1): a `FAM_VectorSearch_ControlService.hydrateAll` minden fő tárra
|
|
14
|
+
* a `completed`-embeddingű, nem-törölt entry-k `contentVector`-jét az in-memory LVS pool-ba tölti
|
|
15
|
+
* (BFR-AM-001 workaround). Best-effort: a hidratálás-hiba persistált (no-silent-failure), de NEM
|
|
16
|
+
* akasztja meg a szerver-startot (a `read` ettől még bootstrap-skip-et jelez).
|
|
17
|
+
*
|
|
18
|
+
* **AUTO-EMBED REGISZTRÁCIÓ (döntés):** NINCS globális embedding-service-regisztráció a Dynamo
|
|
19
|
+
* `getGlobalServiceCollection`-be — a Dynamo `DyNTS_DataService.saveData` NEM hív provider-agnosztikus
|
|
20
|
+
* embedding-hook-ot (csak a hardwired-OpenAI `DyNTS_OAI_VectorDataService.saveData` vektorizál). A FAM
|
|
21
|
+
* az embeddinget EXPLICIT pipeline-on végzi (`FAM_EmbeddingPipeline_ControlService.embedAndPersist`),
|
|
22
|
+
* amit a write/scan path (MP-4/MP-5) hív mentés után. Ezért a boot CSAK a config-seed + a pool-hidratálás.
|
|
23
|
+
*/
|
|
24
|
+
class FAM_EmbeddingBootstrap_ControlService {
|
|
25
|
+
static _instance;
|
|
26
|
+
static getInstance() {
|
|
27
|
+
if (!FAM_EmbeddingBootstrap_ControlService._instance) {
|
|
28
|
+
FAM_EmbeddingBootstrap_ControlService._instance = new FAM_EmbeddingBootstrap_ControlService();
|
|
29
|
+
}
|
|
30
|
+
return FAM_EmbeddingBootstrap_ControlService._instance;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* A teljes embedding/vektor boot (az `App.postProcess` hívja). Best-effort: a hibákat logoljuk +
|
|
34
|
+
* a global error-handler persistálja, de a szerver-start NEM bukik el (a vektor-keresés bootstrap-skip
|
|
35
|
+
* jelzéssel működik tovább, amíg az embedding konfigurálódik).
|
|
36
|
+
*/
|
|
37
|
+
async boot() {
|
|
38
|
+
try {
|
|
39
|
+
await config_control_service_1.FAM_Config_ControlService.getInstance().seedDefaultsFromEnv();
|
|
40
|
+
}
|
|
41
|
+
catch (error) {
|
|
42
|
+
fsm_dynamo_1.DyFM_Log.warn(`[FAM bootstrap] ENV-config seed sikertelen: ${error?.message}`);
|
|
43
|
+
}
|
|
44
|
+
try {
|
|
45
|
+
await fam_vector_search_control_service_1.FAM_VectorSearch_ControlService.getInstance().hydrateAll();
|
|
46
|
+
}
|
|
47
|
+
catch (error) {
|
|
48
|
+
fsm_dynamo_1.DyFM_Log.warn(`[FAM bootstrap] vektor-pool hidratálás sikertelen: ${error?.message}`);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
exports.FAM_EmbeddingBootstrap_ControlService = FAM_EmbeddingBootstrap_ControlService;
|