@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,123 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FAM_Mcp_Adapter = void 0;
4
+ const index_js_1 = require("@modelcontextprotocol/sdk/server/index.js");
5
+ const stdio_js_1 = require("@modelcontextprotocol/sdk/server/stdio.js");
6
+ const types_js_1 = require("@modelcontextprotocol/sdk/types.js");
7
+ const fsm_dynamo_1 = require("@futdevpro/fsm-dynamo");
8
+ /**
9
+ * `FAM_Mcp_Adapter` (SP-6.1, BFR-AM-003 workaround) — a hivatalos `@modelcontextprotocol/sdk` köré
10
+ * épített **vékony adaptor-réteg**. EGY `registerTool` choke-pont + a `tools/list` / `tools/call`
11
+ * JSON-RPC handler-ek bekötése — semmi domain-logika. Így a bedrock `DyNTS_Mcp_ServerBase` (MP-15)
12
+ * landolásakor CSAK ez az osztály cserélődik; a 3 core tool + a capability-registry kód változatlan.
13
+ *
14
+ * **stdio-konvenció (dsgn-003 §1, dsgn-010 §6):** a stdout a JSON-RPC csatorna — minden log/diag a
15
+ * stderr-re megy (a hívó App állítja be a `DyFM_Log`-ot stderr-re). Az adaptor maga semmit NEM ír a
16
+ * stdout-ra a transport-payload-on kívül.
17
+ *
18
+ * **Egységes hiba-fordítás (dsgn-008):** a tool-handler dobott `DyFM_Error`-ja (vagy bármilyen hiba)
19
+ * strukturált `CallToolResult { isError:true, content }`-tá fordul — soha nem néma, soha nem crash-el
20
+ * a szerver. A handler `FAM_McpToolOutcome.isError` is ide képződik.
21
+ */
22
+ class FAM_Mcp_Adapter {
23
+ /** A SDK MCP-szerver (a transport-agnosztikus protocol-réteg). */
24
+ server;
25
+ /** A regisztrált tool-definíciók `name` → def map-je (a `tools/call` dispatch-hez). */
26
+ tools = new Map();
27
+ constructor(set) {
28
+ this.server = new index_js_1.Server({ name: set.name, version: set.version }, { capabilities: { tools: {} } });
29
+ this.installHandlers();
30
+ }
31
+ /**
32
+ * Az EGYETLEN tool-regisztrációs choke-pont (BFR-AM-003). A 3 core tool ezt hívja; a capability-
33
+ * eszközök NEM (azok a `capabilities` tool-on át, a registry-ből — diszjunkt halmaz). A regisztrált
34
+ * tool-ok hirdetődnek a `tools/list`-ben.
35
+ */
36
+ registerTool(definition) {
37
+ this.tools.set(definition.name, definition);
38
+ }
39
+ /** A hirdetett tool-nevek (a contract/diszjunkció-teszthez). */
40
+ getAdvertisedToolNames() {
41
+ return Array.from(this.tools.keys());
42
+ }
43
+ /**
44
+ * A stdio transport csatlakoztatása + a szerver indítása (dsgn-003 §1). A `connect` után a
45
+ * `tools/list` a regisztrált 3 core tool-t hirdeti. A boot-üzenetek a stderr-en (a hívó App felel).
46
+ */
47
+ async startStdio() {
48
+ const transport = new stdio_js_1.StdioServerTransport();
49
+ await this.server.connect(transport);
50
+ }
51
+ /** A szerver leállítása (graceful close — teszt-/shutdown-úthoz). */
52
+ async close() {
53
+ await this.server.close();
54
+ }
55
+ // =========================================================================
56
+ // SDK request-handler bekötés (tools/list + tools/call)
57
+ // =========================================================================
58
+ /** A `tools/list` és a `tools/call` JSON-RPC handler bekötése a SDK-szerverre. */
59
+ installHandlers() {
60
+ // tools/list — PONTOSAN a regisztrált (advertised) tool-okat hirdeti (dsgn-003 §6.1).
61
+ this.server.setRequestHandler(types_js_1.ListToolsRequestSchema, async () => ({
62
+ tools: Array.from(this.tools.values()).map((definition) => ({
63
+ name: definition.name,
64
+ description: definition.description,
65
+ inputSchema: definition.inputSchema,
66
+ })),
67
+ }));
68
+ // tools/call — a megfelelő core-tool handler futtatása + egységes hiba-fordítás.
69
+ this.server.setRequestHandler(types_js_1.CallToolRequestSchema, async (request) => {
70
+ const toolName = request.params.name;
71
+ const definition = this.tools.get(toolName);
72
+ if (!definition) {
73
+ return this.errorResult(`Ismeretlen tool: '${toolName}'. A hirdetett tool-ok: `
74
+ + `${this.getAdvertisedToolNames().join(', ')}.`);
75
+ }
76
+ try {
77
+ const outcome = await definition.handler(request.params.arguments);
78
+ return this.toCallResult(outcome);
79
+ }
80
+ catch (error) {
81
+ return this.errorResult(this.describeError(error), error);
82
+ }
83
+ });
84
+ }
85
+ // =========================================================================
86
+ // CallToolResult fordítás (a transport-payload — text-JSON; dsgn-008 hiba-fordítás)
87
+ // =========================================================================
88
+ /** Egy sikeres (vagy strukturált-hiba) handler-outcome → `CallToolResult` (text-JSON content). */
89
+ toCallResult(outcome) {
90
+ return {
91
+ content: [{ type: 'text', text: this.stringify(outcome.data) }],
92
+ isError: outcome.isError === true,
93
+ };
94
+ }
95
+ /** Egy hiba → `CallToolResult { isError:true }` strukturált hiba-payload-dal (dsgn-008, soha nem néma). */
96
+ errorResult(message, error) {
97
+ const errorCode = error instanceof fsm_dynamo_1.DyFM_Error
98
+ ? fsm_dynamo_1.DyFM_Error.getErrorCode(error)
99
+ : undefined;
100
+ const payload = { ok: false, error: { errorCode: errorCode, message: message } };
101
+ return { content: [{ type: 'text', text: this.stringify(payload) }], isError: true };
102
+ }
103
+ /** Egy hiba ember-olvasható üzenete (FAM kanonikus message-prioritás). */
104
+ describeError(error) {
105
+ if (error instanceof fsm_dynamo_1.DyFM_Error) {
106
+ return fsm_dynamo_1.DyFM_Error.getErrorMessage(error) || 'Ismeretlen FAM hiba.';
107
+ }
108
+ if (error instanceof Error) {
109
+ return error.message;
110
+ }
111
+ return 'Ismeretlen hiba a tool-végrehajtás során.';
112
+ }
113
+ /** JSON-stringify (a transport text-content payload-ja). */
114
+ stringify(data) {
115
+ try {
116
+ return JSON.stringify(data);
117
+ }
118
+ catch {
119
+ return JSON.stringify({ ok: false, error: { message: 'A válasz nem szerializálható JSON-ra.' } });
120
+ }
121
+ }
122
+ }
123
+ exports.FAM_Mcp_Adapter = FAM_Mcp_Adapter;
@@ -0,0 +1,69 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FAM_McpServer_Service = void 0;
4
+ const fsm_dynamo_1 = require("@futdevpro/fsm-dynamo");
5
+ const fam_core_tools_const_1 = require("../_collections/fam-core-tools.const");
6
+ const fam_capability_registry_service_1 = require("./fam-capability-registry.service");
7
+ const fam_mcp_adapter_service_1 = require("./fam-mcp-adapter.service");
8
+ /**
9
+ * `FAM_McpServer_Service` (SP-6.1, dsgn-003 §1/§5/§6) — az MCP-szerver orchestrátora. Singleton.
10
+ * Felelősség: a `FAM_Mcp_Adapter`-be regisztrálja a **PONTOSAN 3** advertised core-tool-t
11
+ * (`read`/`write`/`capabilities`), példányosítja a capability-registry-t (a discoverable speciális
12
+ * eszközök single-source-a — diszjunkt halmaz, dsgn-003 §6.6), és a stdio transporton elindítja a
13
+ * szervert (`start`).
14
+ *
15
+ * **Diszjunkció-garancia (dsgn-003 §6.1/§6.6):** az adaptor `registerTool`-ja CSAK a 3 core-tool-t
16
+ * kapja meg — a capability-eszközök SOHA nem kerülnek a SDK advertised tool-listájába (azok kizárólag
17
+ * a `capabilities` tool-on át, a registry-ből elérhetők).
18
+ *
19
+ * **stdio-konvenció (dsgn-003 §1):** a stdout a JSON-RPC csatorna — a boot-üzenetek + minden log a
20
+ * stderr-re mennek (a `DyFM_Log` az App-ban stderr-re konfigurált stdio-módban).
21
+ */
22
+ class FAM_McpServer_Service {
23
+ static _instance;
24
+ /** Az MCP-adaptor (a 3 core tool + a stdio transport mögötti SDK-réteg; BFR-AM-003). */
25
+ adapter = null;
26
+ static getInstance() {
27
+ if (!FAM_McpServer_Service._instance) {
28
+ FAM_McpServer_Service._instance = new FAM_McpServer_Service();
29
+ }
30
+ return FAM_McpServer_Service._instance;
31
+ }
32
+ /**
33
+ * A szerver felépítése (a 3 advertised core-tool + a capability-registry példányosítása). NEM
34
+ * indítja a transportot — a `start()` teszi. Külön lépés a contract-teszt kedvéért (require-time
35
+ * smoke: a szerver felépül + 3 tool-t hirdet, transport nélkül).
36
+ */
37
+ build(set) {
38
+ const adapter = new fam_mcp_adapter_service_1.FAM_Mcp_Adapter({ name: set.name, version: set.version });
39
+ // A PONTOSAN 3 advertised core-tool regisztrálása (a single-source `FAM_CORE_TOOLS`-ból).
40
+ for (const tool of fam_core_tools_const_1.FAM_CORE_TOOLS) {
41
+ adapter.registerTool(tool);
42
+ }
43
+ // A capability-registry példányosítása (a discoverable speciális eszközök katalógusa) — ezek
44
+ // NEM advertised tool-ok, csak a `capabilities` tool-on át elérhetők (diszjunkció).
45
+ fam_capability_registry_service_1.FAM_CapabilityRegistry.getInstance();
46
+ this.adapter = adapter;
47
+ return adapter;
48
+ }
49
+ /**
50
+ * A stdio MCP-szerver indítása (dsgn-003 §1). Felépíti a szervert (ha még nem), majd a stdio
51
+ * transportot csatlakoztatja — innentől a `tools/list` a 3 core tool-t hirdeti, a `tools/call`
52
+ * route-ol. A boot-üzenet a stderr-en.
53
+ */
54
+ async start(set) {
55
+ const adapter = this.adapter ?? this.build(set);
56
+ fsm_dynamo_1.DyFM_Log.testInfo(`[FAM MCP] stdio szerver indul (${set.name} v${set.version}); hirdetett tool-ok: `
57
+ + `${adapter.getAdvertisedToolNames().join(', ')}`);
58
+ await adapter.startStdio();
59
+ }
60
+ /** A hirdetett tool-nevek (a contract/diszjunkció-teszthez). */
61
+ getAdvertisedToolNames() {
62
+ return this.adapter ? this.adapter.getAdvertisedToolNames() : [];
63
+ }
64
+ /** A discoverable capability-nevek (a diszjunkció-teszthez: ezek SOHA nem advertised). */
65
+ getCapabilityNames() {
66
+ return fam_capability_registry_service_1.FAM_CapabilityRegistry.getInstance().names();
67
+ }
68
+ }
69
+ exports.FAM_McpServer_Service = FAM_McpServer_Service;
@@ -0,0 +1,99 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FAM_ReadTool_Service = void 0;
4
+ const fam_table_type_enum_1 = require("../../../_enums/fam-table.type-enum");
5
+ const error_codes_const_1 = require("../../../_collections/error-codes.const");
6
+ const fam_error_factory_util_1 = require("../../../_collections/fam-error-factory.util");
7
+ const retrieval_1 = require("../../retrieval");
8
+ /**
9
+ * `FAM_ReadTool_Service` (SP-6.2, dsgn-003 §2) — a `read` core-tool **transport-agnosztikus**
10
+ * handler-je. Singleton. EGY belépési pont (`handle`), amit MIND az MCP-tool (stdio), MIND a REST
11
+ * `POST /read` hív — így a két felület garantáltan paritásban van (dsgn-003 §6.5, SP-6.5 paritás-teszt).
12
+ *
13
+ * A handler **NEM implementál keresési logikát** — validál + a MP-5 `FAM_Retrieval_ControlService`-re
14
+ * route-ol, és a kimenetet a dsgn-003 §2.2 wire-shape-re map-eli (a retrieval-engine `FAM_RetrievalResult`-ja
15
+ * MÁR a §2.2 shape — `hits`/`score`/`weight`/`denseResults`/`totalRelevant`/`truncated`/`suggestions`/
16
+ * `uncertaintyNotes`). Az `includeContent` default `true` (single-pass, azonnal tartalom).
17
+ *
18
+ * **Validáció (dsgn-003 §2.1):** legalább 1 query; query-nként legalább 1 tábla; a `reference` tár
19
+ * TILTOTT a `tables`-ben (helper, nem kereshető) → `FAM-VAL-READ-001` (strukturált hiba, nem néma).
20
+ */
21
+ class FAM_ReadTool_Service {
22
+ static _instance;
23
+ /** Default issuer (a validációs hibák issuer-éhez; dsgn-008). */
24
+ issuer = 'FAM_ReadTool_Service';
25
+ static getInstance() {
26
+ if (!FAM_ReadTool_Service._instance) {
27
+ FAM_ReadTool_Service._instance = new FAM_ReadTool_Service();
28
+ }
29
+ return FAM_ReadTool_Service._instance;
30
+ }
31
+ /**
32
+ * A `read` core-handler (dsgn-003 §2). Validál → a MP-5 retrieval-pipeline-ra route-ol → a
33
+ * §2.2 output-ot adja (`results[]`). A validációs hiba **dobott** `DyFM_Error` (`FAM-VAL-READ-001`),
34
+ * amit az MCP-adaptor / a REST-réteg egységesen strukturált hibává fordít (dsgn-008).
35
+ */
36
+ async handle(input) {
37
+ this.validate(input);
38
+ const request = this.toRetrievalRequest(input);
39
+ return retrieval_1.FAM_Retrieval_ControlService.getInstance().read(request);
40
+ }
41
+ /**
42
+ * A `read` input validációja (dsgn-003 §2.1). Üres `queries` / üres `tables` / `reference` a
43
+ * `tables`-ben → `FAM-VAL-READ-001` (deskriptív, level=user). A `reference` helper-tár SOHA nem
44
+ * kereshető közvetlenül (dsgn-002/dsgn-005 §1).
45
+ */
46
+ validate(input) {
47
+ if (!input || !Array.isArray(input.queries) || !input.queries.length) {
48
+ throw fam_error_factory_util_1.FAM_Error_Util.create({
49
+ errorCode: error_codes_const_1.FAM_ERROR_CODES.valReadEmptyOrReference,
50
+ message: 'A `read` legalább egy query-t igényel (`queries[]`). Adj meg legalább egy '
51
+ + '{ tables, query } blokkot.',
52
+ issuer: this.issuer,
53
+ context: { operation: 'read-validate' },
54
+ });
55
+ }
56
+ for (const query of input.queries) {
57
+ if (!query || !Array.isArray(query.tables) || !query.tables.length || !query.query) {
58
+ throw fam_error_factory_util_1.FAM_Error_Util.create({
59
+ errorCode: error_codes_const_1.FAM_ERROR_CODES.valReadEmptyOrReference,
60
+ message: 'Minden `read` query-nek legalább 1 `tables` elemet és egy nem-üres `query` '
61
+ + 'phrase-t kell tartalmaznia.',
62
+ issuer: this.issuer,
63
+ context: { operation: 'read-validate' },
64
+ });
65
+ }
66
+ if (query.tables.includes(fam_table_type_enum_1.FAM_Table.reference)) {
67
+ throw fam_error_factory_util_1.FAM_Error_Util.create({
68
+ errorCode: error_codes_const_1.FAM_ERROR_CODES.valReadEmptyOrReference,
69
+ message: "A `reference` tár helper (alias/fogalom-feloldás), NEM kereshető közvetlenül — "
70
+ + 'automatikusan közreműködik a scope/reference-feloldásban. Válassz fő tárat '
71
+ + '(rules/documents/codebase/knowledge/coding_patterns/memory).',
72
+ issuer: this.issuer,
73
+ context: { operation: 'read-validate', table: fam_table_type_enum_1.FAM_Table.reference },
74
+ });
75
+ }
76
+ }
77
+ }
78
+ /** A `read` tool-input → a MP-5 retrieval-engine `FAM_RetrievalRequest`-je (1:1 mező-map). */
79
+ toRetrievalRequest(input) {
80
+ return {
81
+ queries: input.queries.map((query) => this.toRetrievalQuery(query)),
82
+ includeContent: input.includeContent,
83
+ globalScopeFilter: input.globalScopeFilter,
84
+ };
85
+ }
86
+ /** Egy `read` query → `FAM_RetrievalQuery` (a retrieval-engine bemenete). */
87
+ toRetrievalQuery(query) {
88
+ return {
89
+ tables: query.tables,
90
+ query: query.query,
91
+ topK: query.topK,
92
+ minScore: query.minScore,
93
+ scopeFilter: query.scopeFilter,
94
+ tagFilter: query.tagFilter,
95
+ kindFilter: query.kindFilter,
96
+ };
97
+ }
98
+ }
99
+ exports.FAM_ReadTool_Service = FAM_ReadTool_Service;