@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.
Files changed (117) hide show
  1. package/README.md +345 -0
  2. package/build/package.json +96 -0
  3. package/build/src/_assets/mcp-client-config/README.md +29 -0
  4. package/build/src/_assets/mcp-client-config/claude_desktop_config.json +15 -0
  5. package/build/src/_assets/mcp-client-config/mcp.json +15 -0
  6. package/build/src/_collections/config-catalog.const.js +180 -0
  7. package/build/src/_collections/config-error-codes.const.js +30 -0
  8. package/build/src/_collections/config-presets.const.js +25 -0
  9. package/build/src/_collections/error-banners.const.js +100 -0
  10. package/build/src/_collections/error-codes.const.js +150 -0
  11. package/build/src/_collections/fam-db-models.const.js +37 -0
  12. package/build/src/_collections/fam-entry-bootstrap.util.js +80 -0
  13. package/build/src/_collections/fam-error-context.util.js +90 -0
  14. package/build/src/_collections/fam-error-factory.util.js +64 -0
  15. package/build/src/_enums/fam-config-level.type-enum.js +15 -0
  16. package/build/src/_enums/fam-table.type-enum.js +20 -0
  17. package/build/src/_integration-tests/_helpers/fam-integration-test-setup.util.js +105 -0
  18. package/build/src/_models/data-models/fam-codebase.data-model.js +51 -0
  19. package/build/src/_models/data-models/fam-coding-patterns.data-model.js +58 -0
  20. package/build/src/_models/data-models/fam-config.data-model.js +68 -0
  21. package/build/src/_models/data-models/fam-documents.data-model.js +53 -0
  22. package/build/src/_models/data-models/fam-entry-base-properties.const.js +43 -0
  23. package/build/src/_models/data-models/fam-entry.data-model.js +81 -0
  24. package/build/src/_models/data-models/fam-error.data-model.js +88 -0
  25. package/build/src/_models/data-models/fam-ingest-run.data-model.js +74 -0
  26. package/build/src/_models/data-models/fam-knowledge.data-model.js +48 -0
  27. package/build/src/_models/data-models/fam-memory.data-model.js +55 -0
  28. package/build/src/_models/data-models/fam-reference.data-model.js +67 -0
  29. package/build/src/_models/data-models/fam-rules.data-model.js +51 -0
  30. package/build/src/_models/data-models/fam-scope.data-model.js +52 -0
  31. package/build/src/_models/interfaces/fam-common.interface.js +23 -0
  32. package/build/src/_models/interfaces/fam-config.interface.js +2 -0
  33. package/build/src/_models/interfaces/fam-error.interface.js +2 -0
  34. package/build/src/_modules/embedding/_collections/fam-embedding-pricing.const.js +22 -0
  35. package/build/src/_modules/embedding/_collections/fam-store-registry.const.js +63 -0
  36. package/build/src/_modules/embedding/_models/interfaces/fam-embedding-cost.interface.js +10 -0
  37. package/build/src/_modules/embedding/_models/interfaces/fam-embedding-provider.interface.js +2 -0
  38. package/build/src/_modules/embedding/_models/interfaces/fam-resolved-provider.interface.js +2 -0
  39. package/build/src/_modules/embedding/_services/fam-embedding-bootstrap.control-service.js +52 -0
  40. package/build/src/_modules/embedding/_services/fam-embedding-cost.control-service.js +175 -0
  41. package/build/src/_modules/embedding/_services/fam-embedding-pipeline.control-service.js +202 -0
  42. package/build/src/_modules/embedding/_services/fam-embedding-preset.control-service.js +66 -0
  43. package/build/src/_modules/embedding/_services/fam-embedding.control-service.js +253 -0
  44. package/build/src/_modules/embedding/_services/fam-entry.data-service.js +64 -0
  45. package/build/src/_modules/embedding/_services/fam-lmstudio-embedding.provider.js +112 -0
  46. package/build/src/_modules/embedding/_services/fam-mock-embedding.provider.js +64 -0
  47. package/build/src/_modules/embedding/_services/fam-openai-embedding.provider.js +64 -0
  48. package/build/src/_modules/embedding/_services/fam-vector-search.control-service.js +244 -0
  49. package/build/src/_modules/embedding/index.js +40 -0
  50. package/build/src/_modules/ingest/_collections/fam-content-hash.util.js +35 -0
  51. package/build/src/_modules/ingest/_collections/fam-file-routing.util.js +95 -0
  52. package/build/src/_modules/ingest/_collections/fam-glob-match.util.js +84 -0
  53. package/build/src/_modules/ingest/_collections/fam-md-chunker.util.js +164 -0
  54. package/build/src/_modules/ingest/_collections/fam-scan-path.util.js +91 -0
  55. package/build/src/_modules/ingest/_collections/fam-secret-exclude.util.js +54 -0
  56. package/build/src/_modules/ingest/_collections/fam-sliding-chunker.util.js +76 -0
  57. package/build/src/_modules/ingest/_collections/fam-ts-chunker.util.js +316 -0
  58. package/build/src/_modules/ingest/_models/interfaces/fam-ingest.interface.js +2 -0
  59. package/build/src/_modules/ingest/_services/fam-chunker.control-service.js +114 -0
  60. package/build/src/_modules/ingest/_services/fam-delta-compare.util.js +74 -0
  61. package/build/src/_modules/ingest/_services/fam-ingest-run.data-service.js +85 -0
  62. package/build/src/_modules/ingest/_services/fam-ingest.control-service.js +384 -0
  63. package/build/src/_modules/ingest/_services/fam-scan.control-service.js +211 -0
  64. package/build/src/_modules/ingest/index.js +46 -0
  65. package/build/src/_modules/mcp/_collections/fam-core-tools.const.js +186 -0
  66. package/build/src/_modules/mcp/_models/interfaces/fam-mcp.interface.js +31 -0
  67. package/build/src/_modules/mcp/_services/fam-capabilities-tool.service.js +111 -0
  68. package/build/src/_modules/mcp/_services/fam-capability-registry.service.js +1180 -0
  69. package/build/src/_modules/mcp/_services/fam-mcp-adapter.service.js +123 -0
  70. package/build/src/_modules/mcp/_services/fam-mcp-server.service.js +69 -0
  71. package/build/src/_modules/mcp/_services/fam-read-tool.service.js +99 -0
  72. package/build/src/_modules/mcp/_services/fam-write-tool.service.js +460 -0
  73. package/build/src/_modules/mcp/index.js +35 -0
  74. package/build/src/_modules/migration/_collections/fam-claude-mem-normalize.util.js +166 -0
  75. package/build/src/_modules/migration/_collections/fam-import-content-hash.util.js +38 -0
  76. package/build/src/_modules/migration/_collections/fam-target-mapping.util.js +90 -0
  77. package/build/src/_modules/migration/_enums/fam-claude-mem-source.type-enum.js +20 -0
  78. package/build/src/_modules/migration/_models/interfaces/fam-claude-mem.interface.js +26 -0
  79. package/build/src/_modules/migration/_services/fam-claude-mem-export-reader.service.js +134 -0
  80. package/build/src/_modules/migration/_services/fam-claude-mem-import.control-service.js +533 -0
  81. package/build/src/_modules/migration/_services/fam-claude-mem-sqlite-reader.service.js +144 -0
  82. package/build/src/_modules/migration/_services/fam-claude-mem-worker-reader.service.js +115 -0
  83. package/build/src/_modules/migration/_services/fam-import-dedup.data-service.js +102 -0
  84. package/build/src/_modules/migration/index.js +38 -0
  85. package/build/src/_modules/retrieval/_models/interfaces/fam-retrieval.interface.js +2 -0
  86. package/build/src/_modules/retrieval/_services/fam-retrieval-candidate.data-service.js +67 -0
  87. package/build/src/_modules/retrieval/_services/fam-retrieval-suggestions.util.js +182 -0
  88. package/build/src/_modules/retrieval/_services/fam-retrieval.control-service.js +282 -0
  89. package/build/src/_modules/retrieval/index.js +22 -0
  90. package/build/src/_modules/scope-reference/_collections/fam-fuzzy-match.util.js +86 -0
  91. package/build/src/_modules/scope-reference/_collections/fam-scope-normalize.util.js +47 -0
  92. package/build/src/_modules/scope-reference/_models/interfaces/fam-reference-resolution.interface.js +2 -0
  93. package/build/src/_modules/scope-reference/_models/interfaces/fam-resolution-trace.interface.js +2 -0
  94. package/build/src/_modules/scope-reference/_services/fam-reference.data-service.js +179 -0
  95. package/build/src/_modules/scope-reference/_services/fam-scope-resolver.control-service.js +473 -0
  96. package/build/src/_modules/scope-reference/_services/fam-scope.data-service.js +215 -0
  97. package/build/src/_modules/scope-reference/index.js +26 -0
  98. package/build/src/_routes/server/api/api.controller.js +400 -0
  99. package/build/src/_routes/server/client-app/client-app.control-service.js +132 -0
  100. package/build/src/_routes/server/client-app/client-app.controller.js +35 -0
  101. package/build/src/_routes/server/config/config.control-service.js +476 -0
  102. package/build/src/_routes/server/config/config.data-service.js +49 -0
  103. package/build/src/_routes/server/errors/errors.control-service.js +123 -0
  104. package/build/src/_routes/server/errors/errors.controller.js +65 -0
  105. package/build/src/_routes/server/errors/errors.data-service.js +80 -0
  106. package/build/src/_routes/server/server-status/server-status.control-service.js +19 -0
  107. package/build/src/_routes/server/server-status/server-status.controller.js +39 -0
  108. package/build/src/app.server.js +122 -0
  109. package/build/src/environments/environment.js +20 -0
  110. package/build/src/index.js +18 -0
  111. package/client-dist/chunk-GHKRM4SM.js +1 -0
  112. package/client-dist/chunk-LMTL7GA3.js +575 -0
  113. package/client-dist/index.html +17 -0
  114. package/client-dist/main-2KWB3QYK.js +2 -0
  115. package/client-dist/polyfills-HGDOEU5L.js +2 -0
  116. package/client-dist/styles-3J7JD5YE.css +1 -0
  117. package/package.json +96 -0
@@ -0,0 +1,49 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FAM_Config_DataService = void 0;
4
+ const nts_dynamo_1 = require("@futdevpro/nts-dynamo");
5
+ const fam_config_data_model_1 = require("../../../_models/data-models/fam-config.data-model");
6
+ /**
7
+ * `FAM_Config_DataService` — a `fam_config` collection (MAIN) CRUD + soft-delete history-rétege (dsgn-007 §8).
8
+ *
9
+ * `extends DyNTS_DataService` (a MAIN collection service): a felülírt (régi) értékek soft-delete-elve
10
+ * a `*_archived` tárba mozognak (audit-trail, dsgn-007 §7.2). A move-to-archive a base `deleteData`
11
+ * (addArchive) → `getArchiveDataService()`-en át megy (lásd lentebb). Master-prompter mintára:
12
+ * constructor `{ data?, issuer }` → `super(data, dataParams, issuer)`.
13
+ *
14
+ * **FIGYELEM (memory: dynts_dataservice_eager_resolve):** a `DyNTS_DataService` base-ctor EAGER
15
+ * `getDBService`-t hív → a control-service NEM tarthat élő data-service-példányt mezőként; minden
16
+ * művelet előtt lazy `new FAM_Config_DataService(...)` kell (a control-service ezt teszi).
17
+ *
18
+ * **A `value` írása `$set`-tel atomikus** (Mongoose Mixed silent-drop ellen, dsgn-007 §2; memory:
19
+ * reference_mongoose_mixed_atomic_write) — `findOne→mutate→save` NEM.
20
+ */
21
+ class FAM_Config_DataService extends nts_dynamo_1.DyNTS_DataService {
22
+ constructor(set) {
23
+ super(set.data instanceof fam_config_data_model_1.FAM_Config_DataModel ? set.data : new fam_config_data_model_1.FAM_Config_DataModel(set.data), fam_config_data_model_1.famConfig_dataParams, set.issuer);
24
+ }
25
+ /**
26
+ * A move-to-archive soft-delete (dsgn-007 §7.2) archív-collection service-e: a base `deleteData`
27
+ * (addArchive) ezt hívja, hogy a felülírt/törölt rekordot a `fam_config_archived` tárba mozgassa
28
+ * (history). A `DyNTS_DataService` base default-ja DOB (nincs ökoszisztéma-implementáció) — ezért
29
+ * kell az explicit override; a `DyNTS_ArchiveDataService` a `dataParams.addArchive`-ból oldja fel
30
+ * az archív-collection nevét. (Bedrock-igény: a base auto-wiringja — `BFR-AM-archive`.)
31
+ */
32
+ getArchiveDataService() {
33
+ return new nts_dynamo_1.DyNTS_ArchiveDataService(new fam_config_data_model_1.FAM_Config_DataModel(), this.dataParams, this.issuer);
34
+ }
35
+ /**
36
+ * Egy adott feloldási-kulcson (`level`+`tableScope`+`scopeId`+`key`) az AKTÍV (nem soft-delete-elt)
37
+ * rekord. A `_deleted` Date soft-delete marker; az aktív rekordon `_deleted` nincs beállítva.
38
+ */
39
+ async findActive(filter) {
40
+ return this.findData(filter, true);
41
+ }
42
+ /**
43
+ * Az adott szinten konfigurált ÖSSZES aktív rekord (a `resolveAll` egy Mongo-köre, dsgn-007 §3).
44
+ */
45
+ async findActiveList(filter) {
46
+ return this.findDataList(filter, true);
47
+ }
48
+ }
49
+ exports.FAM_Config_DataService = FAM_Config_DataService;
@@ -0,0 +1,123 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FAM_Error_ControlService = void 0;
4
+ const error_banners_const_1 = require("../../../_collections/error-banners.const");
5
+ const fam_error_factory_util_1 = require("../../../_collections/fam-error-factory.util");
6
+ const errors_data_service_1 = require("./errors.data-service");
7
+ /**
8
+ * `FAM_Error_ControlService` (dsgn-008 §6, SP-8.1/8.2/8.3). A `DyNTS_Errors_ControlService` mintára:
9
+ * a `globalErrorHandler` mögötti orchestráció + a réteg-emisszió + a felhasználói surfacing
10
+ * (banner-deszkriptorok + `list_errors`) belépési pontja. Singleton.
11
+ *
12
+ * **NEM tartunk élő `FAM_Error_DataService` mezőt** (memory: dynts_dataservice_eager_resolve — a
13
+ * base-ctor eager `getDBService`-t hív): minden DB-művelet előtt lazy `new FAM_Error_DataService`.
14
+ *
15
+ * Felelősségek:
16
+ * - **`handle`** (SP-8.1): a `globalErrorHandler` factory mögötti perzistálás-orchestráció (a
17
+ * `FAM_Error_DataService.handleInternalError`-re — auto-dedup + occurrence-count a Dynamo-bázisból).
18
+ * - **`emit`** (SP-8.2): a réteg-szintű 3-lépéses szerződés EGY belépési pontja — snapshot-építés
19
+ * (factory) → persist (`handle`) → a hívónak visszaadott kanonikus `DyFM_Error` (deskriptív,
20
+ * nem-elnyelt). A réteg-MP-k ezt hívják, nem ad-hoc try/catch-elnyeléssel.
21
+ * - **`listErrors` / `markHandled`** (SP-8.3): a `list_errors` capability-handler (MP-6) + `/errors`
22
+ * UI (MP-10) belépési logikája — listáz/szűr/"kezelve" jelöl (a Dynamo-bázis lekérdezésére építve).
23
+ * - **banner-deszkriptorok** (SP-8.3): a 3 nevesített banner-eset trigger→payload szerződése.
24
+ */
25
+ class FAM_Error_ControlService {
26
+ static _instance;
27
+ /** Default issuer az error-műveletekhez (a `FAM_Error.source`/`issuer`-éhez). */
28
+ issuer = 'FAM_Error_ControlService';
29
+ static getInstance() {
30
+ if (!FAM_Error_ControlService._instance) {
31
+ FAM_Error_ControlService._instance = new FAM_Error_ControlService();
32
+ }
33
+ return FAM_Error_ControlService._instance;
34
+ }
35
+ // =========================================================================
36
+ // SP-8.1 — globalErrorHandler orchestráció (persist + dedup + occurrence)
37
+ // =========================================================================
38
+ /**
39
+ * A `globalErrorHandler` mögötti perzistálás (dsgn-008 §1/§4 2. lépés). A hibát a `fam_errors`
40
+ * tárba írja a `FAM_Error_DataService.handleInternalError`-en át — innen jön az **auto-dedup +
41
+ * occurrence-count** (azonos `message` → `count`-növelés, nem új rekord). `alwaysRecord=true`:
42
+ * a no-silent-failure mandátum miatt minden FAM-hibát perzistálunk (a dev-verzió-skip kikapcsolva).
43
+ */
44
+ async handle(error, issuer) {
45
+ const setIssuer = issuer ?? error?.___issuerService ?? this.issuer;
46
+ const error_DS = new errors_data_service_1.FAM_Error_DataService({ issuer: setIssuer });
47
+ await error_DS.handleInternalError(error, setIssuer, true);
48
+ }
49
+ // =========================================================================
50
+ // SP-8.2 — réteg-emisszió: a 3-lépéses szerződés EGY belépési pontja
51
+ // =========================================================================
52
+ /**
53
+ * A per-réteg egységes hiba-emisszió (dsgn-008 §4). A 3-lépéses szerződés:
54
+ * (1) **snapshot-építés** — a `FAM_Error_Util.create` a factory-n át (sensitive-szűrt context +
55
+ * errorCode + réteg-default level), (2) **persist** — `handle` (a `fam_errors`-ba, dedup),
56
+ * (3) **visszacsatolás** — a kanonikus `DyFM_Error`-t VISSZAADJA a hívónak (nem nyeli el),
57
+ * hogy a réteg deskriptív hiba-blokkot/`ok:false`-t adhasson tovább (sosem üres `[]`).
58
+ *
59
+ * A réteg-MP-k ezt hívják (nem saját `new DyFM_Error` + try/catch-elnyelés). A tényleges
60
+ * réteg-emisszió a forrás-MP-kben él (MP-2 EMB, MP-3 REF, MP-4 SCAN, MP-6 MCP/VAL); MP-8 az
61
+ * infra (factory + handler + ez az `emit`).
62
+ */
63
+ async emit(params) {
64
+ // (1) snapshot-építés + kanonikus FAM error (a factory-n át).
65
+ const famError = fam_error_factory_util_1.FAM_Error_Util.create({
66
+ errorCode: params.errorCode,
67
+ message: params.message,
68
+ level: params.level,
69
+ context: params.context,
70
+ issuer: this.issuer,
71
+ cause: params.cause,
72
+ });
73
+ // (2) persist (dedup + occurrence-count a Dynamo-bázisból).
74
+ await this.handle(famError, this.issuer);
75
+ // (3) a hívónak VISSZAADOTT kanonikus hiba (deskriptív, nem elnyelt).
76
+ return famError;
77
+ }
78
+ // =========================================================================
79
+ // SP-8.3 — list_errors handler-logika + "kezelve" jelölés
80
+ // =========================================================================
81
+ /**
82
+ * A `list_errors` (dsgn-008 §5 / dsgn-003) handler-logikája: a `fam_errors` rekordok a
83
+ * `level`/`source`/`handled` szűrőkre. A capability-**regisztráció** MP-6-ban (dsgn-003
84
+ * capability-registry); ITT a handler-logika + a kiadott mező-halmaz (`message`/`stack`(
85
+ * `stackTrace`)/`errorCode`/`contextSnapshot`/`source`/`occurrenceCount`(`count`)/`instanceId`).
86
+ */
87
+ async listErrors(filter) {
88
+ const error_DS = new errors_data_service_1.FAM_Error_DataService({ issuer: this.issuer });
89
+ return error_DS.listErrors(filter);
90
+ }
91
+ /**
92
+ * Egy hiba "kezelve" (`handled:true`) jelölése (dsgn-008 §5). A `FAM_Error_DataService.markHandled`-re
93
+ * (atomic `$set`); a `list_errors` capability / `/errors` UI hívja (a "kezelve" round-trip).
94
+ */
95
+ async markHandled(errorId, handled = true) {
96
+ const error_DS = new errors_data_service_1.FAM_Error_DataService({ issuer: this.issuer });
97
+ await error_DS.markHandled(errorId, handled);
98
+ }
99
+ // =========================================================================
100
+ // SP-8.3 — banner-deszkriptorok (a felhasználói surfacing szerződés gazdája)
101
+ // =========================================================================
102
+ /** Egy nevesített banner-eset deszkriptora (a render-MP — MP-9/10 — ezt jeleníti meg). */
103
+ getBannerDescriptor(bannerCase) {
104
+ return error_banners_const_1.FAM_BANNER_DESCRIPTORS[bannerCase];
105
+ }
106
+ /** Mind a 3 nevesített banner-deszkriptor (a render-MP-knek). */
107
+ getAllBannerDescriptors() {
108
+ return Object.values(error_banners_const_1.FAM_BANNER_DESCRIPTORS);
109
+ }
110
+ /** A `level` → banner-szín leképezés (dsgn-008 §5): `user`/`warning` → sárga, egyéb → piros. */
111
+ bannerColorForLevel(level) {
112
+ return error_banners_const_1.FAM_Banner_Util.colorForLevel(level);
113
+ }
114
+ /**
115
+ * A `globalErrorHandler` factory (az `App.getGlobalErrorHandler` ezt használja). A
116
+ * `handle`-re delegál — egy hely a perzistálás-orchestrációnak. A `DyNTS_GlobalService` a
117
+ * startup-ban köti be (a `setServices.errorHandler`-en, az App-ban).
118
+ */
119
+ static async globalErrorHandler(error, issuer) {
120
+ await FAM_Error_ControlService.getInstance().handle(error, issuer);
121
+ }
122
+ }
123
+ exports.FAM_Error_ControlService = FAM_Error_ControlService;
@@ -0,0 +1,65 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Errors_Controller = void 0;
4
+ const fsm_dynamo_1 = require("@futdevpro/fsm-dynamo");
5
+ const nts_dynamo_1 = require("@futdevpro/nts-dynamo");
6
+ const errors_control_service_1 = require("./errors.control-service");
7
+ /**
8
+ * `Errors_Controller` — a `fam_errors` REST-surface (dsgn-008 §5). **NEM** `DyNTS_Errors_Controller`
9
+ * extends (az 5+ built-in endpoint + auth-retrofit minta nem kell itt — lokális, single-user,
10
+ * auth-nélkül, ADR-004); a `FAM_Error_ControlService`-re épít (listáz/szűr/"kezelve").
11
+ *
12
+ * Az `/errors` UI (MP-10) + a `list_errors` capability (MP-6) a `FAM_Error_ControlService`-t
13
+ * használja; ez a controller a REST-belépőt adja a UI-nak (a 3 nevesített banner-render is innen
14
+ * fogyaszt majd, MP-10). Singleton: `getInstance()` → `getSingletonInstance()`.
15
+ */
16
+ class Errors_Controller extends nts_dynamo_1.DyNTS_Controller {
17
+ static getInstance() {
18
+ return Errors_Controller.getSingletonInstance();
19
+ }
20
+ setupEndpoints() {
21
+ const error_CS = errors_control_service_1.FAM_Error_ControlService.getInstance();
22
+ this.endpoints = [
23
+ new nts_dynamo_1.DyNTS_Endpoint_Params({
24
+ name: 'listErrors',
25
+ type: fsm_dynamo_1.DyFM_HttpCallType.get,
26
+ endpoint: '/errors',
27
+ tasks: [
28
+ async (req, res) => {
29
+ // Szűrők a query-stringből (level / source / handled) — dsgn-008 §5.
30
+ const filter = {
31
+ level: req.query.level ? String(req.query.level) : undefined,
32
+ source: req.query.source ? String(req.query.source) : undefined,
33
+ handled: req.query.handled !== undefined ? req.query.handled === 'true' : undefined,
34
+ };
35
+ const list = await error_CS.listErrors(filter);
36
+ res.send(list);
37
+ },
38
+ ],
39
+ }),
40
+ new nts_dynamo_1.DyNTS_Endpoint_Params({
41
+ name: 'markErrorHandled',
42
+ type: fsm_dynamo_1.DyFM_HttpCallType.post,
43
+ endpoint: '/errors/mark-handled/:errorId',
44
+ tasks: [
45
+ async (req, res) => {
46
+ await error_CS.markHandled(req.params.errorId, true);
47
+ res.send({ result: 'marked handled' });
48
+ },
49
+ ],
50
+ }),
51
+ new nts_dynamo_1.DyNTS_Endpoint_Params({
52
+ name: 'listErrorBanners',
53
+ type: fsm_dynamo_1.DyFM_HttpCallType.get,
54
+ endpoint: '/errors/banners',
55
+ tasks: [
56
+ async (req, res) => {
57
+ // A 3 nevesített banner-deszkriptor (a render-szerződés; MP-10 fogyasztja).
58
+ res.send(error_CS.getAllBannerDescriptors());
59
+ },
60
+ ],
61
+ }),
62
+ ];
63
+ }
64
+ }
65
+ exports.Errors_Controller = Errors_Controller;
@@ -0,0 +1,80 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FAM_Error_DataService = void 0;
4
+ const fsm_dynamo_1 = require("@futdevpro/fsm-dynamo");
5
+ const server_1 = require("@futdevpro/nts-dynamo/server");
6
+ const fam_error_data_model_1 = require("../../../_models/data-models/fam-error.data-model");
7
+ /**
8
+ * `FAM_Error_DataService` (dsgn-008 §6, SP-8.1) — a `fam_errors` collection error-rétege.
9
+ *
10
+ * **REUSE, NEM reinvent (dsgn-008 §1):** `extends DyNTS_Errors_DataService<DyFM_Error,
11
+ * FAM_Error_DataModel>` — a Dynamo error-pipeline-t örökli: az **auto-dedup + occurrence-count**
12
+ * (`recordError`/`handleInternalError`), a stringify-resilience, a priority-számítás mind a bázisból.
13
+ * Saját error-infra NEM épül. A bázis a `FAM_Error_DataModel` (`= DyFM_Errors<DyFM_Error>` + FAM-mezők)
14
+ * rekordon dolgozik, a `fam_errors` `dataParams`-szal.
15
+ *
16
+ * Master-prompter mintára: constructor `{ data?, issuer }` → `super(record, famError_dataParams, issuer)`.
17
+ *
18
+ * **FIGYELEM (memory: dynts_dataservice_eager_resolve):** a base-ctor EAGER `getDBService`-t hív →
19
+ * a control-service NEM tarthat élő data-service-példányt mezőként; minden művelet előtt lazy
20
+ * `new FAM_Error_DataService(...)`.
21
+ */
22
+ class FAM_Error_DataService extends server_1.DyNTS_Errors_DataService {
23
+ constructor(set) {
24
+ super((set.data instanceof fam_error_data_model_1.FAM_Error_DataModel ? set.data : new fam_error_data_model_1.FAM_Error_DataModel(set.data)), fam_error_data_model_1.famError_dataParams, set.issuer);
25
+ }
26
+ /**
27
+ * A Dynamo-bázis `createErrorRecord`-ját kiterjeszti a FAM-specifikus mezőkkel (dsgn-008 §2): a
28
+ * `DyFM_Error.errorCode`-ot a rekord top-level `errorCode` mezőjébe, és a `contextSnapshot`-ot az
29
+ * `additionalContent.contextSnapshot`-ból (ahová a `FAM_Error_Util` factory tette) a rekord
30
+ * top-level `contextSnapshot` mezőjébe emeli. Így a `list_errors`/UI a dsgn-008 §2 mezőnevekkel
31
+ * olvashat, a dedup/occurrence pedig változatlanul a base-en fut (a dedup a `message`-re kulcsol).
32
+ */
33
+ async createErrorRecord(error, issuer) {
34
+ const baseRecord = await super.createErrorRecord(error, issuer);
35
+ const dyfmError = fsm_dynamo_1.DyFM_Error.isDyFMError(error) ? error : undefined;
36
+ // errorCode: a kanonikus FAM kódot (`FAM-<SVC>-<METHOD>-NNN`) a rekord top-level mezőjébe.
37
+ const errorCode = dyfmError?._errorCode ?? fsm_dynamo_1.DyFM_Error.getErrorCode(error);
38
+ if (errorCode) {
39
+ baseRecord.errorCode = errorCode;
40
+ }
41
+ // contextSnapshot: az additionalContent-ből (a factory ide tette) a top-level mezőbe.
42
+ const snapshot = dyfmError?.additionalContent?.contextSnapshot;
43
+ if (snapshot) {
44
+ baseRecord.contextSnapshot = snapshot;
45
+ }
46
+ // Új rekord default-ja: NEM kezelt (a dedup-ág a base-en nem nyúl ehhez).
47
+ baseRecord.handled ??= false;
48
+ return baseRecord;
49
+ }
50
+ /**
51
+ * A `list_errors` (dsgn-008 §5 / dsgn-003) adat-oldali lekérdezése: a `fam_errors` rekordok a
52
+ * `level`/`source`/`handled` szűrőkre (csak a megadott mezőkre szűr). A kiadott mező-halmaz a
53
+ * teljes `FAM_Error_DataModel` (`message`/`stack`(`stackTrace`)/`errorCode`/`contextSnapshot`/
54
+ * `source`/`occurrenceCount`(`count`)/`level`/`handled`); a capability/UI ezt vetíti le.
55
+ */
56
+ async listErrors(filter) {
57
+ const dbFilter = {};
58
+ if (filter?.level) {
59
+ dbFilter.level = filter.level;
60
+ }
61
+ if (filter?.source) {
62
+ dbFilter.source = filter.source;
63
+ }
64
+ if (filter?.handled !== undefined) {
65
+ dbFilter.handled = filter.handled;
66
+ }
67
+ return this.findDataList(dbFilter);
68
+ }
69
+ /**
70
+ * Egy hiba "kezelve" (`handled:true`) jelölése (dsgn-008 §5). A `DyNTS_Errors_DataService`-re
71
+ * építve (atomic `$set`), nem saját write-path. A `list_errors` capability / `/errors` UI hívja.
72
+ */
73
+ async markHandled(errorId, handled = true) {
74
+ await this.updateData({
75
+ filterBy: { _id: errorId },
76
+ update: { $set: { handled: handled } },
77
+ });
78
+ }
79
+ }
80
+ exports.FAM_Error_DataService = FAM_Error_DataService;
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ServerStatus_ControlService = void 0;
4
+ /**
5
+ * ServerStatus_ControlService — singleton, project-specifikus statisztika lekérdezések.
6
+ *
7
+ * Master-prompter mintára: `getUserStatistics`, `getFlowStatistics`, `getRunStatistics`,
8
+ * stb. metódusok. A base osztály nélkül egyszerű singleton, project-specifikus metódusokkal.
9
+ */
10
+ class ServerStatus_ControlService {
11
+ static _instance;
12
+ static getInstance() {
13
+ if (!ServerStatus_ControlService._instance) {
14
+ ServerStatus_ControlService._instance = new ServerStatus_ControlService();
15
+ }
16
+ return ServerStatus_ControlService._instance;
17
+ }
18
+ }
19
+ exports.ServerStatus_ControlService = ServerStatus_ControlService;
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ServerStatus_Controller = void 0;
4
+ const fsm_dynamo_1 = require("@futdevpro/fsm-dynamo");
5
+ const nts_dynamo_1 = require("@futdevpro/nts-dynamo");
6
+ const server_status_control_service_1 = require("./server-status.control-service");
7
+ /**
8
+ * ServerStatus_Controller — saját status endpoint (Pure Dynamo, FDP-mentes).
9
+ *
10
+ * A jelenlegi `DyNTS_Controller` API: a `setupEndpoints()`-ben kell beállítani a
11
+ * `this.endpoints` listát (a base ctor hívja meg konstrukciókor).
12
+ */
13
+ class ServerStatus_Controller extends nts_dynamo_1.DyNTS_Controller {
14
+ static getInstance() {
15
+ return ServerStatus_Controller.getSingletonInstance();
16
+ }
17
+ server_CS = server_status_control_service_1.ServerStatus_ControlService.getInstance();
18
+ setupEndpoints() {
19
+ this.endpoints = [
20
+ new nts_dynamo_1.DyNTS_Endpoint_Params({
21
+ name: 'getStatus',
22
+ type: fsm_dynamo_1.DyFM_HttpCallType.get,
23
+ endpoint: '/status',
24
+ tasks: [
25
+ async (req, res, issuer) => {
26
+ res.send({
27
+ name: 'fdp-agent-memory-server',
28
+ version: 'FDP Agent Memory v0.0.1',
29
+ status: 'ok',
30
+ uptime: process.uptime(),
31
+ timestamp: new Date().toISOString(),
32
+ });
33
+ },
34
+ ],
35
+ }),
36
+ ];
37
+ }
38
+ }
39
+ exports.ServerStatus_Controller = ServerStatus_Controller;
@@ -0,0 +1,122 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.App = void 0;
4
+ const fsm_dynamo_1 = require("@futdevpro/fsm-dynamo");
5
+ const nts_dynamo_1 = require("@futdevpro/nts-dynamo");
6
+ const package_json_1 = require("../package.json");
7
+ const fam_db_models_const_1 = require("./_collections/fam-db-models.const");
8
+ const api_controller_1 = require("./_routes/server/api/api.controller");
9
+ const client_app_controller_1 = require("./_routes/server/client-app/client-app.controller");
10
+ const errors_controller_1 = require("./_routes/server/errors/errors.controller");
11
+ const errors_control_service_1 = require("./_routes/server/errors/errors.control-service");
12
+ const server_status_controller_1 = require("./_routes/server/server-status/server-status.controller");
13
+ const embedding_1 = require("./_modules/embedding");
14
+ const environment_1 = require("./environments/environment");
15
+ /**
16
+ * FDP Agent Memory Server App — Pure Dynamo, **AUTH NÉLKÜL** (ADR-004).
17
+ *
18
+ * Lokális, single-user MCP-szerver REST/UI-rétege. `class App extends DyNTS_App`
19
+ * (NEM `FDPNTS_App` — nincs FDP-réteg; NEM `DyNTS_AppExtended` — nincs socket itt).
20
+ * NINCS auth: a `DyNTS_GlobalService_Settings.authService` opcionális, ezért kihagyjuk;
21
+ * a beépített Dynamo controller-ek (server-status, errors, test, usage) publikusak
22
+ * default-ból. A vektor-RAG `FAM_*` dataParams-ek + MCP transport MP-1 / MP-6 feladata —
23
+ * itt csak a connect + app-csontváz.
24
+ */
25
+ class App extends nts_dynamo_1.DyNTS_App {
26
+ getAppParams() {
27
+ fsm_dynamo_1.DyFM_Log.testInfo(`FDP Agent Memory Server is up and running (ENV: ${process.env.FDP_ENV})`);
28
+ // DB-név: MONGODB_DB_NAME (dsgn-012 §7) vagy a build-time default.
29
+ const dbName = process.env.MONGODB_DB_NAME || 'fdp-agent-memory';
30
+ // Connection-string: MONGODB_URI (dsgn-012 §7) vagy a régi MONGO_URL, vagy lokális default.
31
+ const mongoBase = process.env.MONGODB_URI || process.env.MONGO_URL || 'mongodb://0.0.0.0:29017';
32
+ return new nts_dynamo_1.DyNTS_App_Params({
33
+ name: 'FDP Agent Memory Server',
34
+ version: package_json_1.version,
35
+ dbName: dbName,
36
+ dbUri: `${mongoBase}/${dbName}`,
37
+ systemShortCodeName: 'FAM',
38
+ });
39
+ }
40
+ overrideDynamoNTSGlobalSettings() {
41
+ nts_dynamo_1.DyNTS_global_settings.log_settings.api_errors = false;
42
+ nts_dynamo_1.DyNTS_global_settings.log_settings.setup = true;
43
+ // NINCS JWT/auth check (ADR-004): a szerver lokális, single-user.
44
+ }
45
+ getGlobalServiceCollection() {
46
+ return {
47
+ // authService szándékosan KIMARAD (opcionális a DyNTS_GlobalService_Settings-ben) —
48
+ // nincs auth (ADR-004).
49
+ errorHandler: this.getGlobalErrorHandler(),
50
+ // A collection-lista SSOT-ja a `FAM_DB_MODELS` (`_collections/fam-db-models.const`) — ugyanazt
51
+ // regisztrálja az integration-test setup is (drift-mentes).
52
+ dbModels: fam_db_models_const_1.FAM_DB_MODELS,
53
+ };
54
+ }
55
+ getPortSettings() {
56
+ return {
57
+ httpPort: environment_1.env.httpPort,
58
+ };
59
+ }
60
+ getRoutingModules() {
61
+ return [
62
+ new nts_dynamo_1.DyNTS_RoutingModule({
63
+ route: '/server',
64
+ controllers: [
65
+ server_status_controller_1.ServerStatus_Controller.getInstance(),
66
+ errors_controller_1.Errors_Controller.getInstance(),
67
+ ],
68
+ }),
69
+ // MP-6 SP-6.5 — a CLI (MP-9) + UI (MP-10) közös REST-felülete: a 3 core-tool
70
+ // (read/write/capabilities) REST-tükre + items/stats/ingest-runs/config. A REST-handler
71
+ // UGYANAZT a transport-agnosztikus core-service-t hívja, mint az MCP-réteg (paritás).
72
+ // FONTOS (routing): a DyNTS `baseUrl='/api'`-t fűz minden routing-modul route elé, ezért az
73
+ // Api-modul route-ja `/` (NEM `/api`) → a végpontok `/api/read`, `/api/health`, … (a kliens
74
+ // `<origin>/api` + `/read`-et hív; dsgn-010 §9). A korábbi `/api` route `/api/api/*`-ot adott.
75
+ new nts_dynamo_1.DyNTS_RoutingModule({
76
+ route: '/',
77
+ controllers: [
78
+ api_controller_1.Api_Controller.getInstance(),
79
+ ],
80
+ }),
81
+ // A beépített Angular admin-UI (`client-dist`): route `/app` → `baseUrl` elé fűzve → `/api/app`.
82
+ // EGY `fam start` (vagy a lokál Docker-image) a teljes felületet adja localhoston, külön
83
+ // kliens-process NÉLKÜL (dsgn-011 / dsgn-012; a `ccap-revisioned` `SC_ClientStatic` mintára).
84
+ new nts_dynamo_1.DyNTS_RoutingModule({
85
+ route: '/app',
86
+ controllers: [
87
+ client_app_controller_1.ClientApp_Controller.getInstance(),
88
+ ],
89
+ }),
90
+ // NB: NINCS DyNTS_getTestRoutingModule / DyNTS_getUsageRoutingModule — a usage-controller
91
+ // `getAuthService()`-t hív (boot-crash a no-auth FAM-on, ADR-004), és egyik Dynamo-leftover
92
+ // route-ot sem használja a FAM (saját ServerStatus_Controller a health-re). FAM-REV-027.
93
+ ];
94
+ }
95
+ /**
96
+ * Post-setup hook (a DB-connect + setup UTÁN, dsgn-006 §4.1 / MP-2). Az embedding + Memory Vector
97
+ * Search boot-ja: (1) ENV → config seed (MP-7), (2) a `contentVector`-ok hidratálása a Mongo-ból az
98
+ * in-memory LVS pool-ba (BFR-AM-001 workaround). Best-effort: a hibák persistáltak (no-silent-failure),
99
+ * de a szerver-start NEM bukik el (a `read` bootstrap-skip-et jelez, amíg az embedding konfigurálódik).
100
+ *
101
+ * **Auto-embed-on-save:** NINCS globális embedding-service-regisztráció (a Dynamo `saveData` nem hív
102
+ * provider-agnosztikus embedding-hookot) — az embedding EXPLICIT a `FAM_EmbeddingPipeline_ControlService`-en
103
+ * át, amit a write/scan path (MP-4/MP-5) hív mentés után. Lásd a `_modules/embedding` modul-doksit.
104
+ */
105
+ async postProcess() {
106
+ await embedding_1.FAM_EmbeddingBootstrap_ControlService.getInstance().boot();
107
+ }
108
+ getGlobalErrorHandler() {
109
+ return async (err, req, res, issuer) => {
110
+ // No-silent-failure (dsgn-008): minden hibát persistálunk a `fam_errors` tárba a
111
+ // FAM_Error_ControlService-en át (REUSE: DyNTS_Errors_DataService dedup + occurrence-count).
112
+ if (err?.___handled) {
113
+ fsm_dynamo_1.DyFM_Log.log('error already handled:', err?._message);
114
+ return;
115
+ }
116
+ let setIssuer = issuer ?? (req?.body)?.issuer;
117
+ setIssuer = setIssuer ?? err?.___issuerService ?? 'unknown-service';
118
+ await errors_control_service_1.FAM_Error_ControlService.globalErrorHandler(err, setIssuer);
119
+ };
120
+ }
121
+ }
122
+ exports.App = App;
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.env = void 0;
4
+ const nts_dynamo_1 = require("@futdevpro/nts-dynamo");
5
+ /**
6
+ * FDP Agent Memory server environment — Pure Dynamo, **AUTH NÉLKÜL** (ADR-004).
7
+ *
8
+ * Lokális, single-user MCP-szerver: NINCS JWT/bcrypt/auth. A `.env`-et a Dynamo
9
+ * env-loader olvassa `process.env`-be (dsgn-012 §7 — prod-kódban NINCS `dotenv` import;
10
+ * a `@futdevpro/nts-dynamo` `get-environment-settings.util` hívja a `dotenv.config()`-ot
11
+ * a `DyNTS_global_settings` betöltésekor).
12
+ */
13
+ exports.env = {
14
+ env: process.env.FDP_ENV || nts_dynamo_1.DyNTS_global_settings.env_settings.environment,
15
+ // REST/UI szerver-port (NEM az MCP-stdio — az MVP1-ben stdio, dsgn-012 §4.1).
16
+ httpPort: +(process.env.FAM_SERVER_PORT || process.env.HTTP_PORT || 39185),
17
+ api: {
18
+ // Project-specifikus külső API kulcsok ide kerülnek (pl. embedding-provider, MP-6+).
19
+ },
20
+ };
@@ -0,0 +1,18 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ //
4
+ // FutDevPro FDP Agent Memory Server Side — entry / bin (`fam`).
5
+ //
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ //
8
+ // Indítás:
9
+ // node build/src/index.js start → REST szerver (port 39185) + MCP stdio szerver (read/write/capabilities)
10
+ // node build/src/index.js → CSAK REST szerver (visszafelé-kompatibilis; `new App()`)
11
+ // fam start → ugyanaz (a publikált bin a build/src/index.js-re mutat)
12
+ //
13
+ // stdio módban a stdout a JSON-RPC csatorna — minden log a stderr-re megy (dsgn-003 §1, dsgn-010 §6).
14
+ //
15
+ // For local run install MongoDB Community, and connect to the config.db_uri (uri in config file).
16
+ //
17
+ const fam_entry_bootstrap_util_1 = require("./_collections/fam-entry-bootstrap.util");
18
+ void fam_entry_bootstrap_util_1.FAM_EntryBootstrap_Util.main(process.argv);