openclaw-cortex-memory 0.1.0-Alpha.2 → 0.1.0-Alpha.21

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 (76) hide show
  1. package/README.md +163 -203
  2. package/SKILL.md +71 -268
  3. package/dist/index.d.ts +88 -15
  4. package/dist/index.d.ts.map +1 -1
  5. package/dist/index.js +859 -1189
  6. package/dist/index.js.map +1 -1
  7. package/dist/openclaw.plugin.json +362 -14
  8. package/dist/src/dedup/three_stage_deduplicator.d.ts +25 -0
  9. package/dist/src/dedup/three_stage_deduplicator.d.ts.map +1 -0
  10. package/dist/src/dedup/three_stage_deduplicator.js +224 -0
  11. package/dist/src/dedup/three_stage_deduplicator.js.map +1 -0
  12. package/dist/src/engine/memory_engine.d.ts +2 -1
  13. package/dist/src/engine/memory_engine.d.ts.map +1 -1
  14. package/dist/src/engine/ts_engine.d.ts +126 -0
  15. package/dist/src/engine/ts_engine.d.ts.map +1 -1
  16. package/dist/src/engine/ts_engine.js +1172 -44
  17. package/dist/src/engine/ts_engine.js.map +1 -1
  18. package/dist/src/engine/types.d.ts +12 -0
  19. package/dist/src/engine/types.d.ts.map +1 -1
  20. package/dist/src/graph/ontology.d.ts +103 -0
  21. package/dist/src/graph/ontology.d.ts.map +1 -0
  22. package/dist/src/graph/ontology.js +564 -0
  23. package/dist/src/graph/ontology.js.map +1 -0
  24. package/dist/src/quality/llm_output_validator.d.ts +48 -0
  25. package/dist/src/quality/llm_output_validator.d.ts.map +1 -0
  26. package/dist/src/quality/llm_output_validator.js +404 -0
  27. package/dist/src/quality/llm_output_validator.js.map +1 -0
  28. package/dist/src/reflect/reflector.d.ts +7 -0
  29. package/dist/src/reflect/reflector.d.ts.map +1 -1
  30. package/dist/src/reflect/reflector.js +358 -8
  31. package/dist/src/reflect/reflector.js.map +1 -1
  32. package/dist/src/rules/rule_store.d.ts.map +1 -1
  33. package/dist/src/rules/rule_store.js +75 -16
  34. package/dist/src/rules/rule_store.js.map +1 -1
  35. package/dist/src/session/session_end.d.ts +33 -0
  36. package/dist/src/session/session_end.d.ts.map +1 -1
  37. package/dist/src/session/session_end.js +67 -64
  38. package/dist/src/session/session_end.js.map +1 -1
  39. package/dist/src/store/archive_store.d.ts +128 -0
  40. package/dist/src/store/archive_store.d.ts.map +1 -0
  41. package/dist/src/store/archive_store.js +481 -0
  42. package/dist/src/store/archive_store.js.map +1 -0
  43. package/dist/src/store/embedding_utils.d.ts +32 -0
  44. package/dist/src/store/embedding_utils.d.ts.map +1 -0
  45. package/dist/src/store/embedding_utils.js +173 -0
  46. package/dist/src/store/embedding_utils.js.map +1 -0
  47. package/dist/src/store/graph_memory_store.d.ts +44 -0
  48. package/dist/src/store/graph_memory_store.d.ts.map +1 -0
  49. package/dist/src/store/graph_memory_store.js +168 -0
  50. package/dist/src/store/graph_memory_store.js.map +1 -0
  51. package/dist/src/store/read_store.d.ts +86 -0
  52. package/dist/src/store/read_store.d.ts.map +1 -1
  53. package/dist/src/store/read_store.js +1681 -25
  54. package/dist/src/store/read_store.js.map +1 -1
  55. package/dist/src/store/vector_store.d.ts +44 -0
  56. package/dist/src/store/vector_store.d.ts.map +1 -0
  57. package/dist/src/store/vector_store.js +201 -0
  58. package/dist/src/store/vector_store.js.map +1 -0
  59. package/dist/src/store/write_store.d.ts +52 -0
  60. package/dist/src/store/write_store.d.ts.map +1 -1
  61. package/dist/src/store/write_store.js +245 -3
  62. package/dist/src/store/write_store.js.map +1 -1
  63. package/dist/src/sync/session_sync.d.ts +100 -2
  64. package/dist/src/sync/session_sync.d.ts.map +1 -1
  65. package/dist/src/sync/session_sync.js +673 -22
  66. package/dist/src/sync/session_sync.js.map +1 -1
  67. package/dist/src/utils/runtime_env.d.ts +4 -0
  68. package/dist/src/utils/runtime_env.d.ts.map +1 -0
  69. package/dist/src/utils/runtime_env.js +51 -0
  70. package/dist/src/utils/runtime_env.js.map +1 -0
  71. package/openclaw.plugin.json +362 -14
  72. package/package.json +23 -6
  73. package/scripts/cli.js +19 -14
  74. package/scripts/uninstall.js +22 -5
  75. package/index.ts +0 -2092
  76. package/scripts/install.js +0 -27
@@ -0,0 +1,564 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.normalizeEntityName = normalizeEntityName;
37
+ exports.loadGraphSchema = loadGraphSchema;
38
+ exports.normalizeEventType = normalizeEventType;
39
+ exports.normalizeRelationType = normalizeRelationType;
40
+ exports.buildCanonicalId = buildCanonicalId;
41
+ exports.validateRelations = validateRelations;
42
+ exports.normalizeEntityType = normalizeEntityType;
43
+ exports.validateGraphPayload = validateGraphPayload;
44
+ const crypto = __importStar(require("crypto"));
45
+ const fs = __importStar(require("fs"));
46
+ const path = __importStar(require("path"));
47
+ const DEFAULT_SCHEMA = {
48
+ eventTypes: [
49
+ "decision",
50
+ "issue",
51
+ "fix",
52
+ "preference",
53
+ "plan",
54
+ "risk",
55
+ "insight",
56
+ "action_item",
57
+ "conversation_summary",
58
+ "constraint",
59
+ "requirement",
60
+ "milestone",
61
+ "blocker",
62
+ "dependency",
63
+ "assumption",
64
+ "retrospective",
65
+ "follow_up",
66
+ ],
67
+ eventTypeAliases: {
68
+ problem: "issue",
69
+ error: "issue",
70
+ bug: "issue",
71
+ solution: "fix",
72
+ workaround: "fix",
73
+ todo: "action_item",
74
+ next_step: "action_item",
75
+ limitation: "constraint",
76
+ guardrail: "constraint",
77
+ spec: "requirement",
78
+ acceptance_criteria: "requirement",
79
+ deadline: "milestone",
80
+ target: "milestone",
81
+ roadblock: "blocker",
82
+ stuck: "blocker",
83
+ depends_on: "dependency",
84
+ upstream: "dependency",
85
+ hypothesis: "assumption",
86
+ lesson: "retrospective",
87
+ postmortem: "retrospective",
88
+ followup: "follow_up",
89
+ next_action: "follow_up",
90
+ },
91
+ entityTypes: [
92
+ "Person",
93
+ "FamilyMember",
94
+ "Friend",
95
+ "Team",
96
+ "Project",
97
+ "Task",
98
+ "Plan",
99
+ "Milestone",
100
+ "Location",
101
+ "Event",
102
+ "Schedule",
103
+ "Habit",
104
+ "HealthItem",
105
+ "FinanceItem",
106
+ "Issue",
107
+ "Fix",
108
+ "Decision",
109
+ "Action",
110
+ "Risk",
111
+ "Blocker",
112
+ "Assumption",
113
+ "Concept",
114
+ "Resource",
115
+ "Document",
116
+ ],
117
+ entityAliases: {
118
+ "OpenClaw": ["openclaw", "插件", "该项目", "本项目"],
119
+ "FamilyMember": ["家人", "家庭成员", "亲人"],
120
+ "Friend": ["朋友", "好友"],
121
+ "Location": ["地点", "位置", "住址", "地址"],
122
+ "Event": ["活动", "事情", "事项"],
123
+ "Schedule": ["日程", "安排", "计划表"],
124
+ "Habit": ["习惯", "作息"],
125
+ "HealthItem": ["健康", "体检", "药物", "锻炼"],
126
+ "FinanceItem": ["账单", "支出", "收入", "预算"],
127
+ "Person": ["我", "自己", "本人", "同事", "客户", "用户"],
128
+ "Project": ["项目", "工程"],
129
+ "Task": ["任务", "待办", "todo"],
130
+ "Milestone": ["里程碑", "节点"],
131
+ "Issue": ["问题", "故障", "报错"],
132
+ "Fix": ["修复", "解决方案"],
133
+ },
134
+ relationTypes: [
135
+ "depends_on",
136
+ "blocks",
137
+ "related_to",
138
+ "causes",
139
+ "resolves",
140
+ "plans_to",
141
+ "scheduled_for",
142
+ "lives_in",
143
+ "cares_for",
144
+ "pays_for",
145
+ "supports",
146
+ "conflicts_with",
147
+ "belongs_to",
148
+ "owned_by",
149
+ "references",
150
+ "prefers",
151
+ "implements",
152
+ "requires",
153
+ ],
154
+ relationTypeAliases: {
155
+ dependency: "depends_on",
156
+ blocked_by: "blocks",
157
+ linked_to: "related_to",
158
+ plan_to: "plans_to",
159
+ schedule_for: "scheduled_for",
160
+ located_in: "lives_in",
161
+ care_for: "cares_for",
162
+ pay_for: "pays_for",
163
+ support: "supports",
164
+ conflict_with: "conflicts_with",
165
+ "依赖于": "depends_on",
166
+ "依赖": "depends_on",
167
+ "取决于": "depends_on",
168
+ "阻塞": "blocks",
169
+ "卡住": "blocks",
170
+ "导致": "causes",
171
+ "引起": "causes",
172
+ "解决": "resolves",
173
+ "修复": "resolves",
174
+ "属于": "belongs_to",
175
+ "归属": "belongs_to",
176
+ "负责": "owned_by",
177
+ "由": "owned_by",
178
+ "参考": "references",
179
+ "引用": "references",
180
+ "偏好": "prefers",
181
+ "更喜欢": "prefers",
182
+ "实现": "implements",
183
+ "需要": "requires",
184
+ "计划做": "plans_to",
185
+ "打算": "plans_to",
186
+ "安排在": "scheduled_for",
187
+ "约在": "scheduled_for",
188
+ "住在": "lives_in",
189
+ "居住在": "lives_in",
190
+ "照顾": "cares_for",
191
+ "看护": "cares_for",
192
+ "支付": "pays_for",
193
+ "付款": "pays_for",
194
+ "支持": "supports",
195
+ "冲突": "conflicts_with",
196
+ "矛盾": "conflicts_with",
197
+ "相关": "related_to",
198
+ "有关": "related_to",
199
+ belongs: "belongs_to",
200
+ owner_of: "owned_by",
201
+ refer_to: "references",
202
+ preference_for: "prefers",
203
+ implement: "implements",
204
+ need: "requires",
205
+ },
206
+ relationRules: [
207
+ { type: "depends_on", fromTypes: ["Task", "Plan", "Milestone"], toTypes: ["Task", "Plan", "Milestone"], allowSelfLoop: false },
208
+ { type: "blocks", fromTypes: ["Issue", "Task", "Risk"], toTypes: ["Task", "Plan"], allowSelfLoop: false },
209
+ { type: "causes", fromTypes: ["Issue", "Risk", "Assumption"], toTypes: ["Issue", "Risk"], allowSelfLoop: false },
210
+ { type: "resolves", fromTypes: ["Fix", "Decision", "Action"], toTypes: ["Issue", "Blocker"], allowSelfLoop: false },
211
+ { type: "belongs_to", fromTypes: ["Task", "Issue", "Fix", "Decision"], toTypes: ["Project", "Plan", "Milestone"], allowSelfLoop: false },
212
+ { type: "owned_by", fromTypes: ["Task", "Plan", "Project", "Issue"], toTypes: ["Person", "Team"], allowSelfLoop: false },
213
+ ],
214
+ highValueRelationTypes: ["depends_on", "blocks", "resolves", "owned_by"],
215
+ relatedToMaxRatio: 0.35,
216
+ relatedToMaxAbsolute: 2,
217
+ minRelationConfidence: 0.35,
218
+ evidenceSpanRequired: true,
219
+ endpointMentionRequired: true,
220
+ defaultEntityType: "Concept",
221
+ };
222
+ function toLowerMap(input) {
223
+ const output = {};
224
+ for (const [key, value] of Object.entries(input)) {
225
+ output[key.trim().toLowerCase()] = value.trim();
226
+ }
227
+ return output;
228
+ }
229
+ function toKeyedRules(input) {
230
+ const map = new Map();
231
+ for (const item of input) {
232
+ map.set(item.type.trim().toLowerCase(), item);
233
+ }
234
+ return map;
235
+ }
236
+ function schemaFilePath(projectRoot) {
237
+ return path.join(projectRoot, "schema", "graph.schema.yaml");
238
+ }
239
+ function clampNumber(value, min, max, fallback) {
240
+ if (typeof value !== "number" || !Number.isFinite(value)) {
241
+ return fallback;
242
+ }
243
+ return Math.max(min, Math.min(max, value));
244
+ }
245
+ function sanitizeEntityAliases(input) {
246
+ if (!input || typeof input !== "object" || Array.isArray(input)) {
247
+ return DEFAULT_SCHEMA.entityAliases;
248
+ }
249
+ const output = {};
250
+ for (const [canonical, aliasesRaw] of Object.entries(input)) {
251
+ const canonicalName = canonical.trim();
252
+ if (!canonicalName)
253
+ continue;
254
+ const aliases = Array.isArray(aliasesRaw)
255
+ ? aliasesRaw.map(item => (typeof item === "string" ? item.trim() : "")).filter(Boolean)
256
+ : [];
257
+ output[canonicalName] = aliases;
258
+ }
259
+ return Object.keys(output).length > 0 ? output : DEFAULT_SCHEMA.entityAliases;
260
+ }
261
+ function buildAliasLookup(schema) {
262
+ const lookup = new Map();
263
+ for (const [canonical, aliases] of Object.entries(schema.entityAliases || {})) {
264
+ const normalizedCanonical = canonical.trim();
265
+ if (!normalizedCanonical)
266
+ continue;
267
+ lookup.set(normalizedCanonical.toLowerCase(), normalizedCanonical);
268
+ for (const alias of aliases || []) {
269
+ const normalizedAlias = alias.trim().toLowerCase();
270
+ if (!normalizedAlias)
271
+ continue;
272
+ lookup.set(normalizedAlias, normalizedCanonical);
273
+ }
274
+ }
275
+ return lookup;
276
+ }
277
+ function normalizeEntityName(raw, schema) {
278
+ const value = raw.trim();
279
+ if (!value)
280
+ return "";
281
+ const lookup = buildAliasLookup(schema);
282
+ return lookup.get(value.toLowerCase()) || value;
283
+ }
284
+ function tokenizeForMatch(value) {
285
+ return value.toLowerCase().replace(/[_-]+/g, " ").replace(/\s+/g, " ").trim();
286
+ }
287
+ function entityMentionedInText(entity, sourceText, schema) {
288
+ const text = tokenizeForMatch(sourceText || "");
289
+ if (!text)
290
+ return false;
291
+ const target = tokenizeForMatch(entity);
292
+ if (target && text.includes(target)) {
293
+ return true;
294
+ }
295
+ const aliases = schema.entityAliases[entity] || [];
296
+ for (const alias of aliases) {
297
+ const normalized = tokenizeForMatch(alias);
298
+ if (normalized && text.includes(normalized)) {
299
+ return true;
300
+ }
301
+ }
302
+ return false;
303
+ }
304
+ function loadGraphSchema(projectRoot) {
305
+ const filePath = schemaFilePath(projectRoot);
306
+ if (!fs.existsSync(filePath)) {
307
+ return DEFAULT_SCHEMA;
308
+ }
309
+ try {
310
+ const raw = fs.readFileSync(filePath, "utf-8").trim();
311
+ if (!raw) {
312
+ return DEFAULT_SCHEMA;
313
+ }
314
+ const parsed = JSON.parse(raw);
315
+ return {
316
+ eventTypes: Array.isArray(parsed.eventTypes) && parsed.eventTypes.length > 0 ? parsed.eventTypes : DEFAULT_SCHEMA.eventTypes,
317
+ eventTypeAliases: parsed.eventTypeAliases && typeof parsed.eventTypeAliases === "object" ? parsed.eventTypeAliases : DEFAULT_SCHEMA.eventTypeAliases,
318
+ entityTypes: Array.isArray(parsed.entityTypes) && parsed.entityTypes.length > 0 ? parsed.entityTypes : DEFAULT_SCHEMA.entityTypes,
319
+ entityAliases: sanitizeEntityAliases(parsed.entityAliases),
320
+ relationTypes: Array.isArray(parsed.relationTypes) && parsed.relationTypes.length > 0 ? parsed.relationTypes : DEFAULT_SCHEMA.relationTypes,
321
+ relationTypeAliases: parsed.relationTypeAliases && typeof parsed.relationTypeAliases === "object" ? parsed.relationTypeAliases : DEFAULT_SCHEMA.relationTypeAliases,
322
+ relationRules: Array.isArray(parsed.relationRules) && parsed.relationRules.length > 0 ? parsed.relationRules : DEFAULT_SCHEMA.relationRules,
323
+ highValueRelationTypes: Array.isArray(parsed.highValueRelationTypes) && parsed.highValueRelationTypes.length > 0
324
+ ? parsed.highValueRelationTypes.map(item => String(item).trim()).filter(Boolean)
325
+ : DEFAULT_SCHEMA.highValueRelationTypes,
326
+ relatedToMaxRatio: clampNumber(parsed.relatedToMaxRatio, 0, 1, DEFAULT_SCHEMA.relatedToMaxRatio),
327
+ relatedToMaxAbsolute: Math.max(0, Math.floor(clampNumber(parsed.relatedToMaxAbsolute, 0, 20, DEFAULT_SCHEMA.relatedToMaxAbsolute))),
328
+ minRelationConfidence: clampNumber(parsed.minRelationConfidence, 0, 1, DEFAULT_SCHEMA.minRelationConfidence),
329
+ evidenceSpanRequired: typeof parsed.evidenceSpanRequired === "boolean" ? parsed.evidenceSpanRequired : DEFAULT_SCHEMA.evidenceSpanRequired,
330
+ endpointMentionRequired: typeof parsed.endpointMentionRequired === "boolean" ? parsed.endpointMentionRequired : DEFAULT_SCHEMA.endpointMentionRequired,
331
+ defaultEntityType: typeof parsed.defaultEntityType === "string" && parsed.defaultEntityType.trim()
332
+ ? parsed.defaultEntityType.trim()
333
+ : DEFAULT_SCHEMA.defaultEntityType,
334
+ };
335
+ }
336
+ catch {
337
+ return DEFAULT_SCHEMA;
338
+ }
339
+ }
340
+ function normalizeEventType(raw, schema) {
341
+ const value = raw.trim().toLowerCase();
342
+ const aliases = toLowerMap(schema.eventTypeAliases);
343
+ const eventTypes = new Set(schema.eventTypes.map(item => item.toLowerCase()));
344
+ if (eventTypes.has(value)) {
345
+ return value;
346
+ }
347
+ const mapped = aliases[value];
348
+ if (mapped) {
349
+ return mapped;
350
+ }
351
+ return "insight";
352
+ }
353
+ function normalizeRelationType(raw, schema) {
354
+ const value = raw.trim().toLowerCase();
355
+ const relationTypes = new Set(schema.relationTypes.map(item => item.toLowerCase()));
356
+ const aliases = toLowerMap(schema.relationTypeAliases);
357
+ if (relationTypes.has(value)) {
358
+ return value;
359
+ }
360
+ const mapped = aliases[value];
361
+ if (mapped) {
362
+ return mapped;
363
+ }
364
+ return "related_to";
365
+ }
366
+ function buildCanonicalId(args) {
367
+ const entities = (args.entities || []).map(item => item.trim().toLowerCase()).filter(Boolean).sort();
368
+ const relations = (args.relations || [])
369
+ .map(item => `${item.source.trim().toLowerCase()}|${item.type.trim().toLowerCase()}|${item.target.trim().toLowerCase()}`)
370
+ .sort();
371
+ const payload = JSON.stringify({
372
+ eventType: args.eventType.trim().toLowerCase(),
373
+ summary: args.summary.trim().toLowerCase(),
374
+ entities,
375
+ relations,
376
+ outcome: (args.outcome || "").trim().toLowerCase(),
377
+ });
378
+ return `can_${crypto.createHash("sha1").update(payload).digest("hex").slice(0, 20)}`;
379
+ }
380
+ function validateRelations(args) {
381
+ const mode = args.qualityMode || "warn";
382
+ const accepted = [];
383
+ const rejected = [];
384
+ const warnings = [];
385
+ const entitySet = new Set(args.entities.map(item => item.trim()).filter(Boolean));
386
+ const rules = toKeyedRules(args.schema.relationRules);
387
+ const typeMap = {};
388
+ for (const [name, type] of Object.entries(args.entityTypes || {})) {
389
+ if (typeof name === "string" && typeof type === "string" && name.trim() && type.trim()) {
390
+ typeMap[name.trim()] = type.trim();
391
+ }
392
+ }
393
+ for (const relation of args.relations) {
394
+ const source = normalizeEntityName(relation.source || "", args.schema);
395
+ const target = normalizeEntityName(relation.target || "", args.schema);
396
+ const type = normalizeRelationType(relation.type, args.schema);
397
+ const confidence = typeof relation.confidence === "number"
398
+ ? Math.max(0, Math.min(1, relation.confidence))
399
+ : undefined;
400
+ const evidenceSpan = typeof relation.evidence_span === "string" ? relation.evidence_span.trim() : "";
401
+ const normalized = { source, target, type, confidence, evidence_span: evidenceSpan || undefined };
402
+ if (!source || !target) {
403
+ rejected.push({ reason: "empty_edge", relation: normalized });
404
+ continue;
405
+ }
406
+ if (!entitySet.has(source) || !entitySet.has(target)) {
407
+ rejected.push({ reason: "edge_entity_missing", relation: normalized });
408
+ continue;
409
+ }
410
+ const rule = rules.get(type);
411
+ if (source === target && !(rule?.allowSelfLoop ?? false)) {
412
+ rejected.push({ reason: "self_loop_blocked", relation: normalized });
413
+ continue;
414
+ }
415
+ if (rule) {
416
+ const fromType = (typeMap[source] || args.schema.defaultEntityType).toLowerCase();
417
+ const toType = (typeMap[target] || args.schema.defaultEntityType).toLowerCase();
418
+ const allowedFrom = new Set(rule.fromTypes.map(item => item.toLowerCase()));
419
+ const allowedTo = new Set(rule.toTypes.map(item => item.toLowerCase()));
420
+ if (allowedFrom.size > 0 && !allowedFrom.has(fromType)) {
421
+ rejected.push({ reason: "from_type_invalid", relation: normalized });
422
+ continue;
423
+ }
424
+ if (allowedTo.size > 0 && !allowedTo.has(toType)) {
425
+ rejected.push({ reason: "to_type_invalid", relation: normalized });
426
+ continue;
427
+ }
428
+ }
429
+ if (typeof confidence === "number" && confidence < args.schema.minRelationConfidence) {
430
+ rejected.push({ reason: "low_relation_confidence", relation: normalized });
431
+ continue;
432
+ }
433
+ if (mode !== "off" && args.schema.evidenceSpanRequired && args.sourceText) {
434
+ if (!evidenceSpan) {
435
+ if (mode === "strict") {
436
+ rejected.push({ reason: "missing_evidence_span", relation: normalized });
437
+ continue;
438
+ }
439
+ warnings.push({ reason: "missing_evidence_span", relation: normalized });
440
+ }
441
+ else if (!tokenizeForMatch(args.sourceText).includes(tokenizeForMatch(evidenceSpan))) {
442
+ if (mode === "strict") {
443
+ rejected.push({ reason: "evidence_span_not_in_source", relation: normalized });
444
+ continue;
445
+ }
446
+ warnings.push({ reason: "evidence_span_not_in_source", relation: normalized });
447
+ }
448
+ }
449
+ if (mode !== "off" && args.schema.endpointMentionRequired && args.sourceText) {
450
+ const sourceHit = entityMentionedInText(source, args.sourceText, args.schema);
451
+ const targetHit = entityMentionedInText(target, args.sourceText, args.schema);
452
+ if (!sourceHit || !targetHit) {
453
+ if (mode === "strict") {
454
+ rejected.push({ reason: "endpoint_not_in_source_text", relation: normalized });
455
+ continue;
456
+ }
457
+ warnings.push({ reason: "endpoint_not_in_source_text", relation: normalized });
458
+ }
459
+ }
460
+ accepted.push(normalized);
461
+ }
462
+ if (accepted.length > 0) {
463
+ const highValueSet = new Set((args.schema.highValueRelationTypes || []).map(item => item.toLowerCase()));
464
+ const relatedTo = accepted.filter(item => item.type === "related_to");
465
+ const highValueCount = accepted.filter(item => highValueSet.has(item.type)).length;
466
+ const maxByRatio = Math.max(1, Math.ceil(Math.max(1, highValueCount) * args.schema.relatedToMaxRatio));
467
+ const maxAllowed = Math.max(0, Math.min(args.schema.relatedToMaxAbsolute, maxByRatio));
468
+ if (relatedTo.length > maxAllowed) {
469
+ const sorted = [...relatedTo].sort((a, b) => (b.confidence || 0.5) - (a.confidence || 0.5));
470
+ const keepSet = new Set(sorted.slice(0, maxAllowed).map(item => `${item.source}|${item.type}|${item.target}`));
471
+ const filtered = accepted.filter(item => item.type !== "related_to" || keepSet.has(`${item.source}|${item.type}|${item.target}`));
472
+ if (filtered.length !== accepted.length) {
473
+ for (const item of accepted) {
474
+ if (item.type === "related_to" && !keepSet.has(`${item.source}|${item.type}|${item.target}`)) {
475
+ rejected.push({ reason: "related_to_throttled", relation: item });
476
+ }
477
+ }
478
+ }
479
+ accepted.length = 0;
480
+ accepted.push(...filtered);
481
+ }
482
+ }
483
+ return { accepted, rejected, warnings };
484
+ }
485
+ function normalizeEntityType(raw, schema) {
486
+ const value = raw.trim();
487
+ const entityTypes = new Set(schema.entityTypes.map(item => item));
488
+ if (entityTypes.has(value)) {
489
+ return value;
490
+ }
491
+ return schema.defaultEntityType;
492
+ }
493
+ function validateGraphPayload(args) {
494
+ const sourceEventId = (args.sourceEventId || "").trim();
495
+ if (!sourceEventId) {
496
+ return { valid: false, reason: "source_event_id_empty" };
497
+ }
498
+ const entities = Array.isArray(args.entities)
499
+ ? [...new Set(args.entities.map(item => normalizeEntityName(typeof item === "string" ? item : "", args.schema)).filter(Boolean))]
500
+ : [];
501
+ if (entities.length === 0) {
502
+ return { valid: false, reason: "entities_empty" };
503
+ }
504
+ const entityTypes = args.entity_types || {};
505
+ const validEntityTypes = new Set(args.schema.entityTypes);
506
+ const normalizedEntityTypes = {};
507
+ const aliasLookup = buildAliasLookup(args.schema);
508
+ for (const [nameRaw, typeRaw] of Object.entries(entityTypes)) {
509
+ if (typeof typeRaw !== "string")
510
+ continue;
511
+ const normalizedName = aliasLookup.get(nameRaw.trim().toLowerCase()) || nameRaw.trim();
512
+ if (!normalizedName)
513
+ continue;
514
+ normalizedEntityTypes[normalizedName] = typeRaw.trim();
515
+ }
516
+ for (const entity of entities) {
517
+ const providedType = normalizedEntityTypes[entity];
518
+ if (providedType && validEntityTypes.has(providedType)) {
519
+ normalizedEntityTypes[entity] = providedType;
520
+ }
521
+ else {
522
+ return { valid: false, reason: `entity_type_missing_or_invalid:${entity}` };
523
+ }
524
+ }
525
+ const relationValidation = validateRelations({
526
+ relations: Array.isArray(args.relations) ? args.relations : [],
527
+ entities,
528
+ entityTypes: normalizedEntityTypes,
529
+ schema: args.schema,
530
+ sourceText: args.sourceText,
531
+ qualityMode: args.qualityMode,
532
+ });
533
+ if (relationValidation.accepted.length === 0) {
534
+ return { valid: false, reason: "relations_empty_or_invalid" };
535
+ }
536
+ const id = `gph_${Date.now().toString(36)}_${crypto.randomBytes(4).toString("hex")}`;
537
+ return {
538
+ valid: true,
539
+ warnings: relationValidation.warnings.map(item => item.reason),
540
+ normalized: {
541
+ id,
542
+ source_event_id: args.sourceEventId.trim(),
543
+ source_layer: args.sourceLayer,
544
+ archive_event_id: typeof args.archiveEventId === "string" && args.archiveEventId.trim()
545
+ ? args.archiveEventId.trim()
546
+ : undefined,
547
+ session_id: args.sessionId,
548
+ source_file: typeof args.sourceFile === "string" && args.sourceFile.trim()
549
+ ? args.sourceFile.trim()
550
+ : undefined,
551
+ timestamp: new Date().toISOString(),
552
+ entities,
553
+ entity_types: normalizedEntityTypes,
554
+ relations: relationValidation.accepted,
555
+ gate_source: args.gateSource,
556
+ event_type: typeof args.eventType === "string" && args.eventType.trim()
557
+ ? normalizeEventType(args.eventType, args.schema)
558
+ : undefined,
559
+ schema_version: "1.0.0",
560
+ confidence: args.confidence,
561
+ },
562
+ };
563
+ }
564
+ //# sourceMappingURL=ontology.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ontology.js","sourceRoot":"","sources":["../../../src/graph/ontology.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,48 @@
1
+ export interface ValidationResult {
2
+ valid: boolean;
3
+ data: unknown;
4
+ errors: string[];
5
+ warnings: string[];
6
+ }
7
+ export interface CleanedEventRecord {
8
+ event_type: string;
9
+ summary: string;
10
+ entities: string[];
11
+ entity_types?: Record<string, string>;
12
+ relations: Array<{
13
+ source: string;
14
+ target: string;
15
+ type: string;
16
+ evidence_span?: string;
17
+ confidence?: number;
18
+ }>;
19
+ outcome: string;
20
+ confidence: number;
21
+ }
22
+ export declare function validateLlmJsonOutput(rawString: string): ValidationResult;
23
+ export declare function validateGateDecisionsOutput(rawString: string): ValidationResult;
24
+ export declare function validateArchiveEvent(event: unknown): {
25
+ valid: boolean;
26
+ errors: string[];
27
+ cleaned?: CleanedEventRecord;
28
+ };
29
+ export declare function validateJsonlLine(line: string): {
30
+ valid: boolean;
31
+ record?: Record<string, unknown>;
32
+ errors: string[];
33
+ };
34
+ export declare function validateGraphJsonlLine(line: string): {
35
+ valid: boolean;
36
+ record?: Record<string, unknown>;
37
+ errors: string[];
38
+ warnings: string[];
39
+ };
40
+ export declare function createQualityLogger(baseLogger: {
41
+ debug: (message: string, ...args: unknown[]) => void;
42
+ info: (message: string, ...args: unknown[]) => void;
43
+ warn: (message: string, ...args: unknown[]) => void;
44
+ }): {
45
+ logValidationResult(context: string, result: ValidationResult): void;
46
+ logInvalidRecord(source: string, line: number, errors: string[]): void;
47
+ };
48
+ //# sourceMappingURL=llm_output_validator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"llm_output_validator.d.ts","sourceRoot":"","sources":["../../../src/quality/llm_output_validator.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,OAAO,CAAC;IACf,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAaD,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,SAAS,EAAE,KAAK,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,aAAa,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAChH,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;CACpB;AAoID,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,MAAM,GAAG,gBAAgB,CAkCzE;AAED,wBAAgB,2BAA2B,CAAC,SAAS,EAAE,MAAM,GAAG,gBAAgB,CAoC/E;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,GAAG;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAC;IAAC,OAAO,CAAC,EAAE,kBAAkB,CAAA;CAAE,CAmDvH;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CA0BtH;AAsBD,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;CAAE,CAqF/I;AAED,wBAAgB,mBAAmB,CAAC,UAAU,EAAE;IAC9C,KAAK,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IACrD,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IACpD,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;CACrD;iCAEgC,MAAM,UAAU,gBAAgB,GAAG,IAAI;6BAQ3C,MAAM,QAAQ,MAAM,UAAU,MAAM,EAAE,GAAG,IAAI;EAIzE"}