@pellux/goodvibes-sdk 0.28.11 → 0.28.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (39) hide show
  1. package/dist/_internal/contracts/artifacts/operator-contract.json +16 -1
  2. package/dist/_internal/contracts/generated/foundation-metadata.d.ts +1 -1
  3. package/dist/_internal/contracts/generated/foundation-metadata.js +1 -1
  4. package/dist/_internal/contracts/generated/operator-contract.d.ts.map +1 -1
  5. package/dist/_internal/contracts/generated/operator-contract.js +16 -1
  6. package/dist/_internal/platform/control-plane/method-catalog-homegraph.d.ts.map +1 -1
  7. package/dist/_internal/platform/control-plane/method-catalog-homegraph.js +1 -0
  8. package/dist/_internal/platform/control-plane/method-catalog-knowledge.d.ts.map +1 -1
  9. package/dist/_internal/platform/control-plane/method-catalog-knowledge.js +2 -1
  10. package/dist/_internal/platform/control-plane/operator-contract-schemas-homegraph.d.ts.map +1 -1
  11. package/dist/_internal/platform/control-plane/operator-contract-schemas-homegraph.js +3 -0
  12. package/dist/_internal/platform/knowledge/home-graph/ask.d.ts +1 -1
  13. package/dist/_internal/platform/knowledge/home-graph/ask.d.ts.map +1 -1
  14. package/dist/_internal/platform/knowledge/home-graph/ask.js +3 -84
  15. package/dist/_internal/platform/knowledge/home-graph/generated-pages.d.ts.map +1 -1
  16. package/dist/_internal/platform/knowledge/home-graph/generated-pages.js +39 -5
  17. package/dist/_internal/platform/knowledge/home-graph/service.d.ts +2 -0
  18. package/dist/_internal/platform/knowledge/home-graph/service.d.ts.map +1 -1
  19. package/dist/_internal/platform/knowledge/home-graph/service.js +20 -10
  20. package/dist/_internal/platform/knowledge/home-graph/types.d.ts +4 -0
  21. package/dist/_internal/platform/knowledge/home-graph/types.d.ts.map +1 -1
  22. package/dist/_internal/platform/knowledge/semantic/answer-quality.d.ts +10 -0
  23. package/dist/_internal/platform/knowledge/semantic/answer-quality.d.ts.map +1 -0
  24. package/dist/_internal/platform/knowledge/semantic/answer-quality.js +62 -0
  25. package/dist/_internal/platform/knowledge/semantic/answer.d.ts.map +1 -1
  26. package/dist/_internal/platform/knowledge/semantic/answer.js +28 -27
  27. package/dist/_internal/platform/knowledge/semantic/enrichment.js +6 -1
  28. package/dist/_internal/platform/knowledge/semantic/gap-repair.d.ts +2 -0
  29. package/dist/_internal/platform/knowledge/semantic/gap-repair.d.ts.map +1 -1
  30. package/dist/_internal/platform/knowledge/semantic/gap-repair.js +99 -65
  31. package/dist/_internal/platform/knowledge/semantic/self-improvement.d.ts.map +1 -1
  32. package/dist/_internal/platform/knowledge/semantic/self-improvement.js +9 -5
  33. package/dist/_internal/platform/knowledge/semantic/timeouts.d.ts +4 -0
  34. package/dist/_internal/platform/knowledge/semantic/timeouts.d.ts.map +1 -0
  35. package/dist/_internal/platform/knowledge/semantic/timeouts.js +26 -0
  36. package/dist/_internal/platform/knowledge/semantic/types.d.ts +4 -0
  37. package/dist/_internal/platform/knowledge/semantic/types.d.ts.map +1 -1
  38. package/dist/_internal/platform/version.js +1 -1
  39. package/package.json +1 -1
@@ -0,0 +1,62 @@
1
+ import { hasConcreteFeatureSignal, isLowValueFeatureOrSpecText, semanticFactText } from './fact-quality.js';
2
+ import { splitSentences } from './utils.js';
3
+ export function answerNeedsFeatureGap(input) {
4
+ if (input.linkedObjects.length === 0)
5
+ return false;
6
+ if (input.facts.filter((fact) => !isLowValueFeatureOrSpecText(semanticFactText(fact))).length >= 3)
7
+ return false;
8
+ if (input.text && hasEnoughAnswerSignal(input.query, input.text))
9
+ return false;
10
+ const sourceText = input.sources.map((source) => `${source.title} ${source.summary ?? ''} ${source.tags.join(' ')}`).join('\n');
11
+ const answerText = `${input.text ?? ''}\n${sourceText}`;
12
+ if (/manual|specification|product|datasheet|support|zkelectronics|fullspecs|manualsnet|manua\.ls/i.test(answerText)
13
+ && input.facts.length >= 2) {
14
+ return false;
15
+ }
16
+ return true;
17
+ }
18
+ export function cleanSynthesizedAnswer(text, featureIntent) {
19
+ if (!featureIntent)
20
+ return text;
21
+ const blocks = text.split(/\n{2,}/).map((block) => block.trim()).filter(Boolean);
22
+ const cleanedBlocks = blocks.map((block) => {
23
+ const lines = block.split(/\n/).map((line) => line.trim()).filter(Boolean);
24
+ const kept = lines.filter((line) => !isLowValueFeatureOrSpecText(line));
25
+ if (kept.length > 0 && kept.length < lines.length)
26
+ return kept.join('\n');
27
+ if (lines.length > 1)
28
+ return kept.join('\n');
29
+ const sentences = splitSentences(block, 600);
30
+ const keptSentences = sentences.filter((sentence) => !isLowValueFeatureOrSpecText(sentence));
31
+ return keptSentences.length > 0 && keptSentences.length < sentences.length
32
+ ? keptSentences.join(' ')
33
+ : block;
34
+ }).filter(Boolean);
35
+ return cleanedBlocks.length > 0
36
+ ? cleanedBlocks.join('\n\n')
37
+ : 'The available evidence did not contain source-backed feature or specification details after filtering manual boilerplate.';
38
+ }
39
+ function hasEnoughAnswerSignal(query, text) {
40
+ if (isLowValueFeatureOrSpecText(text) || !hasConcreteFeatureSignal(text))
41
+ return false;
42
+ const broadQuery = /\b(features?|specs?|specifications?|capabilities|what can|what does .* have)\b/i.test(query);
43
+ if (broadQuery)
44
+ return featureSignalFamilyCount(text) >= 3;
45
+ return queryFeatureTerms(query).some((term) => text.toLowerCase().includes(term));
46
+ }
47
+ function queryFeatureTerms(query) {
48
+ return Array.from(query.toLowerCase().matchAll(/\b(hdmi(?:\s*2\.1)?|usb|hdr10?|dolby vision|dolby|earc|arc|bluetooth|wi-?fi|ethernet|magic remote|remote|refresh|120\s*hz|60\s*hz|ports?|speakers?|audio|apps?|airplay|homekit|tuner|atsc|qam|gaming|game|vrr|allm)\b/g)).map((match) => match[1].replace(/\s+/g, ' '));
49
+ }
50
+ function featureSignalFamilyCount(text) {
51
+ const lower = text.toLowerCase();
52
+ return [
53
+ /\b(hdmi|earc|arc|ports?|usb|ethernet)\b/,
54
+ /\b(hdr|hdr10|dolby vision|hlg|filmmaker)\b/,
55
+ /\b(4k|8k|uhd|resolution|refresh|120\s*hz|60\s*hz|nanocell|display|screen)\b/,
56
+ /\b(webos|apps?|streaming|airplay|homekit|chromecast|smart tv)\b/,
57
+ /\b(wi-?fi|bluetooth|wireless lan)\b/,
58
+ /\b(audio|speakers?|dolby atmos|sound)\b/,
59
+ /\b(game|gaming|vrr|allm|freesync|g-sync)\b/,
60
+ /\b(tuner|atsc|qam|ntsc|broadcast)\b/,
61
+ ].filter((pattern) => pattern.test(lower)).length;
62
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"answer.d.ts","sourceRoot":"","sources":["../../../../../src/_internal/platform/knowledge/semantic/answer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAYlD,OAAO,KAAK,EACV,4BAA4B,EAC5B,6BAA6B,EAE7B,oBAAoB,EAErB,MAAM,YAAY,CAAC;AA4BpB,UAAU,sBAAsB;IAC9B,QAAQ,CAAC,KAAK,EAAE,cAAc,CAAC;IAC/B,QAAQ,CAAC,GAAG,CAAC,EAAE,oBAAoB,GAAG,IAAI,CAAC;CAC5C;AAsCD,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,sBAAsB,EAC/B,KAAK,EAAE,4BAA4B,GAClC,OAAO,CAAC,6BAA6B,CAAC,CAiExC"}
1
+ {"version":3,"file":"answer.d.ts","sourceRoot":"","sources":["../../../../../src/_internal/platform/knowledge/semantic/answer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAYlD,OAAO,KAAK,EACV,4BAA4B,EAC5B,6BAA6B,EAE7B,oBAAoB,EAErB,MAAM,YAAY,CAAC;AA8BpB,UAAU,sBAAsB;IAC9B,QAAQ,CAAC,KAAK,EAAE,cAAc,CAAC;IAC/B,QAAQ,CAAC,GAAG,CAAC,EAAE,oBAAoB,GAAG,IAAI,CAAC;CAC5C;AAsCD,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,sBAAsB,EAC/B,KAAK,EAAE,4BAA4B,GAClC,OAAO,CAAC,6BAA6B,CAAC,CA6ExC"}
@@ -3,6 +3,8 @@ import { MAX_ANSWER_EVIDENCE_CHARS, clampText, normalizeWhitespace, readRecord,
3
3
  import { hasConcreteFeatureSignal, isLowValueFeatureOrSpecText, isSemanticAnswerLinkedObject, semanticFactText, } from './fact-quality.js';
4
4
  import { inferHomeAssistantAnswerScope, nodeInHomeAssistantAnswerScope, sourceInHomeAssistantAnswerScope, } from './homeassistant-scope.js';
5
5
  import { concreteAnswerGapSpaceId } from './answer-space.js';
6
+ import { answerNeedsFeatureGap, cleanSynthesizedAnswer } from './answer-quality.js';
7
+ import { clampTimeoutMs, withTimeoutOrNull } from './timeouts.js';
6
8
  const GENERIC_ANSWER_INTENT_TOKENS = new Set([
7
9
  'capabilities',
8
10
  'capability',
@@ -55,7 +57,7 @@ export async function answerKnowledgeQuery(context, input) {
55
57
  results: [],
56
58
  };
57
59
  }
58
- const llmAnswer = await synthesizeAnswer(context.llm ?? null, input.query, mode, evidence);
60
+ const llmAnswer = await synthesizeAnswer(context.llm ?? null, input.query, mode, evidence, input.timeoutMs);
59
61
  const facts = filterFactsForQuery(input.query, uniqueNodes(evidence.flatMap((item) => item.facts))).slice(0, 24);
60
62
  const sources = uniqueSources(evidence.flatMap((item) => item.source ? [item.source] : []))
61
63
  .slice(0, limit)
@@ -71,6 +73,18 @@ export async function answerKnowledgeQuery(context, input) {
71
73
  linkedObjects,
72
74
  });
73
75
  const featureIntent = hasFeatureIntentForQuery(input.query);
76
+ const evidenceGap = featureIntent && answerNeedsFeatureGap({
77
+ query: input.query,
78
+ text: llmAnswer?.answer,
79
+ facts,
80
+ sources,
81
+ linkedObjects,
82
+ })
83
+ ? await persistAnswerGap(context.store, gapSpaceId, input.query, 'Evidence matched the subject but did not include enough concrete source-backed feature or specification facts.', {
84
+ sources,
85
+ linkedObjects,
86
+ })
87
+ : null;
74
88
  const text = cleanSynthesizedAnswer(llmAnswer?.answer?.trim() || renderFallbackAnswer(input.query, mode, evidence), featureIntent);
75
89
  return {
76
90
  ok: true,
@@ -83,7 +97,7 @@ export async function answerKnowledgeQuery(context, input) {
83
97
  sources: input.includeSources === false ? [] : sources,
84
98
  linkedObjects,
85
99
  facts,
86
- gaps,
100
+ gaps: evidenceGap ? uniqueNodes([...gaps, evidenceGap]) : gaps,
87
101
  synthesized: Boolean(llmAnswer?.answer),
88
102
  },
89
103
  results: evidence.map(toSearchResult),
@@ -182,13 +196,16 @@ function collectAnswerEvidence(store, input, spaceId, limit) {
182
196
  .sort((left, right) => right.score - left.score || left.id.localeCompare(right.id));
183
197
  return pruneEvidence(items, limit, broadHomeAssistantAlias);
184
198
  }
185
- async function synthesizeAnswer(llm, query, mode, evidence) {
199
+ async function synthesizeAnswer(llm, query, mode, evidence, requestedTimeoutMs) {
186
200
  if (!llm)
187
201
  return null;
188
- const response = await llm.completeJson({
202
+ const timeoutMs = clampTimeoutMs(requestedTimeoutMs, 15_000, 1_000, 15_000);
203
+ const controller = new AbortController();
204
+ const response = await withTimeoutOrNull(llm.completeJson({
189
205
  purpose: 'knowledge-answer-synthesis',
190
206
  maxTokens: mode === 'detailed' ? 2200 : mode === 'concise' ? 700 : 1400,
191
- timeoutMs: 15_000,
207
+ signal: controller.signal,
208
+ timeoutMs,
192
209
  systemPrompt: [
193
210
  'You answer questions from a GoodVibes self-improving knowledge wiki.',
194
211
  'Use only the supplied evidence. Synthesize the answer for the user intent rather than dumping snippets.',
@@ -209,7 +226,8 @@ async function synthesizeAnswer(llm, query, mode, evidence) {
209
226
  gaps: [{ question: 'unanswered follow-up gap', reason: 'missing evidence', severity: 'info' }],
210
227
  },
211
228
  }),
212
- });
229
+ }), timeoutMs);
230
+ controller.abort();
213
231
  return normalizeLlmAnswer(response);
214
232
  }
215
233
  function renderEvidenceForPrompt(evidence) {
@@ -321,6 +339,7 @@ async function persistAnswerGap(store, spaceId, query, reason, context = {}) {
321
339
  const subject = context.subject ?? linkedObjects[0]?.title;
322
340
  const fingerprint = answerGapFingerprint(spaceId, query, subject, linkedObjects[0]?.id);
323
341
  const id = `sem-answer-gap-${fingerprint}`;
342
+ const existing = store.getNode(id);
324
343
  const node = await store.upsertNode({
325
344
  id,
326
345
  kind: 'knowledge_gap',
@@ -338,6 +357,9 @@ async function persistAnswerGap(store, spaceId, query, reason, context = {}) {
338
357
  subjectFingerprint: fingerprint,
339
358
  sourceIds: sources.map((source) => source.id),
340
359
  linkedObjectIds: linkedObjects.map((node) => node.id),
360
+ repairStatus: readString(existing?.metadata.repairStatus) ?? 'open',
361
+ visibility: 'refinement',
362
+ displayRole: 'knowledge-gap',
341
363
  }),
342
364
  });
343
365
  for (const source of sources) {
@@ -500,27 +522,6 @@ function evidenceWindows(text, tokens) {
500
522
  }
501
523
  return uniqueStrings(windows);
502
524
  }
503
- function cleanSynthesizedAnswer(text, featureIntent) {
504
- if (!featureIntent)
505
- return text;
506
- const blocks = text.split(/\n{2,}/).map((block) => block.trim()).filter(Boolean);
507
- const cleanedBlocks = blocks.map((block) => {
508
- const lines = block.split(/\n/).map((line) => line.trim()).filter(Boolean);
509
- const kept = lines.filter((line) => !isLowValueFeatureOrSpecText(line));
510
- if (kept.length > 0 && kept.length < lines.length)
511
- return kept.join('\n');
512
- if (lines.length > 1)
513
- return kept.join('\n');
514
- const sentences = splitSentences(block, 600);
515
- const keptSentences = sentences.filter((sentence) => !isLowValueFeatureOrSpecText(sentence));
516
- return keptSentences.length > 0 && keptSentences.length < sentences.length
517
- ? keptSentences.join(' ')
518
- : block;
519
- }).filter(Boolean);
520
- return cleanedBlocks.length > 0
521
- ? cleanedBlocks.join('\n\n')
522
- : 'The available evidence did not contain source-backed feature or specification details after filtering manual boilerplate.';
523
- }
524
525
  function expandQueryTokens(tokens) {
525
526
  const expansions = {
526
527
  capabilities: ['capability', 'feature', 'features', 'function', 'functions', 'supports', 'specifications'],
@@ -223,8 +223,10 @@ async function persistSemanticExtraction(store, source, extraction, semantic, op
223
223
  await linkRelation(store, entities, facts, relation, spaceId, semantic.extractor);
224
224
  }
225
225
  for (const gap of semantic.gaps.slice(0, 32)) {
226
+ const id = `sem-gap-${semanticHash(spaceId, source.id, gap.question)}`;
227
+ const existing = store.getNode(id);
226
228
  const node = await store.upsertNode({
227
- id: `sem-gap-${semanticHash(spaceId, source.id, gap.question)}`,
229
+ id,
228
230
  kind: 'knowledge_gap',
229
231
  slug: semanticSlug(`${spaceId}-gap-${gap.question}`),
230
232
  title: gap.question,
@@ -239,6 +241,9 @@ async function persistSemanticExtraction(store, source, extraction, semantic, op
239
241
  extractionId: extraction?.id,
240
242
  extractor: semantic.extractor,
241
243
  textHash: options.textHash,
244
+ repairStatus: readString(existing?.metadata.repairStatus) ?? 'open',
245
+ visibility: 'refinement',
246
+ displayRole: 'knowledge-gap',
242
247
  }),
243
248
  });
244
249
  gaps.push(node);
@@ -24,6 +24,8 @@ export interface WebGapRepairOptions {
24
24
  readonly searchService: GapRepairSearch;
25
25
  readonly ingestService: GapRepairIngest;
26
26
  readonly maxResults?: number;
27
+ readonly maxSearches?: number;
28
+ readonly maxSources?: number;
27
29
  readonly minDistinctDomains?: number;
28
30
  readonly minConfidence?: number;
29
31
  readonly maxIngest?: number;
@@ -1 +1 @@
1
- {"version":3,"file":"gap-repair.d.ts","sourceRoot":"","sources":["../../../../../src/_internal/platform/knowledge/semantic/gap-repair.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,gBAAgB,EAChB,iBAAiB,EAElB,MAAM,2BAA2B,CAAC;AAEnC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,KAAK,EACV,4BAA4B,EAG7B,MAAM,YAAY,CAAC;AAGpB,UAAU,eAAe;IACvB,MAAM,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;CAC/D;AAED,UAAU,eAAe;IACvB,SAAS,CAAC,KAAK,EAAE;QACf,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;QACrB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QACxB,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;QAClC,QAAQ,CAAC,UAAU,CAAC,EAAE,mBAAmB,CAAC;QAC1C,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;QAC9B,QAAQ,CAAC,iBAAiB,CAAC,EAAE,OAAO,CAAC;QACrC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KAC7C,GAAG,OAAO,CAAC;QAAE,QAAQ,CAAC,MAAM,EAAE;YAAE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;YAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;SAAE,CAAA;KAAE,CAAC,CAAC;CACpF;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,aAAa,EAAE,eAAe,CAAC;IACxC,QAAQ,CAAC,aAAa,EAAE,eAAe,CAAC;IACxC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;CACnC;AAmBD,wBAAgB,6BAA6B,CAAC,OAAO,EAAE,mBAAmB,GAAG,4BAA4B,CAExG"}
1
+ {"version":3,"file":"gap-repair.d.ts","sourceRoot":"","sources":["../../../../../src/_internal/platform/knowledge/semantic/gap-repair.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,gBAAgB,EAChB,iBAAiB,EAElB,MAAM,2BAA2B,CAAC;AAEnC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,KAAK,EACV,4BAA4B,EAG7B,MAAM,YAAY,CAAC;AAIpB,UAAU,eAAe;IACvB,MAAM,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;CAC/D;AAED,UAAU,eAAe;IACvB,SAAS,CAAC,KAAK,EAAE;QACf,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;QACrB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QACxB,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;QAClC,QAAQ,CAAC,UAAU,CAAC,EAAE,mBAAmB,CAAC;QAC1C,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;QAC9B,QAAQ,CAAC,iBAAiB,CAAC,EAAE,OAAO,CAAC;QACrC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KAC7C,GAAG,OAAO,CAAC;QAAE,QAAQ,CAAC,MAAM,EAAE;YAAE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;YAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;SAAE,CAAA;KAAE,CAAC,CAAC;CACpF;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,aAAa,EAAE,eAAe,CAAC;IACxC,QAAQ,CAAC,aAAa,EAAE,eAAe,CAAC;IACxC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;CACnC;AAyBD,wBAAgB,6BAA6B,CAAC,OAAO,EAAE,mBAAmB,GAAG,4BAA4B,CAExG"}
@@ -1,11 +1,12 @@
1
1
  import { canonicalizeUri } from '../internal.js';
2
+ import { withTimeout } from './timeouts.js';
2
3
  import { readString, scoreSemanticText, tokenizeSemanticQuery, uniqueStrings } from './utils.js';
3
4
  export function createWebKnowledgeGapRepairer(options) {
4
5
  return async (request) => repairKnowledgeGapsWithWeb(request, options);
5
6
  }
6
7
  async function repairKnowledgeGapsWithWeb(request, options) {
7
- const query = buildGapRepairQuery(request);
8
- if (!query) {
8
+ const queries = buildGapRepairQueries(request);
9
+ if (queries.length === 0) {
9
10
  return {
10
11
  searched: false,
11
12
  ingestedSourceIds: [],
@@ -13,46 +14,55 @@ async function repairKnowledgeGapsWithWeb(request, options) {
13
14
  reason: 'No concrete subject was available for gap repair.',
14
15
  };
15
16
  }
16
- let response;
17
- try {
18
- response = await withTimeout(options.searchService.search({
19
- query,
20
- maxResults: Math.max(2, Math.min(12, options.maxResults ?? 6)),
21
- verbosity: 'snippets',
22
- safeSearch: 'moderate',
23
- metadata: {
24
- purpose: 'knowledge-gap-repair',
25
- knowledgeSpaceId: request.spaceId,
26
- },
27
- }), Math.max(1_000, options.searchTimeoutMs ?? 8_000), 'Semantic gap repair search timed out.');
28
- }
29
- catch (error) {
30
- return {
31
- searched: true,
32
- query,
33
- ingestedSourceIds: [],
34
- skippedUrls: [],
35
- reason: error instanceof Error ? error.message : String(error),
36
- };
17
+ const existing = existingSources(request);
18
+ const sourceLimit = Math.max(2, Math.min(5, request.maxSources ?? options.maxSources ?? options.maxIngest ?? 5));
19
+ const searchLimit = Math.max(1, Math.min(5, options.maxSearches ?? queries.length));
20
+ const searchResults = new Map();
21
+ const providerIds = new Set();
22
+ let lastError;
23
+ for (const query of queries.slice(0, searchLimit)) {
24
+ try {
25
+ const response = await withTimeout(options.searchService.search({
26
+ query,
27
+ maxResults: Math.max(sourceLimit, Math.min(8, options.maxResults ?? sourceLimit)),
28
+ verbosity: 'snippets',
29
+ safeSearch: 'moderate',
30
+ metadata: {
31
+ purpose: 'knowledge-gap-repair',
32
+ knowledgeSpaceId: request.spaceId,
33
+ },
34
+ }), Math.max(1_000, options.searchTimeoutMs ?? 8_000), 'Semantic gap repair search timed out.');
35
+ if (response.providerId)
36
+ providerIds.add(response.providerId);
37
+ for (const result of response.results) {
38
+ const canonical = canonicalizeUri(result.url);
39
+ if (!canonical || searchResults.has(canonical))
40
+ continue;
41
+ searchResults.set(canonical, { ...result, searchQuery: query, searchProviderId: response.providerId });
42
+ }
43
+ const partial = selectGapRepairCandidates([...searchResults.values()], existing, options, request, sourceLimit);
44
+ if (partial.length >= Math.max(2, options.minDistinctDomains ?? 2))
45
+ break;
46
+ }
47
+ catch (error) {
48
+ lastError = error instanceof Error ? error.message : String(error);
49
+ }
37
50
  }
38
- const existing = new Set(request.sources.flatMap((source) => [
39
- canonicalizeUri(source.canonicalUri ?? ''),
40
- canonicalizeUri(source.sourceUri ?? ''),
41
- ].filter((value) => Boolean(value))));
42
- const candidates = selectGapRepairCandidates(response.results, existing, options, query, request);
51
+ const allResults = [...searchResults.values()];
52
+ const candidates = selectGapRepairCandidates(allResults, existing, options, request, sourceLimit);
43
53
  if (candidates.length < Math.max(2, options.minDistinctDomains ?? 2)) {
44
54
  return {
45
55
  searched: true,
46
- query,
56
+ query: queries[0],
47
57
  ingestedSourceIds: [],
48
- skippedUrls: response.results.map((result) => result.url),
49
- sourceAssessments: buildSourceAssessments(response.results, candidates, existing, options, query, request),
50
- reason: 'Fewer than two distinct external sources were found for source-backed gap repair.',
58
+ skippedUrls: allResults.map((result) => result.url),
59
+ sourceAssessments: buildSourceAssessments(allResults, candidates, existing, options, request),
60
+ reason: lastError ?? 'Fewer than two distinct external sources were found for source-backed gap repair.',
51
61
  };
52
62
  }
53
63
  const ingestedSourceIds = [];
54
64
  const skippedUrls = [];
55
- for (const result of candidates.slice(0, Math.max(2, Math.min(4, options.maxIngest ?? 2)))) {
65
+ for (const result of candidates.slice(0, Math.max(2, Math.min(sourceLimit, options.maxIngest ?? sourceLimit)))) {
56
66
  try {
57
67
  const ingested = await withTimeout(options.ingestService.ingestUrl({
58
68
  url: result.url,
@@ -64,8 +74,9 @@ async function repairKnowledgeGapsWithWeb(request, options) {
64
74
  knowledgeSpaceId: request.spaceId,
65
75
  sourceDiscovery: {
66
76
  purpose: 'semantic-gap-repair',
67
- query,
68
- providerId: response.providerId,
77
+ query: result.searchQuery,
78
+ searchQueries: queries.slice(0, searchLimit),
79
+ providerId: result.searchProviderId ?? [...providerIds][0],
69
80
  gapIds: request.gaps.map((gap) => gap.id),
70
81
  gapQuestions: request.gaps.map((gap) => gap.title),
71
82
  originalSourceIds: request.sources.map((source) => source.id),
@@ -76,6 +87,7 @@ async function repairKnowledgeGapsWithWeb(request, options) {
76
87
  sourceDomain: result.domain ?? safeDomain(result.url),
77
88
  trustReason: result.reasons.join(', '),
78
89
  agreementSourceCount: candidates.length,
90
+ checkedSourceLimit: sourceLimit,
79
91
  selectedUrl: result.url,
80
92
  searchedAt: Date.now(),
81
93
  },
@@ -92,27 +104,30 @@ async function repairKnowledgeGapsWithWeb(request, options) {
92
104
  }
93
105
  return {
94
106
  searched: true,
95
- query,
107
+ query: queries[0],
96
108
  ingestedSourceIds,
97
109
  skippedUrls,
98
- sourceAssessments: buildSourceAssessments(response.results, candidates, existing, options, query, request),
110
+ sourceAssessments: buildSourceAssessments(allResults, candidates, existing, options, request),
99
111
  ...(ingestedSourceIds.length < 2 ? { reason: 'Gap repair searched but fewer than two sources were ingested.' } : {}),
100
112
  };
101
113
  }
102
- function buildGapRepairQuery(request) {
114
+ function buildGapRepairQueries(request) {
103
115
  const subject = bestSubject(request);
104
116
  if (!subject)
105
- return null;
106
- const gapTerms = uniqueStrings(request.gaps.flatMap((gap) => [
117
+ return [];
118
+ const gapTerms = clampSearchTerms(uniqueStrings(request.gaps.flatMap((gap) => [
107
119
  gap.title,
108
120
  gap.summary,
109
121
  readString(gap.metadata.reason),
110
- ])).join(' ');
122
+ ])).join(' '));
123
+ const profileTerms = inferGapProfileTerms(request);
111
124
  return uniqueStrings([
112
- subject,
113
- gapTerms,
114
- 'official specifications features',
115
- ]).join(' ');
125
+ [subject, gapTerms, 'official specifications'].filter(Boolean).join(' '),
126
+ [subject, profileTerms, 'product specifications'].filter(Boolean).join(' '),
127
+ [subject, profileTerms, 'features ports connectivity audio display'].filter(Boolean).join(' '),
128
+ [subject, 'manufacturer product page specifications'].join(' '),
129
+ [subject, 'datasheet manual specifications'].join(' '),
130
+ ].map((query) => query.replace(/\s+/g, ' ').trim()).filter(Boolean));
116
131
  }
117
132
  function bestSubject(request) {
118
133
  const linked = request.linkedObjects[0];
@@ -129,8 +144,39 @@ function bestSubject(request) {
129
144
  source?.title,
130
145
  ]).join(' ') || null;
131
146
  }
132
- function selectGapRepairCandidates(results, existingCanonicalUris, options, query, request) {
133
- const tokens = tokenizeSemanticQuery(query);
147
+ function inferGapProfileTerms(request) {
148
+ const text = request.gaps.map((gap) => `${gap.title} ${gap.summary ?? ''}`).join(' ').toLowerCase();
149
+ const terms = [];
150
+ if (/\b(port|ports|hdmi|usb|optical|rf|antenna|ethernet|rs-?232|composite|component|input|output|i\/o)\b/.test(text)) {
151
+ terms.push('ports inputs outputs connectivity');
152
+ }
153
+ if (/\b(bluetooth|wifi|wi-fi|wireless|network)\b/.test(text))
154
+ terms.push('wireless bluetooth wi-fi network');
155
+ if (/\b(refresh|hz|hdr|dolby|vision|gaming|vrr|allm|freesync)\b/.test(text))
156
+ terms.push('refresh rate hdr gaming vrr allm');
157
+ if (/\b(audio|speaker|sound|earc|arc)\b/.test(text))
158
+ terms.push('audio speakers earc arc');
159
+ if (/\b(display|screen|resolution|panel|lcd|oled|qled|nanocell)\b/.test(text))
160
+ terms.push('display resolution panel');
161
+ return uniqueStrings([
162
+ ...terms,
163
+ ...tokenizeSemanticQuery(text)
164
+ .filter((token) => token.length >= 3)
165
+ .filter((token) => !['what', 'does', 'have', 'which', 'with', 'from', 'that', 'this', 'current', 'source', 'text'].includes(token))
166
+ .slice(0, 12),
167
+ ]).join(' ');
168
+ }
169
+ function clampSearchTerms(value) {
170
+ return tokenizeSemanticQuery(value).slice(0, 24).join(' ');
171
+ }
172
+ function existingSources(request) {
173
+ return new Set(request.sources.flatMap((source) => [
174
+ canonicalizeUri(source.canonicalUri ?? ''),
175
+ canonicalizeUri(source.sourceUri ?? ''),
176
+ ].filter((value) => Boolean(value))));
177
+ }
178
+ function selectGapRepairCandidates(results, existingCanonicalUris, options, request, sourceLimit) {
179
+ const tokens = tokenizeSemanticQuery([bestSubject(request), inferGapProfileTerms(request)].filter(Boolean).join(' '));
134
180
  const minimumConfidence = Math.max(1, Math.min(100, options.minConfidence ?? 70));
135
181
  const byDomain = new Map();
136
182
  for (const result of results) {
@@ -143,14 +189,14 @@ function selectGapRepairCandidates(results, existingCanonicalUris, options, quer
143
189
  const domain = result.domain ?? safeDomain(result.url);
144
190
  if (!domain || byDomain.has(domain))
145
191
  continue;
146
- const assessment = assessGapRepairSource(result, query, request);
192
+ const assessment = assessGapRepairSource(result, result.searchQuery, request);
147
193
  if (assessment.confidence < minimumConfidence)
148
194
  continue;
149
195
  byDomain.set(domain, { ...result, confidence: assessment.confidence, reasons: assessment.reasons });
150
196
  }
151
197
  return [...byDomain.values()]
152
198
  .sort((left, right) => right.confidence - left.confidence || left.rank - right.rank)
153
- .slice(0, Math.max(2, Math.min(8, options.maxResults ?? 6)));
199
+ .slice(0, sourceLimit);
154
200
  }
155
201
  function assessGapRepairSource(result, query, request) {
156
202
  const searchable = [result.title, result.snippet, result.url, result.domain].filter(Boolean).join(' ').toLowerCase();
@@ -202,18 +248,19 @@ function assessGapRepairSource(result, query, request) {
202
248
  ...(result.title ? { title: result.title } : {}),
203
249
  ...(domain ? { domain } : {}),
204
250
  rank: result.rank,
251
+ query: result.searchQuery,
205
252
  confidence: Math.max(0, Math.min(100, score)),
206
253
  reasons,
207
254
  ...(reasons.length > 0 ? { trustReason: reasons.join(', ') } : {}),
208
255
  };
209
256
  }
210
- function buildSourceAssessments(results, candidates, existingCanonicalUris, options, query, request) {
257
+ function buildSourceAssessments(results, candidates, existingCanonicalUris, options, request) {
211
258
  const accepted = new Set(candidates.map((candidate) => canonicalizeUri(candidate.url)));
212
259
  const acceptedDomains = new Set(candidates.map((candidate) => candidate.domain ?? safeDomain(candidate.url)).filter(Boolean));
213
260
  const minimumConfidence = Math.max(1, Math.min(100, options.minConfidence ?? 70));
214
- const tokens = tokenizeSemanticQuery(query);
261
+ const tokens = tokenizeSemanticQuery([bestSubject(request), inferGapProfileTerms(request)].filter(Boolean).join(' '));
215
262
  return results.map((result) => {
216
- const assessment = assessGapRepairSource(result, query, request);
263
+ const assessment = assessGapRepairSource(result, result.searchQuery, request);
217
264
  const canonical = canonicalizeUri(result.url);
218
265
  const domain = result.domain ?? safeDomain(result.url);
219
266
  const isAccepted = Boolean(canonical && accepted.has(canonical));
@@ -282,19 +329,6 @@ function safeDomain(url) {
282
329
  return undefined;
283
330
  }
284
331
  }
285
- async function withTimeout(promise, timeoutMs, message) {
286
- let timer;
287
- const timeout = new Promise((_, reject) => {
288
- timer = setTimeout(() => reject(new Error(message)), timeoutMs);
289
- });
290
- try {
291
- return await Promise.race([promise, timeout]);
292
- }
293
- finally {
294
- if (timer)
295
- clearTimeout(timer);
296
- }
297
- }
298
332
  async function yieldToEventLoop() {
299
333
  await new Promise((resolve) => setTimeout(resolve, 0));
300
334
  }
@@ -1 +1 @@
1
- {"version":3,"file":"self-improvement.d.ts","sourceRoot":"","sources":["../../../../../src/_internal/platform/knowledge/semantic/self-improvement.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAUlD,OAAO,KAAK,EACV,4BAA4B,EAC5B,iCAAiC,EACjC,kCAAkC,EACnC,MAAM,YAAY,CAAC;AAkBpB,UAAU,kBAAkB;IAC1B,QAAQ,CAAC,KAAK,EAAE,cAAc,CAAC;IAC/B,QAAQ,CAAC,WAAW,CAAC,EAAE,4BAA4B,GAAG,IAAI,CAAC;IAC3D,QAAQ,CAAC,gBAAgB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CACxC;AAUD,wBAAsB,mCAAmC,CACvD,OAAO,EAAE,kBAAkB,EAC3B,KAAK,GAAE,iCAAsC,GAC5C,OAAO,CAAC,kCAAkC,CAAC,CAmL7C"}
1
+ {"version":3,"file":"self-improvement.d.ts","sourceRoot":"","sources":["../../../../../src/_internal/platform/knowledge/semantic/self-improvement.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAUlD,OAAO,KAAK,EACV,4BAA4B,EAC5B,iCAAiC,EACjC,kCAAkC,EACnC,MAAM,YAAY,CAAC;AAWpB,UAAU,kBAAkB;IAC1B,QAAQ,CAAC,KAAK,EAAE,cAAc,CAAC;IAC/B,QAAQ,CAAC,WAAW,CAAC,EAAE,4BAA4B,GAAG,IAAI,CAAC;IAC3D,QAAQ,CAAC,gBAAgB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CACxC;AAUD,wBAAsB,mCAAmC,CACvD,OAAO,EAAE,kBAAkB,EAC3B,KAAK,GAAE,iCAAsC,GAC5C,OAAO,CAAC,kCAAkC,CAAC,CAsL7C"}
@@ -2,7 +2,8 @@ import { isGeneratedKnowledgeSource } from '../generated-projections.js';
2
2
  import { yieldEvery, yieldToEventLoop } from '../cooperative.js';
3
3
  import { getKnowledgeSpaceId, normalizeKnowledgeSpaceId } from '../spaces.js';
4
4
  import { recoverNoRepairerTasks, recoverStaleActiveTasks } from './self-improvement-recovery.js';
5
- import { readRecord, readString, semanticHash, semanticMetadata, semanticSlug, sourceKnowledgeSpace, uniqueStrings, } from './utils.js';
5
+ import { readRecord, readString, semanticHash, semanticMetadata, semanticSlug, sourceKnowledgeSpace, uniqueStrings } from './utils.js';
6
+ import { withTimeout } from './timeouts.js';
6
7
  const RETRY_DELAY_MS = 6 * 60 * 60 * 1000;
7
8
  const DEFAULT_REFINEMENT_LIMIT = 12;
8
9
  const MAX_REFINEMENT_LIMIT = 24;
@@ -114,14 +115,17 @@ export async function runKnowledgeSemanticSelfImprovement(context, input = {}) {
114
115
  context.activeGapRepairs.add(repairKey);
115
116
  try {
116
117
  task = await updateRefinementTask(context.store, task, 'searching', 'Searching for source-backed repair evidence.', { query: gap.title });
117
- const result = await context.gapRepairer({
118
+ const remainingMs = Math.max(1_000, startedAt + maxRunMs - Date.now());
119
+ const result = await withTimeout(context.gapRepairer({
118
120
  spaceId,
119
121
  query: gap.title,
120
122
  gaps: [gap],
121
123
  sources: gapContext.sources,
122
124
  linkedObjects: gapContext.linkedObjects,
123
125
  facts: gapContext.facts,
124
- });
126
+ maxSources: 5,
127
+ deadlineAt: Date.now() + remainingMs,
128
+ }), remainingMs, 'Semantic gap repair exceeded its run budget.');
125
129
  if (result?.searched)
126
130
  searched += 1;
127
131
  ingestedSources += result?.ingestedSourceIds.length ?? 0;
@@ -398,8 +402,8 @@ async function upsertRefinementTaskForGap(store, spaceId, context, trigger, stat
398
402
  trigger,
399
403
  priority: refinementPriority(context.gap),
400
404
  budget: {
401
- maxSearches: 1,
402
- maxSources: 3,
405
+ maxSearches: 5,
406
+ maxSources: 5,
403
407
  maxLlmCalls: 1,
404
408
  },
405
409
  attemptCount,
@@ -0,0 +1,4 @@
1
+ export declare function withTimeout<T>(promise: Promise<T>, timeoutMs: number, message: string): Promise<T>;
2
+ export declare function withTimeoutOrNull<T>(promise: Promise<T>, timeoutMs: number): Promise<T | null>;
3
+ export declare function clampTimeoutMs(value: number | undefined, fallbackMs: number, minMs: number, maxMs: number): number;
4
+ //# sourceMappingURL=timeouts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timeouts.d.ts","sourceRoot":"","sources":["../../../../../src/_internal/platform/knowledge/semantic/timeouts.ts"],"names":[],"mappings":"AAAA,wBAAsB,WAAW,CAAC,CAAC,EACjC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,EACnB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,CAAC,CAAC,CAUZ;AAED,wBAAsB,iBAAiB,CAAC,CAAC,EACvC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,EACnB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAMnB;AAED,wBAAgB,cAAc,CAC5B,KAAK,EAAE,MAAM,GAAG,SAAS,EACzB,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,GACZ,MAAM,CAGR"}
@@ -0,0 +1,26 @@
1
+ export async function withTimeout(promise, timeoutMs, message) {
2
+ let timer;
3
+ const timeout = new Promise((_, reject) => {
4
+ timer = setTimeout(() => reject(new Error(message)), Math.max(1, timeoutMs));
5
+ });
6
+ try {
7
+ return await Promise.race([promise, timeout]);
8
+ }
9
+ finally {
10
+ if (timer)
11
+ clearTimeout(timer);
12
+ }
13
+ }
14
+ export async function withTimeoutOrNull(promise, timeoutMs) {
15
+ try {
16
+ return await withTimeout(promise, timeoutMs, 'operation timed out');
17
+ }
18
+ catch {
19
+ return null;
20
+ }
21
+ }
22
+ export function clampTimeoutMs(value, fallbackMs, minMs, maxMs) {
23
+ if (typeof value !== 'number' || !Number.isFinite(value))
24
+ return fallbackMs;
25
+ return Math.max(minMs, Math.min(maxMs, Math.trunc(value)));
26
+ }
@@ -85,6 +85,7 @@ export interface KnowledgeSemanticAnswerInput {
85
85
  readonly linkedObjects?: readonly KnowledgeNodeRecord[];
86
86
  readonly noMatchMessage?: string;
87
87
  readonly autoRepairGaps?: boolean;
88
+ readonly timeoutMs?: number;
88
89
  }
89
90
  export interface KnowledgeSemanticAnswer {
90
91
  readonly text: string;
@@ -118,6 +119,9 @@ export interface KnowledgeSemanticGapRepairRequest {
118
119
  readonly sources: readonly KnowledgeSourceRecord[];
119
120
  readonly linkedObjects: readonly KnowledgeNodeRecord[];
120
121
  readonly facts: readonly KnowledgeNodeRecord[];
122
+ readonly maxSources?: number;
123
+ readonly deadlineAt?: number;
124
+ readonly signal?: AbortSignal;
121
125
  }
122
126
  export interface KnowledgeSemanticGapRepairResult {
123
127
  readonly searched: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../src/_internal/platform/knowledge/semantic/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,mBAAmB,EACnB,qBAAqB,EACrB,qBAAqB,EACtB,MAAM,aAAa,CAAC;AAErB,MAAM,MAAM,yBAAyB,GACjC,SAAS,GACT,YAAY,GACZ,eAAe,GACf,UAAU,GACV,WAAW,GACX,SAAS,GACT,aAAa,GACb,eAAe,GACf,eAAe,GACf,iBAAiB,GACjB,cAAc,GACd,MAAM,CAAC;AAEX,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,IAAI,EAAE,yBAAyB,CAAC;IACzC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,QAAQ,CAAC,WAAW,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC1C;AAED,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC7C;AAED,MAAM,WAAW,8BAA8B;IAC7C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC;CAClD;AAED,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,SAAS,4BAA4B,EAAE,CAAC;IAC3D,QAAQ,CAAC,KAAK,EAAE,SAAS,0BAA0B,EAAE,CAAC;IACtD,QAAQ,CAAC,SAAS,EAAE,SAAS,8BAA8B,EAAE,CAAC;IAC9D,QAAQ,CAAC,IAAI,EAAE,SAAS,yBAAyB,EAAE,CAAC;IACpD,QAAQ,CAAC,QAAQ,CAAC,EAAE;QAClB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QACxB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;KAC5B,CAAC;IACF,QAAQ,CAAC,SAAS,EAAE,KAAK,GAAG,eAAe,CAAC;CAC7C;AAED,MAAM,WAAW,oBAAoB;IACnC,YAAY,CAAC,KAAK,EAAE;QAClB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;QAC9B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;QACxB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAC5B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;QACzB,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC;QAC9B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;KAC7B,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;IAC5B,YAAY,CAAC,KAAK,EAAE;QAClB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;QAC9B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;QACxB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAC5B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;QACzB,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC;QAC9B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;KAC7B,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;CAC5B;AAED,MAAM,WAAW,iCAAiC;IAChD,QAAQ,CAAC,MAAM,EAAE,qBAAqB,CAAC;IACvC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,SAAS,CAAC,EAAE,KAAK,GAAG,eAAe,CAAC;IAC7C,QAAQ,CAAC,KAAK,EAAE,SAAS,mBAAmB,EAAE,CAAC;IAC/C,QAAQ,CAAC,QAAQ,EAAE,SAAS,mBAAmB,EAAE,CAAC;IAClD,QAAQ,CAAC,QAAQ,CAAC,EAAE,mBAAmB,CAAC;IACxC,QAAQ,CAAC,IAAI,EAAE,SAAS,mBAAmB,EAAE,CAAC;CAC/C;AAED,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,GAAG,UAAU,GAAG,UAAU,CAAC;IACpD,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,cAAc,CAAC,EAAE,OAAO,CAAC;IAClC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,OAAO,CAAC;IACrC,QAAQ,CAAC,oBAAoB,CAAC,EAAE,OAAO,CAAC;IACxC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAChD,QAAQ,CAAC,gBAAgB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC9C,QAAQ,CAAC,gBAAgB,CAAC,EAAE,OAAO,CAAC;IACpC,QAAQ,CAAC,aAAa,CAAC,EAAE,SAAS,mBAAmB,EAAE,CAAC;IACxD,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,cAAc,CAAC,EAAE,OAAO,CAAC;CACnC;AAED,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,OAAO,EAAE,SAAS,qBAAqB,EAAE,CAAC;IACnD,QAAQ,CAAC,aAAa,EAAE,SAAS,mBAAmB,EAAE,CAAC;IACvD,QAAQ,CAAC,KAAK,EAAE,SAAS,mBAAmB,EAAE,CAAC;IAC/C,QAAQ,CAAC,IAAI,EAAE,SAAS,mBAAmB,EAAE,CAAC;IAC9C,QAAQ,CAAC,iBAAiB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC/C,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;CAC/B;AAED,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC;IAClB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,uBAAuB,CAAC;IACzC,QAAQ,CAAC,OAAO,EAAE,SAAS,qBAAqB,EAAE,CAAC;CACpD;AAED,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,aAAa,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3C,QAAQ,CAAC,WAAW,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACzC,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,yBAAyB,EAAE,CAAC;CACtD;AAED,MAAM,WAAW,iCAAiC;IAChD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,SAAS,mBAAmB,EAAE,CAAC;IAC9C,QAAQ,CAAC,OAAO,EAAE,SAAS,qBAAqB,EAAE,CAAC;IACnD,QAAQ,CAAC,aAAa,EAAE,SAAS,mBAAmB,EAAE,CAAC;IACvD,QAAQ,CAAC,KAAK,EAAE,SAAS,mBAAmB,EAAE,CAAC;CAChD;AAED,MAAM,WAAW,gCAAgC;IAC/C,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,iBAAiB,EAAE,SAAS,MAAM,EAAE,CAAC;IAC9C,QAAQ,CAAC,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC;IACxC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,SAAS;QACpC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;QACrB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QACxB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QACzB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QACvB,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;QAC5B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;QAC5B,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;QACpC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;QAC9B,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;KACnC,EAAE,CAAC;IACJ,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,MAAM,4BAA4B,GAAG,CACzC,OAAO,EAAE,iCAAiC,KACvC,OAAO,CAAC,gCAAgC,GAAG,IAAI,CAAC,CAAC;AAEtD,MAAM,WAAW,iCAAiC;IAChD,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACvC,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC;IAC/B,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,MAAM,CAAC,EAAE,QAAQ,GAAG,gBAAgB,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,GAAG,QAAQ,CAAC;CAC/F;AAED,MAAM,WAAW,kCAAkC;IACjD,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,eAAe,CAAC,EAAE,OAAO,CAAC;IACnC,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,QAAQ,CAAC,iBAAiB,EAAE,SAAS,MAAM,EAAE,CAAC;IAC9C,QAAQ,CAAC,MAAM,EAAE,SAAS;QAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CAChF"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../src/_internal/platform/knowledge/semantic/types.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { readFileSync } from 'node:fs';
2
2
  import { join } from 'node:path';
3
- let version = '0.28.11';
3
+ let version = '0.28.13';
4
4
  try {
5
5
  const pkg = JSON.parse(readFileSync(join(import.meta.dir, '..', '..', 'package.json'), 'utf-8'));
6
6
  version = pkg.version ?? version;