@futdevpro/fdp-agent-memory 1.1.122 → 1.1.130

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@futdevpro/fdp-agent-memory",
3
- "version": "1.1.122",
3
+ "version": "1.1.130",
4
4
  "description": "Local-first, vector-backed multi-table agent memory exposed as an MCP server (read/write/capabilities). Public, FDP-Templates-free, no auth.",
5
5
  "private": false,
6
6
  "publishConfig": {
@@ -89,18 +89,41 @@ class FAM_Read_Util {
89
89
  humanFormatter: (data) => FAM_Read_Util.formatHuman(data),
90
90
  });
91
91
  }
92
- /** Ember-olvasható read-kimenet: query-nként a hits + a dense-jelzés kötelező kiemelése (REQ-007). */
92
+ /**
93
+ * Ember-olvasható read-kimenet: query-nként a `summary` (operatív visszajelzés) + a találatok ÚTVONALLAL, majd a
94
+ * konkrét következő lépések (`hints`). 2026-07-29 bővítés: eddig csak `[score] id + előnézet` volt — sem az
95
+ * ÚTVONAL (a „nem állnak össze a fájl-útvonalak" panasz), sem a „mennyiből mennyit látok" nem látszott.
96
+ */
93
97
  static formatHuman(data) {
94
98
  const results = data.results ?? [];
95
99
  const lines = [];
96
100
  for (const block of results) {
97
- lines.push(`\n● "${block.query ?? ''}" [${(block.tables ?? []).join(', ')}] (${block.totalRelevant ?? block.hits?.length ?? 0} relevant)`);
101
+ lines.push(`\n● "${block.query ?? ''}" [${(block.tables ?? []).join(', ')}]`);
102
+ if (block.summary) {
103
+ lines.push(` ${block.summary}`);
104
+ }
105
+ else {
106
+ lines.push(` (${block.totalRelevant ?? block.hits?.length ?? 0} relevant)`);
107
+ }
98
108
  if (block.denseResults) {
99
109
  lines.push(` ⚑ DENSE RESULTS — szűkítsd: ${(block.suggestions ?? []).join(' | ') || '(adj scope-ot/tag-et)'}`);
100
110
  }
101
111
  for (const hit of block.hits ?? []) {
102
112
  const preview = (hit.content ?? '').replace(/\s+/g, ' ').slice(0, 100);
103
- lines.push(` - [${(hit.score ?? 0).toFixed(3)}] ${hit.id ?? ''} ${preview}`);
113
+ // A MEGNYITHATÓ útvonal + a fájlon belüli hely — enélkül a találatból nem lehetett visszatalálni a forráshoz.
114
+ const location = hit.path
115
+ ? `${hit.path}${hit.lines ? `:${hit.lines}` : ''}`
116
+ : (hit.id ?? '');
117
+ lines.push(` - [${(hit.score ?? 0).toFixed(3)}] ${location}`);
118
+ if (hit.heading) {
119
+ lines.push(` ${hit.heading}`);
120
+ }
121
+ if (preview) {
122
+ lines.push(` ${preview}`);
123
+ }
124
+ }
125
+ for (const hint of block.hints ?? []) {
126
+ lines.push(` → ${hint}`);
104
127
  }
105
128
  }
106
129
  return lines.join('\n');
@@ -0,0 +1,167 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FAM_ReadResponseShape_Util = void 0;
4
+ /**
5
+ * `FAM_ReadResponseShape_Util` — a `read` VÁLASZ-FORMÁZÁSA az agent-fogyasztóknak (user-FR 2026-07-29, agent-panaszok:
6
+ * „a FAM túl nagy csomag válaszokat ad" / „formázatlan, tördeletlen egy soros válaszokat kapnak" / „az eredményekből
7
+ * kiolvasható fájl elérési útvonalak nem állnak össze").
8
+ *
9
+ * **Alapelv: NULLA információ-veszteség.** Nem dobunk el tudást — csak (a) a DUPLIKÁCIÓT szüntetjük meg (ugyanaz az
10
+ * útvonal 3 mezőben, ugyanaz az abszolút út a `source`-ban is), (b) az agent számára HASZNÁLHATATLAN belső kulcsokat
11
+ * hagyjuk el (`contentHash` dedup-kulcs, opak `scopeId`-k), (c) a 17-jegyű float-okat értelmes pontosságra kerekítjük.
12
+ * Minden megmaradó tény továbbra is elérhető, csak EGY, egyértelmű helyen.
13
+ *
14
+ * A transzformáció a read-tool KIMENETÉN fut, így az MCP és a REST `/api/read` is ezt kapja; a belső retrieval-DTO
15
+ * (és a kliens/CLI fogyasztói) érintetlenek.
16
+ */
17
+ class FAM_ReadResponseShape_Util {
18
+ /** A score-ok megjelenítési pontossága (0.5530494673617745 → 0.5530) — a rangsorhoz bőven elég. */
19
+ static SCORE_DECIMALS = 4;
20
+ /**
21
+ * Egy hit KOMPAKT, agent-barát alakja. **Útvonal-SSOT (a #3 panasz gyökere):** eddig HÁROM különböző útvonal-mező
22
+ * volt HÁROM különböző bázissal (`sourceFilePath` a scan-root-hoz relatív → az agent nem tudta feloldani;
23
+ * `absolutePath`; `source.repoRelativePath`), ezért „nem álltak össze". Mostantól:
24
+ * - **`path`** — a MEGNYITHATÓ útvonal: abszolút, VAGY a `basePath`-hoz relatív, ha a hívó adott ilyet. EZ a SSOT.
25
+ * - **`repoPath`** — repo-relatív út + repo-név (git-hivatkozáshoz), CSAK ha ismert.
26
+ * A régi mezők (`sourceFilePath`/`absolutePath`) MEGMARADNAK a visszafelé-kompatibilitásért, de a `path` az elsődleges.
27
+ */
28
+ static compactHit(hit) {
29
+ const source = hit.source;
30
+ const round = (value) => typeof value === 'number' ? Number(value.toFixed(FAM_ReadResponseShape_Util.SCORE_DECIMALS)) : undefined;
31
+ const compact = {
32
+ id: hit.id,
33
+ table: hit.table,
34
+ // ÚTVONAL-SSOT: a `sourceFilePath` már a hívó `basePath`-jához igazított (rebaseToBasePath), különben az
35
+ // abszolút út — így MINDIG feloldható. A régi mezőket lentebb megtartjuk (kompatibilitás).
36
+ path: hit.sourceFilePath ?? hit.absolutePath ?? null,
37
+ score: round(hit.score),
38
+ finalScore: round(hit.finalScore),
39
+ };
40
+ if (hit.lexicalScore !== undefined) {
41
+ compact.lexicalScore = round(hit.lexicalScore);
42
+ }
43
+ if (hit.weight !== undefined && hit.weight !== 1) {
44
+ compact.weight = hit.weight;
45
+ }
46
+ // Lokáció a fájlon BELÜL (melyik szekció / hányadik sor) — a „hol nézzem meg" kérdésre.
47
+ if (hit.headingPath?.length) {
48
+ compact.heading = hit.headingPath.join(' › ');
49
+ }
50
+ const position = hit.position;
51
+ if (position?.lineStart) {
52
+ compact.lines = position.lineEnd && position.lineEnd !== position.lineStart
53
+ ? `${position.lineStart}-${position.lineEnd}`
54
+ : String(position.lineStart);
55
+ }
56
+ if (hit.chunkType) {
57
+ compact.chunkType = hit.chunkType;
58
+ }
59
+ if (hit.kind) {
60
+ compact.kind = hit.kind;
61
+ }
62
+ if (hit.tags?.length) {
63
+ compact.tags = hit.tags;
64
+ }
65
+ // Scope: az opak `scopeId`-k helyett ember/agent-olvasható `layer=név` lánc (a szűkítéshez ezt kell megadni).
66
+ const scopePath = (hit.scopePath ?? []);
67
+ if (scopePath.length) {
68
+ compact.scope = scopePath.map((ref) => `${ref.layer}=${ref.canonicalName}`).join('/');
69
+ }
70
+ // Repo-hivatkozás (git-link) — csak ha van; a `source` többi mezője (root/path/absolutePath) DUPLIKÁCIÓ volt.
71
+ if (source?.repoName && source?.repoRelativePath) {
72
+ compact.repoPath = `${source.repoName}:${source.repoRelativePath}`;
73
+ }
74
+ if (source?.type) {
75
+ compact.sourceType = source.type;
76
+ }
77
+ // Rules-specifikus kurátor-mezők (ha vannak) — ezek döntik el, MENNYIRE kötelező a szabály.
78
+ for (const key of ['ruleId', 'ruleScope', 'importance', 'userApproved', 'category']) {
79
+ const value = hit[key];
80
+ if (value !== undefined && value !== null) {
81
+ compact[key] = value;
82
+ }
83
+ }
84
+ if (hit.lastModifiedMs) {
85
+ compact.lastModified = new Date(hit.lastModifiedMs).toISOString().slice(0, 10);
86
+ }
87
+ // A TARTALOM a végére — így a metaadat-fej egyben olvasható a hosszú szöveg előtt.
88
+ if (hit.content !== undefined) {
89
+ compact.content = hit.content;
90
+ }
91
+ // Visszafelé-kompatibilitás: a `sourceFilePath` MEGMARAD (a kliens `ma-search` erre a mezőnévre épül) — értéke
92
+ // AZONOS a `path`-szal, tehát alias, nem harmadik igazság. Az `absolutePath` viszont CSAK akkor kerül bele, ha
93
+ // ténylegesen ELTÉR (azaz `basePath`-rebase történt, és így külön információt hordoz) — különben szó szerinti
94
+ // duplikáció lenne, ami épp a panaszolt „nagy csomag" + „az útvonalak nem állnak össze" problémát okozta.
95
+ compact.sourceFilePath = hit.sourceFilePath ?? null;
96
+ if (hit.absolutePath && hit.absolutePath !== compact.path) {
97
+ compact.absolutePath = hit.absolutePath;
98
+ }
99
+ return compact;
100
+ }
101
+ /**
102
+ * OPERATÍV VISSZAJELZÉS (user-FR 2026-07-29 — általános MCP-követelmény): „a tool-ok adjanak visszajelzést a
103
+ * működésről: összesen N elem között kerestünk, M tűnik relevánsnak, K megjelenítve + mit tegyél, hogy mindet
104
+ * lásd / fájlba írd / célzottabban keress". PURE — a számokból épít egy mondatot + konkrét, MÁSOLHATÓ tippeket.
105
+ */
106
+ static buildSummary(set) {
107
+ const scope = set.tables.length ? set.tables.join('+') : 'minden tár';
108
+ const searched = set.searchedCount > 0
109
+ ? `${FAM_ReadResponseShape_Util.humanCount(set.searchedCount)} elem között kerestünk`
110
+ : 'a keresés lefutott';
111
+ const relevant = `${set.totalRelevant} tűnik magabiztosan relevánsnak`;
112
+ const shown = set.truncated
113
+ ? `${set.shown} megjelenítve (topK=${set.topK} vágta)`
114
+ : `mind a ${set.shown} megjelenítve`;
115
+ return `[${scope}] ${searched} · ${relevant} · ${shown}.`;
116
+ }
117
+ /** A summary melletti, KONKRÉT következő lépések (csak a releváns tippek — nincs zaj). PURE. */
118
+ static buildHints(set) {
119
+ const hints = [];
120
+ if (set.truncated) {
121
+ const all = Math.max(set.totalRelevant, set.shown);
122
+ hints.push(`MIND: futtasd újra \`topK: ${all}\`-val (vagy \`depth: "deep"\`-pel a mélyebb feltárásért).`);
123
+ hints.push('FÁJLBA: a CLI-vel `fam read --query "…" --json > talalatok.json` (nagy találat-halmaznál ez '
124
+ + 'a javasolt út — a chat-választ nem terheli).');
125
+ }
126
+ if (set.totalRelevant > set.shown * 3 && !set.hasScopeFilter) {
127
+ hints.push('CÉLZOTTABBAN: szűkíts `scope`-pal (pl. `{"layer":"project","name":"<projekt>"}`), `tags`-szel '
128
+ + 'vagy `kind`-dal — a sok találat általában túl tág kérdést jelez.');
129
+ }
130
+ if (!set.totalRelevant) {
131
+ hints.push('NINCS magabiztos találat: próbálj más megfogalmazást/kulcsszavakat, vagy emeld a `topK`-t; '
132
+ + 'a `minScore: 0` a leggyengébb tippeket is visszaadja.');
133
+ }
134
+ return hints;
135
+ }
136
+ /** Rövid, ember-olvasható darabszám (12 400 → „12.4k"). PURE. */
137
+ static humanCount(count) {
138
+ if (count < 1000) {
139
+ return String(count);
140
+ }
141
+ if (count < 1000000) {
142
+ const thousands = count / 1000;
143
+ return `${thousands >= 100 ? Math.round(thousands) : Number(thousands.toFixed(1))}k`;
144
+ }
145
+ return `${Number((count / 1000000).toFixed(1))}M`;
146
+ }
147
+ /** Egy teljes result-blokk formázása: kompakt hit-ek + summary + hints (a result többi mezője érintetlen). */
148
+ static shapeResult(set) {
149
+ const hits = set.result.hits ?? [];
150
+ const shaped = { ...set.result };
151
+ shaped.summary = FAM_ReadResponseShape_Util.buildSummary({
152
+ tables: set.tables, searchedCount: set.searchedCount, totalRelevant: set.result.totalRelevant ?? 0,
153
+ shown: hits.length, truncated: Boolean(set.result.truncated), topK: set.topK,
154
+ });
155
+ const hints = FAM_ReadResponseShape_Util.buildHints({
156
+ totalRelevant: set.result.totalRelevant ?? 0, shown: hits.length,
157
+ truncated: Boolean(set.result.truncated), hasScopeFilter: Boolean(set.hasScopeFilter),
158
+ });
159
+ if (hints.length) {
160
+ shaped.hints = hints;
161
+ }
162
+ shaped.searchedCount = set.searchedCount;
163
+ shaped.hits = hits.map((hit) => FAM_ReadResponseShape_Util.compactHit(hit));
164
+ return shaped;
165
+ }
166
+ }
167
+ exports.FAM_ReadResponseShape_Util = FAM_ReadResponseShape_Util;
@@ -110,13 +110,18 @@ class FAM_Mcp_Adapter_Service {
110
110
  }
111
111
  return 'Ismeretlen hiba a tool-végrehajtás során.';
112
112
  }
113
- /** JSON-stringify (a transport text-content payload-ja). */
113
+ /**
114
+ * JSON-stringify (a transport text-content payload-ja) — **TÖRDELVE** (user-FR 2026-07-29, agent-panasz:
115
+ * „formázatlan, tördeletlen egy soros válaszokat kapnak"). A 2-szóközös indentálás soronként EGY mezőt ad, így a
116
+ * válasz olvasható/diffelhető; a token-költség elhanyagolható a beágyazott `content`-ek mellett, cserébe az agent
117
+ * (és a `truncate`-elő host) sokkal jobban tudja kezelni.
118
+ */
114
119
  stringify(data) {
115
120
  try {
116
- return JSON.stringify(data);
121
+ return JSON.stringify(data, null, 2);
117
122
  }
118
123
  catch {
119
- return JSON.stringify({ ok: false, error: { message: 'A válasz nem szerializálható JSON-ra.' } });
124
+ return JSON.stringify({ ok: false, error: { message: 'A válasz nem szerializálható JSON-ra.' } }, null, 2);
120
125
  }
121
126
  }
122
127
  }
@@ -9,6 +9,8 @@ const error_codes_const_1 = require("../../../_collections/error-codes.const");
9
9
  const fam_error_factory_util_1 = require("../../../_collections/fam-error-factory.util");
10
10
  const config_control_service_1 = require("../../../_routes/server/config/config.control-service");
11
11
  const retrieval_1 = require("../../retrieval");
12
+ const embedding_1 = require("../../embedding");
13
+ const fam_read_response_shape_util_1 = require("../_collections/fam-read-response-shape.util");
12
14
  /**
13
15
  * `FAM_ReadTool_Service` (SP-6.2, dsgn-003 §2) — a `read` core-tool **transport-agnosztikus**
14
16
  * handler-je. Singleton. EGY belépési pont (`handle`), amit MIND az MCP-tool (stdio), MIND a REST
@@ -47,7 +49,33 @@ class FAM_ReadTool_Service {
47
49
  // levágódik + a túlcsorduló hit-ek elhagyva, `truncated:true`-val. A FAM mindig DIREKT adja vissza a találatokat.
48
50
  FAM_ReadTool_Service.applyTokenBudget(response, await FAM_ReadTool_Service.resolveMaxTokens(input));
49
51
  this.logReadActivity(input, response);
50
- return response;
52
+ // AGENT-BARÁT VÁLASZ-FORMA (user-FR 2026-07-29): kompakt hit-ek (duplikált útvonal-mezők + opak belső kulcsok
53
+ // nélkül, kerekített score-okkal) + OPERATÍV VISSZAJELZÉS (mennyi közt kerestünk / mennyi releváns / mennyi
54
+ // látszik + konkrét következő lépések). Információ NEM vész el — csak a duplikáció és a zaj.
55
+ return FAM_ReadTool_Service.shapeResponse(response, input);
56
+ }
57
+ /**
58
+ * A válasz agent-barát formázása (user-FR 2026-07-29). Per-query blokkonként hozzáadja a `summary`/`hints`/
59
+ * `searchedCount` mezőket és kompaktálja a hit-eket. A `searchedCount` a ténylegesen átkutatott vektor-pool
60
+ * mérete (a query tárainak összege) — ez adja a „N elem között kerestünk" visszajelzést.
61
+ */
62
+ static shapeResponse(response, input) {
63
+ const vectorSearch = embedding_1.FAM_VectorSearch_ControlService.getInstance();
64
+ const shaped = (response.results ?? []).map((result, index) => {
65
+ const query = input.queries?.[index];
66
+ const tables = (query?.tables ?? []);
67
+ const pool = tables.length ? tables : embedding_1.FAM_STORE_REGISTRY.map((entry) => entry.table);
68
+ const searchedCount = pool.reduce((sum, table) => sum + vectorSearch.getPoolSize(table), 0);
69
+ return fam_read_response_shape_util_1.FAM_ReadResponseShape_Util.shapeResult({
70
+ result: result,
71
+ tables: tables.map((table) => String(table)),
72
+ searchedCount: searchedCount,
73
+ topK: query?.topK ?? result.hits?.length ?? 0,
74
+ // Ha a hívó MÁR szűkített (scope/tag/kind), a „szűkíts jobban" tipp fölösleges zaj lenne.
75
+ hasScopeFilter: Boolean(query?.scopeFilter?.length || query?.tagFilter?.length || query?.kindFilter),
76
+ });
77
+ });
78
+ return { ...response, results: shaped };
51
79
  }
52
80
  /**
53
81
  * A `read.maxTokens` config feloldása (default/fallback 4000, min 256) — a QUERY-K TÁRAIRA feloldva (user-FR
@@ -89,7 +117,20 @@ class FAM_ReadTool_Service {
89
117
  */
90
118
  static applyTokenBudget(response, maxTokens) {
91
119
  const charBudget = Math.max(256, maxTokens) * 4;
92
- const metaPerHit = 220; // a per-hit metaadat (score/path/heading/…) durva char-költsége
120
+ // A per-hit metaadat TÉNYLEGES char-költsége (2026-07-29 lelet): eddig egy fix `220`-as becslés volt, miközben a
121
+ // valódi metaadat ~790-1400 char — vagyis a budget 3-6×-osan ALULBECSÜLT, és a válasz rendszeresen túllépte a
122
+ // `read.maxTokens`-ben ígért méretet (ez volt a „túl nagy csomag" panasz egyik oka). Most a KIMENŐ (kompaktált)
123
+ // alakot mérjük, mert az agent azt kapja meg — így a budget végre igazat mond.
124
+ const metaCost = (hit) => {
125
+ try {
126
+ const shaped = fam_read_response_shape_util_1.FAM_ReadResponseShape_Util.compactHit(hit);
127
+ delete shaped.content;
128
+ return JSON.stringify(shaped).length;
129
+ }
130
+ catch {
131
+ return 220;
132
+ }
133
+ };
93
134
  const results = response.results ?? [];
94
135
  if (!results.length) {
95
136
  return;
@@ -104,11 +145,12 @@ class FAM_ReadTool_Service {
104
145
  if (!hit) {
105
146
  continue;
106
147
  }
107
- if (used + metaPerHit >= charBudget) {
148
+ const hitMeta = metaCost(hit);
149
+ if (used + hitMeta >= charBudget) {
108
150
  budgetExhausted = true;
109
151
  break;
110
152
  }
111
- used += metaPerHit;
153
+ used += hitMeta;
112
154
  if (typeof hit.content === 'string' && hit.content.length > 0) {
113
155
  const remaining = charBudget - used;
114
156
  if (hit.content.length > remaining) {
@@ -137,14 +179,18 @@ class FAM_ReadTool_Service {
137
179
  * hit (nem-scan, pl. agent-write) érintetlen. basePath nélkül no-op (a `sourceFilePath` a scan-gyökérhez relatív marad).
138
180
  */
139
181
  rebaseToBasePath(response, basePath) {
140
- if (!basePath) {
141
- return;
142
- }
143
182
  for (const block of response.results ?? []) {
144
183
  for (const hit of block.hits ?? []) {
145
- if (hit.absolutePath) {
146
- hit.sourceFilePath = path.relative(basePath, hit.absolutePath).replace(/\\/g, '/');
184
+ if (!hit.absolutePath) {
185
+ continue;
147
186
  }
187
+ // ÚTVONAL-SSOT (user-FR 2026-07-29 — „az eredményekből kiolvasható fájl elérési útvonalak nem állnak
188
+ // össze"): a `sourceFilePath` eddig a SCAN-ROOT-hoz volt relatív (pl. `global/core-x.md`), amit a hívó
189
+ // NEM tudott feloldani (a scan-root nem szerepelt a válaszban). Mostantól: `basePath` esetén ahhoz
190
+ // relatív, KÜLÖNBEN az ABSZOLÚT út — vagyis a mező MINDIG megnyitható útvonalat ad.
191
+ hit.sourceFilePath = basePath
192
+ ? path.relative(basePath, hit.absolutePath).replace(/\\/g, '/')
193
+ : hit.absolutePath;
148
194
  }
149
195
  }
150
196
  }
@@ -46,8 +46,43 @@ class FAM_WriteTool_Service {
46
46
  this.validate(input);
47
47
  const output = await this.dispatch(input);
48
48
  this.logWriteActivity(input, output);
49
+ // OPERATÍV VISSZAJELZÉS (user-FR 2026-07-29): egy mondat arról, MI TÖRTÉNT — az agentnek ne a nyers ID-tömbökből
50
+ // kelljen visszafejtenie az eredményt (ugyanaz az elv, mint a `read` summary-jénél).
51
+ output.summary = FAM_WriteTool_Service.buildSummary(output);
49
52
  return output;
50
53
  }
54
+ /**
55
+ * A write-eredmény egy mondatban (PURE, tesztelhető). Csak a TÉNYLEGESEN történt dolgokat sorolja (üres részeket
56
+ * nem említ), scan-nél a fájl/chunk-számot + a delta-verdikteket, és a figyelmeztetések számát.
57
+ */
58
+ static buildSummary(output) {
59
+ const parts = [];
60
+ if (output.created.length) {
61
+ parts.push(`${output.created.length} létrehozva`);
62
+ }
63
+ if (output.updated.length) {
64
+ parts.push(`${output.updated.length} frissítve`);
65
+ }
66
+ if (output.deleted.length) {
67
+ parts.push(`${output.deleted.length} törölve`);
68
+ }
69
+ if (output.scan) {
70
+ const verdicts = output.scan.verdicts;
71
+ parts.push(`${output.scan.filesProcessed} fájl → ${output.scan.chunks} chunk `
72
+ + `(${verdicts.new} új / ${verdicts.modified} módosult / ${verdicts.equal} változatlan`
73
+ + `${verdicts.deleted ? ` / ${verdicts.deleted} törölt` : ''})`);
74
+ }
75
+ if (output.reEmbed) {
76
+ parts.push(`re-embed: ${output.reEmbed.reembedded}/${output.reEmbed.total} `
77
+ + `(${output.reEmbed.skipped} kihagyva, ${output.reEmbed.failed} hibás)`);
78
+ }
79
+ if (!parts.length) {
80
+ parts.push('nem változott semmi');
81
+ }
82
+ const status = output.ok ? 'OK' : 'HIBA';
83
+ const warnings = output.warnings.length ? ` · ${output.warnings.length} figyelmeztetés` : '';
84
+ return `[${output.operation} → ${output.table}] ${status}: ${parts.join(' · ')}${warnings}`;
85
+ }
51
86
  /** Az operation-router (a `handle` validáció + activity-log közé ékelve, dsgn-003 §3). */
52
87
  async dispatch(input) {
53
88
  switch (input.operation) {
@@ -0,0 +1 @@
1
+ import{$ as be,A as xe,Aa as X,B as Y,C as E,D as $,E as o,F as a,G as W,Ga as J,H as oe,I as T,Ia as de,J as u,K as c,Ka as A,L as re,La as Le,M as s,Ma as G,N as I,O as g,P as z,Q as ee,R as ke,S as v,T as w,U as S,V as B,W as V,X as ae,Y as Fe,Z as j,_ as O,a as R,aa as Ie,b as Q,ba as he,ca as le,d as b,da as Ce,ea as L,i as ge,k as F,l as D,m as fe,n as m,na as ye,o as _,p as Ee,pa as se,qa as q,ra as P,s as l,sa as ve,t as y,ta as Z,u as C,ua as K,v as M,va as H,w as k,wa as Ve,x as $e,xa as we,y as N,ya as Se,z as x,za as Me}from"./chunk-GF3FJP7E.js";var h=function(i){return i.rules="rules",i.documents="documents",i.codebase="codebase",i.knowledge="knowledge",i.codingPatterns="coding_patterns",i.memory="memory",i.reference="reference",i}(h||{});var U={[h.rules]:"Rules",[h.documents]:"Documents",[h.codebase]:"Codebase",[h.knowledge]:"Knowledge",[h.codingPatterns]:"Coding Patterns",[h.memory]:"Memory",[h.reference]:"Reference"},Te={[h.rules]:"glob\xE1lis / projekt-bound",[h.documents]:"projekt-bound",[h.codebase]:"projekt-bound",[h.knowledge]:"glob\xE1lis / domain",[h.codingPatterns]:"glob\xE1lis",[h.memory]:"session / projekt-bound",[h.reference]:"helper (alias \u2192 canonical)"},te=[h.rules,h.documents,h.codebase,h.knowledge,h.codingPatterns,h.memory],Pe={[h.rules]:["coding","architecture","naming","behavior","security","project"],[h.documents]:["spec","feature_request","bug_report","architecture_doc","dev_note","meeting_note","research_note"],[h.codebase]:["source_file","symbol","function","class","interface","config","dataflow","runflow","module_summary"],[h.knowledge]:["fact","concept","definition","relationship","domain_knowledge","company_knowledge","user_knowledge","decision_rationale"],[h.codingPatterns]:["pattern","anti_pattern","recipe","example","template","migration_pattern","debugging_pattern"],[h.memory]:["session_history","development_history","decision_history","incident","lesson_learned","important_note","user_preference","project_event","temporary_context","resolved_issue"]};var De=(i,d)=>d._id,Ge=()=>["/maintenance"];function Ue(i,d){if(i&1&&(o(0,"option",8),s(1),a()),i&2){let e=d.$implicit,t=c();k("value",e),l(),I(t.tableLabel(e))}}function Qe(i,d){i&1&&(o(0,"div",9),s(1,"Loading\u2026"),a())}function Ze(i,d){if(i&1&&s(0),i&2){let e=c().$implicit;ke(" \xB7 new ",e.verdicts.new," / mod ",e.verdicts.modified," / eq ",e.verdicts.equal," / del ",e.verdicts.deleted," ")}}function Je(i,d){if(i&1){let e=T();o(0,"button",25),u("click",function(){m(e);let n=c().$implicit,r=c(2);return _(r.viewRunErrors(n))}),s(1,"errors"),a()}}function Ye(i,d){if(i&1&&(o(0,"div",26),s(1),a()),i&2){let e,t=d.$implicit;l(),ke(" ",(e=t.sourceFilePath)!==null&&e!==void 0?e:"(no path)"," [",t.chunkIndex,"/",t.chunkTotal,"] \u2014 ",t.content==null?null:t.content.slice(0,80),"\u2026 ")}}function et(i,d){i&1&&(o(0,"div",27),s(1,"Nincs chunk ehhez a run-hoz."),a())}function tt(i,d){if(i&1&&(o(0,"div",24),E(1,Ye,2,4,"div",26,De,!1,et,2,0,"div",27),a()),i&2){let e,t=c().$implicit,n=c(2);M("data-testid","ma-ingest-chunks-"+t._id),l(),$(n.chunksFor((e=t._id)!==null&&e!==void 0?e:""))}}function nt(i,d){if(i&1){let e=T();o(0,"div",13)(1,"div",14)(2,"div",15)(3,"span",16),s(4),a(),o(5,"span",17),s(6),j(7,"date"),a(),o(8,"div",18),s(9),C(10,Ze,1,4),s(11),a()(),o(12,"div",19)(13,"span",20),s(14),a(),C(15,Je,2,0,"button",21),o(16,"button",22),u("click",function(){let n=m(e).$implicit,r=c(2);return _(r.toggleRun(n))}),s(17),a(),o(18,"button",23),u("click",function(){let n=m(e).$implicit,r=c(2);return _(r.deleteRun(n))}),s(19,"delete"),a()()(),C(20,tt,4,2,"div",24),a()}if(i&2){let e,t,n,r,p,f=d.$implicit,ie=c(2);N("border-red-700",ie.isFailed(f))("border-neutral-800",!ie.isFailed(f)),M("data-testid","ma-ingest-run-"+f._id),l(4),I((e=f.trigger)!==null&&e!==void 0?e:"\u2014"),l(2),z(" \xB7 ",ie.tableLabel(f.table)," \xB7 ",f.__created?O(7,23,f.__created,"short"):"\u2014",""),l(3),ee(" files ",(t=f.filesProcessed)!==null&&t!==void 0?t:0," (skip ",(t=f.filesSkipped)!==null&&t!==void 0?t:0,") \xB7 chunks ",(t=f.chunkCount)!==null&&t!==void 0?t:0," "),l(),x(f.verdicts?10:-1),l(),g(" \xB7 cost ",f.embedTokenCost!==void 0?f.embedTokenCost:"n/a"," "),l(2),N("bg-emerald-700",f.status==="ok")("bg-red-700",ie.isFailed(f)),M("data-testid","ma-ingest-status-"+f._id),l(),g(" ",(n=f.status)!==null&&n!==void 0?n:"ok"," "),l(),x(ie.isFailed(f)?15:-1),l(),M("data-testid","ma-ingest-expand-"+f._id),l(),g(" ",ie.isExpanded((r=f._id)!==null&&r!==void 0?r:"")?"collapse":"expand"," "),l(3),x(ie.isExpanded((p=f._id)!==null&&p!==void 0?p:"")?20:-1)}}function it(i,d){i&1&&(o(0,"div",12),s(1,"Nincs ingest-run."),a())}function at(i,d){if(i&1&&(o(0,"div",10),E(1,nt,21,26,"div",11,De,!1,it,2,0,"div",12),a()),i&2){let e=c();l(),$(e.runs_$())}}var Be=(()=>{class i{api=F(A);router=F(se);notify=F(J);popup=F(de);mainTables=te;runs_$=y([]);loading_$=y(!0);tableFilter="";expanded_$=y(new Set);runChunks_$=y({});ngOnInit(){return b(this,null,function*(){yield this.load()})}load(){return b(this,null,function*(){this.loading_$.set(!0);let e=yield this.api.getIngestRuns(this.tableFilter||void 0);if(e.error){this.notify.newErrorMessage(`${e.error.errorCode}: ${e.error.message}`),this.loading_$.set(!1);return}this.runs_$.set(e.data?.runs??[]),this.loading_$.set(!1)})}tableLabel(e){return e?Array.isArray(e)?e.map(t=>U[t]).join(", "):U[e]:"\u2014"}isExpanded(e){return this.expanded_$().has(e)}toggleRun(e){return b(this,null,function*(){let t=e._id??"",n=new Set(this.expanded_$());if(n.has(t)){n.delete(t),this.expanded_$.set(n);return}n.add(t),this.expanded_$.set(n);let r=Array.isArray(e.table)?e.table[0]:e.table;if(!r)return;let p=yield this.api.getItems(r,{ingestRunId:t,pageSize:200});p.data&&this.runChunks_$.set(Q(R({},this.runChunks_$()),{[t]:p.data.items}))})}chunksFor(e){return this.runChunks_$()[e]??[]}isFailed(e){return e.status==="failed"||e.status==="partial-failed"}deleteRun(e){return b(this,null,function*(){if(!(yield this.popup.newConfirm({title:"Run csoportos soft-delete",message:`A(z) ${e._id} run minden chunkja t\xF6rl\xE9sre ker\xFCl (soft-delete). Folytatod?`,confirmBtn:"Delete run"})))return;let n=yield this.api.invokeCapability("delete_ingest_run",{ingestRunId:e._id});if(n.error){this.notify.newErrorMessage(`${n.error.errorCode}: ${n.error.message}`);return}this.notify.newSuccessMessage("Run t\xF6r\xF6lve (soft-delete)."),yield this.load()})}viewRunErrors(e){this.router.navigate(["/errors"],{queryParams:{ingestRunId:e._id}})}static \u0275fac=function(t){return new(t||i)};static \u0275cmp=D({type:i,selectors:[["ma-ingest-timeline"]],standalone:!0,features:[B],decls:16,vars:4,consts:[["data-testid","ma-ingest-timeline",1,"mx-auto","max-w-5xl","p-6"],[1,"mb-4","block"],[1,"mb-4","flex","items-center","justify-between"],[1,"text-sm","opacity-60","hover:underline",3,"routerLink"],[1,"text-2xl","font-semibold"],[1,"flex","items-center","gap-2","text-sm"],["data-testid","ma-ingest-table-filter",1,"rounded","border","border-neutral-700","bg-neutral-900","px-2","py-1",3,"ngModelChange","ngModel"],["value",""],[3,"value"],["data-testid","ma-ingest-loading",1,"py-10","text-center","opacity-60"],["data-testid","ma-ingest-list",1,"flex","flex-col","gap-2"],[1,"rounded","border","bg-neutral-900",3,"border-red-700","border-neutral-800"],[1,"py-6","text-center","opacity-50"],[1,"rounded","border","bg-neutral-900"],[1,"flex","items-center","justify-between","px-3","py-2","text-sm"],[1,"flex-1"],[1,"font-medium"],[1,"opacity-50"],[1,"mt-1","text-xs","opacity-60"],[1,"flex","items-center","gap-2"],[1,"rounded","px-2","py-0.5","text-xs"],[1,"rounded","px-2","py-1","text-xs","text-red-300","hover:bg-neutral-800"],[1,"rounded","px-2","py-1","text-xs","hover:bg-neutral-800",3,"click"],[1,"rounded","px-2","py-1","text-xs","text-red-400","hover:bg-neutral-800",3,"click"],[1,"border-t","border-neutral-800","p-2"],[1,"rounded","px-2","py-1","text-xs","text-red-300","hover:bg-neutral-800",3,"click"],[1,"rounded","px-2","py-1","text-xs","opacity-80"],[1,"py-2","text-center","text-xs","opacity-40"]],template:function(t,n){t&1&&(o(0,"div",0),W(1,"ma-banner-host",1),o(2,"div",2)(3,"div")(4,"a",3),s(5,"\u2190 Maintenance"),a(),o(6,"h1",4),s(7,"Ingest timeline"),a()(),o(8,"div",5)(9,"select",6),S("ngModelChange",function(p){return w(n.tableFilter,p)||(n.tableFilter=p),p}),u("ngModelChange",function(){return n.load()}),o(10,"option",7),s(11,"\xF6sszes t\xE1r"),a(),E(12,Ue,2,2,"option",8,Y),a()()(),C(14,Qe,2,0,"div",9)(15,at,4,1,"div",10),a()),t&2&&(l(4),k("routerLink",V(3,Ge)),l(5),v("ngModel",n.tableFilter),l(3),$(n.mainTables),l(2),x(n.loading_$()?14:15))},dependencies:[L,le,X,Se,Me,we,K,H,P,q,G],encapsulation:2})}return i})();var ot=(i,d)=>d.table,rt=()=>["/maintenance/search"],Ae=()=>["/maintenance/scopes"],lt=()=>["/maintenance/ingest"],st=()=>["/maintenance/settings"],dt=()=>["/errors"],ct=i=>["/maintenance",i];function pt(i,d){i&1&&(o(0,"div",7),s(1," A FAM szerver nem el\xE9rhet\u0151 (port 39185). Ind\xEDtsd el a szervert, majd friss\xEDts. "),a())}function mt(i,d){i&1&&(o(0,"div",8),s(1,"Loading\u2026"),a())}function _t(i,d){i&1&&(o(0,"div",19)(1,"span",21),s(2,"Add first entry"),a(),o(3,"span",21),s(4,"Run scan"),a()())}function ut(i,d){i&1&&(o(0,"div",20),s(1,"Configure embedding \u2192 Settings"),a())}function gt(i,d){if(i&1&&(o(0,"a",10)(1,"div",12)(2,"span",13),s(3),a(),o(4,"span",14),s(5),a()(),o(6,"div",15),s(7),a(),o(8,"div",16),s(9),j(10,"date"),a(),o(11,"div",17),s(12),a(),o(13,"div",18),s(14),a(),C(15,_t,5,0,"div",19)(16,ut,2,0,"div",20),a()),i&2){let e=d.$implicit;k("routerLink",ae(20,ct,e.table)),M("data-testid","ma-table-card-"+e.table),l(3),I(e.label),l(),N("bg-neutral-700",e.status==="empty")("bg-red-700",e.status==="bootstrap-skip"||e.status==="config-error")("bg-emerald-700",e.status==="ok"),M("data-testid","ma-table-status-"+e.table),l(),g(" ",e.status," "),l(2),g("",e.count," bejegyz\xE9s"),l(2),g(" utols\xF3 ingest: ",e.lastIngest?O(10,17,e.lastIngest,"short"):"\u2014"," "),l(3),g("embedding: ",e.embeddingState,""),l(2),g("scope: ",e.scopeHint,""),l(),x(e.status==="empty"?15:-1),l(),x(e.status==="bootstrap-skip"?16:-1)}}function ft(i,d){if(i&1&&(o(0,"div",11)(1,"h2",22),s(2,"Helper (nem kereshet\u0151 t\xE1r)"),a(),o(3,"a",23)(4,"div",12)(5,"span",13),s(6),a(),o(7,"span",24),s(8,"helper"),a()(),o(9,"div",15),s(10),a(),o(11,"div",25),s(12,"alias \u2192 canonical felold\xE1s \xB7 scope-fa kezel\xE9s"),a()()()),i&2){let e=d;l(3),k("routerLink",V(3,Ae)),l(3),I(e.label),l(4),g("",e.count," reference-bejegyz\xE9s")}}function xt(i,d){if(i&1&&(o(0,"div",9),E(1,gt,17,22,"a",10,ot),a(),C(3,ft,13,4,"div",11)),i&2){let e,t=c();l(),$(t.cards_$()),l(2),x((e=t.referenceCard_$())?3:-1,e)}}var Re=(()=>{class i{api=F(A);adminState=F(Le);loading_$=y(!0);cards_$=y([]);referenceCard_$=y(null);get serverUnreachable_$(){return this.adminState.serverUnreachable_$}totalEntries_$=Ie(()=>this.cards_$().reduce((e,t)=>e+t.count,0));ngOnInit(){return b(this,null,function*(){this.adminState.startPolling(),yield this.load()})}load(){return b(this,null,function*(){this.loading_$.set(!0);let e=yield this.api.getStats();if(e.error){this.adminState.pushBanner({key:"landing-stats-error",color:"red",title:"T\xE1r-statisztika nem el\xE9rhet\u0151",message:`${e.error.errorCode}: ${e.error.message}`,errorsLink:!0}),this.loading_$.set(!1);return}let t={};for(let r of e.data?.tables??[])t[r.table]=r;let n=[];for(let r of te)n.push(yield this.buildCard(r,t[r]));this.cards_$.set(n),this.referenceCard_$.set(yield this.buildReferenceCard()),this.loading_$.set(!1)})}buildCard(e,t){return b(this,null,function*(){let n=t?.count??0,r=yield this.resolveEmbeddingState(e),p=this.deriveStatus(n,r);return{table:e,label:U[e],scopeHint:Te[e],count:n,lastIngest:t?.lastModified??null,status:p,embeddingState:r}})}buildReferenceCard(){return b(this,null,function*(){let t=(yield this.api.invokeCapability("get_reference_stats")).data??{},n=t.count??t.total??0;return{table:h.reference,label:U[h.reference],scopeHint:Te[h.reference],count:n,lastIngest:null,status:n?"ok":"empty",embeddingState:"helper (alias-resolve)"}})}resolveEmbeddingState(e){return b(this,null,function*(){let t=yield this.api.getConfig(e);if(t.error||!t.data)return"nincs (config nem el\xE9rhet\u0151)";let n=t.data,r=n.effective["embedding.provider"],p=n.effective["embedding.model"];if(!r||r.value===null||r.value==="")return"nincs konfigur\xE1lva";let f=r.resolvedFrom==="builtin"||r.resolvedFrom==="global"?"global default":r.resolvedFrom;return`${r.value}${p?.value?" / "+p.value:""} (${f})`})}deriveStatus(e,t){return t.startsWith("nincs")?"bootstrap-skip":e?"ok":"empty"}static \u0275fac=function(t){return new(t||i)};static \u0275cmp=D({type:i,selectors:[["ma-landing"]],standalone:!0,features:[B],decls:22,vars:13,consts:[["data-testid","ma-landing",1,"mx-auto","max-w-6xl","p-6"],[1,"mb-4","block"],[1,"mb-6","flex","items-end","justify-between"],[1,"text-2xl","font-semibold"],[1,"text-sm","opacity-60"],[1,"flex","gap-2","text-sm"],[1,"rounded","border","border-neutral-700","px-3","py-1","hover:bg-neutral-800",3,"routerLink"],["data-testid","ma-landing-unreachable",1,"mb-4","rounded","border","border-red-600","bg-red-950","px-4","py-3","text-sm","text-red-200"],["data-testid","ma-landing-loading",1,"py-10","text-center","opacity-60"],["data-testid","ma-landing-cards",1,"grid","grid-cols-1","gap-4","sm:grid-cols-2","lg:grid-cols-3"],[1,"block","rounded-lg","border","border-neutral-800","bg-neutral-900","p-4","transition","hover:border-neutral-600",3,"routerLink"],[1,"mt-8"],[1,"flex","items-center","justify-between"],[1,"text-lg","font-medium"],[1,"rounded-full","px-2","py-0.5","text-xs"],[1,"mt-2","text-sm","opacity-70"],[1,"text-xs","opacity-50"],[1,"mt-2","text-xs","opacity-60"],[1,"text-xs","opacity-40"],[1,"mt-3","flex","gap-2","text-xs"],[1,"mt-3","text-xs","text-red-300"],[1,"rounded","border","border-neutral-700","px-2","py-1"],[1,"mb-2","text-sm","uppercase","tracking-wide","opacity-50"],["data-testid","ma-reference-card",1,"block","max-w-sm","rounded-lg","border","border-dashed","border-amber-700/60","bg-neutral-900","p-4","hover:border-amber-500",3,"routerLink"],[1,"rounded-full","bg-amber-800","px-2","py-0.5","text-xs"],[1,"mt-1","text-xs","opacity-50"]],template:function(t,n){t&1&&(o(0,"div",0),W(1,"ma-banner-host",1),o(2,"div",2)(3,"div")(4,"h1",3),s(5,"FDP Agent Memory \u2014 Maintenance"),a(),o(6,"p",4),s(7),a()(),o(8,"div",5)(9,"a",6),s(10,"Search"),a(),o(11,"a",6),s(12,"Scopes"),a(),o(13,"a",6),s(14,"Ingest"),a(),o(15,"a",6),s(16,"Settings"),a(),o(17,"a",6),s(18,"Errors"),a()()(),C(19,pt,2,0,"div",7)(20,mt,2,0,"div",8)(21,xt,4,1),a()),t&2&&(l(7),g("6 f\u0151 RAG-t\xE1r + reference helper \xB7 ",n.totalEntries_$()," bejegyz\xE9s"),l(2),k("routerLink",V(8,rt)),l(2),k("routerLink",V(9,Ae)),l(2),k("routerLink",V(10,lt)),l(2),k("routerLink",V(11,st)),l(2),k("routerLink",V(12,dt)),l(2),x(n.serverUnreachable_$()?19:-1),l(),x(n.loading_$()?20:21))},dependencies:[L,le,P,q,G],encapsulation:2})}return i})();var Ne=(i,d)=>d.scopeId,bt=(i,d)=>d._id,ht=()=>["/maintenance"],Ct=i=>({$implicit:i,depth:0}),yt=()=>[],vt=(i,d)=>({$implicit:i,depth:d});function wt(i,d){i&1&&(o(0,"div",9),s(1,"Loading\u2026"),a())}function St(i,d){if(i&1&&oe(0,13),i&2){let e=d.$implicit;c(2);let t=re(16);k("ngTemplateOutlet",t)("ngTemplateOutletContext",ae(2,Ct,e))}}function Mt(i,d){i&1&&(o(0,"div",14),s(1,"Nincs scope (a write/scan auto-regisztr\xE1lja)."),a())}function kt(i,d){if(i&1&&(o(0,"div",22),s(1),a()),i&2){let e=c();l(),g("aliases: ",e.aliases==null?null:e.aliases.join(", "),"")}}function Tt(i,d){if(i&1){let e=T();o(0,"div",15)(1,"div",20),s(2),a(),o(3,"div",21),s(4),a(),C(5,kt,2,1,"div",22),o(6,"button",23),u("click",function(){let n=m(e),r=c(2);return _(r.viewEntries(n))}),s(7,"View entries"),a()()}if(i&2){let e,t=d;l(2),I(t.canonicalName),l(2),z("layer: ",t.layer," \xB7 ",(e=t.entryCount)!==null&&e!==void 0?e:0," entry"),l(),x(t.aliases!=null&&t.aliases.length?5:-1)}}function Et(i,d){if(i&1&&s(0),i&2){let e=c().$implicit;g(" category: ",e.category," \xB7 ")}}function $t(i,d){if(i&1&&s(0),i&2){let e=c().$implicit;g(" layer: ",e.scopeLayer," \xB7 ")}}function Ft(i,d){if(i&1&&s(0),i&2){let e=c().$implicit;g(" t\xE1rak: ",e.ragScopes==null?null:e.ragScopes.join(", ")," ")}}function It(i,d){if(i&1){let e=T();o(0,"div",17)(1,"div",24)(2,"div",25)(3,"div",20)(4,"span",26),s(5),a(),s(6),a(),o(7,"div",27),C(8,Et,1,1)(9,$t,1,1)(10,Ft,1,1),a()(),o(11,"div",28)(12,"button",29),u("click",function(){let n=m(e).$implicit,r=c(2);return _(r.openEditForm(n))}),s(13,"edit"),a(),o(14,"button",29),u("click",function(){let n=m(e).$implicit,r=c(2);return _(r.toggleActive(n))}),s(15),a()()()()}if(i&2){let e,t=d.$implicit;M("data-testid","ma-reference-"+t._id),l(3),N("opacity-40",!t.isActive),l(2),I(((e=t.aliasTerms)!==null&&e!==void 0?e:V(14,yt)).join(" / ")),l(),g(" \u2192 ",t.canonicalTerm," "),l(2),x(t.category?8:-1),l(),x(t.scopeLayer?9:-1),l(),x(t.ragScopes!=null&&t.ragScopes.length?10:-1),l(4),N("text-emerald-400",!t.isActive)("text-amber-400",t.isActive),M("data-testid","ma-reference-toggle-"+t._id),l(),g(" ",t.isActive?"deactivate":"activate"," ")}}function Vt(i,d){i&1&&(o(0,"div",18),s(1,"Nincs reference-bejegyz\xE9s."),a())}function Lt(i,d){if(i&1){let e=T();o(0,"div",19)(1,"h3",30),s(2),a(),o(3,"input",31),S("ngModelChange",function(n){m(e);let r=c(2);return w(r.formCanonical,n)||(r.formCanonical=n),_(n)}),a(),o(4,"input",32),S("ngModelChange",function(n){m(e);let r=c(2);return w(r.formAliases,n)||(r.formAliases=n),_(n)}),a(),o(5,"textarea",33),S("ngModelChange",function(n){m(e);let r=c(2);return w(r.formDescription,n)||(r.formDescription=n),_(n)}),a(),o(6,"div",34)(7,"input",35),S("ngModelChange",function(n){m(e);let r=c(2);return w(r.formCategory,n)||(r.formCategory=n),_(n)}),a(),o(8,"input",36),S("ngModelChange",function(n){m(e);let r=c(2);return w(r.formScopeLayer,n)||(r.formScopeLayer=n),_(n)}),a()(),o(9,"input",37),S("ngModelChange",function(n){m(e);let r=c(2);return w(r.formRagScopes,n)||(r.formRagScopes=n),_(n)}),a(),o(10,"div",38)(11,"button",39),u("click",function(){m(e);let n=c(2);return _(n.submitForm())}),s(12,"Save"),a(),o(13,"button",40),u("click",function(){m(e);let n=c(2);return _(n.formOpen_$.set(!1))}),s(14,"Cancel"),a()()()}if(i&2){let e=c(2);l(2),I(e.editId?"Edit reference":"New reference"),l(),v("ngModel",e.formCanonical),l(),v("ngModel",e.formAliases),l(),v("ngModel",e.formDescription),l(2),v("ngModel",e.formCategory),l(),v("ngModel",e.formScopeLayer),l(),v("ngModel",e.formRagScopes)}}function Pt(i,d){if(i&1&&(o(0,"div",10)(1,"div")(2,"h2",11),s(3,"Scope tree"),a(),o(4,"div",12),E(5,St,1,4,"ng-container",13,Ne,!1,Mt,2,0,"div",14),a(),C(8,Tt,8,4,"div",15),a(),o(9,"div")(10,"h2",11),s(11,"Reference (alias \u2192 canonical)"),a(),o(12,"div",16),E(13,It,16,15,"div",17,bt,!1,Vt,2,0,"div",18),a()()(),C(16,Lt,15,7,"div",19)),i&2){let e,t=c();l(5),$(t.scopeTree_$()),l(3),x((e=t.selectedNode_$())?8:-1,e),l(5),$(t.references_$()),l(3),x(t.formOpen_$()?16:-1)}}function Dt(i,d){if(i&1&&oe(0,13),i&2){let e=d.$implicit,t=c().depth;c();let n=re(16);k("ngTemplateOutlet",n)("ngTemplateOutletContext",Fe(2,vt,e,t+1))}}function Bt(i,d){if(i&1){let e=T();o(0,"div")(1,"button",41),u("click",function(){let n=m(e).$implicit,r=c();return _(r.selectNode(n))}),o(2,"span",42),s(3),a(),s(4),o(5,"span",43),s(6),a()(),E(7,Dt,1,5,"ng-container",13,Ne),a()}if(i&2){let e,t=d.$implicit,n=d.depth;l(),$e("padding-left",8+n*16,"px"),M("data-testid","ma-scope-node-"+t.scopeId),l(2),g("",t.layer,":"),l(),g(" ",t.canonicalName," "),l(2),g("(",(e=t.entryCount)!==null&&e!==void 0?e:0,")"),l(),$(t.children)}}var We=(()=>{class i{api=F(A);route=F(ye);router=F(se);notify=F(J);popup=F(de);scopeTree_$=y([]);selectedNode_$=y(null);references_$=y([]);loading_$=y(!0);formOpen_$=y(!1);editId=null;formCanonical="";formAliases="";formDescription="";formCategory="";formScopeLayer="";formRagScopes="";focusScopeId=null;ngOnInit(){return b(this,null,function*(){this.focusScopeId=this.route.snapshot.queryParamMap.get("focus"),yield this.load()})}load(){return b(this,null,function*(){this.loading_$.set(!0),yield Promise.all([this.loadScopeTree(),this.loadReferences()]),this.loading_$.set(!1),this.focusScopeId&&this.focusNode(this.focusScopeId)})}loadScopeTree(){return b(this,null,function*(){let e=yield this.api.invokeCapability("get_scope_tree");if(e.error)return;let t=e.data??{};this.scopeTree_$.set(t.tree??t.nodes??[])})}loadReferences(){return b(this,null,function*(){let e=yield this.api.invokeCapability("get_reference_stats");if(e.error)return;let t=e.data??{};this.references_$.set(t.references??t.items??[])})}selectNode(e){this.selectedNode_$.set(e)}focusNode(e){let t=this.findNode(this.scopeTree_$(),e);t&&this.selectedNode_$.set(t)}findNode(e,t){for(let n of e){if(n.scopeId===t)return n;let r=this.findNode(n.children??[],t);if(r)return r}return null}viewEntries(e){this.router.navigate(["/maintenance"],{queryParams:{scope:e.scopeId}})}openNewForm(){this.editId=null,this.formCanonical="",this.formAliases="",this.formDescription="",this.formCategory="",this.formScopeLayer="",this.formRagScopes="",this.formOpen_$.set(!0)}openEditForm(e){this.editId=e._id??null,this.formCanonical=e.canonicalTerm,this.formAliases=(e.aliasTerms??[]).join(", "),this.formDescription=e.description??"",this.formCategory=e.category??"",this.formScopeLayer=e.scopeLayer??"",this.formRagScopes=(e.ragScopes??[]).join(", "),this.formOpen_$.set(!0)}submitForm(){return b(this,null,function*(){if(!this.formCanonical.trim()){this.notify.newErrorMessage("A canonical term k\xF6telez\u0151.");return}let e={canonicalTerm:this.formCanonical,aliasTerms:this.parseCsv(this.formAliases),description:this.formDescription||void 0,category:this.formCategory||void 0,scopeLayer:this.formScopeLayer||void 0,ragScopes:this.parseCsv(this.formRagScopes)},t=yield this.api.invokeCapability(this.editId?"update_reference":"create_reference",R({id:this.editId??void 0},e));if(t.error){this.notify.newErrorMessage(`${t.error.errorCode}: ${t.error.message}`);return}this.notify.newSuccessMessage(this.editId?"Reference friss\xEDtve.":"Reference l\xE9trehozva."),this.formOpen_$.set(!1),yield this.loadReferences(),yield this.suggestRebuild()})}toggleActive(e){return b(this,null,function*(){let t=yield this.api.invokeCapability("toggle_reference",{id:e._id,isActive:!e.isActive});if(t.error){this.notify.newErrorMessage(`${t.error.errorCode}: ${t.error.message}`);return}this.notify.newSuccessMessage(`Reference ${e.isActive?"inaktiv\xE1lva":"aktiv\xE1lva"}.`),yield this.loadReferences(),yield this.suggestRebuild()})}rebuildIndex(){return b(this,null,function*(){let e=yield this.api.invokeCapability("rebuild_reference_index");if(e.error){this.notify.newErrorMessage(`${e.error.errorCode}: ${e.error.message}`);return}this.notify.newSuccessMessage("Reference-index \xFAjra\xE9p\xEDtve.")})}suggestRebuild(){return b(this,null,function*(){(yield this.popup.newConfirm({title:"Reference-index rebuild",message:"A reference-cache TTL-es (60s). Most \xFAjra\xE9p\xEDtsem az indexet, hogy a v\xE1ltoz\xE1s azonnal hasson?",confirmBtn:"Rebuild now"}))&&(yield this.rebuildIndex())})}parseCsv(e){return(e??"").split(",").map(t=>t.trim()).filter(t=>t.length)}static \u0275fac=function(t){return new(t||i)};static \u0275cmp=D({type:i,selectors:[["ma-scopes"]],standalone:!0,features:[B],decls:17,vars:3,consts:[["scopeNode",""],["data-testid","ma-scopes",1,"mx-auto","max-w-6xl","p-6"],[1,"mb-4","block"],[1,"mb-4","flex","items-center","justify-between"],[1,"text-sm","opacity-60","hover:underline",3,"routerLink"],[1,"text-2xl","font-semibold"],[1,"flex","gap-2","text-sm"],["data-testid","ma-scopes-new-ref",1,"rounded","border","border-neutral-700","px-3","py-1","hover:bg-neutral-800",3,"click"],["data-testid","ma-scopes-rebuild",1,"rounded","border","border-neutral-700","px-3","py-1","hover:bg-neutral-800",3,"click"],["data-testid","ma-scopes-loading",1,"py-10","text-center","opacity-60"],[1,"grid","grid-cols-1","gap-6","lg:grid-cols-2"],[1,"mb-2","text-sm","uppercase","tracking-wide","opacity-50"],["data-testid","ma-scope-tree",1,"rounded","border","border-neutral-800","bg-neutral-900","p-3"],[3,"ngTemplateOutlet","ngTemplateOutletContext"],[1,"py-4","text-center","text-sm","opacity-50"],["data-testid","ma-scope-detail",1,"mt-3","rounded","border","border-neutral-800","bg-neutral-900","p-3","text-sm"],["data-testid","ma-reference-list",1,"flex","flex-col","gap-2"],[1,"rounded","border","border-neutral-800","bg-neutral-900","p-3","text-sm"],[1,"py-4","text-center","opacity-50"],["data-testid","ma-reference-form",1,"mt-6","rounded","border","border-neutral-800","bg-neutral-900","p-4"],[1,"font-medium"],[1,"text-xs","opacity-60"],[1,"mt-1","text-xs","opacity-60"],["data-testid","ma-scope-view-entries",1,"mt-2","rounded","border","border-neutral-700","px-2","py-1","text-xs","hover:bg-neutral-800",3,"click"],[1,"flex","items-start","justify-between"],[1,"flex-1"],[1,"opacity-60"],[1,"mt-1","text-xs","opacity-50"],[1,"flex","gap-1"],[1,"rounded","px-2","py-1","text-xs","hover:bg-neutral-800",3,"click"],[1,"mb-3","font-medium"],["placeholder","canonical term","data-testid","ma-ref-canonical",1,"mb-2","w-full","rounded","border","border-neutral-700","bg-neutral-950","p-2","text-sm",3,"ngModelChange","ngModel"],["placeholder","aliases (typo / fonetikus / STT, vessz\u0151vel)","data-testid","ma-ref-aliases",1,"mb-2","w-full","rounded","border","border-neutral-700","bg-neutral-950","p-2","text-sm",3,"ngModelChange","ngModel"],["rows","2","placeholder","description",1,"mb-2","w-full","rounded","border","border-neutral-700","bg-neutral-950","p-2","text-sm",3,"ngModelChange","ngModel"],[1,"mb-2","flex","gap-2"],["placeholder","category",1,"flex-1","rounded","border","border-neutral-700","bg-neutral-950","p-2","text-sm",3,"ngModelChange","ngModel"],["placeholder","scope-layer (opc.)",1,"flex-1","rounded","border","border-neutral-700","bg-neutral-950","p-2","text-sm",3,"ngModelChange","ngModel"],["placeholder","ragScopes \u2014 mely t\xE1rakra (vessz\u0151vel, \xFCres = mind)",1,"mb-3","w-full","rounded","border","border-neutral-700","bg-neutral-950","p-2","text-sm",3,"ngModelChange","ngModel"],[1,"flex","gap-2"],["data-testid","ma-ref-submit",1,"rounded","bg-emerald-700","px-4","py-1","text-sm","hover:bg-emerald-600",3,"click"],[1,"rounded","border","border-neutral-700","px-4","py-1","text-sm","hover:bg-neutral-800",3,"click"],["type","button",1,"block","w-full","rounded","px-2","py-1","text-left","text-sm","hover:bg-neutral-800",3,"click"],[1,"opacity-50"],[1,"opacity-40"]],template:function(t,n){if(t&1){let r=T();o(0,"div",1),W(1,"ma-banner-host",2),o(2,"div",3)(3,"div")(4,"a",4),s(5,"\u2190 Maintenance"),a(),o(6,"h1",5),s(7,"Scopes & Reference"),a()(),o(8,"div",6)(9,"button",7),u("click",function(){return m(r),_(n.openNewForm())}),s(10,"New reference"),a(),o(11,"button",8),u("click",function(){return m(r),_(n.rebuildIndex())}),s(12,"Rebuild index"),a()()(),C(13,wt,2,0,"div",9)(14,Pt,17,4),a(),C(15,Bt,9,6,"ng-template",null,0,be)}t&2&&(l(4),k("routerLink",V(2,ht)),l(9),x(n.loading_$()?13:14))},dependencies:[L,he,X,Z,K,H,P,q,G],encapsulation:2})}return i})();var At=(i,d)=>d.query,Rt=(i,d)=>d.id,Nt=(i,d)=>d.rawToken,Wt=(i,d)=>d.scopeId,zt=()=>["/maintenance"];function jt(i,d){if(i&1){let e=T();o(0,"button",23),u("click",function(){let n=m(e).$implicit,r=c().$index,p=c();return _(p.toggleTable(r,n))}),s(1),a()}if(i&2){let e=d.$implicit,t=c().$index,n=c();N("bg-blue-700",n.isTableSelected(t,e))("bg-neutral-800",!n.isTableSelected(t,e)),M("data-testid","ma-search-table-"+t+"-"+e),l(),g(" ",n.tableLabel(e)," ")}}function Ot(i,d){if(i&1){let e=T();o(0,"div",6)(1,"div",18),E(2,jt,2,6,"button",19,Y),a(),o(4,"div",20)(5,"input",21),u("ngModelChange",function(n){let r=m(e).$index,p=c();return _(p.setQuery(r,n))}),a(),o(6,"button",22),u("click",function(){let n=m(e).$index,r=c();return _(r.removeRow(n))}),s(7,"remove"),a()()()}if(i&2){let e=d.$implicit,t=d.$index,n=c();l(2),$(n.mainTables),l(3),k("ngModel",e.query),M("data-testid","ma-search-query-"+t)}}function qt(i,d){i&1&&(o(0,"div",15),s(1,"Searching\u2026"),a())}function Kt(i,d){i&1&&(s(0," \xB7 "),o(1,"span",25),s(2,"relev\xE1ns elemek lemaradtak (truncated)"),a())}function Ht(i,d){if(i&1){let e=T();o(0,"button",36),u("click",function(){let n=m(e).$implicit,r=c(4);return _(r.applySuggestion(n))}),s(1),a()}if(i&2){let e=d.$implicit;M("data-testid","ma-search-suggestion"),l(),g(" ",e," ")}}function Xt(i,d){if(i&1&&(o(0,"div",34),E(1,Ht,2,2,"button",35,Y),a()),i&2){let e=c(2).$implicit;l(),$(e.suggestions)}}function Gt(i,d){if(i&1&&(o(0,"div",27)(1,"div",32),s(2,"S\u0171r\u0171 eredm\xE9ny \u2014 a query t\xFAl t\xE1g lehet"),a(),o(3,"div",33),s(4),C(5,Kt,3,0,"span",25),a(),C(6,Xt,3,0,"div",34),a()),i&2){let e=c().$implicit;M("data-testid","ma-search-dense-"+e.query),l(4),g(" ",e.totalRelevant," relev\xE1ns elem a minScore felett (topK el\u0151tt) "),l(),x(e.truncated?5:-1),l(),x(e.suggestions.length?6:-1)}}function Ut(i,d){if(i&1&&(o(0,"div"),s(1),j(2,"number"),a()),i&2){let e=d.$implicit;l(),ee('"',e.rawToken,'" \u2192 ',e.resolvedTo," (konfidencia: ",O(2,3,e.confidence,"1.2-2"),")")}}function Qt(i,d){if(i&1&&(o(0,"div",28),E(1,Ut,3,6,"div",null,Nt),a()),i&2){let e=c().$implicit;M("data-testid","ma-search-uncertainty"),l(),$(e.uncertaintyNotes)}}function Zt(i,d){if(i&1&&s(0),i&2){let e,t=c(2).$implicit;g(" szekci\xF3: ",(e=t.heading)!==null&&e!==void 0?e:t.headingPath==null?null:t.headingPath.join(" \u203A ")," \xB7 ")}}function Jt(i,d){if(i&1&&s(0),i&2){let e=c(2).$implicit;g(" sorok ",e.lines," \xB7 ")}}function Yt(i,d){if(i&1&&s(0),i&2){let e=c(2).$implicit;z(" chars ",e.position.charStart,"\u2013",e.position.charEnd," \xB7 ")}}function en(i,d){if(i&1&&s(0),i&2){let e=c(2).$implicit;g(" repo: ",e.repoPath," \xB7 ")}}function tn(i,d){if(i&1&&(o(0,"div",43),s(1),a(),o(2,"div",44),C(3,Zt,1,1)(4,Jt,1,1)(5,Yt,1,2)(6,en,1,1),s(7),a()),i&2){let e,t=c().$implicit;l(),I(t.content),l(2),x(t.heading||t.headingPath!=null&&t.headingPath.length?3:-1),l(),x(t.lines?4:t.position?5:-1),l(2),x(t.repoPath?6:-1),l(),z(" kind: ",(e=t.kind)!==null&&e!==void 0?e:"\u2014"," \xB7 tags: ",t.tags.join(", ")," ")}}function nn(i,d){if(i&1&&(o(0,"div",39),s(1),a()),i&2){let e=c().$implicit;l(),I(e.content)}}function an(i,d){if(i&1&&(o(0,"span",41),s(1),a()),i&2){let e=d.$implicit;l(),z("",e.layer,":",e.canonicalName,"")}}function on(i,d){if(i&1){let e=T();o(0,"div",30)(1,"div",37)(2,"div",38),C(3,tn,8,6)(4,nn,2,1,"div",39),o(5,"div",40)(6,"span"),s(7),j(8,"number"),a(),o(9,"span"),s(10),a(),o(11,"span"),s(12),j(13,"number"),a(),o(14,"span"),s(15),a(),o(16,"span"),s(17),a(),E(18,an,2,2,"span",41,Wt),a()(),o(20,"button",42),u("click",function(){let n=m(e).$implicit,r=c(2);return _(r.toggleExpand(n.id))}),s(21),a()()()}if(i&2){let e=d.$implicit,t=c(2);M("data-testid","ma-search-hit-"+e.id),l(3),x(t.isExpanded(e.id)?3:4),l(4),g("score ",O(8,9,e.score,"1.3-3"),""),l(3),g("weight ",e.weight,""),l(2),g("final ",O(13,12,e.finalScore,"1.3-3"),""),l(3),I(t.tableLabel(e.table)),l(2),g("src: ",t.hitSource(e),""),l(),$(e.scopePath),l(2),M("data-testid","ma-search-expand-"+e.id),l(),g(" ",t.isExpanded(e.id)?"collapse":"expand"," ")}}function rn(i,d){i&1&&(o(0,"div",31),s(1,"Nincs tal\xE1lat erre a query-re."),a())}function ln(i,d){if(i&1&&(o(0,"div",17)(1,"div",24)(2,"span",25),s(3),a(),o(4,"span",26),s(5),a()(),C(6,Gt,7,4,"div",27)(7,Qt,3,1,"div",28),o(8,"div",29),E(9,on,22,15,"div",30,Rt,!1,rn,2,0,"div",31),a()()),i&2){let e=d.$implicit;l(3),g('"',e.query,'"'),l(2),z(" \xB7 ",e.hits.length," hit \xB7 ",e.totalRelevant," relev\xE1ns"),l(),x(e.denseResults?6:-1),l(),x(e.uncertaintyNotes.length?7:-1),l(2),$(e.hits)}}var ze=(()=>{class i{api=F(A);notify=F(J);mainTables=te;rows_$=y([{tables:[h.memory],query:""}]);topK=5;minScore=0;tagFilter="";kindFilter="";results_$=y([]);searching_$=y(!1);expanded_$=y(new Set);ngOnInit(){return b(this,null,function*(){yield this.loadDefaults()})}loadDefaults(){return b(this,null,function*(){let e=yield this.api.getConfig();if(e.data?.effective){let t=e.data.effective["read.topK"],n=e.data.effective["read.minScore"];typeof t?.value=="number"&&(this.topK=t.value),typeof n?.value=="number"&&(this.minScore=n.value)}})}addRow(){this.rows_$.set([...this.rows_$(),{tables:[h.knowledge],query:""}])}removeRow(e){this.rows_$.set(this.rows_$().filter((t,n)=>n!==e))}toggleTable(e,t){let n=[...this.rows_$()],r=n[e].tables.includes(t)?n[e].tables.filter(p=>p!==t):[...n[e].tables,t];n[e]=Q(R({},n[e]),{tables:r}),this.rows_$.set(n)}isTableSelected(e,t){return this.rows_$()[e].tables.includes(t)}setQuery(e,t){let n=[...this.rows_$()];n[e]=Q(R({},n[e]),{query:t}),this.rows_$.set(n)}tableLabel(e){return U[e]}search(){return b(this,null,function*(){let e=this.rows_$().filter(n=>n.query.trim()&&n.tables.length);if(!e.length){this.notify.newErrorMessage("Adj meg legal\xE1bb egy query-t (t\xE1bla + phrase).");return}this.searching_$.set(!0);let t=yield this.api.read({queries:e.map(n=>({tables:n.tables,query:n.query,topK:this.topK,minScore:this.minScore,tagFilter:this.tagFilter?this.parseCsv(this.tagFilter):void 0,kindFilter:this.kindFilter||void 0})),includeContent:!0});if(this.searching_$.set(!1),t.error){this.notify.newErrorMessage(`${t.error.errorCode}: ${t.error.message}`),this.results_$.set([]);return}this.results_$.set(t.data?.results??[])})}toggleExpand(e){let t=new Set(this.expanded_$());t.has(e)?t.delete(e):t.add(e),this.expanded_$.set(t)}isExpanded(e){return this.expanded_$().has(e)}applySuggestion(e){let t=e.toLowerCase(),n=e.match(/tag[:=]\s*([\w-]+)/i),r=e.match(/kind[:=]\s*([\w-]+)/i);n?this.tagFilter=this.tagFilter?`${this.tagFilter},${n[1]}`:n[1]:r?this.kindFilter=r[1]:t.includes("mincore")||t.includes("minscore")?this.minScore=Math.min(this.minScore+.1,1):t.includes("topk")&&(this.topK=Math.max(this.topK-1,1)),this.search()}hitSource(e){let t=e.path??e.sourceFilePath;return t||(e.sourceType??e.source?.type??"manual")}parseCsv(e){return(e??"").split(",").map(t=>t.trim()).filter(t=>t.length)}static \u0275fac=function(t){return new(t||i)};static \u0275cmp=D({type:i,selectors:[["ma-search"]],standalone:!0,features:[B],decls:27,vars:7,consts:[["data-testid","ma-search",1,"mx-auto","max-w-5xl","p-6"],[1,"mb-4","block"],[1,"mb-4"],[1,"text-sm","opacity-60","hover:underline",3,"routerLink"],[1,"text-2xl","font-semibold"],["data-testid","ma-search-queries",1,"mb-4","flex","flex-col","gap-3"],[1,"rounded","border","border-neutral-800","bg-neutral-900","p-3"],["data-testid","ma-search-add-query",1,"self-start","rounded","border","border-neutral-700","px-3","py-1","text-sm","hover:bg-neutral-800",3,"click"],[1,"mb-4","flex","flex-wrap","items-center","gap-3","text-sm"],[1,"flex","items-center","gap-1"],["type","number","data-testid","ma-search-topk",1,"w-20","rounded","border","border-neutral-700","bg-neutral-900","px-2","py-1",3,"ngModelChange","ngModel"],["type","number","step","0.05","data-testid","ma-search-minscore",1,"w-24","rounded","border","border-neutral-700","bg-neutral-900","px-2","py-1",3,"ngModelChange","ngModel"],["placeholder","tag filter (vessz\u0151vel)","data-testid","ma-search-tagfilter",1,"w-40","rounded","border","border-neutral-700","bg-neutral-900","px-2","py-1",3,"ngModelChange","ngModel"],["placeholder","kind filter","data-testid","ma-search-kindfilter",1,"w-32","rounded","border","border-neutral-700","bg-neutral-900","px-2","py-1",3,"ngModelChange","ngModel"],["data-testid","ma-search-submit",1,"rounded","bg-blue-700","px-4","py-1","hover:bg-blue-600",3,"click"],["data-testid","ma-search-loading",1,"py-10","text-center","opacity-60"],["data-testid","ma-search-results",1,"flex","flex-col","gap-6"],[1,"rounded","border","border-neutral-800"],[1,"mb-2","flex","flex-wrap","gap-1"],["type","button",1,"rounded","px-2","py-1","text-xs",3,"bg-blue-700","bg-neutral-800"],[1,"flex","items-center","gap-2"],["placeholder","query phrase",1,"flex-1","rounded","border","border-neutral-700","bg-neutral-950","px-2","py-1","text-sm",3,"ngModelChange","ngModel"],[1,"rounded","px-2","py-1","text-sm","text-red-400","hover:bg-neutral-800",3,"click"],["type","button",1,"rounded","px-2","py-1","text-xs",3,"click"],[1,"border-b","border-neutral-800","bg-neutral-900","px-3","py-2","text-sm"],[1,"font-medium"],[1,"opacity-50"],[1,"border-b","border-yellow-700","bg-yellow-950","px-3","py-2","text-sm","text-yellow-200"],[1,"border-b","border-amber-700/60","bg-neutral-900","px-3","py-2","text-xs","text-amber-300"],[1,"flex","flex-col","gap-2","p-2"],[1,"rounded","border","border-neutral-800","bg-neutral-900","p-3","text-sm"],[1,"py-4","text-center","opacity-50"],[1,"font-semibold"],[1,"mt-1"],[1,"mt-2","flex","flex-wrap","gap-2"],["type","button",1,"rounded","bg-yellow-800","px-2","py-1","text-xs","hover:bg-yellow-700"],["type","button",1,"rounded","bg-yellow-800","px-2","py-1","text-xs","hover:bg-yellow-700",3,"click"],[1,"flex","items-start","justify-between","gap-3"],[1,"flex-1"],[1,"line-clamp-2","opacity-90"],[1,"mt-1","flex","flex-wrap","gap-2","text-xs","opacity-60"],[1,"rounded","bg-purple-900","px-1.5","py-0.5"],[1,"rounded","px-2","py-1","text-xs","hover:bg-neutral-800",3,"click"],[1,"whitespace-pre-wrap","opacity-90"],[1,"mt-1","text-xs","opacity-50"]],template:function(t,n){t&1&&(o(0,"div",0),W(1,"ma-banner-host",1),o(2,"div",2)(3,"a",3),s(4,"\u2190 Maintenance"),a(),o(5,"h1",4),s(6,"Search (val\xF3di read-teszt)"),a()(),o(7,"div",5),E(8,Ot,8,2,"div",6,xe),o(10,"button",7),u("click",function(){return n.addRow()}),s(11,"+ add query"),a()(),o(12,"div",8)(13,"label",9),s(14,"topK "),o(15,"input",10),S("ngModelChange",function(p){return w(n.topK,p)||(n.topK=p),p}),a()(),o(16,"label",9),s(17,"minScore "),o(18,"input",11),S("ngModelChange",function(p){return w(n.minScore,p)||(n.minScore=p),p}),a()(),o(19,"input",12),S("ngModelChange",function(p){return w(n.tagFilter,p)||(n.tagFilter=p),p}),a(),o(20,"input",13),S("ngModelChange",function(p){return w(n.kindFilter,p)||(n.kindFilter=p),p}),a(),o(21,"button",14),u("click",function(){return n.search()}),s(22,"Search"),a()(),C(23,qt,2,0,"div",15),o(24,"div",16),E(25,ln,12,6,"div",17,At),a()()),t&2&&(l(3),k("routerLink",V(6,zt)),l(5),$(n.rows_$()),l(7),v("ngModel",n.topK),l(3),v("ngModel",n.minScore),l(),v("ngModel",n.tagFilter),l(),v("ngModel",n.kindFilter),l(3),x(n.searching_$()?23:-1),l(2),$(n.results_$()))},dependencies:[L,Ce,X,Z,Ve,K,H,P,q,G],encapsulation:2})}return i})();var sn=(i,d)=>d.key,dn=()=>["/maintenance"];function cn(i,d){if(i&1&&(o(0,"option",7),s(1),a()),i&2){let e=d.$implicit,t=c();k("value",e),l(),g("",t.tableLabel(e)," (table-override)")}}function pn(i,d){i&1&&(o(0,"div",15),s(1,"Loading\u2026"),a())}function mn(i,d){if(i&1){let e=T();o(0,"input",25),u("ngModelChange",function(n){m(e);let r=c().$implicit,p=c(2);return _(p.onValueChange(r.key,n))}),a()}if(i&2){let e=c().$implicit;k("ngModel",e.value),M("data-testid","ma-config-value-"+e.key)}}function _n(i,d){if(i&1){let e=T();o(0,"input",26),u("ngModelChange",function(n){m(e);let r=c().$implicit,p=c(2);return _(p.onValueChange(r.key,n))}),a()}if(i&2){let e=c().$implicit;k("ngModel",e.value),M("data-testid","ma-config-value-"+e.key)}}function un(i,d){if(i&1){let e=T();o(0,"div",17)(1,"div",19),s(2),a(),o(3,"div",20),C(4,mn,1,2,"input",21)(5,_n,1,2,"input",22),a(),o(6,"span",23),s(7),a(),o(8,"button",24),u("click",function(){let n=m(e).$implicit,r=c(2);return _(r.saveRow(n))}),s(9,"Save"),a()()}if(i&2){let e=d.$implicit,t=c(2);M("data-testid","ma-config-row-"+e.key),l(2),I(e.key),l(2),x(t.isBoolean(e.value)?4:5),l(2),N("bg-neutral-700",e.resolvedFrom==="builtin"||e.resolvedFrom==="global")("bg-blue-800",e.resolvedFrom==="table")("bg-purple-800",e.resolvedFrom==="scope"),M("data-testid","ma-config-source-"+e.key),l(),g(" ",t.sourceLabel(e.resolvedFrom)," "),l(),M("data-testid","ma-config-save-"+e.key)}}function gn(i,d){i&1&&(o(0,"div",18),s(1,"Nincs config-kulcs (a szerver nem el\xE9rhet\u0151?)."),a())}function fn(i,d){if(i&1&&(o(0,"div",16),E(1,un,10,12,"div",17,sn,!1,gn,2,0,"div",18),a()),i&2){let e=c();l(),$(e.rows_$())}}var je=(()=>{class i{api=F(A);notify=F(J);mainTables=te;tableScope="";rows_$=y([]);loading_$=y(!0);ngOnInit(){return b(this,null,function*(){yield this.load()})}load(){return b(this,null,function*(){this.loading_$.set(!0);let e=yield this.api.getConfig(this.tableScope||void 0);if(e.error){this.notify.newErrorMessage(`${e.error.errorCode}: ${e.error.message}`),this.loading_$.set(!1);return}let t=e.data?.effective??{},n=Object.keys(t).sort().map(r=>({key:r,value:t[r].value,resolvedFrom:t[r].resolvedFrom}));this.rows_$.set(n),this.loading_$.set(!1)})}tableLabel(e){return U[e]}sourceLabel(e){switch(e){case"builtin":return"builtin default";case"global":return"\xF6r\xF6kl\xF6tt global default";case"table":return"table-override";case"scope":return"scope-override";default:return e}}isBoolean(e){return typeof e=="boolean"}onValueChange(e,t){let n=this.rows_$().map(r=>r.key===e?Q(R({},r),{value:t}):r);this.rows_$.set(n)}saveRow(e){return b(this,null,function*(){let t=yield this.api.setConfig({key:e.key,value:e.value,table:this.tableScope||void 0});if(t.error){this.notify.newErrorMessage(`${t.error.errorCode}: ${t.error.message}`);return}this.notify.newSuccessMessage(`${e.key} mentve.`),yield this.load()})}applyOpenAiPreset(){return b(this,null,function*(){yield this.applyPreset("openai")})}applyLmStudioPreset(){return b(this,null,function*(){yield this.applyPreset("lmstudio")})}applyPreset(e){return b(this,null,function*(){let t=yield this.api.invokeCapability("apply_preset",{preset:e,table:this.tableScope||void 0});if(t.error){this.notify.newErrorMessage(`${t.error.errorCode}: ${t.error.message}`);return}this.notify.newSuccessMessage(`${e} preset alkalmazva.`),yield this.load()})}testMongo(){this.runTest("test_mongodb_connection","MongoDB")}testEmbedding(){this.runTest("test_embedding_provider","Embedding-provider")}testVectorSearch(){this.runTest("test_vector_search","Vector search")}runTest(e,t){return b(this,null,function*(){let n=yield this.api.invokeCapability(e);if(n.error){this.notify.newErrorMessage(`${t} teszt: ${n.error.errorCode} \u2014 ${n.error.message}`);return}let r=n.data??{};r.ok===!1?this.notify.newErrorMessage(`${t} teszt sikertelen: ${r.message??"ismeretlen ok"}`):this.notify.newSuccessMessage(`${t} teszt OK${r.message?" \u2014 "+r.message:""}.`)})}static \u0275fac=function(t){return new(t||i)};static \u0275cmp=D({type:i,selectors:[["ma-settings"]],standalone:!0,features:[B],decls:28,vars:4,consts:[["data-testid","ma-settings",1,"mx-auto","max-w-4xl","p-6"],[1,"mb-4","block"],[1,"mb-4","flex","items-center","justify-between"],[1,"text-sm","opacity-60","hover:underline",3,"routerLink"],[1,"text-2xl","font-semibold"],["data-testid","ma-settings-scope",1,"rounded","border","border-neutral-700","bg-neutral-900","px-2","py-1","text-sm",3,"ngModelChange","ngModel"],["value",""],[3,"value"],["data-testid","ma-settings-actions",1,"mb-4","flex","flex-wrap","gap-2","text-sm"],["data-testid","ma-preset-openai",1,"rounded","border","border-neutral-700","px-3","py-1","hover:bg-neutral-800",3,"click"],["data-testid","ma-preset-lmstudio",1,"rounded","border","border-neutral-700","px-3","py-1","hover:bg-neutral-800",3,"click"],[1,"mx-1","opacity-30"],["data-testid","ma-test-mongo",1,"rounded","border","border-neutral-700","px-3","py-1","hover:bg-neutral-800",3,"click"],["data-testid","ma-test-embedding",1,"rounded","border","border-neutral-700","px-3","py-1","hover:bg-neutral-800",3,"click"],["data-testid","ma-test-vector",1,"rounded","border","border-neutral-700","px-3","py-1","hover:bg-neutral-800",3,"click"],["data-testid","ma-settings-loading",1,"py-10","text-center","opacity-60"],["data-testid","ma-settings-rows",1,"flex","flex-col","gap-2"],[1,"flex","flex-wrap","items-center","gap-3","rounded","border","border-neutral-800","bg-neutral-900","p-2","text-sm"],[1,"py-6","text-center","opacity-50"],[1,"w-56","font-mono","text-xs"],[1,"flex-1"],["type","checkbox",3,"ngModel"],[1,"w-full","rounded","border","border-neutral-700","bg-neutral-950","px-2","py-1",3,"ngModel"],[1,"rounded","px-2","py-0.5","text-xs"],[1,"rounded","bg-emerald-700","px-3","py-1","text-xs","hover:bg-emerald-600",3,"click"],["type","checkbox",3,"ngModelChange","ngModel"],[1,"w-full","rounded","border","border-neutral-700","bg-neutral-950","px-2","py-1",3,"ngModelChange","ngModel"]],template:function(t,n){t&1&&(o(0,"div",0),W(1,"ma-banner-host",1),o(2,"div",2)(3,"div")(4,"a",3),s(5,"\u2190 Maintenance"),a(),o(6,"h1",4),s(7,"Settings"),a()(),o(8,"select",5),S("ngModelChange",function(p){return w(n.tableScope,p)||(n.tableScope=p),p}),u("ngModelChange",function(){return n.load()}),o(9,"option",6),s(10,"global"),a(),E(11,cn,2,2,"option",7,Y),a()(),o(13,"div",8)(14,"button",9),u("click",function(){return n.applyOpenAiPreset()}),s(15,"Apply OpenAI preset"),a(),o(16,"button",10),u("click",function(){return n.applyLmStudioPreset()}),s(17,"Apply LM Studio preset"),a(),o(18,"span",11),s(19,"|"),a(),o(20,"button",12),u("click",function(){return n.testMongo()}),s(21,"Test MongoDB"),a(),o(22,"button",13),u("click",function(){return n.testEmbedding()}),s(23,"Test embedding"),a(),o(24,"button",14),u("click",function(){return n.testVectorSearch()}),s(25,"Test vector search"),a()(),C(26,pn,2,0,"div",15)(27,fn,4,1,"div",16),a()),t&2&&(l(4),k("routerLink",V(3,dn)),l(4),v("ngModel",n.tableScope),l(3),$(n.mainTables),l(15),x(n.loading_$()?26:27))},dependencies:[L,X,Se,Me,Z,ve,we,K,H,P,q,G],encapsulation:2})}return i})();var ce=function(i){return i.create="create",i.update="update",i.delete="delete",i.scanFile="scan-file",i.scanFolder="scan-folder",i.scanProject="scan-project",i.reEmbed="re-embed",i.import="import",i}(ce||{});function xn(i,d){if(i&1&&(o(0,"div",7),s(1),o(2,"span",8),s(3),j(4,"number"),a()()),i&2){let e=c(),t=e.$implicit,n=e.$index;M("data-testid","ma-scope-preview-"+n),l(),g(" \u2192 ",t.resolvedPreview.canonicalName," "),l(2),g("(konfidencia: ",O(4,3,t.resolvedPreview.confidence,"1.2-2"),")")}}function bn(i,d){if(i&1){let e=T();o(0,"div",2)(1,"input",4),u("ngModelChange",function(n){let r=m(e).$index,p=c();return _(p.onLayerChange(r,n))}),a(),o(2,"input",5),u("ngModelChange",function(n){let r=m(e).$index,p=c();return _(p.onRawNameChange(r,n))}),a(),o(3,"button",6),u("click",function(){let n=m(e).$index,r=c();return _(r.removeLayer(n))}),s(4," remove "),a(),C(5,xn,5,6,"div",7),a()}if(i&2){let e=d.$implicit,t=d.$index;l(),k("ngModel",e.layer),M("data-testid","ma-scope-layer-"+t),l(),k("ngModel",e.rawName),M("data-testid","ma-scope-rawname-"+t),l(),M("data-testid","ma-scope-remove-"+t),l(2),x(e.resolvedPreview?5:-1)}}var Oe=(()=>{class i{api=F(A);value=[];valueChange=new Ee;rows_$=y([]);ngOnInit(){let e=(this.value??[]).map(t=>({layer:t.layer,rawName:t.rawName,resolvedPreview:void 0}));this.rows_$.set(e.length?e:[{layer:"project",rawName:"",resolvedPreview:void 0}])}addLayer(){this.rows_$.set([...this.rows_$(),{layer:"",rawName:"",resolvedPreview:void 0}])}removeLayer(e){this.rows_$.set(this.rows_$().filter((t,n)=>n!==e)),this.emit()}onLayerChange(e,t){let n=[...this.rows_$()];n[e]=Q(R({},n[e]),{layer:t}),this.rows_$.set(n),this.emit()}onRawNameChange(e,t){let n=[...this.rows_$()];n[e]=Q(R({},n[e]),{rawName:t}),this.rows_$.set(n),this.emit(),this.loadPreview(e)}loadPreview(e){return b(this,null,function*(){let t=this.rows_$()[e];if(!t?.rawName)return;let n=yield this.api.invokeCapability("trace_reference_expansion",{layer:t.layer,rawName:t.rawName});if(n.error)return;let r=n.data??{};if(r.canonicalName){let p=[...this.rows_$()];p[e]=Q(R({},p[e]),{resolvedPreview:{canonicalName:r.canonicalName,confidence:r.confidence??0}}),this.rows_$.set(p)}})}emit(){let e=this.rows_$().filter(t=>t.layer&&t.rawName).map(t=>({layer:t.layer,rawName:t.rawName}));this.value=e,this.valueChange.emit(e)}static \u0275fac=function(t){return new(t||i)};static \u0275cmp=D({type:i,selectors:[["ma-scope-picker"]],inputs:{value:"value"},outputs:{valueChange:"valueChange"},standalone:!0,features:[B],decls:7,vars:0,consts:[["data-testid","ma-scope-picker",1,"flex","flex-col","gap-2"],[1,"text-xs","uppercase","tracking-wide","opacity-60"],[1,"flex","flex-wrap","items-center","gap-2"],["type","button","data-testid","ma-scope-add-layer",1,"self-start","rounded","border","border-neutral-700","px-3","py-1","text-sm","hover:bg-neutral-800",3,"click"],["type","text","placeholder","layer (pl. project)",1,"w-40","rounded","border","border-neutral-700","bg-neutral-900","px-2","py-1","text-sm",3,"ngModelChange","ngModel"],["type","text","placeholder","n\xE9v (pl. Adventor)",1,"flex-1","rounded","border","border-neutral-700","bg-neutral-900","px-2","py-1","text-sm",3,"ngModelChange","ngModel"],["type","button",1,"rounded","px-2","py-1","text-sm","text-red-400","hover:bg-neutral-800",3,"click"],[1,"basis-full","pl-2","text-xs","text-emerald-400"],[1,"opacity-70"]],template:function(t,n){t&1&&(o(0,"div",0)(1,"div",1),s(2,"Scope (root \u2192 leaf, k\xF6telez\u0151)"),a(),E(3,bn,6,6,"div",2,xe),o(5,"button",3),u("click",function(){return n.addLayer()}),s(6," + add layer "),a()()),t&2&&(l(3),$(n.rows_$()))},dependencies:[L,Ce,X,Z,K,H],encapsulation:2})}return i})();var qe=(i,d)=>d._id,hn=(i,d)=>d.runId,Cn=(i,d)=>d.scopeId,yn=()=>["/maintenance"],Ke=i=>({$implicit:i});function vn(i,d){if(i&1&&(o(0,"div",11)(1,"div")(2,"span",25),s(3,"count:"),a(),s(4),a(),o(5,"div")(6,"span",25),s(7,"pending:"),a(),s(8),a(),o(9,"div")(10,"span",25),s(11,"completed:"),a(),s(12),a(),o(13,"div")(14,"span",25),s(15,"error:"),a(),s(16),a()()),i&2){let e,t,n,r=d;l(4),g(" ",r.count,""),l(4),g(" ",(e=r.embeddingStatus==null?null:r.embeddingStatus.pending)!==null&&e!==void 0?e:0,""),l(4),g(" ",(t=r.embeddingStatus==null?null:r.embeddingStatus.completed)!==null&&t!==void 0?t:0,""),l(4),g(" ",(n=r.embeddingStatus==null?null:r.embeddingStatus.error)!==null&&n!==void 0?n:0,"")}}function wn(i,d){if(i&1){let e=T();o(0,"textarea",35),S("ngModelChange",function(n){m(e);let r=c(2);return w(r.addCode,n)||(r.addCode=n),_(n)}),a()}if(i&2){let e=c(2);v("ngModel",e.addCode)}}function Sn(i,d){if(i&1&&(o(0,"div",32),s(1),a()),i&2){let e=c(2);l(),g("aj\xE1nlott tag-ek: ",e.recommendedTags.join(", "),"")}}function Mn(i,d){if(i&1){let e=T();o(0,"div",12)(1,"h3",26),s(2,"Manual add"),a(),o(3,"textarea",27),S("ngModelChange",function(n){m(e);let r=c();return w(r.addContent,n)||(r.addContent=n),_(n)}),a(),C(4,wn,1,1,"textarea",28),o(5,"div",29)(6,"input",30),S("ngModelChange",function(n){m(e);let r=c();return w(r.addKind,n)||(r.addKind=n),_(n)}),a(),o(7,"input",31),S("ngModelChange",function(n){m(e);let r=c();return w(r.addTags,n)||(r.addTags=n),_(n)}),a()(),C(8,Sn,2,1,"div",32),o(9,"ma-scope-picker",33),S("valueChange",function(n){m(e);let r=c();return w(r.addScope,n)||(r.addScope=n),_(n)}),a(),o(10,"button",34),u("click",function(){m(e);let n=c();return _(n.submitAdd())}),s(11,"Create"),a()()}if(i&2){let e=c();l(3),v("ngModel",e.addContent),l(),x(e.isCodingPatterns?4:-1),l(2),v("ngModel",e.addKind),l(),v("ngModel",e.addTags),l(),x(e.recommendedTags.length?8:-1),l(),v("value",e.addScope)}}function kn(i,d){if(i&1){let e=T();o(0,"div",13)(1,"h3",26),s(2,"Bulk paste (\xFCres sor v\xE1lasztja el a blokkokat)"),a(),o(3,"textarea",36),S("ngModelChange",function(n){m(e);let r=c();return w(r.bulkText,n)||(r.bulkText=n),_(n)}),a(),o(4,"div",29)(5,"input",37),S("ngModelChange",function(n){m(e);let r=c();return w(r.bulkKind,n)||(r.bulkKind=n),_(n)}),a(),o(6,"input",38),S("ngModelChange",function(n){m(e);let r=c();return w(r.bulkTags,n)||(r.bulkTags=n),_(n)}),a()(),o(7,"ma-scope-picker",33),S("valueChange",function(n){m(e);let r=c();return w(r.bulkScope,n)||(r.bulkScope=n),_(n)}),a(),o(8,"button",39),u("click",function(){m(e);let n=c();return _(n.submitBulk())}),s(9,"Import all"),a()()}if(i&2){let e=c();l(3),v("ngModel",e.bulkText),l(2),v("ngModel",e.bulkKind),l(),v("ngModel",e.bulkTags),l(),v("value",e.bulkScope)}}function Tn(i,d){if(i&1){let e=T();o(0,"div",14)(1,"h3",26),s(2,"Run scan / system-sync"),a(),o(3,"input",40),S("ngModelChange",function(n){m(e);let r=c();return w(r.scanPath,n)||(r.scanPath=n),_(n)}),a(),o(4,"div",29)(5,"input",41),S("ngModelChange",function(n){m(e);let r=c();return w(r.scanInclude,n)||(r.scanInclude=n),_(n)}),a(),o(6,"input",42),S("ngModelChange",function(n){m(e);let r=c();return w(r.scanExclude,n)||(r.scanExclude=n),_(n)}),a()(),o(7,"label",43)(8,"input",44),S("ngModelChange",function(n){m(e);let r=c();return w(r.scanDryRun,n)||(r.scanDryRun=n),_(n)}),a(),s(9," dry-run (csak felder\xEDt\xE9s) "),a(),o(10,"ma-scope-picker",33),S("valueChange",function(n){m(e);let r=c();return w(r.scanScope,n)||(r.scanScope=n),_(n)}),a(),o(11,"button",45),u("click",function(){m(e);let n=c();return _(n.submitScan())}),s(12,"Run"),a()()}if(i&2){let e=c();l(3),v("ngModel",e.scanPath),l(2),v("ngModel",e.scanInclude),l(),v("ngModel",e.scanExclude),l(2),v("ngModel",e.scanDryRun),l(2),v("value",e.scanScope)}}function En(i,d){i&1&&(o(0,"div",23),s(1,"Loading\u2026"),a())}function $n(i,d){if(i&1&&oe(0,52),i&2){let e=d.$implicit;c(3);let t=re(34);k("ngTemplateOutlet",t)("ngTemplateOutletContext",ae(2,Ke,e))}}function Fn(i,d){i&1&&(o(0,"div",53),s(1,"Nincs bejegyz\xE9s."),a())}function In(i,d){if(i&1&&(o(0,"div",46),E(1,$n,1,4,"ng-container",52,qe,!1,Fn,2,0,"div",53),a()),i&2){let e=c(2);l(),$(e.items_$())}}function Vn(i,d){if(i&1&&oe(0,52),i&2){let e=d.$implicit;c(4);let t=re(34);k("ngTemplateOutlet",t)("ngTemplateOutletContext",ae(2,Ke,e))}}function Ln(i,d){if(i&1){let e=T();o(0,"div",54)(1,"div",55)(2,"span",56),s(3),a(),o(4,"button",57),u("click",function(){let n=m(e).$implicit,r=c(3);return _(r.deleteRunGroup(n.runId))}),s(5,"Delete run"),a()(),o(6,"div",58),E(7,Vn,1,4,"ng-container",52,qe),a()()}if(i&2){let e=d.$implicit;l(3),z("run: ",e.runId," (",e.items.length," chunk)"),l(4),$(e.items)}}function Pn(i,d){if(i&1&&(o(0,"div",47),E(1,Ln,9,2,"div",54,hn),a()),i&2){let e=c(2);l(),$(e.groupedByRun())}}function Dn(i,d){if(i&1){let e=T();C(0,In,4,1,"div",46)(1,Pn,3,0,"div",47),o(2,"div",24)(3,"span",48),s(4),a(),o(5,"div",49)(6,"button",50),u("click",function(){m(e);let n=c();return _(n.prevPage())}),s(7,"Prev"),a(),o(8,"button",51),u("click",function(){m(e);let n=c();return _(n.nextPage())}),s(9,"Next"),a()()()}if(i&2){let e=c();x(e.groupByRun?1:0),l(4),ee("\xF6sszesen: ",e.total_$()," \xB7 oldal ",e.page_$()," \xB7 oldalm\xE9ret ",e.pageSize_$(),"")}}function Bn(i,d){if(i&1&&(o(0,"span",64),s(1),a()),i&2){let e=c().$implicit;l(),I(e.kind)}}function An(i,d){if(i&1&&(o(0,"span",65),s(1),a()),i&2){let e=d.$implicit;l(),I(e)}}function Rn(i,d){if(i&1){let e=T();o(0,"button",68),u("click",function(){let n=m(e).$implicit,r=c(2);return _(r.openScope(n.scopeId))}),s(1),a()}if(i&2){let e=d.$implicit;l(),z("",e.layer,":",e.canonicalName,"")}}function Nn(i,d){if(i&1&&s(0),i&2){let e=c().$implicit;ee(" \xB7 ",e.sourceFilePath," (",e.chunkIndex,"/",e.chunkTotal,") ")}}function Wn(i,d){if(i&1){let e=T();o(0,"div",59)(1,"div",60)(2,"div",61)(3,"div",62),s(4),a(),o(5,"div",63),C(6,Bn,2,1,"span",64),E(7,An,2,1,"span",65,Y),E(9,Rn,2,2,"button",66,Cn),a(),o(11,"div",67),s(12),j(13,"date"),C(14,Nn,1,3),a()(),o(15,"button",57),u("click",function(){let n=m(e).$implicit,r=c();return _(r.deleteEntry(n))}),s(16,"Delete"),a()()()}if(i&2){let e,t=d.$implicit;M("data-testid","ma-entry-"+t._id),l(4),I(t.content),l(2),x(t.kind?6:-1),l(),$(t.tags),l(2),$(t.scopePath),l(3),ee(" weight ",(e=t.weight)!==null&&e!==void 0?e:1," \xB7 ",(e=t.addedBy)!==null&&e!==void 0?e:"\u2014"," \xB7 ",t.__lastModified?O(13,8,t.__lastModified,"short"):"\u2014"," "),l(2),x(t.sourceFilePath?14:-1),l(),M("data-testid","ma-entry-delete-"+t._id)}}var zn=50,jn=500,He=(()=>{class i{api=F(A);route=F(ye);router=F(se);notify=F(J);popup=F(de);table_$=y(h.rules);items_$=y([]);total_$=y(0);page_$=y(1);pageSize_$=y(zn);loading_$=y(!1);tagFilter="";kindFilter="";textFilter="";ingestRunFilter="";groupByRun=!1;stats_$=y(null);addContent="";addCode="";addKind="";addTags="";addScope=[];addFormOpen_$=y(!1);bulkText="";bulkKind="";bulkTags="";bulkScope=[];bulkOpen_$=y(!1);scanPath="";scanInclude="";scanExclude="";scanDryRun=!0;scanScope=[];scanOpen_$=y(!1);get isCodingPatterns(){return this.table_$()===h.codingPatterns}get tableLabel(){return U[this.table_$()]}get recommendedTags(){return Pe[this.table_$()]??[]}ngOnInit(){this.route.paramMap.subscribe(e=>{let t=e.get("table"),n=Object.values(h).find(r=>r===t);if(!n||n===h.reference){this.router.navigate(["/maintenance"]);return}this.table_$.set(n),this.page_$.set(1),this.reload()})}reload(){return b(this,null,function*(){this.loading_$.set(!0);let e=yield this.api.getItems(this.table_$(),{page:this.page_$(),pageSize:this.pageSize_$(),tag:this.tagFilter||void 0,kind:this.kindFilter||void 0,ingestRunId:this.ingestRunFilter||void 0});if(e.error){this.notify.newErrorMessage(`${e.error.errorCode}: ${e.error.message}`),this.loading_$.set(!1);return}let t=e.data?.items??[];if(this.textFilter){let r=this.textFilter.toLowerCase();t=t.filter(p=>(p.content??"").toLowerCase().includes(r))}this.items_$.set(t),this.total_$.set(e.data?.total??t.length);let n=yield this.api.getTableStats(this.table_$());n.data&&this.stats_$.set(n.data),this.loading_$.set(!1)})}applyFilters(){this.page_$.set(1),this.reload()}nextPage(){this.page_$()*this.pageSize_$()<this.total_$()&&(this.page_$.set(this.page_$()+1),this.reload())}prevPage(){this.page_$()>1&&(this.page_$.set(this.page_$()-1),this.reload())}setPageSize(e){this.pageSize_$.set(Math.min(Math.max(e,1),jn)),this.page_$.set(1),this.reload()}submitAdd(){return b(this,null,function*(){if(!this.addContent.trim()){this.notify.newErrorMessage("A content k\xF6telez\u0151.");return}if(!this.addScope.length){this.notify.newErrorMessage("A scope k\xF6telez\u0151 (legal\xE1bb egy layer).");return}let e=this.parseCsv(this.addTags),t={};this.isCodingPatterns&&this.addCode&&(t.code=this.addCode);let n=yield this.api.write({table:this.table_$(),operation:ce.create,scopePath:this.addScope,content:this.addContent,tags:e,kind:this.addKind||void 0,fields:Object.keys(t).length?t:void 0});if(n.error){this.notify.newErrorMessage(`${n.error.errorCode}: ${n.error.message}`);return}this.notify.newSuccessMessage("Bejegyz\xE9s l\xE9trehozva."),this.resetAddForm(),this.addFormOpen_$.set(!1),yield this.reload()})}resetAddForm(){this.addContent="",this.addCode="",this.addKind="",this.addTags="",this.addScope=[]}submitBulk(){return b(this,null,function*(){if(!this.bulkScope.length){this.notify.newErrorMessage("A bulk-paste-hez scope k\xF6telez\u0151.");return}let e=this.bulkText.split(/\n\s*\n/).map(p=>p.trim()).filter(p=>p.length);if(!e.length){this.notify.newErrorMessage("Nincs feldolgozhat\xF3 blokk (\xFCres sor v\xE1lasztja el).");return}let t=this.parseCsv(this.bulkTags),n=0,r=[];for(let p of e){let f=yield this.api.write({table:this.table_$(),operation:ce.create,scopePath:this.bulkScope,content:p,tags:t,kind:this.bulkKind||void 0});f.error?r.push(`${f.error.errorCode}: ${p.slice(0,40)}\u2026`):n++}r.length?this.notify.newErrorMessage(`${n} l\xE9trehozva, ${r.length} hiba: ${r[0]}`):(this.notify.newSuccessMessage(`${n} bejegyz\xE9s l\xE9trehozva.`),this.bulkText="",this.bulkOpen_$.set(!1)),yield this.reload()})}deleteEntry(e){return b(this,null,function*(){if(!(yield this.popup.newConfirm({title:"Soft-delete",message:"Biztosan t\xF6rl\xF6d ezt a bejegyz\xE9st? (soft-delete, vissza\xE1ll\xEDthat\xF3)",confirmBtn:"Delete"})))return;let n=yield this.api.write({table:this.table_$(),operation:ce.delete,target:{by:"id",value:e._id??""}});if(n.error){this.notify.newErrorMessage(`${n.error.errorCode}: ${n.error.message}`);return}this.notify.newSuccessMessage("T\xF6r\xF6lve (soft-delete)."),yield this.reload()})}deleteRunGroup(e){return b(this,null,function*(){if(!(yield this.popup.newConfirm({title:"Csoportos soft-delete",message:`A(z) ${e} ingest-run minden chunkja t\xF6rl\xE9sre ker\xFCl (soft-delete). Folytatod?`,confirmBtn:"Delete run"})))return;let n=yield this.api.invokeCapability("delete_ingest_run",{ingestRunId:e});if(n.error){this.notify.newErrorMessage(`${n.error.errorCode}: ${n.error.message}`);return}this.notify.newSuccessMessage("Run t\xF6r\xF6lve (soft-delete)."),yield this.reload()})}reembedTable(){return b(this,null,function*(){let t=this.stats_$()?.count??0;if(!(yield this.popup.newConfirm({title:"Re-embed t\xE1r",message:`${t} elem \xFAjra-embeddel\xE9se \u2014 ez embedding-k\xF6lts\xE9get okozhat. Folytatod?`,confirmBtn:"Re-embed"})))return;let r=yield this.api.invokeCapability("reembed_table",{table:this.table_$()});if(r.error){this.notify.newErrorMessage(`${r.error.errorCode}: ${r.error.message}`);return}this.notify.newSuccessMessage("Re-embed elind\xEDtva."),yield this.reload()})}submitScan(){return b(this,null,function*(){if(!this.scanPath.trim()){this.notify.newErrorMessage("A scan path k\xF6telez\u0151.");return}if(!this.scanScope.length){this.notify.newErrorMessage("A scan-hez scope k\xF6telez\u0151.");return}let e=yield this.api.write({table:this.table_$(),operation:ce.scanFolder,scopePath:this.scanScope,scan:{path:this.scanPath,include:this.parseCsv(this.scanInclude),exclude:this.parseCsv(this.scanExclude),dryRun:this.scanDryRun}});if(e.error){this.notify.newErrorMessage(`${e.error.errorCode}: ${e.error.message}`);return}this.notify.newSuccessMessage(this.scanDryRun?"Dry-run scan k\xE9sz (l\xE1sd ingest id\u0151vonal).":"Scan k\xE9sz."),this.scanOpen_$.set(!1),yield this.reload()})}openScope(e){this.router.navigate(["/maintenance/scopes"],{queryParams:{focus:e}})}groupedByRun(){let e={};for(let t of this.items_$()){let n=t.ingestRunId??"(manual / no run)";(e[n]??=[]).push(t)}return Object.keys(e).map(t=>({runId:t,items:e[t]}))}parseCsv(e){return(e??"").split(",").map(t=>t.trim()).filter(t=>t.length)}static \u0275fac=function(t){return new(t||i)};static \u0275cmp=D({type:i,selectors:[["ma-table-detail"]],standalone:!0,features:[B],decls:35,vars:13,consts:[["entryRow",""],["data-testid","ma-table-detail",1,"mx-auto","max-w-6xl","p-6"],[1,"mb-4","block"],[1,"mb-4","flex","items-center","justify-between"],[1,"text-sm","opacity-60","hover:underline",3,"routerLink"],[1,"text-2xl","font-semibold"],[1,"flex","gap-2","text-sm"],["data-testid","ma-detail-add-toggle",1,"rounded","border","border-neutral-700","px-3","py-1","hover:bg-neutral-800",3,"click"],["data-testid","ma-detail-bulk-toggle",1,"rounded","border","border-neutral-700","px-3","py-1","hover:bg-neutral-800",3,"click"],["data-testid","ma-detail-scan-toggle",1,"rounded","border","border-neutral-700","px-3","py-1","hover:bg-neutral-800",3,"click"],["data-testid","ma-detail-reembed",1,"rounded","border","border-amber-700","px-3","py-1","text-amber-300","hover:bg-neutral-800",3,"click"],["data-testid","ma-detail-stats",1,"mb-4","grid","grid-cols-2","gap-2","rounded","border","border-neutral-800","bg-neutral-900","p-3","text-sm","sm:grid-cols-4"],["data-testid","ma-entry-add-form",1,"mb-4","rounded","border","border-neutral-800","bg-neutral-900","p-4"],["data-testid","ma-bulk-paste",1,"mb-4","rounded","border","border-neutral-800","bg-neutral-900","p-4"],["data-testid","ma-scan-dialog",1,"mb-4","rounded","border","border-neutral-800","bg-neutral-900","p-4"],["data-testid","ma-detail-filters",1,"mb-3","flex","flex-wrap","items-center","gap-2","text-sm"],["placeholder","tag",1,"w-32","rounded","border","border-neutral-700","bg-neutral-900","px-2","py-1",3,"ngModelChange","ngModel"],["placeholder","kind",1,"w-32","rounded","border","border-neutral-700","bg-neutral-900","px-2","py-1",3,"ngModelChange","ngModel"],["placeholder","text (substring)",1,"w-40","rounded","border","border-neutral-700","bg-neutral-900","px-2","py-1",3,"ngModelChange","ngModel"],["placeholder","ingestRunId",1,"w-40","rounded","border","border-neutral-700","bg-neutral-900","px-2","py-1",3,"ngModelChange","ngModel"],[1,"flex","items-center","gap-1"],["type","checkbox","data-testid","ma-detail-groupby",3,"ngModelChange","ngModel"],["data-testid","ma-detail-apply-filters",1,"rounded","border","border-neutral-700","px-3","py-1","hover:bg-neutral-800",3,"click"],["data-testid","ma-detail-loading",1,"py-10","text-center","opacity-60"],["data-testid","ma-detail-pagination",1,"mt-4","flex","items-center","justify-between","text-sm"],[1,"opacity-50"],[1,"mb-3","font-medium"],["rows","4","placeholder","content","data-testid","ma-add-content",1,"mb-2","w-full","rounded","border","border-neutral-700","bg-neutral-950","p-2","text-sm",3,"ngModelChange","ngModel"],["rows","3","placeholder","code (NEM ker\xFCl a vektorba)","data-testid","ma-add-code",1,"mb-2","w-full","rounded","border","border-neutral-700","bg-neutral-950","p-2","text-sm",3,"ngModel"],[1,"mb-2","flex","gap-2"],["placeholder","kind","data-testid","ma-add-kind",1,"w-40","rounded","border","border-neutral-700","bg-neutral-950","p-2","text-sm",3,"ngModelChange","ngModel"],["placeholder","tags (vessz\u0151vel)","data-testid","ma-add-tags",1,"flex-1","rounded","border","border-neutral-700","bg-neutral-950","p-2","text-sm",3,"ngModelChange","ngModel"],[1,"mb-2","text-xs","opacity-50"],[1,"mb-3","block",3,"valueChange","value"],["data-testid","ma-add-submit",1,"rounded","bg-emerald-700","px-4","py-1","text-sm","hover:bg-emerald-600",3,"click"],["rows","3","placeholder","code (NEM ker\xFCl a vektorba)","data-testid","ma-add-code",1,"mb-2","w-full","rounded","border","border-neutral-700","bg-neutral-950","p-2","text-sm",3,"ngModelChange","ngModel"],["rows","6","placeholder","t\xF6bb blokk\u2026","data-testid","ma-bulk-text",1,"mb-2","w-full","rounded","border","border-neutral-700","bg-neutral-950","p-2","text-sm",3,"ngModelChange","ngModel"],["placeholder","k\xF6z\xF6s kind",1,"w-40","rounded","border","border-neutral-700","bg-neutral-950","p-2","text-sm",3,"ngModelChange","ngModel"],["placeholder","k\xF6z\xF6s tags (vessz\u0151vel)",1,"flex-1","rounded","border","border-neutral-700","bg-neutral-950","p-2","text-sm",3,"ngModelChange","ngModel"],["data-testid","ma-bulk-submit",1,"rounded","bg-emerald-700","px-4","py-1","text-sm","hover:bg-emerald-600",3,"click"],["placeholder","path (folder / project)","data-testid","ma-scan-path",1,"mb-2","w-full","rounded","border","border-neutral-700","bg-neutral-950","p-2","text-sm",3,"ngModelChange","ngModel"],["placeholder","include (glob, vessz\u0151vel)",1,"flex-1","rounded","border","border-neutral-700","bg-neutral-950","p-2","text-sm",3,"ngModelChange","ngModel"],["placeholder","exclude (glob, vessz\u0151vel)",1,"flex-1","rounded","border","border-neutral-700","bg-neutral-950","p-2","text-sm",3,"ngModelChange","ngModel"],[1,"mb-2","flex","items-center","gap-2","text-sm"],["type","checkbox","data-testid","ma-scan-dryrun",3,"ngModelChange","ngModel"],["data-testid","ma-scan-submit",1,"rounded","bg-emerald-700","px-4","py-1","text-sm","hover:bg-emerald-600",3,"click"],["data-testid","ma-detail-list",1,"flex","flex-col","gap-2"],["data-testid","ma-detail-grouped",1,"flex","flex-col","gap-4"],[1,"opacity-60"],[1,"flex","gap-2"],["data-testid","ma-detail-prev",1,"rounded","border","border-neutral-700","px-3","py-1","hover:bg-neutral-800",3,"click"],["data-testid","ma-detail-next",1,"rounded","border","border-neutral-700","px-3","py-1","hover:bg-neutral-800",3,"click"],[3,"ngTemplateOutlet","ngTemplateOutletContext"],[1,"py-6","text-center","opacity-50"],[1,"rounded","border","border-neutral-800"],[1,"flex","items-center","justify-between","border-b","border-neutral-800","bg-neutral-900","px-3","py-2","text-sm"],[1,"font-medium"],[1,"rounded","px-2","py-1","text-xs","text-red-400","hover:bg-neutral-800",3,"click"],[1,"flex","flex-col","gap-2","p-2"],[1,"rounded","border","border-neutral-800","bg-neutral-900","p-3","text-sm"],[1,"flex","items-start","justify-between","gap-3"],[1,"flex-1"],[1,"line-clamp-2","opacity-90"],[1,"mt-1","flex","flex-wrap","items-center","gap-1","text-xs","opacity-60"],[1,"rounded","bg-neutral-800","px-1.5","py-0.5"],[1,"rounded","bg-blue-900","px-1.5","py-0.5"],[1,"rounded","bg-purple-900","px-1.5","py-0.5","hover:bg-purple-800"],[1,"mt-1","text-xs","opacity-40"],[1,"rounded","bg-purple-900","px-1.5","py-0.5","hover:bg-purple-800",3,"click"]],template:function(t,n){if(t&1){let r=T();o(0,"div",1),W(1,"ma-banner-host",2),o(2,"div",3)(3,"div")(4,"a",4),s(5,"\u2190 Maintenance"),a(),o(6,"h1",5),s(7),a()(),o(8,"div",6)(9,"button",7),u("click",function(){return m(r),_(n.addFormOpen_$.set(!n.addFormOpen_$()))}),s(10,"Add entry"),a(),o(11,"button",8),u("click",function(){return m(r),_(n.bulkOpen_$.set(!n.bulkOpen_$()))}),s(12,"Bulk paste"),a(),o(13,"button",9),u("click",function(){return m(r),_(n.scanOpen_$.set(!n.scanOpen_$()))}),s(14,"Run scan"),a(),o(15,"button",10),u("click",function(){return m(r),_(n.reembedTable())}),s(16,"Re-embed"),a()()(),C(17,vn,17,4,"div",11)(18,Mn,12,6,"div",12)(19,kn,10,4,"div",13)(20,Tn,13,5,"div",14),o(21,"div",15)(22,"input",16),S("ngModelChange",function(f){return m(r),w(n.tagFilter,f)||(n.tagFilter=f),_(f)}),a(),o(23,"input",17),S("ngModelChange",function(f){return m(r),w(n.kindFilter,f)||(n.kindFilter=f),_(f)}),a(),o(24,"input",18),S("ngModelChange",function(f){return m(r),w(n.textFilter,f)||(n.textFilter=f),_(f)}),a(),o(25,"input",19),S("ngModelChange",function(f){return m(r),w(n.ingestRunFilter,f)||(n.ingestRunFilter=f),_(f)}),a(),o(26,"label",20)(27,"input",21),S("ngModelChange",function(f){return m(r),w(n.groupByRun,f)||(n.groupByRun=f),_(f)}),a(),s(28," group by run"),a(),o(29,"button",22),u("click",function(){return m(r),_(n.applyFilters())}),s(30,"Apply"),a()(),C(31,En,2,0,"div",23)(32,Dn,10,4,"div",24),a(),C(33,Wn,17,11,"ng-template",null,0,be)}if(t&2){let r;l(4),k("routerLink",V(12,yn)),l(3),I(n.tableLabel),l(10),x((r=n.stats_$())?17:-1,r),l(),x(n.addFormOpen_$()?18:-1),l(),x(n.bulkOpen_$()?19:-1),l(),x(n.scanOpen_$()?20:-1),l(2),v("ngModel",n.tagFilter),l(),v("ngModel",n.kindFilter),l(),v("ngModel",n.textFilter),l(),v("ngModel",n.ingestRunFilter),l(2),v("ngModel",n.groupByRun),l(4),x(n.loading_$()?31:32)}},dependencies:[L,he,le,X,Z,ve,K,H,P,q,G,Oe],encapsulation:2})}return i})();var pe=function(i){return i.maintenance="maintenance",i.search="search",i.scopes="scopes",i.ingest="ingest",i.settings="settings",i.errors="errors",i}(pe||{});var On=[{path:"",component:Re},{path:pe.search,component:ze},{path:pe.scopes,component:We},{path:pe.ingest,component:Be},{path:pe.settings,component:je},{path:":table",component:He}];var Xe=(()=>{class i{static \u0275fac=function(t){return new(t||i)};static \u0275mod=fe({type:i});static \u0275inj=ge({imports:[P.forChild(On),P]})}return i})();var Va=(()=>{class i{static \u0275fac=function(t){return new(t||i)};static \u0275mod=fe({type:i});static \u0275inj=ge({imports:[L,Xe]})}return i})();export{Va as Maintenance_Module};
@@ -8,10 +8,10 @@
8
8
  <link rel="icon" type="image/x-icon" href="favicon.ico">
9
9
  <style>@font-face{font-family:'Roboto';font-style:normal;font-weight:300;font-stretch:100%;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v51/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3GUBGEe.woff2) format('woff2');unicode-range:U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;}@font-face{font-family:'Roboto';font-style:normal;font-weight:300;font-stretch:100%;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v51/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3iUBGEe.woff2) format('woff2');unicode-range:U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;}@font-face{font-family:'Roboto';font-style:normal;font-weight:300;font-stretch:100%;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v51/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3CUBGEe.woff2) format('woff2');unicode-range:U+1F00-1FFF;}@font-face{font-family:'Roboto';font-style:normal;font-weight:300;font-stretch:100%;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v51/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3-UBGEe.woff2) format('woff2');unicode-range:U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF;}@font-face{font-family:'Roboto';font-style:normal;font-weight:300;font-stretch:100%;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v51/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMawCUBGEe.woff2) format('woff2');unicode-range:U+0302-0303, U+0305, U+0307-0308, U+0310, U+0312, U+0315, U+031A, U+0326-0327, U+032C, U+032F-0330, U+0332-0333, U+0338, U+033A, U+0346, U+034D, U+0391-03A1, U+03A3-03A9, U+03B1-03C9, U+03D1, U+03D5-03D6, U+03F0-03F1, U+03F4-03F5, U+2016-2017, U+2034-2038, U+203C, U+2040, U+2043, U+2047, U+2050, U+2057, U+205F, U+2070-2071, U+2074-208E, U+2090-209C, U+20D0-20DC, U+20E1, U+20E5-20EF, U+2100-2112, U+2114-2115, U+2117-2121, U+2123-214F, U+2190, U+2192, U+2194-21AE, U+21B0-21E5, U+21F1-21F2, U+21F4-2211, U+2213-2214, U+2216-22FF, U+2308-230B, U+2310, U+2319, U+231C-2321, U+2336-237A, U+237C, U+2395, U+239B-23B7, U+23D0, U+23DC-23E1, U+2474-2475, U+25AF, U+25B3, U+25B7, U+25BD, U+25C1, U+25CA, U+25CC, U+25FB, U+266D-266F, U+27C0-27FF, U+2900-2AFF, U+2B0E-2B11, U+2B30-2B4C, U+2BFE, U+3030, U+FF5B, U+FF5D, U+1D400-1D7FF, U+1EE00-1EEFF;}@font-face{font-family:'Roboto';font-style:normal;font-weight:300;font-stretch:100%;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v51/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMaxKUBGEe.woff2) format('woff2');unicode-range:U+0001-000C, U+000E-001F, U+007F-009F, U+20DD-20E0, U+20E2-20E4, U+2150-218F, U+2190, U+2192, U+2194-2199, U+21AF, U+21E6-21F0, U+21F3, U+2218-2219, U+2299, U+22C4-22C6, U+2300-243F, U+2440-244A, U+2460-24FF, U+25A0-27BF, U+2800-28FF, U+2921-2922, U+2981, U+29BF, U+29EB, U+2B00-2BFF, U+4DC0-4DFF, U+FFF9-FFFB, U+10140-1018E, U+10190-1019C, U+101A0, U+101D0-101FD, U+102E0-102FB, U+10E60-10E7E, U+1D2C0-1D2D3, U+1D2E0-1D37F, U+1F000-1F0FF, U+1F100-1F1AD, U+1F1E6-1F1FF, U+1F30D-1F30F, U+1F315, U+1F31C, U+1F31E, U+1F320-1F32C, U+1F336, U+1F378, U+1F37D, U+1F382, U+1F393-1F39F, U+1F3A7-1F3A8, U+1F3AC-1F3AF, U+1F3C2, U+1F3C4-1F3C6, U+1F3CA-1F3CE, U+1F3D4-1F3E0, U+1F3ED, U+1F3F1-1F3F3, U+1F3F5-1F3F7, U+1F408, U+1F415, U+1F41F, U+1F426, U+1F43F, U+1F441-1F442, U+1F444, U+1F446-1F449, U+1F44C-1F44E, U+1F453, U+1F46A, U+1F47D, U+1F4A3, U+1F4B0, U+1F4B3, U+1F4B9, U+1F4BB, U+1F4BF, U+1F4C8-1F4CB, U+1F4D6, U+1F4DA, U+1F4DF, U+1F4E3-1F4E6, U+1F4EA-1F4ED, U+1F4F7, U+1F4F9-1F4FB, U+1F4FD-1F4FE, U+1F503, U+1F507-1F50B, U+1F50D, U+1F512-1F513, U+1F53E-1F54A, U+1F54F-1F5FA, U+1F610, U+1F650-1F67F, U+1F687, U+1F68D, U+1F691, U+1F694, U+1F698, U+1F6AD, U+1F6B2, U+1F6B9-1F6BA, U+1F6BC, U+1F6C6-1F6CF, U+1F6D3-1F6D7, U+1F6E0-1F6EA, U+1F6F0-1F6F3, U+1F6F7-1F6FC, U+1F700-1F7FF, U+1F800-1F80B, U+1F810-1F847, U+1F850-1F859, U+1F860-1F887, U+1F890-1F8AD, U+1F8B0-1F8BB, U+1F8C0-1F8C1, U+1F900-1F90B, U+1F93B, U+1F946, U+1F984, U+1F996, U+1F9E9, U+1FA00-1FA6F, U+1FA70-1FA7C, U+1FA80-1FA89, U+1FA8F-1FAC6, U+1FACE-1FADC, U+1FADF-1FAE9, U+1FAF0-1FAF8, U+1FB00-1FBFF;}@font-face{font-family:'Roboto';font-style:normal;font-weight:300;font-stretch:100%;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v51/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3OUBGEe.woff2) format('woff2');unicode-range:U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;}@font-face{font-family:'Roboto';font-style:normal;font-weight:300;font-stretch:100%;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v51/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3KUBGEe.woff2) format('woff2');unicode-range:U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;}@font-face{font-family:'Roboto';font-style:normal;font-weight:300;font-stretch:100%;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v51/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3yUBA.woff2) format('woff2');unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;}@font-face{font-family:'Roboto';font-style:normal;font-weight:400;font-stretch:100%;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v51/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3GUBGEe.woff2) format('woff2');unicode-range:U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;}@font-face{font-family:'Roboto';font-style:normal;font-weight:400;font-stretch:100%;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v51/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3iUBGEe.woff2) format('woff2');unicode-range:U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;}@font-face{font-family:'Roboto';font-style:normal;font-weight:400;font-stretch:100%;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v51/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3CUBGEe.woff2) format('woff2');unicode-range:U+1F00-1FFF;}@font-face{font-family:'Roboto';font-style:normal;font-weight:400;font-stretch:100%;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v51/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3-UBGEe.woff2) format('woff2');unicode-range:U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF;}@font-face{font-family:'Roboto';font-style:normal;font-weight:400;font-stretch:100%;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v51/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMawCUBGEe.woff2) format('woff2');unicode-range:U+0302-0303, U+0305, U+0307-0308, U+0310, U+0312, U+0315, U+031A, U+0326-0327, U+032C, U+032F-0330, U+0332-0333, U+0338, U+033A, U+0346, U+034D, U+0391-03A1, U+03A3-03A9, U+03B1-03C9, U+03D1, U+03D5-03D6, U+03F0-03F1, U+03F4-03F5, U+2016-2017, U+2034-2038, U+203C, U+2040, U+2043, U+2047, U+2050, U+2057, U+205F, U+2070-2071, U+2074-208E, U+2090-209C, U+20D0-20DC, U+20E1, U+20E5-20EF, U+2100-2112, U+2114-2115, U+2117-2121, U+2123-214F, U+2190, U+2192, U+2194-21AE, U+21B0-21E5, U+21F1-21F2, U+21F4-2211, U+2213-2214, U+2216-22FF, U+2308-230B, U+2310, U+2319, U+231C-2321, U+2336-237A, U+237C, U+2395, U+239B-23B7, U+23D0, U+23DC-23E1, U+2474-2475, U+25AF, U+25B3, U+25B7, U+25BD, U+25C1, U+25CA, U+25CC, U+25FB, U+266D-266F, U+27C0-27FF, U+2900-2AFF, U+2B0E-2B11, U+2B30-2B4C, U+2BFE, U+3030, U+FF5B, U+FF5D, U+1D400-1D7FF, U+1EE00-1EEFF;}@font-face{font-family:'Roboto';font-style:normal;font-weight:400;font-stretch:100%;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v51/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMaxKUBGEe.woff2) format('woff2');unicode-range:U+0001-000C, U+000E-001F, U+007F-009F, U+20DD-20E0, U+20E2-20E4, U+2150-218F, U+2190, U+2192, U+2194-2199, U+21AF, U+21E6-21F0, U+21F3, U+2218-2219, U+2299, U+22C4-22C6, U+2300-243F, U+2440-244A, U+2460-24FF, U+25A0-27BF, U+2800-28FF, U+2921-2922, U+2981, U+29BF, U+29EB, U+2B00-2BFF, U+4DC0-4DFF, U+FFF9-FFFB, U+10140-1018E, U+10190-1019C, U+101A0, U+101D0-101FD, U+102E0-102FB, U+10E60-10E7E, U+1D2C0-1D2D3, U+1D2E0-1D37F, U+1F000-1F0FF, U+1F100-1F1AD, U+1F1E6-1F1FF, U+1F30D-1F30F, U+1F315, U+1F31C, U+1F31E, U+1F320-1F32C, U+1F336, U+1F378, U+1F37D, U+1F382, U+1F393-1F39F, U+1F3A7-1F3A8, U+1F3AC-1F3AF, U+1F3C2, U+1F3C4-1F3C6, U+1F3CA-1F3CE, U+1F3D4-1F3E0, U+1F3ED, U+1F3F1-1F3F3, U+1F3F5-1F3F7, U+1F408, U+1F415, U+1F41F, U+1F426, U+1F43F, U+1F441-1F442, U+1F444, U+1F446-1F449, U+1F44C-1F44E, U+1F453, U+1F46A, U+1F47D, U+1F4A3, U+1F4B0, U+1F4B3, U+1F4B9, U+1F4BB, U+1F4BF, U+1F4C8-1F4CB, U+1F4D6, U+1F4DA, U+1F4DF, U+1F4E3-1F4E6, U+1F4EA-1F4ED, U+1F4F7, U+1F4F9-1F4FB, U+1F4FD-1F4FE, U+1F503, U+1F507-1F50B, U+1F50D, U+1F512-1F513, U+1F53E-1F54A, U+1F54F-1F5FA, U+1F610, U+1F650-1F67F, U+1F687, U+1F68D, U+1F691, U+1F694, U+1F698, U+1F6AD, U+1F6B2, U+1F6B9-1F6BA, U+1F6BC, U+1F6C6-1F6CF, U+1F6D3-1F6D7, U+1F6E0-1F6EA, U+1F6F0-1F6F3, U+1F6F7-1F6FC, U+1F700-1F7FF, U+1F800-1F80B, U+1F810-1F847, U+1F850-1F859, U+1F860-1F887, U+1F890-1F8AD, U+1F8B0-1F8BB, U+1F8C0-1F8C1, U+1F900-1F90B, U+1F93B, U+1F946, U+1F984, U+1F996, U+1F9E9, U+1FA00-1FA6F, U+1FA70-1FA7C, U+1FA80-1FA89, U+1FA8F-1FAC6, U+1FACE-1FADC, U+1FADF-1FAE9, U+1FAF0-1FAF8, U+1FB00-1FBFF;}@font-face{font-family:'Roboto';font-style:normal;font-weight:400;font-stretch:100%;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v51/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3OUBGEe.woff2) format('woff2');unicode-range:U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;}@font-face{font-family:'Roboto';font-style:normal;font-weight:400;font-stretch:100%;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v51/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3KUBGEe.woff2) format('woff2');unicode-range:U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;}@font-face{font-family:'Roboto';font-style:normal;font-weight:400;font-stretch:100%;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v51/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3yUBA.woff2) format('woff2');unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;}@font-face{font-family:'Roboto';font-style:normal;font-weight:500;font-stretch:100%;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v51/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3GUBGEe.woff2) format('woff2');unicode-range:U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;}@font-face{font-family:'Roboto';font-style:normal;font-weight:500;font-stretch:100%;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v51/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3iUBGEe.woff2) format('woff2');unicode-range:U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;}@font-face{font-family:'Roboto';font-style:normal;font-weight:500;font-stretch:100%;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v51/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3CUBGEe.woff2) format('woff2');unicode-range:U+1F00-1FFF;}@font-face{font-family:'Roboto';font-style:normal;font-weight:500;font-stretch:100%;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v51/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3-UBGEe.woff2) format('woff2');unicode-range:U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF;}@font-face{font-family:'Roboto';font-style:normal;font-weight:500;font-stretch:100%;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v51/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMawCUBGEe.woff2) format('woff2');unicode-range:U+0302-0303, U+0305, U+0307-0308, U+0310, U+0312, U+0315, U+031A, U+0326-0327, U+032C, U+032F-0330, U+0332-0333, U+0338, U+033A, U+0346, U+034D, U+0391-03A1, U+03A3-03A9, U+03B1-03C9, U+03D1, U+03D5-03D6, U+03F0-03F1, U+03F4-03F5, U+2016-2017, U+2034-2038, U+203C, U+2040, U+2043, U+2047, U+2050, U+2057, U+205F, U+2070-2071, U+2074-208E, U+2090-209C, U+20D0-20DC, U+20E1, U+20E5-20EF, U+2100-2112, U+2114-2115, U+2117-2121, U+2123-214F, U+2190, U+2192, U+2194-21AE, U+21B0-21E5, U+21F1-21F2, U+21F4-2211, U+2213-2214, U+2216-22FF, U+2308-230B, U+2310, U+2319, U+231C-2321, U+2336-237A, U+237C, U+2395, U+239B-23B7, U+23D0, U+23DC-23E1, U+2474-2475, U+25AF, U+25B3, U+25B7, U+25BD, U+25C1, U+25CA, U+25CC, U+25FB, U+266D-266F, U+27C0-27FF, U+2900-2AFF, U+2B0E-2B11, U+2B30-2B4C, U+2BFE, U+3030, U+FF5B, U+FF5D, U+1D400-1D7FF, U+1EE00-1EEFF;}@font-face{font-family:'Roboto';font-style:normal;font-weight:500;font-stretch:100%;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v51/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMaxKUBGEe.woff2) format('woff2');unicode-range:U+0001-000C, U+000E-001F, U+007F-009F, U+20DD-20E0, U+20E2-20E4, U+2150-218F, U+2190, U+2192, U+2194-2199, U+21AF, U+21E6-21F0, U+21F3, U+2218-2219, U+2299, U+22C4-22C6, U+2300-243F, U+2440-244A, U+2460-24FF, U+25A0-27BF, U+2800-28FF, U+2921-2922, U+2981, U+29BF, U+29EB, U+2B00-2BFF, U+4DC0-4DFF, U+FFF9-FFFB, U+10140-1018E, U+10190-1019C, U+101A0, U+101D0-101FD, U+102E0-102FB, U+10E60-10E7E, U+1D2C0-1D2D3, U+1D2E0-1D37F, U+1F000-1F0FF, U+1F100-1F1AD, U+1F1E6-1F1FF, U+1F30D-1F30F, U+1F315, U+1F31C, U+1F31E, U+1F320-1F32C, U+1F336, U+1F378, U+1F37D, U+1F382, U+1F393-1F39F, U+1F3A7-1F3A8, U+1F3AC-1F3AF, U+1F3C2, U+1F3C4-1F3C6, U+1F3CA-1F3CE, U+1F3D4-1F3E0, U+1F3ED, U+1F3F1-1F3F3, U+1F3F5-1F3F7, U+1F408, U+1F415, U+1F41F, U+1F426, U+1F43F, U+1F441-1F442, U+1F444, U+1F446-1F449, U+1F44C-1F44E, U+1F453, U+1F46A, U+1F47D, U+1F4A3, U+1F4B0, U+1F4B3, U+1F4B9, U+1F4BB, U+1F4BF, U+1F4C8-1F4CB, U+1F4D6, U+1F4DA, U+1F4DF, U+1F4E3-1F4E6, U+1F4EA-1F4ED, U+1F4F7, U+1F4F9-1F4FB, U+1F4FD-1F4FE, U+1F503, U+1F507-1F50B, U+1F50D, U+1F512-1F513, U+1F53E-1F54A, U+1F54F-1F5FA, U+1F610, U+1F650-1F67F, U+1F687, U+1F68D, U+1F691, U+1F694, U+1F698, U+1F6AD, U+1F6B2, U+1F6B9-1F6BA, U+1F6BC, U+1F6C6-1F6CF, U+1F6D3-1F6D7, U+1F6E0-1F6EA, U+1F6F0-1F6F3, U+1F6F7-1F6FC, U+1F700-1F7FF, U+1F800-1F80B, U+1F810-1F847, U+1F850-1F859, U+1F860-1F887, U+1F890-1F8AD, U+1F8B0-1F8BB, U+1F8C0-1F8C1, U+1F900-1F90B, U+1F93B, U+1F946, U+1F984, U+1F996, U+1F9E9, U+1FA00-1FA6F, U+1FA70-1FA7C, U+1FA80-1FA89, U+1FA8F-1FAC6, U+1FACE-1FADC, U+1FADF-1FAE9, U+1FAF0-1FAF8, U+1FB00-1FBFF;}@font-face{font-family:'Roboto';font-style:normal;font-weight:500;font-stretch:100%;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v51/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3OUBGEe.woff2) format('woff2');unicode-range:U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;}@font-face{font-family:'Roboto';font-style:normal;font-weight:500;font-stretch:100%;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v51/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3KUBGEe.woff2) format('woff2');unicode-range:U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;}@font-face{font-family:'Roboto';font-style:normal;font-weight:500;font-stretch:100%;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v51/KFO7CnqEu92Fr1ME7kSn66aGLdTylUAMa3yUBA.woff2) format('woff2');unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;}</style>
10
10
  <style>@font-face{font-family:'Material Icons';font-style:normal;font-weight:400;src:url(https://fonts.gstatic.com/s/materialicons/v145/flUhRq6tzZclQEJ-Vdg-IuiaDsNc.woff2) format('woff2');}.material-icons{font-family:'Material Icons';font-weight:normal;font-style:normal;font-size:24px;line-height:1;letter-spacing:normal;text-transform:none;display:inline-block;white-space:nowrap;word-wrap:normal;direction:ltr;-webkit-font-feature-settings:'liga';-webkit-font-smoothing:antialiased;}</style>
11
- <style>@font-face{font-family:'Material Symbols Outlined';font-style:normal;font-weight:700;src:url(https://fonts.gstatic.com/s/materialsymbolsoutlined/v362/kJF4BvYX7BgnkSrUwT8OhrdQw4oELdPIeeII9v6oDMzBwG-RpA6RzaxHMPdY40KH8nGzv3fzfVJU22ZZLsYEpzC_1hCs5Y0.woff2) format('woff2');}.material-symbols-outlined{font-family:'Material Symbols Outlined';font-weight:normal;font-style:normal;font-size:24px;line-height:1;letter-spacing:normal;text-transform:none;display:inline-block;white-space:nowrap;word-wrap:normal;direction:ltr;-webkit-font-feature-settings:'liga';-webkit-font-smoothing:antialiased;}</style>
12
- <style>@font-face{font-family:'Material Symbols Rounded';font-style:normal;font-weight:400;src:url(https://fonts.gstatic.com/s/materialsymbolsrounded/v363/syl7-zNym6YjUruM-QrEh7-nyTnjDwKNJ_190FjpZIvLgyidOK7BDB_Qb9vUdV6_gjDK-P3JuF_Zs-obHph2-jOcZTKPqw.woff2) format('woff2');}.material-symbols-rounded{font-family:'Material Symbols Rounded';font-weight:normal;font-style:normal;font-size:24px;line-height:1;letter-spacing:normal;text-transform:none;display:inline-block;white-space:nowrap;word-wrap:normal;direction:ltr;-webkit-font-feature-settings:'liga';-webkit-font-smoothing:antialiased;}</style>
11
+ <style>@font-face{font-family:'Material Symbols Outlined';font-style:normal;font-weight:700;src:url(https://fonts.gstatic.com/s/materialsymbolsoutlined/v364/kJF4BvYX7BgnkSrUwT8OhrdQw4oELdPIeeII9v6oDMzBwG-RpA6RzaxHMPdY40KH8nGzv3fzfVJU22ZZLsYEpzC_1hCs5Y0.woff2) format('woff2');}.material-symbols-outlined{font-family:'Material Symbols Outlined';font-weight:normal;font-style:normal;font-size:24px;line-height:1;letter-spacing:normal;text-transform:none;display:inline-block;white-space:nowrap;word-wrap:normal;direction:ltr;-webkit-font-feature-settings:'liga';-webkit-font-smoothing:antialiased;}</style>
12
+ <style>@font-face{font-family:'Material Symbols Rounded';font-style:normal;font-weight:400;src:url(https://fonts.gstatic.com/s/materialsymbolsrounded/v365/syl7-zNym6YjUruM-QrEh7-nyTnjDwKNJ_190FjpZIvLgyidOK7BDB_Qb9vUdV6_gjDK-P3JuF_Zs-obHph2-jOcZTKPqw.woff2) format('woff2');}.material-symbols-rounded{font-family:'Material Symbols Rounded';font-weight:normal;font-style:normal;font-size:24px;line-height:1;letter-spacing:normal;text-transform:none;display:inline-block;white-space:nowrap;word-wrap:normal;direction:ltr;-webkit-font-feature-settings:'liga';-webkit-font-smoothing:antialiased;}</style>
13
13
  <style>*,:before,:after{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgb(59 130 246 / .5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content:""}html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}html,body{height:100%;background-color:#0f0f0f}body{margin:0;font-family:Roboto,Helvetica Neue,sans-serif;color:#c8c8c8}</style><link rel="stylesheet" href="styles-3J7JD5YE.css" media="print" onload="this.media='all'"><noscript><link rel="stylesheet" href="styles-3J7JD5YE.css"></noscript></head>
14
14
  <body class="mat-typography">
15
15
  <a-root-root></a-root-root>
16
- <link rel="modulepreload" href="chunk-GF3FJP7E.js"><script src="polyfills-HGDOEU5L.js" type="module"></script><script src="main-YK4YIVAQ.js" type="module"></script></body>
16
+ <link rel="modulepreload" href="chunk-GF3FJP7E.js"><script src="polyfills-HGDOEU5L.js" type="module"></script><script src="main-5TKTMY4X.js" type="module"></script></body>
17
17
  </html>
@@ -1,2 +1,2 @@
1
- import{Ba as fe,Ca as q,Da as J,E as l,Ea as Q,F as d,Fa as E,G as M,Ga as c,Ha as A,Ja as s,K as X,M as f,Na as W,V as D,c as v,d as N,e as j,f as P,fa as U,g as L,ga as $,h as i,ha as Z,i as y,ia as G,j as w,ja as x,k as r,ka as K,l as p,la as z,m as h,ma as V,oa as Y,pa as u,q as S,r as B,ra as T,s as H,t as m,u as F,w as k,z as O}from"./chunk-GF3FJP7E.js";var de=v(x());var ee=(()=>{class e{static \u0275fac=function(o){return new(o||e)};static \u0275cmp=p({type:e,selectors:[["a-error"]],standalone:!0,features:[D],decls:5,vars:0,consts:[[1,"p-6"],[1,"text-xl"],[1,"mt-2"]],template:function(o,n){o&1&&(l(0,"section",0)(1,"h2",1),f(2,"Error"),d(),l(3,"p",2),f(4,"TODO: Error page"),d()())},styles:["[_nghost-%COMP%]{display:block}"]})}return e})();var te=(()=>{class e{static \u0275fac=function(o){return new(o||e)};static \u0275cmp=p({type:e,selectors:[["a-page-not-found"]],standalone:!0,features:[D],decls:5,vars:0,consts:[[1,"p-6"],[1,"text-xl"],[1,"mt-2"]],template:function(o,n){o&1&&(l(0,"section",0)(1,"h2",1),f(2,"PageNotFound"),d(),l(3,"p",2),f(4,"TODO: PageNotFound page"),d()())},styles:["[_nghost-%COMP%]{display:block}"]})}return e})();var oe=v(x());var R=v(x());var _=(()=>{class e extends q{router=r(u);loading_$=m(!0);currentRoute;isDarkModeOn_$=m(!0);get isDarkModeOn(){return this.isDarkModeOn_$()}_noServerConnection_BS=new j(!0);noServerConnection$=this._noServerConnection_BS.asObservable();_noServerConnection_$=m(!0);serverConnectionInprogress_$=m(!1);get noServerConnection_$(){return this._noServerConnection_$}constructor(){super(),this.createSubscriptions(),this.initDarkMode()}setNoServerConnection(t){this._noServerConnection_BS.next(t)}waitForServerConnection(){return N(this,null,function*(){this._noServerConnection_$()&&(yield R.DyFM_Async.takeUntil(this.noServerConnection$,t=>!t))})}createSubscriptions(){this.addSubscriptions([this._noServerConnection_BS.subscribe(t=>{this._noServerConnection_$.set(t)}),this.router.events.subscribe(t=>{t instanceof z?this.setLoading(!0):t instanceof V&&(this.setLoading(!1),window.scroll({top:0,behavior:"smooth"}),this.currentRoute=t.url)})])}setLoading(t){return N(this,null,function*(){yield R.DyFM_Async.delay(1),this.loading_$.set(t)})}toggleDarkMode(){this.isDarkModeOn_$.set(!this.isDarkModeOn),this.setDarkMode()}setDarkMode(){let t=document.getElementsByTagName("html")[0];this.isDarkModeOn?t.classList.add("dark"):t.classList.remove("dark")}initDarkMode(){this.isDarkModeOn_$.set(!0),this.setDarkMode()}static \u0275fac=function(o){return new(o||e)};static \u0275prov=i({token:e,factory:e.\u0275fac,providedIn:"root"})}return e})();var ne=(()=>{class e{router=r(u);messageControlService=r(c);render_CS=r(_);intercept(t,o){return o.handle(t).pipe(P(n=>{if(n.status===0&&this.render_CS.setNoServerConnection(!0),n.status===403||n.status===401||n.status===504)throw n;if(n?.error?.flag?.includes(oe.DyFM_errorFlag)){let C=n.error;throw C?.__userMessage?this.messageControlService.newErrorMessage(C.__userMessage):this.messageControlService.newErrorMessage(C._message),C._errorCodes?.includes("FAS-ACS-VRL7")&&this.router.navigate(["/email-verification"]),C.___handled=!0,n}throw this.messageControlService.newErrorMessage(`Unexpected error. (${n?.status}: ${n?.statusText})`),n}))}static \u0275fac=function(o){return new(o||e)};static \u0275prov=i({token:e,factory:e.\u0275fac})}return e})();var re=(()=>{class e{render_CS=r(_);intercept(t,o){return o.handle(t).pipe(L(n=>{n instanceof U&&this.render_CS.setNoServerConnection(!1)}))}static \u0275fac=function(o){return new(o||e)};static \u0275prov=i({token:e,factory:e.\u0275fac})}return e})();var ie=(()=>{class e{notify_CS;ngZone;constructor(t,o){this.notify_CS=t,this.ngZone=o}handleError(t){console.error("[GlobalErrorHandler]",t);let o=t instanceof Error?t.message:String(t);this.ngZone.run(()=>this.notify_CS.newErrorMessage(`V\xE1ratlan hiba: ${o}`))}static \u0275fac=function(o){return new(o||e)(w(c),w(S))};static \u0275prov=i({token:e,factory:e.\u0275fac})}return e})();var me=v(x()),b=v(fe());var _e={common:{loading:"Loading...",save:"Save",cancel:"Cancel",confirm:"Confirm",login:"Login",logout:"Logout",error:"Error"}},se={common:{loading:"T\xF6lt\xE9s...",save:"Ment\xE9s",cancel:"M\xE9gse",confirm:"Meger\u0151s\xEDt\xE9s",login:"Bejelentkez\xE9s",logout:"Kijelentkez\xE9s",error:"Hiba"}},ge={en:_e,hu:se},ae=(()=>{class e{activeLanguage_$=m("hu");dict_$=m(se);setLanguage(t){this.activeLanguage_$.set(t),this.dict_$.set(ge[t])}static \u0275fac=function(o){return new(o||e)};static \u0275prov=i({token:e,factory:e.\u0275fac,providedIn:"root"})}return e})();function Ce(e,I){e&1&&M(0,"dynamo-loading-overlay",0),e&2&&k("message","connecting to server...")}function ve(e,I){e&1&&M(0,"dynamo-blocker",1),e&2&&k("message","Server not available!")("messageRotationDegree",-15)}function ye(e,I){if(e&1&&F(0,Ce,1,1,"dynamo-loading-overlay",0)(1,ve,1,2,"dynamo-blocker",1),e&2){let t=X();O(t.serverConnectionInprogress_$()?0:1)}}var ce=(()=>{class e{render_CS=r(_);ls=r(ae);title="fdp-agent-memory";get noServerConnection_$(){return this.render_CS.noServerConnection_$}get serverConnectionInprogress_$(){return this.render_CS.serverConnectionInprogress_$}constructor(){me.DyFM_global_settings.envOverrides={DyNM_STORAGE_ENCRYPTION_KEY:s.storageEncryptionKey},b.DyFM_uiGlobal_settings.fieldAppearance=b.DyFM_FieldAppearance.outline}static \u0275fac=function(o){return new(o||e)};static \u0275cmp=p({type:e,selectors:[["a-root-root"]],decls:2,vars:1,consts:[[3,"message"],[3,"message","messageRotationDegree"]],template:function(o,n){o&1&&(M(0,"router-outlet"),F(1,ye,2,1)),o&2&&(H(),O(n.noServerConnection_$()?1:-1))},dependencies:[Y,E,A],styles:["[_nghost-%COMP%]{display:block;width:100%;height:100%}"]})}return e})();var he=[{path:"",redirectTo:"maintenance",pathMatch:"full"},{path:"maintenance",loadChildren:()=>import("./chunk-NMUCMQY6.js").then(e=>e.Maintenance_Module)},{path:"errors",component:W},{path:"error",component:ee},{path:"not-found",component:te},{path:"**",redirectTo:"not-found"}],pe=(()=>{class e{static \u0275fac=function(o){return new(o||e)};static \u0275mod=h({type:e});static \u0275inj=y({imports:[T.forRoot(he),T]})}return e})();var le=(()=>{class e{static \u0275fac=function(o){return new(o||e)};static \u0275mod=h({type:e,bootstrap:[ce]});static \u0275inj=y({providers:[{provide:$,useClass:re,multi:!0},{provide:$,useClass:ne,multi:!0,deps:[u,c]},{provide:B,useClass:ie,deps:[c,S]}],imports:[G,K,pe,Q,E,A,J]})}return e})();var g=new URL(window.location.href);s.baseUrl=g.origin;s.api.baseUrl=g.origin+"/api";s.socketAddress=`${g.origin.replace("https","wss").replace("http","ws")}/notifications`;g.hostname==="fdp-agent-memory.hu"||g.hostname==="fdp-agent-memory.com"?s.production=!0:g.hostname.includes("localhost")?console.log("environment",{environment:s}):console.log("environment",{environment:s});Z().bootstrapModule(le).catch(e=>{de.DyFM_Log.H_error(`INIT ERROR
1
+ import{Ba as fe,Ca as J,Da as A,E as l,Ea as Q,F as d,Fa as E,G as M,Ga as c,Ha as b,Ja as s,K as U,M as f,Na as W,V as D,c as v,d as w,e as P,f as L,fa as Z,g as B,ga as T,h as i,ha as G,i as y,ia as K,j as F,ja as x,k as r,ka as z,l as p,la as V,m as h,ma as Y,oa as q,pa as u,q as S,r as H,ra as R,s as X,t as m,u as k,w as O,z as $}from"./chunk-GF3FJP7E.js";var de=v(x());var ee=(()=>{class e{static \u0275fac=function(o){return new(o||e)};static \u0275cmp=p({type:e,selectors:[["a-error"]],standalone:!0,features:[D],decls:5,vars:0,consts:[[1,"p-6"],[1,"text-xl"],[1,"mt-2"]],template:function(o,n){o&1&&(l(0,"section",0)(1,"h2",1),f(2,"Error"),d(),l(3,"p",2),f(4,"TODO: Error page"),d()())},styles:["[_nghost-%COMP%]{display:block}"]})}return e})();var te=(()=>{class e{static \u0275fac=function(o){return new(o||e)};static \u0275cmp=p({type:e,selectors:[["a-page-not-found"]],standalone:!0,features:[D],decls:5,vars:0,consts:[[1,"p-6"],[1,"text-xl"],[1,"mt-2"]],template:function(o,n){o&1&&(l(0,"section",0)(1,"h2",1),f(2,"PageNotFound"),d(),l(3,"p",2),f(4,"TODO: PageNotFound page"),d()())},styles:["[_nghost-%COMP%]{display:block}"]})}return e})();var oe=v(x());var I=v(x());var _=(()=>{class e extends J{router=r(u);loading_$=m(!0);currentRoute;isDarkModeOn_$=m(!0);get isDarkModeOn(){return this.isDarkModeOn_$()}_noServerConnection_BS=new P(!0);noServerConnection$=this._noServerConnection_BS.asObservable();_noServerConnection_$=m(!0);serverConnectionInprogress_$=m(!1);get noServerConnection_$(){return this._noServerConnection_$}constructor(){super(),this.createSubscriptions(),this.initDarkMode()}setNoServerConnection(t){this._noServerConnection_BS.next(t)}waitForServerConnection(){return w(this,null,function*(){this._noServerConnection_$()&&(yield I.DyFM_Async.takeUntil(this.noServerConnection$,t=>!t))})}createSubscriptions(){this.addSubscriptions([this._noServerConnection_BS.subscribe(t=>{this._noServerConnection_$.set(t)}),this.router.events.subscribe(t=>{t instanceof V?this.setLoading(!0):t instanceof Y&&(this.setLoading(!1),window.scroll({top:0,behavior:"smooth"}),this.currentRoute=t.url)})])}setLoading(t){return w(this,null,function*(){yield I.DyFM_Async.delay(1),this.loading_$.set(t)})}toggleDarkMode(){this.isDarkModeOn_$.set(!this.isDarkModeOn),this.setDarkMode()}setDarkMode(){let t=document.getElementsByTagName("html")[0];this.isDarkModeOn?t.classList.add("dark"):t.classList.remove("dark")}initDarkMode(){this.isDarkModeOn_$.set(!0),this.setDarkMode()}static \u0275fac=function(o){return new(o||e)};static \u0275prov=i({token:e,factory:e.\u0275fac,providedIn:"root"})}return e})();var ne=(()=>{class e{router=r(u);messageControlService=r(c);render_CS=r(_);intercept(t,o){return o.handle(t).pipe(L(n=>{if(n.status===0&&this.render_CS.setNoServerConnection(!0),n.status===403||n.status===401||n.status===504)throw n;if(n?.error?.flag?.includes(oe.DyFM_errorFlag)){let C=n.error;throw C?.__userMessage?this.messageControlService.newErrorMessage(C.__userMessage):this.messageControlService.newErrorMessage(C._message),C._errorCodes?.includes("FAS-ACS-VRL7")&&this.router.navigate(["/email-verification"]),C.___handled=!0,n}throw this.messageControlService.newErrorMessage(`Unexpected error. (${n?.status}: ${n?.statusText})`),n}))}static \u0275fac=function(o){return new(o||e)};static \u0275prov=i({token:e,factory:e.\u0275fac})}return e})();var re=(()=>{class e{render_CS=r(_);intercept(t,o){return o.handle(t).pipe(B(n=>{n instanceof Z&&this.render_CS.setNoServerConnection(!1)}))}static \u0275fac=function(o){return new(o||e)};static \u0275prov=i({token:e,factory:e.\u0275fac})}return e})();var ie=(()=>{class e{notify_CS;ngZone;constructor(t,o){this.notify_CS=t,this.ngZone=o}handleError(t){console.error("[GlobalErrorHandler]",t);let o=t instanceof Error?t.message:String(t);this.ngZone.run(()=>this.notify_CS.newErrorMessage(`V\xE1ratlan hiba: ${o}`))}static \u0275fac=function(o){return new(o||e)(F(c),F(S))};static \u0275prov=i({token:e,factory:e.\u0275fac})}return e})();var me=v(x()),N=v(fe());var _e={common:{loading:"Loading...",save:"Save",cancel:"Cancel",confirm:"Confirm",login:"Login",logout:"Logout",error:"Error"}},se={common:{loading:"T\xF6lt\xE9s...",save:"Ment\xE9s",cancel:"M\xE9gse",confirm:"Meger\u0151s\xEDt\xE9s",login:"Bejelentkez\xE9s",logout:"Kijelentkez\xE9s",error:"Hiba"}},ge={en:_e,hu:se},ae=(()=>{class e{activeLanguage_$=m("hu");dict_$=m(se);setLanguage(t){this.activeLanguage_$.set(t),this.dict_$.set(ge[t])}static \u0275fac=function(o){return new(o||e)};static \u0275prov=i({token:e,factory:e.\u0275fac,providedIn:"root"})}return e})();function Ce(e,j){e&1&&M(0,"dynamo-loading-overlay",0),e&2&&O("message","connecting to server...")}function ve(e,j){e&1&&M(0,"dynamo-blocker",1),e&2&&O("message","Server not available!")("messageRotationDegree",-15)}function ye(e,j){if(e&1&&k(0,Ce,1,1,"dynamo-loading-overlay",0)(1,ve,1,2,"dynamo-blocker",1),e&2){let t=U();$(t.serverConnectionInprogress_$()?0:1)}}var ce=(()=>{class e{render_CS=r(_);ls=r(ae);title="fdp-agent-memory";get noServerConnection_$(){return this.render_CS.noServerConnection_$}get serverConnectionInprogress_$(){return this.render_CS.serverConnectionInprogress_$}constructor(){me.DyFM_global_settings.envOverrides={DyNM_STORAGE_ENCRYPTION_KEY:s.storageEncryptionKey},N.DyFM_uiGlobal_settings.fieldAppearance=N.DyFM_FieldAppearance.outline}static \u0275fac=function(o){return new(o||e)};static \u0275cmp=p({type:e,selectors:[["a-root-root"]],decls:3,vars:1,consts:[[3,"message"],[3,"message","messageRotationDegree"]],template:function(o,n){o&1&&(M(0,"router-outlet")(1,"dynamo-notifications-area"),k(2,ye,2,1)),o&2&&(X(2),$(n.noServerConnection_$()?2:-1))},dependencies:[q,E,b,A],styles:["[_nghost-%COMP%]{display:block;width:100%;height:100%}"]})}return e})();var he=[{path:"",redirectTo:"maintenance",pathMatch:"full"},{path:"maintenance",loadChildren:()=>import("./chunk-UKUX2JAV.js").then(e=>e.Maintenance_Module)},{path:"errors",component:W},{path:"error",component:ee},{path:"not-found",component:te},{path:"**",redirectTo:"not-found"}],pe=(()=>{class e{static \u0275fac=function(o){return new(o||e)};static \u0275mod=h({type:e});static \u0275inj=y({imports:[R.forRoot(he),R]})}return e})();var le=(()=>{class e{static \u0275fac=function(o){return new(o||e)};static \u0275mod=h({type:e,bootstrap:[ce]});static \u0275inj=y({providers:[{provide:T,useClass:re,multi:!0},{provide:T,useClass:ne,multi:!0,deps:[u,c]},{provide:H,useClass:ie,deps:[c,S]}],imports:[K,z,pe,Q,E,b,A]})}return e})();var g=new URL(window.location.href);s.baseUrl=g.origin;s.api.baseUrl=g.origin+"/api";s.socketAddress=`${g.origin.replace("https","wss").replace("http","ws")}/notifications`;g.hostname==="fdp-agent-memory.hu"||g.hostname==="fdp-agent-memory.com"?s.production=!0:g.hostname.includes("localhost")?console.log("environment",{environment:s}):console.log("environment",{environment:s});G().bootstrapModule(le).catch(e=>{de.DyFM_Log.H_error(`INIT ERROR
2
2
  `,e)});
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@futdevpro/fdp-agent-memory",
3
- "version": "1.1.122",
3
+ "version": "1.1.130",
4
4
  "description": "Local-first, vector-backed multi-table agent memory exposed as an MCP server (read/write/capabilities). Public, FDP-Templates-free, no auth.",
5
5
  "private": false,
6
6
  "publishConfig": {
@@ -1 +0,0 @@
1
- import{$ as be,A as xe,Aa as X,B as Y,C as E,D as $,E as o,F as a,G as W,Ga as J,H as oe,I as T,Ia as de,J as u,K as c,Ka as A,L as re,La as Le,M as s,Ma as G,N as V,O as f,P as z,Q as ee,R as ke,S as v,T as w,U as S,V as B,W as I,X as ae,Y as Fe,Z as j,_ as O,a as R,aa as Ve,b as Q,ba as he,ca as le,d as b,da as Ce,ea as L,i as ge,k as F,l as D,m as fe,n as m,na as ye,o as _,p as Ee,pa as se,qa as q,ra as P,s as l,sa as ve,t as y,ta as Z,u as C,ua as K,v as M,va as H,w as k,wa as Ie,x as $e,xa as we,y as N,ya as Se,z as x,za as Me}from"./chunk-GF3FJP7E.js";var h=function(i){return i.rules="rules",i.documents="documents",i.codebase="codebase",i.knowledge="knowledge",i.codingPatterns="coding_patterns",i.memory="memory",i.reference="reference",i}(h||{});var U={[h.rules]:"Rules",[h.documents]:"Documents",[h.codebase]:"Codebase",[h.knowledge]:"Knowledge",[h.codingPatterns]:"Coding Patterns",[h.memory]:"Memory",[h.reference]:"Reference"},Te={[h.rules]:"glob\xE1lis / projekt-bound",[h.documents]:"projekt-bound",[h.codebase]:"projekt-bound",[h.knowledge]:"glob\xE1lis / domain",[h.codingPatterns]:"glob\xE1lis",[h.memory]:"session / projekt-bound",[h.reference]:"helper (alias \u2192 canonical)"},te=[h.rules,h.documents,h.codebase,h.knowledge,h.codingPatterns,h.memory],Pe={[h.rules]:["coding","architecture","naming","behavior","security","project"],[h.documents]:["spec","feature_request","bug_report","architecture_doc","dev_note","meeting_note","research_note"],[h.codebase]:["source_file","symbol","function","class","interface","config","dataflow","runflow","module_summary"],[h.knowledge]:["fact","concept","definition","relationship","domain_knowledge","company_knowledge","user_knowledge","decision_rationale"],[h.codingPatterns]:["pattern","anti_pattern","recipe","example","template","migration_pattern","debugging_pattern"],[h.memory]:["session_history","development_history","decision_history","incident","lesson_learned","important_note","user_preference","project_event","temporary_context","resolved_issue"]};var De=(i,d)=>d._id,Ge=()=>["/maintenance"];function Ue(i,d){if(i&1&&(o(0,"option",8),s(1),a()),i&2){let e=d.$implicit,t=c();k("value",e),l(),V(t.tableLabel(e))}}function Qe(i,d){i&1&&(o(0,"div",9),s(1,"Loading\u2026"),a())}function Ze(i,d){if(i&1&&s(0),i&2){let e=c().$implicit;ke(" \xB7 new ",e.verdicts.new," / mod ",e.verdicts.modified," / eq ",e.verdicts.equal," / del ",e.verdicts.deleted," ")}}function Je(i,d){if(i&1){let e=T();o(0,"button",25),u("click",function(){m(e);let n=c().$implicit,r=c(2);return _(r.viewRunErrors(n))}),s(1,"errors"),a()}}function Ye(i,d){if(i&1&&(o(0,"div",26),s(1),a()),i&2){let e,t=d.$implicit;l(),ke(" ",(e=t.sourceFilePath)!==null&&e!==void 0?e:"(no path)"," [",t.chunkIndex,"/",t.chunkTotal,"] \u2014 ",t.content==null?null:t.content.slice(0,80),"\u2026 ")}}function et(i,d){i&1&&(o(0,"div",27),s(1,"Nincs chunk ehhez a run-hoz."),a())}function tt(i,d){if(i&1&&(o(0,"div",24),E(1,Ye,2,4,"div",26,De,!1,et,2,0,"div",27),a()),i&2){let e,t=c().$implicit,n=c(2);M("data-testid","ma-ingest-chunks-"+t._id),l(),$(n.chunksFor((e=t._id)!==null&&e!==void 0?e:""))}}function nt(i,d){if(i&1){let e=T();o(0,"div",13)(1,"div",14)(2,"div",15)(3,"span",16),s(4),a(),o(5,"span",17),s(6),j(7,"date"),a(),o(8,"div",18),s(9),C(10,Ze,1,4),s(11),a()(),o(12,"div",19)(13,"span",20),s(14),a(),C(15,Je,2,0,"button",21),o(16,"button",22),u("click",function(){let n=m(e).$implicit,r=c(2);return _(r.toggleRun(n))}),s(17),a(),o(18,"button",23),u("click",function(){let n=m(e).$implicit,r=c(2);return _(r.deleteRun(n))}),s(19,"delete"),a()()(),C(20,tt,4,2,"div",24),a()}if(i&2){let e,t,n,r,p,g=d.$implicit,ie=c(2);N("border-red-700",ie.isFailed(g))("border-neutral-800",!ie.isFailed(g)),M("data-testid","ma-ingest-run-"+g._id),l(4),V((e=g.trigger)!==null&&e!==void 0?e:"\u2014"),l(2),z(" \xB7 ",ie.tableLabel(g.table)," \xB7 ",g.__created?O(7,23,g.__created,"short"):"\u2014",""),l(3),ee(" files ",(t=g.filesProcessed)!==null&&t!==void 0?t:0," (skip ",(t=g.filesSkipped)!==null&&t!==void 0?t:0,") \xB7 chunks ",(t=g.chunkCount)!==null&&t!==void 0?t:0," "),l(),x(g.verdicts?10:-1),l(),f(" \xB7 cost ",g.embedTokenCost!==void 0?g.embedTokenCost:"n/a"," "),l(2),N("bg-emerald-700",g.status==="ok")("bg-red-700",ie.isFailed(g)),M("data-testid","ma-ingest-status-"+g._id),l(),f(" ",(n=g.status)!==null&&n!==void 0?n:"ok"," "),l(),x(ie.isFailed(g)?15:-1),l(),M("data-testid","ma-ingest-expand-"+g._id),l(),f(" ",ie.isExpanded((r=g._id)!==null&&r!==void 0?r:"")?"collapse":"expand"," "),l(3),x(ie.isExpanded((p=g._id)!==null&&p!==void 0?p:"")?20:-1)}}function it(i,d){i&1&&(o(0,"div",12),s(1,"Nincs ingest-run."),a())}function at(i,d){if(i&1&&(o(0,"div",10),E(1,nt,21,26,"div",11,De,!1,it,2,0,"div",12),a()),i&2){let e=c();l(),$(e.runs_$())}}var Be=(()=>{class i{api=F(A);router=F(se);notify=F(J);popup=F(de);mainTables=te;runs_$=y([]);loading_$=y(!0);tableFilter="";expanded_$=y(new Set);runChunks_$=y({});ngOnInit(){return b(this,null,function*(){yield this.load()})}load(){return b(this,null,function*(){this.loading_$.set(!0);let e=yield this.api.getIngestRuns(this.tableFilter||void 0);if(e.error){this.notify.newErrorMessage(`${e.error.errorCode}: ${e.error.message}`),this.loading_$.set(!1);return}this.runs_$.set(e.data?.runs??[]),this.loading_$.set(!1)})}tableLabel(e){return e?Array.isArray(e)?e.map(t=>U[t]).join(", "):U[e]:"\u2014"}isExpanded(e){return this.expanded_$().has(e)}toggleRun(e){return b(this,null,function*(){let t=e._id??"",n=new Set(this.expanded_$());if(n.has(t)){n.delete(t),this.expanded_$.set(n);return}n.add(t),this.expanded_$.set(n);let r=Array.isArray(e.table)?e.table[0]:e.table;if(!r)return;let p=yield this.api.getItems(r,{ingestRunId:t,pageSize:200});p.data&&this.runChunks_$.set(Q(R({},this.runChunks_$()),{[t]:p.data.items}))})}chunksFor(e){return this.runChunks_$()[e]??[]}isFailed(e){return e.status==="failed"||e.status==="partial-failed"}deleteRun(e){return b(this,null,function*(){if(!(yield this.popup.newConfirm({title:"Run csoportos soft-delete",message:`A(z) ${e._id} run minden chunkja t\xF6rl\xE9sre ker\xFCl (soft-delete). Folytatod?`,confirmBtn:"Delete run"})))return;let n=yield this.api.invokeCapability("delete_ingest_run",{ingestRunId:e._id});if(n.error){this.notify.newErrorMessage(`${n.error.errorCode}: ${n.error.message}`);return}this.notify.newSuccessMessage("Run t\xF6r\xF6lve (soft-delete)."),yield this.load()})}viewRunErrors(e){this.router.navigate(["/errors"],{queryParams:{ingestRunId:e._id}})}static \u0275fac=function(t){return new(t||i)};static \u0275cmp=D({type:i,selectors:[["ma-ingest-timeline"]],standalone:!0,features:[B],decls:16,vars:4,consts:[["data-testid","ma-ingest-timeline",1,"mx-auto","max-w-5xl","p-6"],[1,"mb-4","block"],[1,"mb-4","flex","items-center","justify-between"],[1,"text-sm","opacity-60","hover:underline",3,"routerLink"],[1,"text-2xl","font-semibold"],[1,"flex","items-center","gap-2","text-sm"],["data-testid","ma-ingest-table-filter",1,"rounded","border","border-neutral-700","bg-neutral-900","px-2","py-1",3,"ngModelChange","ngModel"],["value",""],[3,"value"],["data-testid","ma-ingest-loading",1,"py-10","text-center","opacity-60"],["data-testid","ma-ingest-list",1,"flex","flex-col","gap-2"],[1,"rounded","border","bg-neutral-900",3,"border-red-700","border-neutral-800"],[1,"py-6","text-center","opacity-50"],[1,"rounded","border","bg-neutral-900"],[1,"flex","items-center","justify-between","px-3","py-2","text-sm"],[1,"flex-1"],[1,"font-medium"],[1,"opacity-50"],[1,"mt-1","text-xs","opacity-60"],[1,"flex","items-center","gap-2"],[1,"rounded","px-2","py-0.5","text-xs"],[1,"rounded","px-2","py-1","text-xs","text-red-300","hover:bg-neutral-800"],[1,"rounded","px-2","py-1","text-xs","hover:bg-neutral-800",3,"click"],[1,"rounded","px-2","py-1","text-xs","text-red-400","hover:bg-neutral-800",3,"click"],[1,"border-t","border-neutral-800","p-2"],[1,"rounded","px-2","py-1","text-xs","text-red-300","hover:bg-neutral-800",3,"click"],[1,"rounded","px-2","py-1","text-xs","opacity-80"],[1,"py-2","text-center","text-xs","opacity-40"]],template:function(t,n){t&1&&(o(0,"div",0),W(1,"ma-banner-host",1),o(2,"div",2)(3,"div")(4,"a",3),s(5,"\u2190 Maintenance"),a(),o(6,"h1",4),s(7,"Ingest timeline"),a()(),o(8,"div",5)(9,"select",6),S("ngModelChange",function(p){return w(n.tableFilter,p)||(n.tableFilter=p),p}),u("ngModelChange",function(){return n.load()}),o(10,"option",7),s(11,"\xF6sszes t\xE1r"),a(),E(12,Ue,2,2,"option",8,Y),a()()(),C(14,Qe,2,0,"div",9)(15,at,4,1,"div",10),a()),t&2&&(l(4),k("routerLink",I(3,Ge)),l(5),v("ngModel",n.tableFilter),l(3),$(n.mainTables),l(2),x(n.loading_$()?14:15))},dependencies:[L,le,X,Se,Me,we,K,H,P,q,G],encapsulation:2})}return i})();var ot=(i,d)=>d.table,rt=()=>["/maintenance/search"],Ae=()=>["/maintenance/scopes"],lt=()=>["/maintenance/ingest"],st=()=>["/maintenance/settings"],dt=()=>["/errors"],ct=i=>["/maintenance",i];function pt(i,d){i&1&&(o(0,"div",7),s(1," A FAM szerver nem el\xE9rhet\u0151 (port 39185). Ind\xEDtsd el a szervert, majd friss\xEDts. "),a())}function mt(i,d){i&1&&(o(0,"div",8),s(1,"Loading\u2026"),a())}function _t(i,d){i&1&&(o(0,"div",19)(1,"span",21),s(2,"Add first entry"),a(),o(3,"span",21),s(4,"Run scan"),a()())}function ut(i,d){i&1&&(o(0,"div",20),s(1,"Configure embedding \u2192 Settings"),a())}function gt(i,d){if(i&1&&(o(0,"a",10)(1,"div",12)(2,"span",13),s(3),a(),o(4,"span",14),s(5),a()(),o(6,"div",15),s(7),a(),o(8,"div",16),s(9),j(10,"date"),a(),o(11,"div",17),s(12),a(),o(13,"div",18),s(14),a(),C(15,_t,5,0,"div",19)(16,ut,2,0,"div",20),a()),i&2){let e=d.$implicit;k("routerLink",ae(20,ct,e.table)),M("data-testid","ma-table-card-"+e.table),l(3),V(e.label),l(),N("bg-neutral-700",e.status==="empty")("bg-red-700",e.status==="bootstrap-skip"||e.status==="config-error")("bg-emerald-700",e.status==="ok"),M("data-testid","ma-table-status-"+e.table),l(),f(" ",e.status," "),l(2),f("",e.count," bejegyz\xE9s"),l(2),f(" utols\xF3 ingest: ",e.lastIngest?O(10,17,e.lastIngest,"short"):"\u2014"," "),l(3),f("embedding: ",e.embeddingState,""),l(2),f("scope: ",e.scopeHint,""),l(),x(e.status==="empty"?15:-1),l(),x(e.status==="bootstrap-skip"?16:-1)}}function ft(i,d){if(i&1&&(o(0,"div",11)(1,"h2",22),s(2,"Helper (nem kereshet\u0151 t\xE1r)"),a(),o(3,"a",23)(4,"div",12)(5,"span",13),s(6),a(),o(7,"span",24),s(8,"helper"),a()(),o(9,"div",15),s(10),a(),o(11,"div",25),s(12,"alias \u2192 canonical felold\xE1s \xB7 scope-fa kezel\xE9s"),a()()()),i&2){let e=d;l(3),k("routerLink",I(3,Ae)),l(3),V(e.label),l(4),f("",e.count," reference-bejegyz\xE9s")}}function xt(i,d){if(i&1&&(o(0,"div",9),E(1,gt,17,22,"a",10,ot),a(),C(3,ft,13,4,"div",11)),i&2){let e,t=c();l(),$(t.cards_$()),l(2),x((e=t.referenceCard_$())?3:-1,e)}}var Re=(()=>{class i{api=F(A);adminState=F(Le);loading_$=y(!0);cards_$=y([]);referenceCard_$=y(null);get serverUnreachable_$(){return this.adminState.serverUnreachable_$}totalEntries_$=Ve(()=>this.cards_$().reduce((e,t)=>e+t.count,0));ngOnInit(){return b(this,null,function*(){this.adminState.startPolling(),yield this.load()})}load(){return b(this,null,function*(){this.loading_$.set(!0);let e=yield this.api.getStats();if(e.error){this.adminState.pushBanner({key:"landing-stats-error",color:"red",title:"T\xE1r-statisztika nem el\xE9rhet\u0151",message:`${e.error.errorCode}: ${e.error.message}`,errorsLink:!0}),this.loading_$.set(!1);return}let t={};for(let r of e.data?.tables??[])t[r.table]=r;let n=[];for(let r of te)n.push(yield this.buildCard(r,t[r]));this.cards_$.set(n),this.referenceCard_$.set(yield this.buildReferenceCard()),this.loading_$.set(!1)})}buildCard(e,t){return b(this,null,function*(){let n=t?.count??0,r=yield this.resolveEmbeddingState(e),p=this.deriveStatus(n,r);return{table:e,label:U[e],scopeHint:Te[e],count:n,lastIngest:t?.lastModified??null,status:p,embeddingState:r}})}buildReferenceCard(){return b(this,null,function*(){let t=(yield this.api.invokeCapability("get_reference_stats")).data??{},n=t.count??t.total??0;return{table:h.reference,label:U[h.reference],scopeHint:Te[h.reference],count:n,lastIngest:null,status:n?"ok":"empty",embeddingState:"helper (alias-resolve)"}})}resolveEmbeddingState(e){return b(this,null,function*(){let t=yield this.api.getConfig(e);if(t.error||!t.data)return"nincs (config nem el\xE9rhet\u0151)";let n=t.data,r=n.effective["embedding.provider"],p=n.effective["embedding.model"];if(!r||r.value===null||r.value==="")return"nincs konfigur\xE1lva";let g=r.resolvedFrom==="builtin"||r.resolvedFrom==="global"?"global default":r.resolvedFrom;return`${r.value}${p?.value?" / "+p.value:""} (${g})`})}deriveStatus(e,t){return t.startsWith("nincs")?"bootstrap-skip":e?"ok":"empty"}static \u0275fac=function(t){return new(t||i)};static \u0275cmp=D({type:i,selectors:[["ma-landing"]],standalone:!0,features:[B],decls:22,vars:13,consts:[["data-testid","ma-landing",1,"mx-auto","max-w-6xl","p-6"],[1,"mb-4","block"],[1,"mb-6","flex","items-end","justify-between"],[1,"text-2xl","font-semibold"],[1,"text-sm","opacity-60"],[1,"flex","gap-2","text-sm"],[1,"rounded","border","border-neutral-700","px-3","py-1","hover:bg-neutral-800",3,"routerLink"],["data-testid","ma-landing-unreachable",1,"mb-4","rounded","border","border-red-600","bg-red-950","px-4","py-3","text-sm","text-red-200"],["data-testid","ma-landing-loading",1,"py-10","text-center","opacity-60"],["data-testid","ma-landing-cards",1,"grid","grid-cols-1","gap-4","sm:grid-cols-2","lg:grid-cols-3"],[1,"block","rounded-lg","border","border-neutral-800","bg-neutral-900","p-4","transition","hover:border-neutral-600",3,"routerLink"],[1,"mt-8"],[1,"flex","items-center","justify-between"],[1,"text-lg","font-medium"],[1,"rounded-full","px-2","py-0.5","text-xs"],[1,"mt-2","text-sm","opacity-70"],[1,"text-xs","opacity-50"],[1,"mt-2","text-xs","opacity-60"],[1,"text-xs","opacity-40"],[1,"mt-3","flex","gap-2","text-xs"],[1,"mt-3","text-xs","text-red-300"],[1,"rounded","border","border-neutral-700","px-2","py-1"],[1,"mb-2","text-sm","uppercase","tracking-wide","opacity-50"],["data-testid","ma-reference-card",1,"block","max-w-sm","rounded-lg","border","border-dashed","border-amber-700/60","bg-neutral-900","p-4","hover:border-amber-500",3,"routerLink"],[1,"rounded-full","bg-amber-800","px-2","py-0.5","text-xs"],[1,"mt-1","text-xs","opacity-50"]],template:function(t,n){t&1&&(o(0,"div",0),W(1,"ma-banner-host",1),o(2,"div",2)(3,"div")(4,"h1",3),s(5,"FDP Agent Memory \u2014 Maintenance"),a(),o(6,"p",4),s(7),a()(),o(8,"div",5)(9,"a",6),s(10,"Search"),a(),o(11,"a",6),s(12,"Scopes"),a(),o(13,"a",6),s(14,"Ingest"),a(),o(15,"a",6),s(16,"Settings"),a(),o(17,"a",6),s(18,"Errors"),a()()(),C(19,pt,2,0,"div",7)(20,mt,2,0,"div",8)(21,xt,4,1),a()),t&2&&(l(7),f("6 f\u0151 RAG-t\xE1r + reference helper \xB7 ",n.totalEntries_$()," bejegyz\xE9s"),l(2),k("routerLink",I(8,rt)),l(2),k("routerLink",I(9,Ae)),l(2),k("routerLink",I(10,lt)),l(2),k("routerLink",I(11,st)),l(2),k("routerLink",I(12,dt)),l(2),x(n.serverUnreachable_$()?19:-1),l(),x(n.loading_$()?20:21))},dependencies:[L,le,P,q,G],encapsulation:2})}return i})();var Ne=(i,d)=>d.scopeId,bt=(i,d)=>d._id,ht=()=>["/maintenance"],Ct=i=>({$implicit:i,depth:0}),yt=()=>[],vt=(i,d)=>({$implicit:i,depth:d});function wt(i,d){i&1&&(o(0,"div",9),s(1,"Loading\u2026"),a())}function St(i,d){if(i&1&&oe(0,13),i&2){let e=d.$implicit;c(2);let t=re(16);k("ngTemplateOutlet",t)("ngTemplateOutletContext",ae(2,Ct,e))}}function Mt(i,d){i&1&&(o(0,"div",14),s(1,"Nincs scope (a write/scan auto-regisztr\xE1lja)."),a())}function kt(i,d){if(i&1&&(o(0,"div",22),s(1),a()),i&2){let e=c();l(),f("aliases: ",e.aliases==null?null:e.aliases.join(", "),"")}}function Tt(i,d){if(i&1){let e=T();o(0,"div",15)(1,"div",20),s(2),a(),o(3,"div",21),s(4),a(),C(5,kt,2,1,"div",22),o(6,"button",23),u("click",function(){let n=m(e),r=c(2);return _(r.viewEntries(n))}),s(7,"View entries"),a()()}if(i&2){let e,t=d;l(2),V(t.canonicalName),l(2),z("layer: ",t.layer," \xB7 ",(e=t.entryCount)!==null&&e!==void 0?e:0," entry"),l(),x(t.aliases!=null&&t.aliases.length?5:-1)}}function Et(i,d){if(i&1&&s(0),i&2){let e=c().$implicit;f(" category: ",e.category," \xB7 ")}}function $t(i,d){if(i&1&&s(0),i&2){let e=c().$implicit;f(" layer: ",e.scopeLayer," \xB7 ")}}function Ft(i,d){if(i&1&&s(0),i&2){let e=c().$implicit;f(" t\xE1rak: ",e.ragScopes==null?null:e.ragScopes.join(", ")," ")}}function Vt(i,d){if(i&1){let e=T();o(0,"div",17)(1,"div",24)(2,"div",25)(3,"div",20)(4,"span",26),s(5),a(),s(6),a(),o(7,"div",27),C(8,Et,1,1)(9,$t,1,1)(10,Ft,1,1),a()(),o(11,"div",28)(12,"button",29),u("click",function(){let n=m(e).$implicit,r=c(2);return _(r.openEditForm(n))}),s(13,"edit"),a(),o(14,"button",29),u("click",function(){let n=m(e).$implicit,r=c(2);return _(r.toggleActive(n))}),s(15),a()()()()}if(i&2){let e,t=d.$implicit;M("data-testid","ma-reference-"+t._id),l(3),N("opacity-40",!t.isActive),l(2),V(((e=t.aliasTerms)!==null&&e!==void 0?e:I(14,yt)).join(" / ")),l(),f(" \u2192 ",t.canonicalTerm," "),l(2),x(t.category?8:-1),l(),x(t.scopeLayer?9:-1),l(),x(t.ragScopes!=null&&t.ragScopes.length?10:-1),l(4),N("text-emerald-400",!t.isActive)("text-amber-400",t.isActive),M("data-testid","ma-reference-toggle-"+t._id),l(),f(" ",t.isActive?"deactivate":"activate"," ")}}function It(i,d){i&1&&(o(0,"div",18),s(1,"Nincs reference-bejegyz\xE9s."),a())}function Lt(i,d){if(i&1){let e=T();o(0,"div",19)(1,"h3",30),s(2),a(),o(3,"input",31),S("ngModelChange",function(n){m(e);let r=c(2);return w(r.formCanonical,n)||(r.formCanonical=n),_(n)}),a(),o(4,"input",32),S("ngModelChange",function(n){m(e);let r=c(2);return w(r.formAliases,n)||(r.formAliases=n),_(n)}),a(),o(5,"textarea",33),S("ngModelChange",function(n){m(e);let r=c(2);return w(r.formDescription,n)||(r.formDescription=n),_(n)}),a(),o(6,"div",34)(7,"input",35),S("ngModelChange",function(n){m(e);let r=c(2);return w(r.formCategory,n)||(r.formCategory=n),_(n)}),a(),o(8,"input",36),S("ngModelChange",function(n){m(e);let r=c(2);return w(r.formScopeLayer,n)||(r.formScopeLayer=n),_(n)}),a()(),o(9,"input",37),S("ngModelChange",function(n){m(e);let r=c(2);return w(r.formRagScopes,n)||(r.formRagScopes=n),_(n)}),a(),o(10,"div",38)(11,"button",39),u("click",function(){m(e);let n=c(2);return _(n.submitForm())}),s(12,"Save"),a(),o(13,"button",40),u("click",function(){m(e);let n=c(2);return _(n.formOpen_$.set(!1))}),s(14,"Cancel"),a()()()}if(i&2){let e=c(2);l(2),V(e.editId?"Edit reference":"New reference"),l(),v("ngModel",e.formCanonical),l(),v("ngModel",e.formAliases),l(),v("ngModel",e.formDescription),l(2),v("ngModel",e.formCategory),l(),v("ngModel",e.formScopeLayer),l(),v("ngModel",e.formRagScopes)}}function Pt(i,d){if(i&1&&(o(0,"div",10)(1,"div")(2,"h2",11),s(3,"Scope tree"),a(),o(4,"div",12),E(5,St,1,4,"ng-container",13,Ne,!1,Mt,2,0,"div",14),a(),C(8,Tt,8,4,"div",15),a(),o(9,"div")(10,"h2",11),s(11,"Reference (alias \u2192 canonical)"),a(),o(12,"div",16),E(13,Vt,16,15,"div",17,bt,!1,It,2,0,"div",18),a()()(),C(16,Lt,15,7,"div",19)),i&2){let e,t=c();l(5),$(t.scopeTree_$()),l(3),x((e=t.selectedNode_$())?8:-1,e),l(5),$(t.references_$()),l(3),x(t.formOpen_$()?16:-1)}}function Dt(i,d){if(i&1&&oe(0,13),i&2){let e=d.$implicit,t=c().depth;c();let n=re(16);k("ngTemplateOutlet",n)("ngTemplateOutletContext",Fe(2,vt,e,t+1))}}function Bt(i,d){if(i&1){let e=T();o(0,"div")(1,"button",41),u("click",function(){let n=m(e).$implicit,r=c();return _(r.selectNode(n))}),o(2,"span",42),s(3),a(),s(4),o(5,"span",43),s(6),a()(),E(7,Dt,1,5,"ng-container",13,Ne),a()}if(i&2){let e,t=d.$implicit,n=d.depth;l(),$e("padding-left",8+n*16,"px"),M("data-testid","ma-scope-node-"+t.scopeId),l(2),f("",t.layer,":"),l(),f(" ",t.canonicalName," "),l(2),f("(",(e=t.entryCount)!==null&&e!==void 0?e:0,")"),l(),$(t.children)}}var We=(()=>{class i{api=F(A);route=F(ye);router=F(se);notify=F(J);popup=F(de);scopeTree_$=y([]);selectedNode_$=y(null);references_$=y([]);loading_$=y(!0);formOpen_$=y(!1);editId=null;formCanonical="";formAliases="";formDescription="";formCategory="";formScopeLayer="";formRagScopes="";focusScopeId=null;ngOnInit(){return b(this,null,function*(){this.focusScopeId=this.route.snapshot.queryParamMap.get("focus"),yield this.load()})}load(){return b(this,null,function*(){this.loading_$.set(!0),yield Promise.all([this.loadScopeTree(),this.loadReferences()]),this.loading_$.set(!1),this.focusScopeId&&this.focusNode(this.focusScopeId)})}loadScopeTree(){return b(this,null,function*(){let e=yield this.api.invokeCapability("get_scope_tree");if(e.error)return;let t=e.data??{};this.scopeTree_$.set(t.tree??t.nodes??[])})}loadReferences(){return b(this,null,function*(){let e=yield this.api.invokeCapability("get_reference_stats");if(e.error)return;let t=e.data??{};this.references_$.set(t.references??t.items??[])})}selectNode(e){this.selectedNode_$.set(e)}focusNode(e){let t=this.findNode(this.scopeTree_$(),e);t&&this.selectedNode_$.set(t)}findNode(e,t){for(let n of e){if(n.scopeId===t)return n;let r=this.findNode(n.children??[],t);if(r)return r}return null}viewEntries(e){this.router.navigate(["/maintenance"],{queryParams:{scope:e.scopeId}})}openNewForm(){this.editId=null,this.formCanonical="",this.formAliases="",this.formDescription="",this.formCategory="",this.formScopeLayer="",this.formRagScopes="",this.formOpen_$.set(!0)}openEditForm(e){this.editId=e._id??null,this.formCanonical=e.canonicalTerm,this.formAliases=(e.aliasTerms??[]).join(", "),this.formDescription=e.description??"",this.formCategory=e.category??"",this.formScopeLayer=e.scopeLayer??"",this.formRagScopes=(e.ragScopes??[]).join(", "),this.formOpen_$.set(!0)}submitForm(){return b(this,null,function*(){if(!this.formCanonical.trim()){this.notify.newErrorMessage("A canonical term k\xF6telez\u0151.");return}let e={canonicalTerm:this.formCanonical,aliasTerms:this.parseCsv(this.formAliases),description:this.formDescription||void 0,category:this.formCategory||void 0,scopeLayer:this.formScopeLayer||void 0,ragScopes:this.parseCsv(this.formRagScopes)},t=yield this.api.invokeCapability(this.editId?"update_reference":"create_reference",R({id:this.editId??void 0},e));if(t.error){this.notify.newErrorMessage(`${t.error.errorCode}: ${t.error.message}`);return}this.notify.newSuccessMessage(this.editId?"Reference friss\xEDtve.":"Reference l\xE9trehozva."),this.formOpen_$.set(!1),yield this.loadReferences(),yield this.suggestRebuild()})}toggleActive(e){return b(this,null,function*(){let t=yield this.api.invokeCapability("toggle_reference",{id:e._id,isActive:!e.isActive});if(t.error){this.notify.newErrorMessage(`${t.error.errorCode}: ${t.error.message}`);return}this.notify.newSuccessMessage(`Reference ${e.isActive?"inaktiv\xE1lva":"aktiv\xE1lva"}.`),yield this.loadReferences(),yield this.suggestRebuild()})}rebuildIndex(){return b(this,null,function*(){let e=yield this.api.invokeCapability("rebuild_reference_index");if(e.error){this.notify.newErrorMessage(`${e.error.errorCode}: ${e.error.message}`);return}this.notify.newSuccessMessage("Reference-index \xFAjra\xE9p\xEDtve.")})}suggestRebuild(){return b(this,null,function*(){(yield this.popup.newConfirm({title:"Reference-index rebuild",message:"A reference-cache TTL-es (60s). Most \xFAjra\xE9p\xEDtsem az indexet, hogy a v\xE1ltoz\xE1s azonnal hasson?",confirmBtn:"Rebuild now"}))&&(yield this.rebuildIndex())})}parseCsv(e){return(e??"").split(",").map(t=>t.trim()).filter(t=>t.length)}static \u0275fac=function(t){return new(t||i)};static \u0275cmp=D({type:i,selectors:[["ma-scopes"]],standalone:!0,features:[B],decls:17,vars:3,consts:[["scopeNode",""],["data-testid","ma-scopes",1,"mx-auto","max-w-6xl","p-6"],[1,"mb-4","block"],[1,"mb-4","flex","items-center","justify-between"],[1,"text-sm","opacity-60","hover:underline",3,"routerLink"],[1,"text-2xl","font-semibold"],[1,"flex","gap-2","text-sm"],["data-testid","ma-scopes-new-ref",1,"rounded","border","border-neutral-700","px-3","py-1","hover:bg-neutral-800",3,"click"],["data-testid","ma-scopes-rebuild",1,"rounded","border","border-neutral-700","px-3","py-1","hover:bg-neutral-800",3,"click"],["data-testid","ma-scopes-loading",1,"py-10","text-center","opacity-60"],[1,"grid","grid-cols-1","gap-6","lg:grid-cols-2"],[1,"mb-2","text-sm","uppercase","tracking-wide","opacity-50"],["data-testid","ma-scope-tree",1,"rounded","border","border-neutral-800","bg-neutral-900","p-3"],[3,"ngTemplateOutlet","ngTemplateOutletContext"],[1,"py-4","text-center","text-sm","opacity-50"],["data-testid","ma-scope-detail",1,"mt-3","rounded","border","border-neutral-800","bg-neutral-900","p-3","text-sm"],["data-testid","ma-reference-list",1,"flex","flex-col","gap-2"],[1,"rounded","border","border-neutral-800","bg-neutral-900","p-3","text-sm"],[1,"py-4","text-center","opacity-50"],["data-testid","ma-reference-form",1,"mt-6","rounded","border","border-neutral-800","bg-neutral-900","p-4"],[1,"font-medium"],[1,"text-xs","opacity-60"],[1,"mt-1","text-xs","opacity-60"],["data-testid","ma-scope-view-entries",1,"mt-2","rounded","border","border-neutral-700","px-2","py-1","text-xs","hover:bg-neutral-800",3,"click"],[1,"flex","items-start","justify-between"],[1,"flex-1"],[1,"opacity-60"],[1,"mt-1","text-xs","opacity-50"],[1,"flex","gap-1"],[1,"rounded","px-2","py-1","text-xs","hover:bg-neutral-800",3,"click"],[1,"mb-3","font-medium"],["placeholder","canonical term","data-testid","ma-ref-canonical",1,"mb-2","w-full","rounded","border","border-neutral-700","bg-neutral-950","p-2","text-sm",3,"ngModelChange","ngModel"],["placeholder","aliases (typo / fonetikus / STT, vessz\u0151vel)","data-testid","ma-ref-aliases",1,"mb-2","w-full","rounded","border","border-neutral-700","bg-neutral-950","p-2","text-sm",3,"ngModelChange","ngModel"],["rows","2","placeholder","description",1,"mb-2","w-full","rounded","border","border-neutral-700","bg-neutral-950","p-2","text-sm",3,"ngModelChange","ngModel"],[1,"mb-2","flex","gap-2"],["placeholder","category",1,"flex-1","rounded","border","border-neutral-700","bg-neutral-950","p-2","text-sm",3,"ngModelChange","ngModel"],["placeholder","scope-layer (opc.)",1,"flex-1","rounded","border","border-neutral-700","bg-neutral-950","p-2","text-sm",3,"ngModelChange","ngModel"],["placeholder","ragScopes \u2014 mely t\xE1rakra (vessz\u0151vel, \xFCres = mind)",1,"mb-3","w-full","rounded","border","border-neutral-700","bg-neutral-950","p-2","text-sm",3,"ngModelChange","ngModel"],[1,"flex","gap-2"],["data-testid","ma-ref-submit",1,"rounded","bg-emerald-700","px-4","py-1","text-sm","hover:bg-emerald-600",3,"click"],[1,"rounded","border","border-neutral-700","px-4","py-1","text-sm","hover:bg-neutral-800",3,"click"],["type","button",1,"block","w-full","rounded","px-2","py-1","text-left","text-sm","hover:bg-neutral-800",3,"click"],[1,"opacity-50"],[1,"opacity-40"]],template:function(t,n){if(t&1){let r=T();o(0,"div",1),W(1,"ma-banner-host",2),o(2,"div",3)(3,"div")(4,"a",4),s(5,"\u2190 Maintenance"),a(),o(6,"h1",5),s(7,"Scopes & Reference"),a()(),o(8,"div",6)(9,"button",7),u("click",function(){return m(r),_(n.openNewForm())}),s(10,"New reference"),a(),o(11,"button",8),u("click",function(){return m(r),_(n.rebuildIndex())}),s(12,"Rebuild index"),a()()(),C(13,wt,2,0,"div",9)(14,Pt,17,4),a(),C(15,Bt,9,6,"ng-template",null,0,be)}t&2&&(l(4),k("routerLink",I(2,ht)),l(9),x(n.loading_$()?13:14))},dependencies:[L,he,X,Z,K,H,P,q,G],encapsulation:2})}return i})();var At=(i,d)=>d.query,Rt=(i,d)=>d.id,Nt=(i,d)=>d.rawToken,Wt=(i,d)=>d.scopeId,zt=()=>["/maintenance"];function jt(i,d){if(i&1){let e=T();o(0,"button",23),u("click",function(){let n=m(e).$implicit,r=c().$index,p=c();return _(p.toggleTable(r,n))}),s(1),a()}if(i&2){let e=d.$implicit,t=c().$index,n=c();N("bg-blue-700",n.isTableSelected(t,e))("bg-neutral-800",!n.isTableSelected(t,e)),M("data-testid","ma-search-table-"+t+"-"+e),l(),f(" ",n.tableLabel(e)," ")}}function Ot(i,d){if(i&1){let e=T();o(0,"div",6)(1,"div",18),E(2,jt,2,6,"button",19,Y),a(),o(4,"div",20)(5,"input",21),u("ngModelChange",function(n){let r=m(e).$index,p=c();return _(p.setQuery(r,n))}),a(),o(6,"button",22),u("click",function(){let n=m(e).$index,r=c();return _(r.removeRow(n))}),s(7,"remove"),a()()()}if(i&2){let e=d.$implicit,t=d.$index,n=c();l(2),$(n.mainTables),l(3),k("ngModel",e.query),M("data-testid","ma-search-query-"+t)}}function qt(i,d){i&1&&(o(0,"div",15),s(1,"Searching\u2026"),a())}function Kt(i,d){i&1&&(s(0," \xB7 "),o(1,"span",25),s(2,"relev\xE1ns elemek lemaradtak (truncated)"),a())}function Ht(i,d){if(i&1){let e=T();o(0,"button",36),u("click",function(){let n=m(e).$implicit,r=c(4);return _(r.applySuggestion(n))}),s(1),a()}if(i&2){let e=d.$implicit;M("data-testid","ma-search-suggestion"),l(),f(" ",e," ")}}function Xt(i,d){if(i&1&&(o(0,"div",34),E(1,Ht,2,2,"button",35,Y),a()),i&2){let e=c(2).$implicit;l(),$(e.suggestions)}}function Gt(i,d){if(i&1&&(o(0,"div",27)(1,"div",32),s(2,"S\u0171r\u0171 eredm\xE9ny \u2014 a query t\xFAl t\xE1g lehet"),a(),o(3,"div",33),s(4),C(5,Kt,3,0,"span",25),a(),C(6,Xt,3,0,"div",34),a()),i&2){let e=c().$implicit;M("data-testid","ma-search-dense-"+e.query),l(4),f(" ",e.totalRelevant," relev\xE1ns elem a minScore felett (topK el\u0151tt) "),l(),x(e.truncated?5:-1),l(),x(e.suggestions.length?6:-1)}}function Ut(i,d){if(i&1&&(o(0,"div"),s(1),j(2,"number"),a()),i&2){let e=d.$implicit;l(),ee('"',e.rawToken,'" \u2192 ',e.resolvedTo," (konfidencia: ",O(2,3,e.confidence,"1.2-2"),")")}}function Qt(i,d){if(i&1&&(o(0,"div",28),E(1,Ut,3,6,"div",null,Nt),a()),i&2){let e=c().$implicit;M("data-testid","ma-search-uncertainty"),l(),$(e.uncertaintyNotes)}}function Zt(i,d){if(i&1&&s(0),i&2){let e=c(2).$implicit;f(" path: ",e.headingPath==null?null:e.headingPath.join(" > ")," \xB7 ")}}function Jt(i,d){if(i&1&&s(0),i&2){let e=c(2).$implicit;z(" chars ",e.position.charStart,"\u2013",e.position.charEnd," \xB7 ")}}function Yt(i,d){if(i&1&&(o(0,"div",43),s(1),a(),o(2,"div",44),C(3,Zt,1,1)(4,Jt,1,2),s(5),a()),i&2){let e,t=c().$implicit;l(),V(t.content),l(2),x(t.headingPath!=null&&t.headingPath.length?3:-1),l(),x(t.position?4:-1),l(),z(" kind: ",(e=t.kind)!==null&&e!==void 0?e:"\u2014"," \xB7 tags: ",t.tags.join(", ")," ")}}function en(i,d){if(i&1&&(o(0,"div",39),s(1),a()),i&2){let e=c().$implicit;l(),V(e.content)}}function tn(i,d){if(i&1&&(o(0,"span",41),s(1),a()),i&2){let e=d.$implicit;l(),z("",e.layer,":",e.canonicalName,"")}}function nn(i,d){if(i&1){let e=T();o(0,"div",30)(1,"div",37)(2,"div",38),C(3,Yt,6,5)(4,en,2,1,"div",39),o(5,"div",40)(6,"span"),s(7),j(8,"number"),a(),o(9,"span"),s(10),a(),o(11,"span"),s(12),j(13,"number"),a(),o(14,"span"),s(15),a(),o(16,"span"),s(17),a(),E(18,tn,2,2,"span",41,Wt),a()(),o(20,"button",42),u("click",function(){let n=m(e).$implicit,r=c(2);return _(r.toggleExpand(n.id))}),s(21),a()()()}if(i&2){let e=d.$implicit,t=c(2);M("data-testid","ma-search-hit-"+e.id),l(3),x(t.isExpanded(e.id)?3:4),l(4),f("score ",O(8,9,e.score,"1.3-3"),""),l(3),f("weight ",e.weight,""),l(2),f("final ",O(13,12,e.finalScore,"1.3-3"),""),l(3),V(t.tableLabel(e.table)),l(2),f("src: ",t.hitSource(e),""),l(),$(e.scopePath),l(2),M("data-testid","ma-search-expand-"+e.id),l(),f(" ",t.isExpanded(e.id)?"collapse":"expand"," ")}}function an(i,d){i&1&&(o(0,"div",31),s(1,"Nincs tal\xE1lat erre a query-re."),a())}function on(i,d){if(i&1&&(o(0,"div",17)(1,"div",24)(2,"span",25),s(3),a(),o(4,"span",26),s(5),a()(),C(6,Gt,7,4,"div",27)(7,Qt,3,1,"div",28),o(8,"div",29),E(9,nn,22,15,"div",30,Rt,!1,an,2,0,"div",31),a()()),i&2){let e=d.$implicit;l(3),f('"',e.query,'"'),l(2),z(" \xB7 ",e.hits.length," hit \xB7 ",e.totalRelevant," relev\xE1ns"),l(),x(e.denseResults?6:-1),l(),x(e.uncertaintyNotes.length?7:-1),l(2),$(e.hits)}}var ze=(()=>{class i{api=F(A);notify=F(J);mainTables=te;rows_$=y([{tables:[h.memory],query:""}]);topK=5;minScore=0;tagFilter="";kindFilter="";results_$=y([]);searching_$=y(!1);expanded_$=y(new Set);ngOnInit(){return b(this,null,function*(){yield this.loadDefaults()})}loadDefaults(){return b(this,null,function*(){let e=yield this.api.getConfig();if(e.data?.effective){let t=e.data.effective["read.topK"],n=e.data.effective["read.minScore"];typeof t?.value=="number"&&(this.topK=t.value),typeof n?.value=="number"&&(this.minScore=n.value)}})}addRow(){this.rows_$.set([...this.rows_$(),{tables:[h.knowledge],query:""}])}removeRow(e){this.rows_$.set(this.rows_$().filter((t,n)=>n!==e))}toggleTable(e,t){let n=[...this.rows_$()],r=n[e].tables.includes(t)?n[e].tables.filter(p=>p!==t):[...n[e].tables,t];n[e]=Q(R({},n[e]),{tables:r}),this.rows_$.set(n)}isTableSelected(e,t){return this.rows_$()[e].tables.includes(t)}setQuery(e,t){let n=[...this.rows_$()];n[e]=Q(R({},n[e]),{query:t}),this.rows_$.set(n)}tableLabel(e){return U[e]}search(){return b(this,null,function*(){let e=this.rows_$().filter(n=>n.query.trim()&&n.tables.length);if(!e.length){this.notify.newErrorMessage("Adj meg legal\xE1bb egy query-t (t\xE1bla + phrase).");return}this.searching_$.set(!0);let t=yield this.api.read({queries:e.map(n=>({tables:n.tables,query:n.query,topK:this.topK,minScore:this.minScore,tagFilter:this.tagFilter?this.parseCsv(this.tagFilter):void 0,kindFilter:this.kindFilter||void 0})),includeContent:!0});if(this.searching_$.set(!1),t.error){this.notify.newErrorMessage(`${t.error.errorCode}: ${t.error.message}`),this.results_$.set([]);return}this.results_$.set(t.data?.results??[])})}toggleExpand(e){let t=new Set(this.expanded_$());t.has(e)?t.delete(e):t.add(e),this.expanded_$.set(t)}isExpanded(e){return this.expanded_$().has(e)}applySuggestion(e){let t=e.toLowerCase(),n=e.match(/tag[:=]\s*([\w-]+)/i),r=e.match(/kind[:=]\s*([\w-]+)/i);n?this.tagFilter=this.tagFilter?`${this.tagFilter},${n[1]}`:n[1]:r?this.kindFilter=r[1]:t.includes("mincore")||t.includes("minscore")?this.minScore=Math.min(this.minScore+.1,1):t.includes("topk")&&(this.topK=Math.max(this.topK-1,1)),this.search()}hitSource(e){return e.sourceFilePath?e.sourceFilePath:e.source?.type??"manual"}parseCsv(e){return(e??"").split(",").map(t=>t.trim()).filter(t=>t.length)}static \u0275fac=function(t){return new(t||i)};static \u0275cmp=D({type:i,selectors:[["ma-search"]],standalone:!0,features:[B],decls:27,vars:7,consts:[["data-testid","ma-search",1,"mx-auto","max-w-5xl","p-6"],[1,"mb-4","block"],[1,"mb-4"],[1,"text-sm","opacity-60","hover:underline",3,"routerLink"],[1,"text-2xl","font-semibold"],["data-testid","ma-search-queries",1,"mb-4","flex","flex-col","gap-3"],[1,"rounded","border","border-neutral-800","bg-neutral-900","p-3"],["data-testid","ma-search-add-query",1,"self-start","rounded","border","border-neutral-700","px-3","py-1","text-sm","hover:bg-neutral-800",3,"click"],[1,"mb-4","flex","flex-wrap","items-center","gap-3","text-sm"],[1,"flex","items-center","gap-1"],["type","number","data-testid","ma-search-topk",1,"w-20","rounded","border","border-neutral-700","bg-neutral-900","px-2","py-1",3,"ngModelChange","ngModel"],["type","number","step","0.05","data-testid","ma-search-minscore",1,"w-24","rounded","border","border-neutral-700","bg-neutral-900","px-2","py-1",3,"ngModelChange","ngModel"],["placeholder","tag filter (vessz\u0151vel)","data-testid","ma-search-tagfilter",1,"w-40","rounded","border","border-neutral-700","bg-neutral-900","px-2","py-1",3,"ngModelChange","ngModel"],["placeholder","kind filter","data-testid","ma-search-kindfilter",1,"w-32","rounded","border","border-neutral-700","bg-neutral-900","px-2","py-1",3,"ngModelChange","ngModel"],["data-testid","ma-search-submit",1,"rounded","bg-blue-700","px-4","py-1","hover:bg-blue-600",3,"click"],["data-testid","ma-search-loading",1,"py-10","text-center","opacity-60"],["data-testid","ma-search-results",1,"flex","flex-col","gap-6"],[1,"rounded","border","border-neutral-800"],[1,"mb-2","flex","flex-wrap","gap-1"],["type","button",1,"rounded","px-2","py-1","text-xs",3,"bg-blue-700","bg-neutral-800"],[1,"flex","items-center","gap-2"],["placeholder","query phrase",1,"flex-1","rounded","border","border-neutral-700","bg-neutral-950","px-2","py-1","text-sm",3,"ngModelChange","ngModel"],[1,"rounded","px-2","py-1","text-sm","text-red-400","hover:bg-neutral-800",3,"click"],["type","button",1,"rounded","px-2","py-1","text-xs",3,"click"],[1,"border-b","border-neutral-800","bg-neutral-900","px-3","py-2","text-sm"],[1,"font-medium"],[1,"opacity-50"],[1,"border-b","border-yellow-700","bg-yellow-950","px-3","py-2","text-sm","text-yellow-200"],[1,"border-b","border-amber-700/60","bg-neutral-900","px-3","py-2","text-xs","text-amber-300"],[1,"flex","flex-col","gap-2","p-2"],[1,"rounded","border","border-neutral-800","bg-neutral-900","p-3","text-sm"],[1,"py-4","text-center","opacity-50"],[1,"font-semibold"],[1,"mt-1"],[1,"mt-2","flex","flex-wrap","gap-2"],["type","button",1,"rounded","bg-yellow-800","px-2","py-1","text-xs","hover:bg-yellow-700"],["type","button",1,"rounded","bg-yellow-800","px-2","py-1","text-xs","hover:bg-yellow-700",3,"click"],[1,"flex","items-start","justify-between","gap-3"],[1,"flex-1"],[1,"line-clamp-2","opacity-90"],[1,"mt-1","flex","flex-wrap","gap-2","text-xs","opacity-60"],[1,"rounded","bg-purple-900","px-1.5","py-0.5"],[1,"rounded","px-2","py-1","text-xs","hover:bg-neutral-800",3,"click"],[1,"whitespace-pre-wrap","opacity-90"],[1,"mt-1","text-xs","opacity-50"]],template:function(t,n){t&1&&(o(0,"div",0),W(1,"ma-banner-host",1),o(2,"div",2)(3,"a",3),s(4,"\u2190 Maintenance"),a(),o(5,"h1",4),s(6,"Search (val\xF3di read-teszt)"),a()(),o(7,"div",5),E(8,Ot,8,2,"div",6,xe),o(10,"button",7),u("click",function(){return n.addRow()}),s(11,"+ add query"),a()(),o(12,"div",8)(13,"label",9),s(14,"topK "),o(15,"input",10),S("ngModelChange",function(p){return w(n.topK,p)||(n.topK=p),p}),a()(),o(16,"label",9),s(17,"minScore "),o(18,"input",11),S("ngModelChange",function(p){return w(n.minScore,p)||(n.minScore=p),p}),a()(),o(19,"input",12),S("ngModelChange",function(p){return w(n.tagFilter,p)||(n.tagFilter=p),p}),a(),o(20,"input",13),S("ngModelChange",function(p){return w(n.kindFilter,p)||(n.kindFilter=p),p}),a(),o(21,"button",14),u("click",function(){return n.search()}),s(22,"Search"),a()(),C(23,qt,2,0,"div",15),o(24,"div",16),E(25,on,12,6,"div",17,At),a()()),t&2&&(l(3),k("routerLink",I(6,zt)),l(5),$(n.rows_$()),l(7),v("ngModel",n.topK),l(3),v("ngModel",n.minScore),l(),v("ngModel",n.tagFilter),l(),v("ngModel",n.kindFilter),l(3),x(n.searching_$()?23:-1),l(2),$(n.results_$()))},dependencies:[L,Ce,X,Z,Ie,K,H,P,q,G],encapsulation:2})}return i})();var rn=(i,d)=>d.key,ln=()=>["/maintenance"];function sn(i,d){if(i&1&&(o(0,"option",7),s(1),a()),i&2){let e=d.$implicit,t=c();k("value",e),l(),f("",t.tableLabel(e)," (table-override)")}}function dn(i,d){i&1&&(o(0,"div",15),s(1,"Loading\u2026"),a())}function cn(i,d){if(i&1){let e=T();o(0,"input",25),u("ngModelChange",function(n){m(e);let r=c().$implicit,p=c(2);return _(p.onValueChange(r.key,n))}),a()}if(i&2){let e=c().$implicit;k("ngModel",e.value),M("data-testid","ma-config-value-"+e.key)}}function pn(i,d){if(i&1){let e=T();o(0,"input",26),u("ngModelChange",function(n){m(e);let r=c().$implicit,p=c(2);return _(p.onValueChange(r.key,n))}),a()}if(i&2){let e=c().$implicit;k("ngModel",e.value),M("data-testid","ma-config-value-"+e.key)}}function mn(i,d){if(i&1){let e=T();o(0,"div",17)(1,"div",19),s(2),a(),o(3,"div",20),C(4,cn,1,2,"input",21)(5,pn,1,2,"input",22),a(),o(6,"span",23),s(7),a(),o(8,"button",24),u("click",function(){let n=m(e).$implicit,r=c(2);return _(r.saveRow(n))}),s(9,"Save"),a()()}if(i&2){let e=d.$implicit,t=c(2);M("data-testid","ma-config-row-"+e.key),l(2),V(e.key),l(2),x(t.isBoolean(e.value)?4:5),l(2),N("bg-neutral-700",e.resolvedFrom==="builtin"||e.resolvedFrom==="global")("bg-blue-800",e.resolvedFrom==="table")("bg-purple-800",e.resolvedFrom==="scope"),M("data-testid","ma-config-source-"+e.key),l(),f(" ",t.sourceLabel(e.resolvedFrom)," "),l(),M("data-testid","ma-config-save-"+e.key)}}function _n(i,d){i&1&&(o(0,"div",18),s(1,"Nincs config-kulcs (a szerver nem el\xE9rhet\u0151?)."),a())}function un(i,d){if(i&1&&(o(0,"div",16),E(1,mn,10,12,"div",17,rn,!1,_n,2,0,"div",18),a()),i&2){let e=c();l(),$(e.rows_$())}}var je=(()=>{class i{api=F(A);notify=F(J);mainTables=te;tableScope="";rows_$=y([]);loading_$=y(!0);ngOnInit(){return b(this,null,function*(){yield this.load()})}load(){return b(this,null,function*(){this.loading_$.set(!0);let e=yield this.api.getConfig(this.tableScope||void 0);if(e.error){this.notify.newErrorMessage(`${e.error.errorCode}: ${e.error.message}`),this.loading_$.set(!1);return}let t=e.data?.effective??{},n=Object.keys(t).sort().map(r=>({key:r,value:t[r].value,resolvedFrom:t[r].resolvedFrom}));this.rows_$.set(n),this.loading_$.set(!1)})}tableLabel(e){return U[e]}sourceLabel(e){switch(e){case"builtin":return"builtin default";case"global":return"\xF6r\xF6kl\xF6tt global default";case"table":return"table-override";case"scope":return"scope-override";default:return e}}isBoolean(e){return typeof e=="boolean"}onValueChange(e,t){let n=this.rows_$().map(r=>r.key===e?Q(R({},r),{value:t}):r);this.rows_$.set(n)}saveRow(e){return b(this,null,function*(){let t=yield this.api.setConfig({key:e.key,value:e.value,table:this.tableScope||void 0});if(t.error){this.notify.newErrorMessage(`${t.error.errorCode}: ${t.error.message}`);return}this.notify.newSuccessMessage(`${e.key} mentve.`),yield this.load()})}applyOpenAiPreset(){return b(this,null,function*(){yield this.applyPreset("openai")})}applyLmStudioPreset(){return b(this,null,function*(){yield this.applyPreset("lmstudio")})}applyPreset(e){return b(this,null,function*(){let t=yield this.api.invokeCapability("apply_preset",{preset:e,table:this.tableScope||void 0});if(t.error){this.notify.newErrorMessage(`${t.error.errorCode}: ${t.error.message}`);return}this.notify.newSuccessMessage(`${e} preset alkalmazva.`),yield this.load()})}testMongo(){this.runTest("test_mongodb_connection","MongoDB")}testEmbedding(){this.runTest("test_embedding_provider","Embedding-provider")}testVectorSearch(){this.runTest("test_vector_search","Vector search")}runTest(e,t){return b(this,null,function*(){let n=yield this.api.invokeCapability(e);if(n.error){this.notify.newErrorMessage(`${t} teszt: ${n.error.errorCode} \u2014 ${n.error.message}`);return}let r=n.data??{};r.ok===!1?this.notify.newErrorMessage(`${t} teszt sikertelen: ${r.message??"ismeretlen ok"}`):this.notify.newSuccessMessage(`${t} teszt OK${r.message?" \u2014 "+r.message:""}.`)})}static \u0275fac=function(t){return new(t||i)};static \u0275cmp=D({type:i,selectors:[["ma-settings"]],standalone:!0,features:[B],decls:28,vars:4,consts:[["data-testid","ma-settings",1,"mx-auto","max-w-4xl","p-6"],[1,"mb-4","block"],[1,"mb-4","flex","items-center","justify-between"],[1,"text-sm","opacity-60","hover:underline",3,"routerLink"],[1,"text-2xl","font-semibold"],["data-testid","ma-settings-scope",1,"rounded","border","border-neutral-700","bg-neutral-900","px-2","py-1","text-sm",3,"ngModelChange","ngModel"],["value",""],[3,"value"],["data-testid","ma-settings-actions",1,"mb-4","flex","flex-wrap","gap-2","text-sm"],["data-testid","ma-preset-openai",1,"rounded","border","border-neutral-700","px-3","py-1","hover:bg-neutral-800",3,"click"],["data-testid","ma-preset-lmstudio",1,"rounded","border","border-neutral-700","px-3","py-1","hover:bg-neutral-800",3,"click"],[1,"mx-1","opacity-30"],["data-testid","ma-test-mongo",1,"rounded","border","border-neutral-700","px-3","py-1","hover:bg-neutral-800",3,"click"],["data-testid","ma-test-embedding",1,"rounded","border","border-neutral-700","px-3","py-1","hover:bg-neutral-800",3,"click"],["data-testid","ma-test-vector",1,"rounded","border","border-neutral-700","px-3","py-1","hover:bg-neutral-800",3,"click"],["data-testid","ma-settings-loading",1,"py-10","text-center","opacity-60"],["data-testid","ma-settings-rows",1,"flex","flex-col","gap-2"],[1,"flex","flex-wrap","items-center","gap-3","rounded","border","border-neutral-800","bg-neutral-900","p-2","text-sm"],[1,"py-6","text-center","opacity-50"],[1,"w-56","font-mono","text-xs"],[1,"flex-1"],["type","checkbox",3,"ngModel"],[1,"w-full","rounded","border","border-neutral-700","bg-neutral-950","px-2","py-1",3,"ngModel"],[1,"rounded","px-2","py-0.5","text-xs"],[1,"rounded","bg-emerald-700","px-3","py-1","text-xs","hover:bg-emerald-600",3,"click"],["type","checkbox",3,"ngModelChange","ngModel"],[1,"w-full","rounded","border","border-neutral-700","bg-neutral-950","px-2","py-1",3,"ngModelChange","ngModel"]],template:function(t,n){t&1&&(o(0,"div",0),W(1,"ma-banner-host",1),o(2,"div",2)(3,"div")(4,"a",3),s(5,"\u2190 Maintenance"),a(),o(6,"h1",4),s(7,"Settings"),a()(),o(8,"select",5),S("ngModelChange",function(p){return w(n.tableScope,p)||(n.tableScope=p),p}),u("ngModelChange",function(){return n.load()}),o(9,"option",6),s(10,"global"),a(),E(11,sn,2,2,"option",7,Y),a()(),o(13,"div",8)(14,"button",9),u("click",function(){return n.applyOpenAiPreset()}),s(15,"Apply OpenAI preset"),a(),o(16,"button",10),u("click",function(){return n.applyLmStudioPreset()}),s(17,"Apply LM Studio preset"),a(),o(18,"span",11),s(19,"|"),a(),o(20,"button",12),u("click",function(){return n.testMongo()}),s(21,"Test MongoDB"),a(),o(22,"button",13),u("click",function(){return n.testEmbedding()}),s(23,"Test embedding"),a(),o(24,"button",14),u("click",function(){return n.testVectorSearch()}),s(25,"Test vector search"),a()(),C(26,dn,2,0,"div",15)(27,un,4,1,"div",16),a()),t&2&&(l(4),k("routerLink",I(3,ln)),l(4),v("ngModel",n.tableScope),l(3),$(n.mainTables),l(15),x(n.loading_$()?26:27))},dependencies:[L,X,Se,Me,Z,ve,we,K,H,P,q,G],encapsulation:2})}return i})();var ce=function(i){return i.create="create",i.update="update",i.delete="delete",i.scanFile="scan-file",i.scanFolder="scan-folder",i.scanProject="scan-project",i.reEmbed="re-embed",i.import="import",i}(ce||{});function gn(i,d){if(i&1&&(o(0,"div",7),s(1),o(2,"span",8),s(3),j(4,"number"),a()()),i&2){let e=c(),t=e.$implicit,n=e.$index;M("data-testid","ma-scope-preview-"+n),l(),f(" \u2192 ",t.resolvedPreview.canonicalName," "),l(2),f("(konfidencia: ",O(4,3,t.resolvedPreview.confidence,"1.2-2"),")")}}function fn(i,d){if(i&1){let e=T();o(0,"div",2)(1,"input",4),u("ngModelChange",function(n){let r=m(e).$index,p=c();return _(p.onLayerChange(r,n))}),a(),o(2,"input",5),u("ngModelChange",function(n){let r=m(e).$index,p=c();return _(p.onRawNameChange(r,n))}),a(),o(3,"button",6),u("click",function(){let n=m(e).$index,r=c();return _(r.removeLayer(n))}),s(4," remove "),a(),C(5,gn,5,6,"div",7),a()}if(i&2){let e=d.$implicit,t=d.$index;l(),k("ngModel",e.layer),M("data-testid","ma-scope-layer-"+t),l(),k("ngModel",e.rawName),M("data-testid","ma-scope-rawname-"+t),l(),M("data-testid","ma-scope-remove-"+t),l(2),x(e.resolvedPreview?5:-1)}}var Oe=(()=>{class i{api=F(A);value=[];valueChange=new Ee;rows_$=y([]);ngOnInit(){let e=(this.value??[]).map(t=>({layer:t.layer,rawName:t.rawName,resolvedPreview:void 0}));this.rows_$.set(e.length?e:[{layer:"project",rawName:"",resolvedPreview:void 0}])}addLayer(){this.rows_$.set([...this.rows_$(),{layer:"",rawName:"",resolvedPreview:void 0}])}removeLayer(e){this.rows_$.set(this.rows_$().filter((t,n)=>n!==e)),this.emit()}onLayerChange(e,t){let n=[...this.rows_$()];n[e]=Q(R({},n[e]),{layer:t}),this.rows_$.set(n),this.emit()}onRawNameChange(e,t){let n=[...this.rows_$()];n[e]=Q(R({},n[e]),{rawName:t}),this.rows_$.set(n),this.emit(),this.loadPreview(e)}loadPreview(e){return b(this,null,function*(){let t=this.rows_$()[e];if(!t?.rawName)return;let n=yield this.api.invokeCapability("trace_reference_expansion",{layer:t.layer,rawName:t.rawName});if(n.error)return;let r=n.data??{};if(r.canonicalName){let p=[...this.rows_$()];p[e]=Q(R({},p[e]),{resolvedPreview:{canonicalName:r.canonicalName,confidence:r.confidence??0}}),this.rows_$.set(p)}})}emit(){let e=this.rows_$().filter(t=>t.layer&&t.rawName).map(t=>({layer:t.layer,rawName:t.rawName}));this.value=e,this.valueChange.emit(e)}static \u0275fac=function(t){return new(t||i)};static \u0275cmp=D({type:i,selectors:[["ma-scope-picker"]],inputs:{value:"value"},outputs:{valueChange:"valueChange"},standalone:!0,features:[B],decls:7,vars:0,consts:[["data-testid","ma-scope-picker",1,"flex","flex-col","gap-2"],[1,"text-xs","uppercase","tracking-wide","opacity-60"],[1,"flex","flex-wrap","items-center","gap-2"],["type","button","data-testid","ma-scope-add-layer",1,"self-start","rounded","border","border-neutral-700","px-3","py-1","text-sm","hover:bg-neutral-800",3,"click"],["type","text","placeholder","layer (pl. project)",1,"w-40","rounded","border","border-neutral-700","bg-neutral-900","px-2","py-1","text-sm",3,"ngModelChange","ngModel"],["type","text","placeholder","n\xE9v (pl. Adventor)",1,"flex-1","rounded","border","border-neutral-700","bg-neutral-900","px-2","py-1","text-sm",3,"ngModelChange","ngModel"],["type","button",1,"rounded","px-2","py-1","text-sm","text-red-400","hover:bg-neutral-800",3,"click"],[1,"basis-full","pl-2","text-xs","text-emerald-400"],[1,"opacity-70"]],template:function(t,n){t&1&&(o(0,"div",0)(1,"div",1),s(2,"Scope (root \u2192 leaf, k\xF6telez\u0151)"),a(),E(3,fn,6,6,"div",2,xe),o(5,"button",3),u("click",function(){return n.addLayer()}),s(6," + add layer "),a()()),t&2&&(l(3),$(n.rows_$()))},dependencies:[L,Ce,X,Z,K,H],encapsulation:2})}return i})();var qe=(i,d)=>d._id,xn=(i,d)=>d.runId,bn=(i,d)=>d.scopeId,hn=()=>["/maintenance"],Ke=i=>({$implicit:i});function Cn(i,d){if(i&1&&(o(0,"div",11)(1,"div")(2,"span",25),s(3,"count:"),a(),s(4),a(),o(5,"div")(6,"span",25),s(7,"pending:"),a(),s(8),a(),o(9,"div")(10,"span",25),s(11,"completed:"),a(),s(12),a(),o(13,"div")(14,"span",25),s(15,"error:"),a(),s(16),a()()),i&2){let e,t,n,r=d;l(4),f(" ",r.count,""),l(4),f(" ",(e=r.embeddingStatus==null?null:r.embeddingStatus.pending)!==null&&e!==void 0?e:0,""),l(4),f(" ",(t=r.embeddingStatus==null?null:r.embeddingStatus.completed)!==null&&t!==void 0?t:0,""),l(4),f(" ",(n=r.embeddingStatus==null?null:r.embeddingStatus.error)!==null&&n!==void 0?n:0,"")}}function yn(i,d){if(i&1){let e=T();o(0,"textarea",35),S("ngModelChange",function(n){m(e);let r=c(2);return w(r.addCode,n)||(r.addCode=n),_(n)}),a()}if(i&2){let e=c(2);v("ngModel",e.addCode)}}function vn(i,d){if(i&1&&(o(0,"div",32),s(1),a()),i&2){let e=c(2);l(),f("aj\xE1nlott tag-ek: ",e.recommendedTags.join(", "),"")}}function wn(i,d){if(i&1){let e=T();o(0,"div",12)(1,"h3",26),s(2,"Manual add"),a(),o(3,"textarea",27),S("ngModelChange",function(n){m(e);let r=c();return w(r.addContent,n)||(r.addContent=n),_(n)}),a(),C(4,yn,1,1,"textarea",28),o(5,"div",29)(6,"input",30),S("ngModelChange",function(n){m(e);let r=c();return w(r.addKind,n)||(r.addKind=n),_(n)}),a(),o(7,"input",31),S("ngModelChange",function(n){m(e);let r=c();return w(r.addTags,n)||(r.addTags=n),_(n)}),a()(),C(8,vn,2,1,"div",32),o(9,"ma-scope-picker",33),S("valueChange",function(n){m(e);let r=c();return w(r.addScope,n)||(r.addScope=n),_(n)}),a(),o(10,"button",34),u("click",function(){m(e);let n=c();return _(n.submitAdd())}),s(11,"Create"),a()()}if(i&2){let e=c();l(3),v("ngModel",e.addContent),l(),x(e.isCodingPatterns?4:-1),l(2),v("ngModel",e.addKind),l(),v("ngModel",e.addTags),l(),x(e.recommendedTags.length?8:-1),l(),v("value",e.addScope)}}function Sn(i,d){if(i&1){let e=T();o(0,"div",13)(1,"h3",26),s(2,"Bulk paste (\xFCres sor v\xE1lasztja el a blokkokat)"),a(),o(3,"textarea",36),S("ngModelChange",function(n){m(e);let r=c();return w(r.bulkText,n)||(r.bulkText=n),_(n)}),a(),o(4,"div",29)(5,"input",37),S("ngModelChange",function(n){m(e);let r=c();return w(r.bulkKind,n)||(r.bulkKind=n),_(n)}),a(),o(6,"input",38),S("ngModelChange",function(n){m(e);let r=c();return w(r.bulkTags,n)||(r.bulkTags=n),_(n)}),a()(),o(7,"ma-scope-picker",33),S("valueChange",function(n){m(e);let r=c();return w(r.bulkScope,n)||(r.bulkScope=n),_(n)}),a(),o(8,"button",39),u("click",function(){m(e);let n=c();return _(n.submitBulk())}),s(9,"Import all"),a()()}if(i&2){let e=c();l(3),v("ngModel",e.bulkText),l(2),v("ngModel",e.bulkKind),l(),v("ngModel",e.bulkTags),l(),v("value",e.bulkScope)}}function Mn(i,d){if(i&1){let e=T();o(0,"div",14)(1,"h3",26),s(2,"Run scan / system-sync"),a(),o(3,"input",40),S("ngModelChange",function(n){m(e);let r=c();return w(r.scanPath,n)||(r.scanPath=n),_(n)}),a(),o(4,"div",29)(5,"input",41),S("ngModelChange",function(n){m(e);let r=c();return w(r.scanInclude,n)||(r.scanInclude=n),_(n)}),a(),o(6,"input",42),S("ngModelChange",function(n){m(e);let r=c();return w(r.scanExclude,n)||(r.scanExclude=n),_(n)}),a()(),o(7,"label",43)(8,"input",44),S("ngModelChange",function(n){m(e);let r=c();return w(r.scanDryRun,n)||(r.scanDryRun=n),_(n)}),a(),s(9," dry-run (csak felder\xEDt\xE9s) "),a(),o(10,"ma-scope-picker",33),S("valueChange",function(n){m(e);let r=c();return w(r.scanScope,n)||(r.scanScope=n),_(n)}),a(),o(11,"button",45),u("click",function(){m(e);let n=c();return _(n.submitScan())}),s(12,"Run"),a()()}if(i&2){let e=c();l(3),v("ngModel",e.scanPath),l(2),v("ngModel",e.scanInclude),l(),v("ngModel",e.scanExclude),l(2),v("ngModel",e.scanDryRun),l(2),v("value",e.scanScope)}}function kn(i,d){i&1&&(o(0,"div",23),s(1,"Loading\u2026"),a())}function Tn(i,d){if(i&1&&oe(0,52),i&2){let e=d.$implicit;c(3);let t=re(34);k("ngTemplateOutlet",t)("ngTemplateOutletContext",ae(2,Ke,e))}}function En(i,d){i&1&&(o(0,"div",53),s(1,"Nincs bejegyz\xE9s."),a())}function $n(i,d){if(i&1&&(o(0,"div",46),E(1,Tn,1,4,"ng-container",52,qe,!1,En,2,0,"div",53),a()),i&2){let e=c(2);l(),$(e.items_$())}}function Fn(i,d){if(i&1&&oe(0,52),i&2){let e=d.$implicit;c(4);let t=re(34);k("ngTemplateOutlet",t)("ngTemplateOutletContext",ae(2,Ke,e))}}function Vn(i,d){if(i&1){let e=T();o(0,"div",54)(1,"div",55)(2,"span",56),s(3),a(),o(4,"button",57),u("click",function(){let n=m(e).$implicit,r=c(3);return _(r.deleteRunGroup(n.runId))}),s(5,"Delete run"),a()(),o(6,"div",58),E(7,Fn,1,4,"ng-container",52,qe),a()()}if(i&2){let e=d.$implicit;l(3),z("run: ",e.runId," (",e.items.length," chunk)"),l(4),$(e.items)}}function In(i,d){if(i&1&&(o(0,"div",47),E(1,Vn,9,2,"div",54,xn),a()),i&2){let e=c(2);l(),$(e.groupedByRun())}}function Ln(i,d){if(i&1){let e=T();C(0,$n,4,1,"div",46)(1,In,3,0,"div",47),o(2,"div",24)(3,"span",48),s(4),a(),o(5,"div",49)(6,"button",50),u("click",function(){m(e);let n=c();return _(n.prevPage())}),s(7,"Prev"),a(),o(8,"button",51),u("click",function(){m(e);let n=c();return _(n.nextPage())}),s(9,"Next"),a()()()}if(i&2){let e=c();x(e.groupByRun?1:0),l(4),ee("\xF6sszesen: ",e.total_$()," \xB7 oldal ",e.page_$()," \xB7 oldalm\xE9ret ",e.pageSize_$(),"")}}function Pn(i,d){if(i&1&&(o(0,"span",64),s(1),a()),i&2){let e=c().$implicit;l(),V(e.kind)}}function Dn(i,d){if(i&1&&(o(0,"span",65),s(1),a()),i&2){let e=d.$implicit;l(),V(e)}}function Bn(i,d){if(i&1){let e=T();o(0,"button",68),u("click",function(){let n=m(e).$implicit,r=c(2);return _(r.openScope(n.scopeId))}),s(1),a()}if(i&2){let e=d.$implicit;l(),z("",e.layer,":",e.canonicalName,"")}}function An(i,d){if(i&1&&s(0),i&2){let e=c().$implicit;ee(" \xB7 ",e.sourceFilePath," (",e.chunkIndex,"/",e.chunkTotal,") ")}}function Rn(i,d){if(i&1){let e=T();o(0,"div",59)(1,"div",60)(2,"div",61)(3,"div",62),s(4),a(),o(5,"div",63),C(6,Pn,2,1,"span",64),E(7,Dn,2,1,"span",65,Y),E(9,Bn,2,2,"button",66,bn),a(),o(11,"div",67),s(12),j(13,"date"),C(14,An,1,3),a()(),o(15,"button",57),u("click",function(){let n=m(e).$implicit,r=c();return _(r.deleteEntry(n))}),s(16,"Delete"),a()()()}if(i&2){let e,t=d.$implicit;M("data-testid","ma-entry-"+t._id),l(4),V(t.content),l(2),x(t.kind?6:-1),l(),$(t.tags),l(2),$(t.scopePath),l(3),ee(" weight ",(e=t.weight)!==null&&e!==void 0?e:1," \xB7 ",(e=t.addedBy)!==null&&e!==void 0?e:"\u2014"," \xB7 ",t.__lastModified?O(13,8,t.__lastModified,"short"):"\u2014"," "),l(2),x(t.sourceFilePath?14:-1),l(),M("data-testid","ma-entry-delete-"+t._id)}}var Nn=50,Wn=500,He=(()=>{class i{api=F(A);route=F(ye);router=F(se);notify=F(J);popup=F(de);table_$=y(h.rules);items_$=y([]);total_$=y(0);page_$=y(1);pageSize_$=y(Nn);loading_$=y(!1);tagFilter="";kindFilter="";textFilter="";ingestRunFilter="";groupByRun=!1;stats_$=y(null);addContent="";addCode="";addKind="";addTags="";addScope=[];addFormOpen_$=y(!1);bulkText="";bulkKind="";bulkTags="";bulkScope=[];bulkOpen_$=y(!1);scanPath="";scanInclude="";scanExclude="";scanDryRun=!0;scanScope=[];scanOpen_$=y(!1);get isCodingPatterns(){return this.table_$()===h.codingPatterns}get tableLabel(){return U[this.table_$()]}get recommendedTags(){return Pe[this.table_$()]??[]}ngOnInit(){this.route.paramMap.subscribe(e=>{let t=e.get("table"),n=Object.values(h).find(r=>r===t);if(!n||n===h.reference){this.router.navigate(["/maintenance"]);return}this.table_$.set(n),this.page_$.set(1),this.reload()})}reload(){return b(this,null,function*(){this.loading_$.set(!0);let e=yield this.api.getItems(this.table_$(),{page:this.page_$(),pageSize:this.pageSize_$(),tag:this.tagFilter||void 0,kind:this.kindFilter||void 0,ingestRunId:this.ingestRunFilter||void 0});if(e.error){this.notify.newErrorMessage(`${e.error.errorCode}: ${e.error.message}`),this.loading_$.set(!1);return}let t=e.data?.items??[];if(this.textFilter){let r=this.textFilter.toLowerCase();t=t.filter(p=>(p.content??"").toLowerCase().includes(r))}this.items_$.set(t),this.total_$.set(e.data?.total??t.length);let n=yield this.api.getTableStats(this.table_$());n.data&&this.stats_$.set(n.data),this.loading_$.set(!1)})}applyFilters(){this.page_$.set(1),this.reload()}nextPage(){this.page_$()*this.pageSize_$()<this.total_$()&&(this.page_$.set(this.page_$()+1),this.reload())}prevPage(){this.page_$()>1&&(this.page_$.set(this.page_$()-1),this.reload())}setPageSize(e){this.pageSize_$.set(Math.min(Math.max(e,1),Wn)),this.page_$.set(1),this.reload()}submitAdd(){return b(this,null,function*(){if(!this.addContent.trim()){this.notify.newErrorMessage("A content k\xF6telez\u0151.");return}if(!this.addScope.length){this.notify.newErrorMessage("A scope k\xF6telez\u0151 (legal\xE1bb egy layer).");return}let e=this.parseCsv(this.addTags),t={};this.isCodingPatterns&&this.addCode&&(t.code=this.addCode);let n=yield this.api.write({table:this.table_$(),operation:ce.create,scopePath:this.addScope,content:this.addContent,tags:e,kind:this.addKind||void 0,fields:Object.keys(t).length?t:void 0});if(n.error){this.notify.newErrorMessage(`${n.error.errorCode}: ${n.error.message}`);return}this.notify.newSuccessMessage("Bejegyz\xE9s l\xE9trehozva."),this.resetAddForm(),this.addFormOpen_$.set(!1),yield this.reload()})}resetAddForm(){this.addContent="",this.addCode="",this.addKind="",this.addTags="",this.addScope=[]}submitBulk(){return b(this,null,function*(){if(!this.bulkScope.length){this.notify.newErrorMessage("A bulk-paste-hez scope k\xF6telez\u0151.");return}let e=this.bulkText.split(/\n\s*\n/).map(p=>p.trim()).filter(p=>p.length);if(!e.length){this.notify.newErrorMessage("Nincs feldolgozhat\xF3 blokk (\xFCres sor v\xE1lasztja el).");return}let t=this.parseCsv(this.bulkTags),n=0,r=[];for(let p of e){let g=yield this.api.write({table:this.table_$(),operation:ce.create,scopePath:this.bulkScope,content:p,tags:t,kind:this.bulkKind||void 0});g.error?r.push(`${g.error.errorCode}: ${p.slice(0,40)}\u2026`):n++}r.length?this.notify.newErrorMessage(`${n} l\xE9trehozva, ${r.length} hiba: ${r[0]}`):(this.notify.newSuccessMessage(`${n} bejegyz\xE9s l\xE9trehozva.`),this.bulkText="",this.bulkOpen_$.set(!1)),yield this.reload()})}deleteEntry(e){return b(this,null,function*(){if(!(yield this.popup.newConfirm({title:"Soft-delete",message:"Biztosan t\xF6rl\xF6d ezt a bejegyz\xE9st? (soft-delete, vissza\xE1ll\xEDthat\xF3)",confirmBtn:"Delete"})))return;let n=yield this.api.write({table:this.table_$(),operation:ce.delete,target:{by:"id",value:e._id??""}});if(n.error){this.notify.newErrorMessage(`${n.error.errorCode}: ${n.error.message}`);return}this.notify.newSuccessMessage("T\xF6r\xF6lve (soft-delete)."),yield this.reload()})}deleteRunGroup(e){return b(this,null,function*(){if(!(yield this.popup.newConfirm({title:"Csoportos soft-delete",message:`A(z) ${e} ingest-run minden chunkja t\xF6rl\xE9sre ker\xFCl (soft-delete). Folytatod?`,confirmBtn:"Delete run"})))return;let n=yield this.api.invokeCapability("delete_ingest_run",{ingestRunId:e});if(n.error){this.notify.newErrorMessage(`${n.error.errorCode}: ${n.error.message}`);return}this.notify.newSuccessMessage("Run t\xF6r\xF6lve (soft-delete)."),yield this.reload()})}reembedTable(){return b(this,null,function*(){let t=this.stats_$()?.count??0;if(!(yield this.popup.newConfirm({title:"Re-embed t\xE1r",message:`${t} elem \xFAjra-embeddel\xE9se \u2014 ez embedding-k\xF6lts\xE9get okozhat. Folytatod?`,confirmBtn:"Re-embed"})))return;let r=yield this.api.invokeCapability("reembed_table",{table:this.table_$()});if(r.error){this.notify.newErrorMessage(`${r.error.errorCode}: ${r.error.message}`);return}this.notify.newSuccessMessage("Re-embed elind\xEDtva."),yield this.reload()})}submitScan(){return b(this,null,function*(){if(!this.scanPath.trim()){this.notify.newErrorMessage("A scan path k\xF6telez\u0151.");return}if(!this.scanScope.length){this.notify.newErrorMessage("A scan-hez scope k\xF6telez\u0151.");return}let e=yield this.api.write({table:this.table_$(),operation:ce.scanFolder,scopePath:this.scanScope,scan:{path:this.scanPath,include:this.parseCsv(this.scanInclude),exclude:this.parseCsv(this.scanExclude),dryRun:this.scanDryRun}});if(e.error){this.notify.newErrorMessage(`${e.error.errorCode}: ${e.error.message}`);return}this.notify.newSuccessMessage(this.scanDryRun?"Dry-run scan k\xE9sz (l\xE1sd ingest id\u0151vonal).":"Scan k\xE9sz."),this.scanOpen_$.set(!1),yield this.reload()})}openScope(e){this.router.navigate(["/maintenance/scopes"],{queryParams:{focus:e}})}groupedByRun(){let e={};for(let t of this.items_$()){let n=t.ingestRunId??"(manual / no run)";(e[n]??=[]).push(t)}return Object.keys(e).map(t=>({runId:t,items:e[t]}))}parseCsv(e){return(e??"").split(",").map(t=>t.trim()).filter(t=>t.length)}static \u0275fac=function(t){return new(t||i)};static \u0275cmp=D({type:i,selectors:[["ma-table-detail"]],standalone:!0,features:[B],decls:35,vars:13,consts:[["entryRow",""],["data-testid","ma-table-detail",1,"mx-auto","max-w-6xl","p-6"],[1,"mb-4","block"],[1,"mb-4","flex","items-center","justify-between"],[1,"text-sm","opacity-60","hover:underline",3,"routerLink"],[1,"text-2xl","font-semibold"],[1,"flex","gap-2","text-sm"],["data-testid","ma-detail-add-toggle",1,"rounded","border","border-neutral-700","px-3","py-1","hover:bg-neutral-800",3,"click"],["data-testid","ma-detail-bulk-toggle",1,"rounded","border","border-neutral-700","px-3","py-1","hover:bg-neutral-800",3,"click"],["data-testid","ma-detail-scan-toggle",1,"rounded","border","border-neutral-700","px-3","py-1","hover:bg-neutral-800",3,"click"],["data-testid","ma-detail-reembed",1,"rounded","border","border-amber-700","px-3","py-1","text-amber-300","hover:bg-neutral-800",3,"click"],["data-testid","ma-detail-stats",1,"mb-4","grid","grid-cols-2","gap-2","rounded","border","border-neutral-800","bg-neutral-900","p-3","text-sm","sm:grid-cols-4"],["data-testid","ma-entry-add-form",1,"mb-4","rounded","border","border-neutral-800","bg-neutral-900","p-4"],["data-testid","ma-bulk-paste",1,"mb-4","rounded","border","border-neutral-800","bg-neutral-900","p-4"],["data-testid","ma-scan-dialog",1,"mb-4","rounded","border","border-neutral-800","bg-neutral-900","p-4"],["data-testid","ma-detail-filters",1,"mb-3","flex","flex-wrap","items-center","gap-2","text-sm"],["placeholder","tag",1,"w-32","rounded","border","border-neutral-700","bg-neutral-900","px-2","py-1",3,"ngModelChange","ngModel"],["placeholder","kind",1,"w-32","rounded","border","border-neutral-700","bg-neutral-900","px-2","py-1",3,"ngModelChange","ngModel"],["placeholder","text (substring)",1,"w-40","rounded","border","border-neutral-700","bg-neutral-900","px-2","py-1",3,"ngModelChange","ngModel"],["placeholder","ingestRunId",1,"w-40","rounded","border","border-neutral-700","bg-neutral-900","px-2","py-1",3,"ngModelChange","ngModel"],[1,"flex","items-center","gap-1"],["type","checkbox","data-testid","ma-detail-groupby",3,"ngModelChange","ngModel"],["data-testid","ma-detail-apply-filters",1,"rounded","border","border-neutral-700","px-3","py-1","hover:bg-neutral-800",3,"click"],["data-testid","ma-detail-loading",1,"py-10","text-center","opacity-60"],["data-testid","ma-detail-pagination",1,"mt-4","flex","items-center","justify-between","text-sm"],[1,"opacity-50"],[1,"mb-3","font-medium"],["rows","4","placeholder","content","data-testid","ma-add-content",1,"mb-2","w-full","rounded","border","border-neutral-700","bg-neutral-950","p-2","text-sm",3,"ngModelChange","ngModel"],["rows","3","placeholder","code (NEM ker\xFCl a vektorba)","data-testid","ma-add-code",1,"mb-2","w-full","rounded","border","border-neutral-700","bg-neutral-950","p-2","text-sm",3,"ngModel"],[1,"mb-2","flex","gap-2"],["placeholder","kind","data-testid","ma-add-kind",1,"w-40","rounded","border","border-neutral-700","bg-neutral-950","p-2","text-sm",3,"ngModelChange","ngModel"],["placeholder","tags (vessz\u0151vel)","data-testid","ma-add-tags",1,"flex-1","rounded","border","border-neutral-700","bg-neutral-950","p-2","text-sm",3,"ngModelChange","ngModel"],[1,"mb-2","text-xs","opacity-50"],[1,"mb-3","block",3,"valueChange","value"],["data-testid","ma-add-submit",1,"rounded","bg-emerald-700","px-4","py-1","text-sm","hover:bg-emerald-600",3,"click"],["rows","3","placeholder","code (NEM ker\xFCl a vektorba)","data-testid","ma-add-code",1,"mb-2","w-full","rounded","border","border-neutral-700","bg-neutral-950","p-2","text-sm",3,"ngModelChange","ngModel"],["rows","6","placeholder","t\xF6bb blokk\u2026","data-testid","ma-bulk-text",1,"mb-2","w-full","rounded","border","border-neutral-700","bg-neutral-950","p-2","text-sm",3,"ngModelChange","ngModel"],["placeholder","k\xF6z\xF6s kind",1,"w-40","rounded","border","border-neutral-700","bg-neutral-950","p-2","text-sm",3,"ngModelChange","ngModel"],["placeholder","k\xF6z\xF6s tags (vessz\u0151vel)",1,"flex-1","rounded","border","border-neutral-700","bg-neutral-950","p-2","text-sm",3,"ngModelChange","ngModel"],["data-testid","ma-bulk-submit",1,"rounded","bg-emerald-700","px-4","py-1","text-sm","hover:bg-emerald-600",3,"click"],["placeholder","path (folder / project)","data-testid","ma-scan-path",1,"mb-2","w-full","rounded","border","border-neutral-700","bg-neutral-950","p-2","text-sm",3,"ngModelChange","ngModel"],["placeholder","include (glob, vessz\u0151vel)",1,"flex-1","rounded","border","border-neutral-700","bg-neutral-950","p-2","text-sm",3,"ngModelChange","ngModel"],["placeholder","exclude (glob, vessz\u0151vel)",1,"flex-1","rounded","border","border-neutral-700","bg-neutral-950","p-2","text-sm",3,"ngModelChange","ngModel"],[1,"mb-2","flex","items-center","gap-2","text-sm"],["type","checkbox","data-testid","ma-scan-dryrun",3,"ngModelChange","ngModel"],["data-testid","ma-scan-submit",1,"rounded","bg-emerald-700","px-4","py-1","text-sm","hover:bg-emerald-600",3,"click"],["data-testid","ma-detail-list",1,"flex","flex-col","gap-2"],["data-testid","ma-detail-grouped",1,"flex","flex-col","gap-4"],[1,"opacity-60"],[1,"flex","gap-2"],["data-testid","ma-detail-prev",1,"rounded","border","border-neutral-700","px-3","py-1","hover:bg-neutral-800",3,"click"],["data-testid","ma-detail-next",1,"rounded","border","border-neutral-700","px-3","py-1","hover:bg-neutral-800",3,"click"],[3,"ngTemplateOutlet","ngTemplateOutletContext"],[1,"py-6","text-center","opacity-50"],[1,"rounded","border","border-neutral-800"],[1,"flex","items-center","justify-between","border-b","border-neutral-800","bg-neutral-900","px-3","py-2","text-sm"],[1,"font-medium"],[1,"rounded","px-2","py-1","text-xs","text-red-400","hover:bg-neutral-800",3,"click"],[1,"flex","flex-col","gap-2","p-2"],[1,"rounded","border","border-neutral-800","bg-neutral-900","p-3","text-sm"],[1,"flex","items-start","justify-between","gap-3"],[1,"flex-1"],[1,"line-clamp-2","opacity-90"],[1,"mt-1","flex","flex-wrap","items-center","gap-1","text-xs","opacity-60"],[1,"rounded","bg-neutral-800","px-1.5","py-0.5"],[1,"rounded","bg-blue-900","px-1.5","py-0.5"],[1,"rounded","bg-purple-900","px-1.5","py-0.5","hover:bg-purple-800"],[1,"mt-1","text-xs","opacity-40"],[1,"rounded","bg-purple-900","px-1.5","py-0.5","hover:bg-purple-800",3,"click"]],template:function(t,n){if(t&1){let r=T();o(0,"div",1),W(1,"ma-banner-host",2),o(2,"div",3)(3,"div")(4,"a",4),s(5,"\u2190 Maintenance"),a(),o(6,"h1",5),s(7),a()(),o(8,"div",6)(9,"button",7),u("click",function(){return m(r),_(n.addFormOpen_$.set(!n.addFormOpen_$()))}),s(10,"Add entry"),a(),o(11,"button",8),u("click",function(){return m(r),_(n.bulkOpen_$.set(!n.bulkOpen_$()))}),s(12,"Bulk paste"),a(),o(13,"button",9),u("click",function(){return m(r),_(n.scanOpen_$.set(!n.scanOpen_$()))}),s(14,"Run scan"),a(),o(15,"button",10),u("click",function(){return m(r),_(n.reembedTable())}),s(16,"Re-embed"),a()()(),C(17,Cn,17,4,"div",11)(18,wn,12,6,"div",12)(19,Sn,10,4,"div",13)(20,Mn,13,5,"div",14),o(21,"div",15)(22,"input",16),S("ngModelChange",function(g){return m(r),w(n.tagFilter,g)||(n.tagFilter=g),_(g)}),a(),o(23,"input",17),S("ngModelChange",function(g){return m(r),w(n.kindFilter,g)||(n.kindFilter=g),_(g)}),a(),o(24,"input",18),S("ngModelChange",function(g){return m(r),w(n.textFilter,g)||(n.textFilter=g),_(g)}),a(),o(25,"input",19),S("ngModelChange",function(g){return m(r),w(n.ingestRunFilter,g)||(n.ingestRunFilter=g),_(g)}),a(),o(26,"label",20)(27,"input",21),S("ngModelChange",function(g){return m(r),w(n.groupByRun,g)||(n.groupByRun=g),_(g)}),a(),s(28," group by run"),a(),o(29,"button",22),u("click",function(){return m(r),_(n.applyFilters())}),s(30,"Apply"),a()(),C(31,kn,2,0,"div",23)(32,Ln,10,4,"div",24),a(),C(33,Rn,17,11,"ng-template",null,0,be)}if(t&2){let r;l(4),k("routerLink",I(12,hn)),l(3),V(n.tableLabel),l(10),x((r=n.stats_$())?17:-1,r),l(),x(n.addFormOpen_$()?18:-1),l(),x(n.bulkOpen_$()?19:-1),l(),x(n.scanOpen_$()?20:-1),l(2),v("ngModel",n.tagFilter),l(),v("ngModel",n.kindFilter),l(),v("ngModel",n.textFilter),l(),v("ngModel",n.ingestRunFilter),l(2),v("ngModel",n.groupByRun),l(4),x(n.loading_$()?31:32)}},dependencies:[L,he,le,X,Z,ve,K,H,P,q,G,Oe],encapsulation:2})}return i})();var pe=function(i){return i.maintenance="maintenance",i.search="search",i.scopes="scopes",i.ingest="ingest",i.settings="settings",i.errors="errors",i}(pe||{});var zn=[{path:"",component:Re},{path:pe.search,component:ze},{path:pe.scopes,component:We},{path:pe.ingest,component:Be},{path:pe.settings,component:je},{path:":table",component:He}];var Xe=(()=>{class i{static \u0275fac=function(t){return new(t||i)};static \u0275mod=fe({type:i});static \u0275inj=ge({imports:[P.forChild(zn),P]})}return i})();var Fa=(()=>{class i{static \u0275fac=function(t){return new(t||i)};static \u0275mod=fe({type:i});static \u0275inj=ge({imports:[L,Xe]})}return i})();export{Fa as Maintenance_Module};