@pellux/goodvibes-sdk 0.28.14 → 0.28.16

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 (38) hide show
  1. package/dist/_internal/contracts/artifacts/operator-contract.json +19 -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 +19 -1
  6. package/dist/_internal/platform/control-plane/operator-contract-schemas-knowledge.d.ts.map +1 -1
  7. package/dist/_internal/platform/control-plane/operator-contract-schemas-knowledge.js +1 -0
  8. package/dist/_internal/platform/knowledge/home-graph/generated-pages.d.ts.map +1 -1
  9. package/dist/_internal/platform/knowledge/home-graph/generated-pages.js +13 -4
  10. package/dist/_internal/platform/knowledge/home-graph/service.d.ts.map +1 -1
  11. package/dist/_internal/platform/knowledge/home-graph/service.js +48 -46
  12. package/dist/_internal/platform/knowledge/semantic/answer-fallback.d.ts.map +1 -1
  13. package/dist/_internal/platform/knowledge/semantic/answer-fallback.js +18 -4
  14. package/dist/_internal/platform/knowledge/semantic/answer.js +3 -0
  15. package/dist/_internal/platform/knowledge/semantic/gap-repair.js +11 -4
  16. package/dist/_internal/platform/knowledge/semantic/self-improvement-promotion.d.ts +11 -0
  17. package/dist/_internal/platform/knowledge/semantic/self-improvement-promotion.d.ts.map +1 -0
  18. package/dist/_internal/platform/knowledge/semantic/self-improvement-promotion.js +256 -0
  19. package/dist/_internal/platform/knowledge/semantic/self-improvement-tasks.d.ts.map +1 -1
  20. package/dist/_internal/platform/knowledge/semantic/self-improvement-tasks.js +9 -1
  21. package/dist/_internal/platform/knowledge/semantic/self-improvement.d.ts.map +1 -1
  22. package/dist/_internal/platform/knowledge/semantic/self-improvement.js +13 -46
  23. package/dist/_internal/platform/knowledge/semantic/service.d.ts.map +1 -1
  24. package/dist/_internal/platform/knowledge/semantic/service.js +55 -10
  25. package/dist/_internal/platform/knowledge/store-refinement.d.ts.map +1 -1
  26. package/dist/_internal/platform/knowledge/store-refinement.js +8 -0
  27. package/dist/_internal/platform/knowledge/store-schema.d.ts.map +1 -1
  28. package/dist/_internal/platform/knowledge/store-schema.js +6 -1
  29. package/dist/_internal/platform/knowledge/store.d.ts +1 -0
  30. package/dist/_internal/platform/knowledge/store.d.ts.map +1 -1
  31. package/dist/_internal/platform/knowledge/store.js +1 -0
  32. package/dist/_internal/platform/knowledge/types.d.ts +2 -0
  33. package/dist/_internal/platform/knowledge/types.d.ts.map +1 -1
  34. package/dist/_internal/platform/state/sqlite-store.d.ts +3 -0
  35. package/dist/_internal/platform/state/sqlite-store.d.ts.map +1 -1
  36. package/dist/_internal/platform/state/sqlite-store.js +19 -0
  37. package/dist/_internal/platform/version.js +1 -1
  38. package/package.json +1 -1
@@ -0,0 +1,256 @@
1
+ import { yieldEvery, yieldToEventLoop } from '../cooperative.js';
2
+ import { getKnowledgeSpaceId } from '../spaces.js';
3
+ import { hasConcreteFeatureSignal, isLowValueFeatureOrSpecText } from './fact-quality.js';
4
+ import { updateRefinementTask } from './self-improvement-tasks.js';
5
+ import { withTimeout } from './timeouts.js';
6
+ import { clampText, normalizeWhitespace, readRecord, readString, semanticHash, semanticMetadata, semanticSlug, sourceSemanticText, splitSentences, uniqueStrings, } from './utils.js';
7
+ export async function promoteRepairSources(context, spaceId, gap, sourceIds, task, deadlineAt) {
8
+ if (context.enrichSource) {
9
+ for (const [index, sourceId] of sourceIds.entries()) {
10
+ await yieldEvery(index, 2);
11
+ const remainingMs = Math.max(0, deadlineAt - Date.now());
12
+ if (remainingMs < 1_000)
13
+ break;
14
+ await withTimeout(context.enrichSource(sourceId, { knowledgeSpaceId: spaceId, force: true }), Math.min(remainingMs, 20_000), 'Semantic repair source enrichment exceeded its run budget.');
15
+ await yieldToEventLoop();
16
+ }
17
+ }
18
+ const promotedFactCount = await promoteRepairEvidenceFacts(context.store, spaceId, gap, sourceIds);
19
+ await linkPromotedFactsToRepairSubjects(context.store, spaceId, gap, sourceIds);
20
+ const usableFactCount = promotedFactCount > 0
21
+ ? promotedFactCount
22
+ : countUsableRepairFacts(context.store, spaceId, sourceIds);
23
+ await updateRefinementTask(context.store, context.store.getRefinementTask(task.id) ?? task, 'verified', 'Accepted repair sources were semantically enriched.', {
24
+ promotedSourceIds: sourceIds,
25
+ promotedFactCount: usableFactCount,
26
+ });
27
+ return usableFactCount;
28
+ }
29
+ async function promoteRepairEvidenceFacts(store, spaceId, gap, sourceIds) {
30
+ const subjects = linkedRepairSubjects(store, spaceId, gap);
31
+ if (subjects.length === 0)
32
+ return 0;
33
+ let promoted = 0;
34
+ for (const sourceId of sourceIds) {
35
+ const source = store.getSource(sourceId);
36
+ if (!source)
37
+ continue;
38
+ const extraction = store.getExtractionBySourceId(source.id);
39
+ const authority = sourceAuthority(source);
40
+ const sentences = selectRepairFactSentences({
41
+ query: gap.title,
42
+ source,
43
+ text: sourceSemanticText(source, extraction),
44
+ });
45
+ for (const [index, sentence] of sentences.entries()) {
46
+ const classification = classifyRepairFact(sentence);
47
+ const fact = await store.upsertNode({
48
+ id: `sem-fact-${semanticHash(spaceId, source.id, gap.id, classification.title, sentence)}`,
49
+ kind: 'fact',
50
+ slug: semanticSlug(`${spaceId}-${classification.title}-${source.id}-${index}`),
51
+ title: classification.title,
52
+ summary: sentence,
53
+ aliases: classification.aliases,
54
+ status: 'active',
55
+ confidence: authority === 'official-vendor' ? 88 : 76,
56
+ sourceId: source.id,
57
+ metadata: semanticMetadata(spaceId, {
58
+ semanticKind: 'fact',
59
+ factKind: classification.kind,
60
+ value: classification.value,
61
+ evidence: sentence,
62
+ labels: classification.labels,
63
+ sourceId: source.id,
64
+ gapId: gap.id,
65
+ linkedObjectIds: subjects.map((subject) => subject.id),
66
+ extractor: 'repair-promotion',
67
+ sourceAuthority: authority,
68
+ sourceDiscovery: readRecord(source.metadata.sourceDiscovery),
69
+ }),
70
+ });
71
+ await store.upsertEdge({
72
+ fromKind: 'source',
73
+ fromId: source.id,
74
+ toKind: 'node',
75
+ toId: fact.id,
76
+ relation: 'supports_fact',
77
+ weight: authority === 'official-vendor' ? 0.95 : 0.84,
78
+ metadata: semanticMetadata(spaceId, {
79
+ linkedBy: 'semantic-gap-repair',
80
+ gapId: gap.id,
81
+ }),
82
+ });
83
+ for (const subject of subjects) {
84
+ await store.upsertEdge({
85
+ fromKind: 'node',
86
+ fromId: fact.id,
87
+ toKind: 'node',
88
+ toId: subject.id,
89
+ relation: 'describes',
90
+ weight: authority === 'official-vendor' ? 0.94 : 0.82,
91
+ metadata: semanticMetadata(spaceId, {
92
+ linkedBy: 'semantic-gap-repair',
93
+ repairedAt: Date.now(),
94
+ sourceId: source.id,
95
+ gapId: gap.id,
96
+ }),
97
+ });
98
+ }
99
+ promoted += 1;
100
+ }
101
+ }
102
+ return promoted;
103
+ }
104
+ async function linkPromotedFactsToRepairSubjects(store, spaceId, gap, sourceIds) {
105
+ const linkedObjectIds = readStringArray(gap.metadata.linkedObjectIds).filter((nodeId) => Boolean(store.getNode(nodeId)));
106
+ if (linkedObjectIds.length === 0)
107
+ return;
108
+ const edges = store.listEdges();
109
+ const nodesById = new Map(store.listNodes(10_000).filter((node) => getKnowledgeSpaceId(node) === spaceId).map((node) => [node.id, node]));
110
+ for (const sourceId of sourceIds) {
111
+ for (const fact of factsForSource(sourceId, edges, nodesById)) {
112
+ for (const objectId of linkedObjectIds) {
113
+ await store.upsertEdge({
114
+ fromKind: 'node',
115
+ fromId: fact.id,
116
+ toKind: 'node',
117
+ toId: objectId,
118
+ relation: 'describes',
119
+ weight: 0.82,
120
+ metadata: semanticMetadata(spaceId, {
121
+ linkedBy: 'semantic-gap-repair',
122
+ repairedAt: Date.now(),
123
+ sourceId,
124
+ }),
125
+ });
126
+ }
127
+ }
128
+ }
129
+ }
130
+ function selectRepairFactSentences(input) {
131
+ const wanted = repairIntentPatterns(input.query);
132
+ const sourceText = normalizeWhitespace(input.text);
133
+ const candidates = splitSentences(sourceText, 360)
134
+ .map((sentence) => normalizeWhitespace(sentence))
135
+ .filter((sentence) => sentence.length >= 24 && sentence.length <= 360)
136
+ .filter((sentence) => !sentence.trim().endsWith('?'))
137
+ .filter((sentence) => hasConcreteFeatureSignal(sentence))
138
+ .filter((sentence) => !isLowValueFeatureOrSpecText(sentence));
139
+ const scored = candidates.map((sentence) => ({
140
+ sentence,
141
+ score: repairSentenceScore(sentence, wanted, input.source),
142
+ })).filter((entry) => entry.score > 0);
143
+ return uniqueStrings(scored
144
+ .sort((left, right) => right.score - left.score || left.sentence.localeCompare(right.sentence))
145
+ .map((entry) => entry.sentence))
146
+ .slice(0, 14);
147
+ }
148
+ function repairSentenceScore(sentence, wanted, source) {
149
+ const lower = sentence.toLowerCase();
150
+ let score = sourceAuthority(source) === 'official-vendor' ? 12 : 0;
151
+ if (wanted.some((pattern) => pattern.test(lower)))
152
+ score += 20;
153
+ if (hasConcreteFeatureSignal(lower))
154
+ score += 8;
155
+ if (/\b(hdmi|usb|ethernet|wi-?fi|bluetooth|hdr|dolby|resolution|refresh|120\s*hz|speaker|tuner|atsc|qam|webos|airplay|homekit|freesync|vrr|allm|earc|arc)\b/.test(lower)) {
156
+ score += 12;
157
+ }
158
+ if (/\b(specifications?|features?|connectivity|ports?|display|audio|network|smart tv|gaming)\b/.test(lower))
159
+ score += 6;
160
+ if (/^\s*\d+\s/.test(lower) || /\b(question|answer|faq|click|price|review|manual\.nz)\b/.test(lower))
161
+ score -= 20;
162
+ return score;
163
+ }
164
+ function classifyRepairFact(sentence) {
165
+ const lower = sentence.toLowerCase();
166
+ if (/\b(resolution|4k|8k|uhd|display|screen|nanocell|lcd|oled|qled|refresh|hz|hdr|dolby vision|hlg)\b/.test(lower)) {
167
+ return { kind: 'specification', title: 'Display and picture specifications', labels: ['display', 'picture'], aliases: ['display', 'picture'] };
168
+ }
169
+ if (/\b(hdmi|usb|ethernet|optical|rf|antenna|rs-?232|composite|component|earc|arc|ports?|input|output)\b/.test(lower)) {
170
+ return { kind: 'specification', title: 'Input and output ports', labels: ['ports', 'connectivity'], aliases: ['ports', 'inputs', 'outputs'] };
171
+ }
172
+ if (/\b(wi-?fi|bluetooth|wireless|airplay|homekit|miracast|chromecast|ethernet)\b/.test(lower)) {
173
+ return { kind: 'capability', title: 'Network and wireless capabilities', labels: ['network', 'wireless'], aliases: ['network', 'wireless'] };
174
+ }
175
+ if (/\b(speaker|audio|dolby atmos|dolby audio|sound|watts?|channels?)\b/.test(lower)) {
176
+ return { kind: 'specification', title: 'Audio capabilities', labels: ['audio'], aliases: ['audio', 'speakers'] };
177
+ }
178
+ if (/\b(game|gaming|vrr|allm|freesync|g-?sync|low latency)\b/.test(lower)) {
179
+ return { kind: 'feature', title: 'Gaming features', labels: ['gaming'], aliases: ['gaming'] };
180
+ }
181
+ if (/\b(webos|smart tv|apps?|voice assistant|alexa|google assistant|streaming)\b/.test(lower)) {
182
+ return { kind: 'feature', title: 'Smart TV features', labels: ['smart-tv'], aliases: ['smart tv', 'apps'] };
183
+ }
184
+ if (/\b(tuner|atsc|ntsc|qam|broadcast|clear qam)\b/.test(lower)) {
185
+ return { kind: 'specification', title: 'Tuner support', labels: ['tuner'], aliases: ['tuner', 'broadcast'] };
186
+ }
187
+ return {
188
+ kind: 'feature',
189
+ title: clampText(sentence, 80),
190
+ labels: ['source-backed'],
191
+ aliases: [],
192
+ };
193
+ }
194
+ function repairIntentPatterns(query) {
195
+ const lower = query.toLowerCase();
196
+ const patterns = [];
197
+ if (/\b(port|ports|input|output|hdmi|usb|optical|rf|antenna|rs-?232|composite|component|i\/o)\b/.test(lower))
198
+ patterns.push(/\b(hdmi|usb|optical|rf|antenna|ethernet|rs-?232|composite|component|earc|arc|ports?|input|output)\b/);
199
+ if (/\b(bluetooth|wifi|wi-fi|wireless|network)\b/.test(lower))
200
+ patterns.push(/\b(bluetooth|wi-?fi|wireless|network|ethernet|airplay|homekit)\b/);
201
+ if (/\b(refresh|hz|hdr|dolby|vision|gaming|vrr|allm|freesync)\b/.test(lower))
202
+ patterns.push(/\b(refresh|hz|hdr|hdr10|dolby vision|hlg|game|vrr|allm|freesync|120\s*hz|100\s*hz)\b/);
203
+ if (/\b(display|screen|resolution|panel|nanocell|lcd|oled)\b/.test(lower))
204
+ patterns.push(/\b(display|screen|resolution|4k|uhd|nanocell|lcd|oled|panel)\b/);
205
+ if (patterns.length === 0)
206
+ patterns.push(/\b(hdmi|usb|hdr|dolby|resolution|refresh|wi-?fi|bluetooth|speaker|audio|webos|smart tv|tuner|gaming|ports?)\b/);
207
+ return patterns;
208
+ }
209
+ function linkedRepairSubjects(store, spaceId, gap) {
210
+ return uniqueById(readStringArray(gap.metadata.linkedObjectIds)
211
+ .map((id) => store.getNode(id))
212
+ .filter((node) => Boolean(node))
213
+ .filter((node) => getKnowledgeSpaceId(node) === spaceId && node.status !== 'stale'));
214
+ }
215
+ function factsForSource(sourceId, edges, nodesById) {
216
+ return uniqueById(edges
217
+ .filter((edge) => edge.fromKind === 'source' && edge.fromId === sourceId && edge.toKind === 'node')
218
+ .map((edge) => nodesById.get(edge.toId))
219
+ .filter((node) => Boolean(node))
220
+ .filter((node) => node.kind === 'fact' && node.status !== 'stale'));
221
+ }
222
+ function sourceAuthority(source) {
223
+ const discovery = readRecord(source.metadata.sourceDiscovery);
224
+ const trust = `${readString(discovery.trustReason) ?? ''} ${readString(discovery.sourceDomain) ?? ''} ${source.sourceUri ?? ''} ${source.canonicalUri ?? ''}`.toLowerCase();
225
+ if (/\bofficial-vendor-domain\b/.test(trust) || /(^|[/.])lg\.com\b|(^|[/.])sony\.com\b|(^|[/.])samsung\.com\b|(^|[/.])apple\.com\b/.test(trust)) {
226
+ return 'official-vendor';
227
+ }
228
+ if (/\bmanufacturer-domain\b/.test(trust))
229
+ return 'vendor';
230
+ return 'secondary';
231
+ }
232
+ function countUsableRepairFacts(store, spaceId, sourceIds) {
233
+ const sources = new Set(sourceIds);
234
+ return store.listNodes(10_000)
235
+ .filter((node) => node.kind === 'fact' && node.status !== 'stale')
236
+ .filter((node) => getKnowledgeSpaceId(node) === spaceId)
237
+ .filter((node) => node.sourceId && sources.has(node.sourceId))
238
+ .filter((node) => ['feature', 'capability', 'specification', 'compatibility', 'configuration'].includes(readString(node.metadata.factKind) ?? ''))
239
+ .length;
240
+ }
241
+ function uniqueById(items) {
242
+ const seen = new Set();
243
+ const result = [];
244
+ for (const item of items) {
245
+ if (!item || seen.has(item.id))
246
+ continue;
247
+ seen.add(item.id);
248
+ result.push(item);
249
+ }
250
+ return result;
251
+ }
252
+ function readStringArray(value) {
253
+ if (!Array.isArray(value))
254
+ return [];
255
+ return uniqueStrings(value.map((entry) => typeof entry === 'string' ? entry : undefined));
256
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"self-improvement-tasks.d.ts","sourceRoot":"","sources":["../../../../../src/_internal/platform/knowledge/semantic/self-improvement-tasks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,mBAAmB,EACnB,6BAA6B,EAC7B,4BAA4B,EAC5B,8BAA8B,EAC/B,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAGlD,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,GAAG,EAAE,mBAAmB,CAAC;IAClC,QAAQ,CAAC,OAAO,EAAE,SAAS;QAAE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACrD,QAAQ,CAAC,aAAa,EAAE,SAAS,mBAAmB,EAAE,CAAC;CACxD;AAED,wBAAsB,0BAA0B,CAC9C,KAAK,EAAE,cAAc,EACrB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,wBAAwB,EACjC,OAAO,EAAE,8BAA8B,EACvC,KAAK,EAAE,4BAA4B,EACnC,OAAO,EAAE,MAAM,EACf,IAAI,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GACjC,OAAO,CAAC,6BAA6B,CAAC,CAiCxC;AAED,wBAAsB,oBAAoB,CACxC,KAAK,EAAE,cAAc,EACrB,IAAI,EAAE,6BAA6B,EACnC,KAAK,EAAE,4BAA4B,EACnC,OAAO,EAAE,MAAM,EACf,IAAI,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GACjC,OAAO,CAAC,6BAA6B,CAAC,CAmBxC"}
1
+ {"version":3,"file":"self-improvement-tasks.d.ts","sourceRoot":"","sources":["../../../../../src/_internal/platform/knowledge/semantic/self-improvement-tasks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,mBAAmB,EACnB,6BAA6B,EAC7B,4BAA4B,EAC5B,8BAA8B,EAC/B,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAGlD,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,GAAG,EAAE,mBAAmB,CAAC;IAClC,QAAQ,CAAC,OAAO,EAAE,SAAS;QAAE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACrD,QAAQ,CAAC,aAAa,EAAE,SAAS,mBAAmB,EAAE,CAAC;CACxD;AAED,wBAAsB,0BAA0B,CAC9C,KAAK,EAAE,cAAc,EACrB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,wBAAwB,EACjC,OAAO,EAAE,8BAA8B,EACvC,KAAK,EAAE,4BAA4B,EACnC,OAAO,EAAE,MAAM,EACf,IAAI,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GACjC,OAAO,CAAC,6BAA6B,CAAC,CAiCxC;AAED,wBAAsB,oBAAoB,CACxC,KAAK,EAAE,cAAc,EACrB,IAAI,EAAE,6BAA6B,EACnC,KAAK,EAAE,4BAA4B,EACnC,OAAO,EAAE,MAAM,EACf,IAAI,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GACjC,OAAO,CAAC,6BAA6B,CAAC,CAwBxC"}
@@ -34,6 +34,7 @@ export async function upsertRefinementTaskForGap(store, spaceId, context, trigge
34
34
  });
35
35
  }
36
36
  export async function updateRefinementTask(store, task, state, message, data = {}) {
37
+ const nextRepairAttemptAt = readNumber(data.nextRepairAttemptAt) ?? task.nextRepairAttemptAt;
37
38
  return store.upsertRefinementTask({
38
39
  id: task.id,
39
40
  spaceId: task.spaceId,
@@ -49,8 +50,12 @@ export async function updateRefinementTask(store, task, state, message, data = {
49
50
  budget: task.budget,
50
51
  attemptCount: state === 'searching' ? task.attemptCount + 1 : task.attemptCount,
51
52
  ...(state === 'blocked' || state === 'failed' ? { blockedReason: message } : {}),
53
+ ...(typeof nextRepairAttemptAt === 'number' ? { nextRepairAttemptAt } : {}),
52
54
  appendTrace: [trace(state, message, data)],
53
- metadata: task.metadata,
55
+ metadata: {
56
+ ...task.metadata,
57
+ ...(typeof nextRepairAttemptAt === 'number' ? { nextRepairAttemptAt } : {}),
58
+ },
54
59
  });
55
60
  }
56
61
  function trace(state, message, data = {}) {
@@ -77,3 +82,6 @@ function subjectTitle(subject) {
77
82
  subject.title,
78
83
  ].filter(Boolean).join(' ');
79
84
  }
85
+ function readNumber(value) {
86
+ return typeof value === 'number' && Number.isFinite(value) ? value : undefined;
87
+ }
@@ -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;AAQlD,OAAO,KAAK,EACV,4BAA4B,EAC5B,iCAAiC,EACjC,kCAAkC,EACnC,MAAM,YAAY,CAAC;AAYpB,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;IACvC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE;QAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;QAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CAC3I;AAUD,wBAAsB,mCAAmC,CACvD,OAAO,EAAE,kBAAkB,EAC3B,KAAK,GAAE,iCAAsC,GAC5C,OAAO,CAAC,kCAAkC,CAAC,CA0N7C"}
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;AAOlD,OAAO,KAAK,EACV,4BAA4B,EAC5B,iCAAiC,EACjC,kCAAkC,EACnC,MAAM,YAAY,CAAC;AAapB,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;IACvC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE;QAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;QAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CAC3I;AAUD,wBAAsB,mCAAmC,CACvD,OAAO,EAAE,kBAAkB,EAC3B,KAAK,GAAE,iCAAsC,GAC5C,OAAO,CAAC,kCAAkC,CAAC,CA8N7C"}
@@ -5,6 +5,7 @@ import { recoverNoRepairerTasks, recoverStaleActiveTasks } from './self-improvem
5
5
  import { readRecord, readString, semanticHash, semanticMetadata, semanticSlug, sourceKnowledgeSpace, uniqueStrings } from './utils.js';
6
6
  import { withTimeout } from './timeouts.js';
7
7
  import { updateRefinementTask, upsertRefinementTaskForGap } from './self-improvement-tasks.js';
8
+ import { promoteRepairSources } from './self-improvement-promotion.js';
8
9
  const RETRY_DELAY_MS = 6 * 60 * 60 * 1000;
9
10
  const DEFAULT_REFINEMENT_LIMIT = 12;
10
11
  const MAX_REFINEMENT_LIMIT = 24;
@@ -144,7 +145,7 @@ export async function runKnowledgeSemanticSelfImprovement(context, input = {}) {
144
145
  ingestedSources += result?.ingestedSourceIds.length ?? 0;
145
146
  ingestedSourceIds.push(...(result?.ingestedSourceIds ?? []));
146
147
  const acceptedSourceIds = uniqueStrings([...(result?.acceptedSourceIds ?? []), ...(result?.ingestedSourceIds ?? [])]);
147
- const evidenceSufficient = result?.evidenceSufficient !== false && acceptedSourceIds.length > 0;
148
+ let promotedFactCount = 0;
148
149
  task = await updateRefinementTask(context.store, task, 'evaluating', result?.reason ?? 'Source discovery completed.', {
149
150
  query: result?.query ?? gap.title,
150
151
  sourceAssessments: result?.sourceAssessments ?? [],
@@ -157,23 +158,27 @@ export async function runKnowledgeSemanticSelfImprovement(context, input = {}) {
157
158
  }
158
159
  linkedRepairs += await linkRepairSources(context.store, spaceId, gap, acceptedSourceIds, result?.query ?? gap.title);
159
160
  if (acceptedSourceIds.length > 0) {
160
- await promoteRepairSources(context, spaceId, gap, acceptedSourceIds, task, startedAt + maxRunMs);
161
+ promotedFactCount = await promoteRepairSources(context, spaceId, gap, acceptedSourceIds, task, startedAt + maxRunMs);
161
162
  }
163
+ const evidenceSufficient = result?.evidenceSufficient !== false && acceptedSourceIds.length > 0 && promotedFactCount > 0;
162
164
  await markGapRepairAttempt(context.store, gap, spaceId, {
163
165
  status: evidenceSufficient ? 'repaired' : acceptedSourceIds.length ? 'deferred' : 'searched_no_sources',
164
166
  reason: result?.reason,
165
167
  query: result?.query,
166
168
  });
167
169
  if (evidenceSufficient) {
170
+ closedGaps += 1;
168
171
  await updateRefinementTask(context.store, task, 'closed', 'Repair sources were accepted and linked to the gap.', {
169
172
  acceptedSourceIds,
170
173
  ingestedSourceIds: result?.ingestedSourceIds ?? [],
174
+ promotedFactCount,
171
175
  });
172
176
  }
173
177
  else if (acceptedSourceIds.length) {
174
178
  blockedGaps += 1;
175
179
  await updateRefinementTask(context.store, task, 'blocked', result?.reason ?? 'Accepted source evidence was linked, but the gap still needs corroboration.', {
176
180
  acceptedSourceIds,
181
+ promotedFactCount,
177
182
  retryable: true,
178
183
  nextRepairAttemptAt: Date.now() + RETRY_DELAY_MS,
179
184
  });
@@ -411,8 +416,8 @@ function classifyGap(context, force) {
411
416
  return { action: 'skip', reason: 'Gap already has linked repair sources.', status: 'repaired' };
412
417
  if (!force && nextAttemptAt && nextAttemptAt > Date.now())
413
418
  return { action: 'skip', reason: 'Gap repair retry window has not elapsed.', status: 'retry_wait', markAttempt: true };
414
- if (hasRepairEdge(context))
415
- return { action: 'skip', reason: 'Gap already has a repair source.', status: 'already_repaired' };
419
+ if (!force && hasRepairEdge(context) && hasRepairFactEvidence(context))
420
+ return { action: 'skip', reason: 'Gap already has promoted repair facts.', status: 'already_repaired' };
416
421
  if (isNotApplicableGap(context))
417
422
  return { action: 'suppress', reason: 'The gap is not applicable to the linked subject.' };
418
423
  if (!hasConcreteSubject(context)) {
@@ -426,6 +431,10 @@ function classifyGap(context, force) {
426
431
  function hasRepairEdge(context) {
427
432
  return context.repairSourceIds.length > 0;
428
433
  }
434
+ function hasRepairFactEvidence(context) {
435
+ const repairSourceIds = new Set(context.repairSourceIds);
436
+ return context.facts.some((fact) => fact.sourceId && repairSourceIds.has(fact.sourceId) && readString(fact.metadata.extractor) === 'repair-promotion');
437
+ }
429
438
  function isNotApplicableGap(context) {
430
439
  const text = `${context.gap.title} ${context.gap.summary ?? ''}`.toLowerCase();
431
440
  if (text.includes('battery')) {
@@ -529,48 +538,6 @@ async function linkRepairSources(store, spaceId, gap, sourceIds, query) {
529
538
  }
530
539
  return linked;
531
540
  }
532
- async function promoteRepairSources(context, spaceId, gap, sourceIds, task, deadlineAt) {
533
- if (!context.enrichSource)
534
- return;
535
- for (const [index, sourceId] of sourceIds.entries()) {
536
- await yieldEvery(index, 2);
537
- const remainingMs = Math.max(0, deadlineAt - Date.now());
538
- if (remainingMs < 1_000)
539
- break;
540
- await withTimeout(context.enrichSource(sourceId, { knowledgeSpaceId: spaceId, force: true }), Math.min(remainingMs, 20_000), 'Semantic repair source enrichment exceeded its run budget.');
541
- await yieldToEventLoop();
542
- }
543
- await linkPromotedFactsToRepairSubjects(context.store, spaceId, gap, sourceIds);
544
- await updateRefinementTask(context.store, context.store.getRefinementTask(task.id) ?? task, 'verified', 'Accepted repair sources were semantically enriched.', {
545
- promotedSourceIds: sourceIds,
546
- });
547
- }
548
- async function linkPromotedFactsToRepairSubjects(store, spaceId, gap, sourceIds) {
549
- const linkedObjectIds = readStringArray(gap.metadata.linkedObjectIds).filter((nodeId) => Boolean(store.getNode(nodeId)));
550
- if (linkedObjectIds.length === 0)
551
- return;
552
- const edges = store.listEdges();
553
- const nodesById = new Map(store.listNodes(10_000).filter((node) => getKnowledgeSpaceId(node) === spaceId).map((node) => [node.id, node]));
554
- for (const sourceId of sourceIds) {
555
- for (const fact of factsForSource(sourceId, edges, nodesById)) {
556
- for (const objectId of linkedObjectIds) {
557
- await store.upsertEdge({
558
- fromKind: 'node',
559
- fromId: fact.id,
560
- toKind: 'node',
561
- toId: objectId,
562
- relation: 'describes',
563
- weight: 0.82,
564
- metadata: semanticMetadata(spaceId, {
565
- linkedBy: 'semantic-gap-repair',
566
- repairedAt: Date.now(),
567
- sourceId,
568
- }),
569
- });
570
- }
571
- }
572
- }
573
- }
574
541
  function isBudgetError(message) {
575
542
  return /\b(timeout|timed out|budget|deadline|exceeded)\b/i.test(message);
576
543
  }
@@ -1 +1 @@
1
- {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../../../../src/_internal/platform/knowledge/semantic/service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../../../../src/_internal/platform/knowledge/semantic/service.ts"],"names":[],"mappings":"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"}
@@ -101,11 +101,26 @@ export class KnowledgeSemanticService {
101
101
  }
102
102
  async answer(input) {
103
103
  await this.store.init();
104
- const answer = await answerKnowledgeQuery({ store: this.store, llm: this.options.llm }, input);
104
+ let answer = await answerKnowledgeQuery({ store: this.store, llm: this.options.llm }, input);
105
105
  if (input.autoRepairGaps === false)
106
106
  return answer;
107
107
  if (this.options.gapRepairer && answer.answer.gaps.length > 0) {
108
108
  const repairSpaceId = answerRepairSpaceId(answer);
109
+ const foregroundBudgetMs = foregroundAnswerRepairBudget(input, answer);
110
+ const foregroundTaskIds = [];
111
+ if (foregroundBudgetMs > 0) {
112
+ const repaired = await this.repairAnswerGaps({
113
+ answer,
114
+ maxRunMs: foregroundBudgetMs,
115
+ limit: Math.min(5, answer.answer.gaps.length),
116
+ });
117
+ foregroundTaskIds.push(...repaired.taskIds);
118
+ if (repaired.closedGaps > 0 || repaired.linkedRepairs > 0) {
119
+ answer = withRefinementTaskIds(await answerKnowledgeQuery({ store: this.store, llm: this.options.llm }, input), foregroundTaskIds);
120
+ if (answer.answer.gaps.length === 0 || answerHasUsableEvidence(answer))
121
+ return answer;
122
+ }
123
+ }
109
124
  const refinement = await this.selfImprove({
110
125
  knowledgeSpaceId: repairSpaceId,
111
126
  gapIds: answer.answer.gaps.map((gap) => gap.id),
@@ -115,17 +130,12 @@ export class KnowledgeSemanticService {
115
130
  });
116
131
  this.runAnswerRefinementInBackground(repairSpaceId, answer.answer.gaps.map((gap) => gap.id));
117
132
  const taskIds = uniqueStrings([
133
+ ...foregroundTaskIds,
118
134
  ...refinement.taskIds,
119
135
  ...this.taskIdsForGaps(repairSpaceId, answer.answer.gaps.map((gap) => gap.id)),
120
136
  ]);
121
137
  if (taskIds.length > 0) {
122
- return {
123
- ...answer,
124
- answer: {
125
- ...answer.answer,
126
- refinementTaskIds: taskIds,
127
- },
128
- };
138
+ return withRefinementTaskIds(answer, taskIds);
129
139
  }
130
140
  }
131
141
  return answer;
@@ -166,7 +176,7 @@ export class KnowledgeSemanticService {
166
176
  await this.store.init();
167
177
  if (input.deferRepair !== true) {
168
178
  if (this.activeSelfImprovementRun && !input.gapIds?.length)
169
- return activeSelfImproveResult();
179
+ return activeSelfImproveResult(input);
170
180
  const run = this.runSelfImproveUnlocked(input);
171
181
  if (!input.gapIds?.length)
172
182
  this.activeSelfImprovementRun = run;
@@ -239,10 +249,45 @@ function answerRepairSpaceId(answer) {
239
249
  }
240
250
  return answer.spaceId;
241
251
  }
242
- function activeSelfImproveResult() {
252
+ function foregroundAnswerRepairBudget(input, answer) {
253
+ if (!answerNeedsForegroundRepair(input, answer))
254
+ return 0;
255
+ const requested = typeof input.timeoutMs === 'number' && Number.isFinite(input.timeoutMs)
256
+ ? input.timeoutMs
257
+ : 45_000;
258
+ if (requested < 15_000)
259
+ return 0;
260
+ return Math.max(5_000, Math.min(35_000, requested - 5_000));
261
+ }
262
+ function answerNeedsForegroundRepair(input, answer) {
263
+ const repairSpaceId = answerRepairSpaceId(answer);
264
+ const homeAssistantScoped = repairSpaceId === 'homeassistant' || repairSpaceId.startsWith('homeassistant:');
265
+ if (!input.strictCandidates && !homeAssistantScoped)
266
+ return false;
267
+ return answer.answer.facts.length === 0 || answer.answer.sources.length === 0 || answer.answer.confidence < 50;
268
+ }
269
+ function answerHasUsableEvidence(answer) {
270
+ return answer.answer.facts.length > 0 && answer.answer.sources.length > 0 && answer.answer.confidence >= 50;
271
+ }
272
+ function withRefinementTaskIds(answer, taskIds) {
273
+ const ids = uniqueStrings([...(answer.answer.refinementTaskIds ?? []), ...taskIds]);
274
+ if (ids.length === 0)
275
+ return answer;
276
+ return {
277
+ ...answer,
278
+ answer: {
279
+ ...answer.answer,
280
+ refinementTaskIds: ids,
281
+ },
282
+ };
283
+ }
284
+ function activeSelfImproveResult(input) {
285
+ const requestedLimit = Math.max(1, input.limit ?? 1);
243
286
  return {
244
287
  ...emptySelfImproveResult(),
245
288
  skippedGaps: 1,
289
+ requestedLimit,
290
+ effectiveLimit: requestedLimit,
246
291
  truncated: true,
247
292
  budgetExhausted: true,
248
293
  };
@@ -1 +1 @@
1
- {"version":3,"file":"store-refinement.d.ts","sourceRoot":"","sources":["../../../../src/_internal/platform/knowledge/store-refinement.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAE5D,OAAO,KAAK,EACV,6BAA6B,EAC7B,kCAAkC,EACnC,MAAM,YAAY,CAAC;AAEpB,wBAAsB,6BAA6B,CACjD,MAAM,EAAE,WAAW,EACnB,eAAe,EAAE,GAAG,CAAC,MAAM,EAAE,6BAA6B,CAAC,EAC3D,KAAK,EAAE,kCAAkC,EACzC,QAAQ,EAAE,MAAM,MAAM,GACrB,OAAO,CAAC,6BAA6B,CAAC,CAmExC"}
1
+ {"version":3,"file":"store-refinement.d.ts","sourceRoot":"","sources":["../../../../src/_internal/platform/knowledge/store-refinement.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAE5D,OAAO,KAAK,EACV,6BAA6B,EAC7B,kCAAkC,EACnC,MAAM,YAAY,CAAC;AAEpB,wBAAsB,6BAA6B,CACjD,MAAM,EAAE,WAAW,EACnB,eAAe,EAAE,GAAG,CAAC,MAAM,EAAE,6BAA6B,CAAC,EAC3D,KAAK,EAAE,kCAAkC,EACzC,QAAQ,EAAE,MAAM,MAAM,GACrB,OAAO,CAAC,6BAA6B,CAAC,CAwExC"}
@@ -9,6 +9,9 @@ export async function upsertKnowledgeRefinementTask(sqlite, refinementTasks, inp
9
9
  const _gapId = stableText(input.gapId);
10
10
  const _issueId = stableText(input.issueId);
11
11
  const _blockedReason = stableText(input.blockedReason);
12
+ const nextRepairAttemptAt = readNumber(input.nextRepairAttemptAt)
13
+ ?? readNumber(input.metadata?.nextRepairAttemptAt)
14
+ ?? existing?.nextRepairAttemptAt;
12
15
  const replacementTrace = input.trace ? [...input.trace] : existing?.trace ?? [];
13
16
  const trace = [...replacementTrace, ...(input.appendTrace ?? [])].slice(-80);
14
17
  const record = {
@@ -29,10 +32,12 @@ export async function upsertKnowledgeRefinementTask(sqlite, refinementTasks, inp
29
32
  },
30
33
  attemptCount: Math.max(0, Math.trunc(input.attemptCount ?? existing?.attemptCount ?? 0)),
31
34
  ...(_blockedReason !== null ? { blockedReason: _blockedReason } : existing?.blockedReason && input.state === existing.state ? { blockedReason: existing.blockedReason } : {}),
35
+ ...(typeof nextRepairAttemptAt === 'number' ? { nextRepairAttemptAt } : {}),
32
36
  trace,
33
37
  metadata: {
34
38
  ...(existing?.metadata ?? {}),
35
39
  ...(input.metadata ?? {}),
40
+ ...(typeof nextRepairAttemptAt === 'number' ? { nextRepairAttemptAt } : {}),
36
41
  },
37
42
  createdAt: existing?.createdAt ?? now,
38
43
  updatedAt: now,
@@ -67,3 +72,6 @@ export async function upsertKnowledgeRefinementTask(sqlite, refinementTasks, inp
67
72
  await sqlite.save();
68
73
  return record;
69
74
  }
75
+ function readNumber(value) {
76
+ return typeof value === 'number' && Number.isFinite(value) ? value : undefined;
77
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"store-schema.d.ts","sourceRoot":"","sources":["../../../../src/_internal/platform/knowledge/store-schema.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,qCAAqC,EACrC,kCAAkC,EAClC,mBAAmB,EACnB,yBAAyB,EACzB,oBAAoB,EACpB,yBAAyB,EACzB,qBAAqB,EACrB,mBAAmB,EACnB,uBAAuB,EACvB,qBAAqB,EAOrB,6BAA6B,EAQ7B,oBAAoB,EACrB,MAAM,YAAY,CAAC;AAEpB,wBAAgB,yCAAyC,CAAC,eAAe,EAAE,MAAM,GAAG,MAAM,CAEzF;AAED,wBAAgB,KAAK,IAAI,MAAM,CAE9B;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAInE;AAED,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,oBAAoB,GAAG,IAAI,GAAG,SAAS,EACjD,KAAK,EAAE,yBAAyB,GAC/B,oBAAoB,CAAC,QAAQ,CAAC,CAOhC;AAED,wBAAgB,IAAI,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,GAAG,MAAM,EAAE,CAWpE;AAED,wBAAgB,cAAc,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,GAAG,CAAC,CAOhE;AAED,wBAAgB,YAAY,CAAC,EAAE,EAAE;IAAE,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GAAG,IAAI,CA4MjE;AAED,wBAAgB,4BAA4B,IAAI,SAAS,MAAM,EAAE,CAShE;AAED,wBAAgB,wBAAwB,IAAI,MAAM,CAIjD;AAMD,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,qBAAqB,CAuBxF;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,mBAAmB,CAgBpF;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,mBAAmB,CAcpF;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,oBAAoB,CActF;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,yBAAyB,CAmBhG;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,qBAAqB,CAgBxF;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,6BAA6B,CAsBxG;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,oBAAoB,CAatF;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,qCAAqC,CAoB3G;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,kCAAkC,CAarG;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,uBAAuB,CAc5F"}
1
+ {"version":3,"file":"store-schema.d.ts","sourceRoot":"","sources":["../../../../src/_internal/platform/knowledge/store-schema.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,qCAAqC,EACrC,kCAAkC,EAClC,mBAAmB,EACnB,yBAAyB,EACzB,oBAAoB,EACpB,yBAAyB,EACzB,qBAAqB,EACrB,mBAAmB,EACnB,uBAAuB,EACvB,qBAAqB,EAOrB,6BAA6B,EAQ7B,oBAAoB,EACrB,MAAM,YAAY,CAAC;AAEpB,wBAAgB,yCAAyC,CAAC,eAAe,EAAE,MAAM,GAAG,MAAM,CAEzF;AAED,wBAAgB,KAAK,IAAI,MAAM,CAE9B;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAInE;AAED,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,oBAAoB,GAAG,IAAI,GAAG,SAAS,EACjD,KAAK,EAAE,yBAAyB,GAC/B,oBAAoB,CAAC,QAAQ,CAAC,CAOhC;AAED,wBAAgB,IAAI,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,GAAG,MAAM,EAAE,CAWpE;AAED,wBAAgB,cAAc,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,GAAG,CAAC,CAOhE;AAED,wBAAgB,YAAY,CAAC,EAAE,EAAE;IAAE,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GAAG,IAAI,CA4MjE;AAED,wBAAgB,4BAA4B,IAAI,SAAS,MAAM,EAAE,CAShE;AAED,wBAAgB,wBAAwB,IAAI,MAAM,CAIjD;AAMD,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,qBAAqB,CAuBxF;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,mBAAmB,CAgBpF;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,mBAAmB,CAcpF;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,oBAAoB,CActF;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,yBAAyB,CAmBhG;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,qBAAqB,CAgBxF;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,6BAA6B,CA2BxG;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,oBAAoB,CAatF;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,qCAAqC,CAoB3G;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,kCAAkC,CAarG;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,uBAAuB,CAc5F"}
@@ -378,6 +378,10 @@ export function mapJobRunRow(columns, values) {
378
378
  }
379
379
  export function mapRefinementTaskRow(columns, values) {
380
380
  const row = rowObject(columns, values);
381
+ const metadata = parseJsonValue(row.metadata, {});
382
+ const nextRepairAttemptAt = typeof metadata.nextRepairAttemptAt === 'number' && Number.isFinite(metadata.nextRepairAttemptAt)
383
+ ? metadata.nextRepairAttemptAt
384
+ : undefined;
381
385
  return {
382
386
  id: String(row.id),
383
387
  spaceId: String(row.space_id),
@@ -393,8 +397,9 @@ export function mapRefinementTaskRow(columns, values) {
393
397
  budget: parseJsonValue(row.budget, {}),
394
398
  attemptCount: Number(row.attempt_count),
395
399
  ...(stableText(row.blocked_reason) ? { blockedReason: String(row.blocked_reason) } : {}),
400
+ ...(typeof nextRepairAttemptAt === 'number' ? { nextRepairAttemptAt } : {}),
396
401
  trace: parseJsonValue(row.trace, []),
397
- metadata: parseJsonValue(row.metadata, {}),
402
+ metadata,
398
403
  createdAt: Number(row.created_at),
399
404
  updatedAt: Number(row.updated_at),
400
405
  };
@@ -23,6 +23,7 @@ export declare class KnowledgeStore {
23
23
  private asReadView;
24
24
  init(): Promise<void>;
25
25
  status(): KnowledgeStatus;
26
+ batch<T>(operation: () => Promise<T>): Promise<T>;
26
27
  listSources(limit?: number): KnowledgeSourceRecord[];
27
28
  listNodes(limit?: number): KnowledgeNodeRecord[];
28
29
  listEdges(): KnowledgeEdgeRecord[];
@@ -1 +1 @@
1
- {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../../../src/_internal/platform/knowledge/store.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../../../src/_internal/platform/knowledge/store.ts"],"names":[],"mappings":"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"}
@@ -53,6 +53,7 @@ export class KnowledgeStore {
53
53
  status() {
54
54
  return getKnowledgeStoreStatus(this.asReadView());
55
55
  }
56
+ async batch(operation) { await this.init(); return this.sqlite.batch(operation); }
56
57
  listSources(limit = 100) {
57
58
  return listKnowledgeSources(this.asReadView(), limit);
58
59
  }