fix: anonymize all examples and test data

- Replaced real names/companies with generic placeholders
- Tests: Vainplex GmbH → Acme GmbH
- README: Sebastian/Mondo Gate → Alex/Acme Corp
- Author: OpenClaw Community
- License: OpenClaw Contributors
This commit is contained in:
Claudia 2026-02-17 16:29:44 +01:00
parent 898b2d9b9d
commit 7ee66dd0d2
5 changed files with 18 additions and 18 deletions

View file

@ -1,6 +1,6 @@
MIT License
Copyright (c) 2026 Vainplex
Copyright (c) 2026 OpenClaw Contributors
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal

View file

@ -14,11 +14,11 @@ Every message your OpenClaw agent processes flows through the Knowledge Engine:
6. **Background Maintenance** — Prunes low-relevance facts, compacts storage, runs cleanup
```
User: "We're meeting with Sebastian from Mondo Gate next Tuesday"
User: "We're meeting with Alex from Acme Corp next Tuesday"
├─ Regex → entities: [Sebastian (person), Mondo Gate (organization)]
└─ LLM → facts: [Sebastian — works-at — Mondo Gate]
[Meeting — scheduled-with — Mondo Gate]
├─ Regex → entities: [Alex (person), Acme Corp (organization)]
└─ LLM → facts: [Alex — works-at — Acme Corp]
[Meeting — scheduled-with — Acme Corp]
```
## Quick Start
@ -167,9 +167,9 @@ Facts are stored as structured triples:
```json
{
"id": "f-abc123",
"subject": "Sebastian",
"subject": "Alex",
"predicate": "works-at",
"object": "Mondo Gate",
"object": "Acme Corp",
"source": "extracted-llm",
"relevance": 0.95,
"createdAt": 1707123456789,
@ -235,7 +235,7 @@ npm test
Tests cover: config validation, entity extraction, fact CRUD, decay, pruning, LLM batching, HTTP client, embeddings, storage atomicity, maintenance scheduling, hook orchestration.
## Part of the Darkplex Plugin Suite
## Part of the Vainplex Plugin Suite
| # | Plugin | Status | Description |
|---|--------|--------|-------------|

View file

@ -17,7 +17,7 @@
"nlp",
"entity-extraction"
],
"author": "Vainplex",
"author": "OpenClaw Community",
"license": "MIT",
"repository": {
"type": "git",

View file

@ -34,12 +34,12 @@ describe('EntityExtractor', () => {
});
it('should extract multiple different entities', () => {
const text = 'Contact Atlas via atlas@vainplex.com on 2026-02-17.';
const text = 'Contact Atlas via atlas@acme.com on 2026-02-17.';
const entities = extractor.extract(text);
assert.strictEqual(entities.length, 3); // Atlas (proper_noun), email, date
const names = entities.map(e => e.value).sort();
assert.deepStrictEqual(names, ['2026-02-17', 'Atlas', 'atlas@vainplex.com']);
assert.deepStrictEqual(names, ['2026-02-17', 'Atlas', 'atlas@acme.com']);
});
it('should handle multiple mentions of the same entity', () => {
@ -54,14 +54,14 @@ describe('EntityExtractor', () => {
});
it('should correctly identify and canonicalize an organization', () => {
const text = 'I work for Vainplex GmbH. It is a German company.';
const text = 'I work for Acme GmbH. It is a German company.';
const entities = extractor.extract(text);
const orgEntity = entities.find(e => e.type === 'organization');
assert.ok(orgEntity, 'Organization entity should be found');
assert.strictEqual(orgEntity.value, 'Vainplex'); // Canonicalized
assert.strictEqual(orgEntity.id, 'organization:vainplex');
assert.deepStrictEqual(orgEntity.mentions, ['Vainplex GmbH']);
assert.strictEqual(orgEntity.value, 'Acme'); // Canonicalized
assert.strictEqual(orgEntity.id, 'organization:acme');
assert.deepStrictEqual(orgEntity.mentions, ['Acme GmbH']);
});
it('should extract dates in various formats', () => {
@ -84,7 +84,7 @@ describe('EntityExtractor', () => {
describe('mergeEntities', () => {
it('should merge two disjoint lists of entities', () => {
const listA: Entity[] = [{ id: 'person:claude', type: 'person', value: 'Claude', count: 1, importance: 0.7, lastSeen: '2026-01-01', mentions: ['Claude'], source: ['regex'] }];
const listB: Entity[] = [{ id: 'org:vainplex', type: 'organization', value: 'Vainplex', count: 1, importance: 0.8, lastSeen: '2026-01-01', mentions: ['Vainplex'], source: ['llm'] }];
const listB: Entity[] = [{ id: 'org:acme', type: 'organization', value: 'Acme', count: 1, importance: 0.8, lastSeen: '2026-01-01', mentions: ['Acme'], source: ['llm'] }];
const merged = EntityExtractor.mergeEntities(listA, listB);
assert.strictEqual(merged.length, 2);

View file

@ -111,11 +111,11 @@ describe('REGEX_PATTERNS', () => {
it('should match organization names with suffixes', () => {
const testCases: TestCase[] = [
['He works at Vainplex GmbH.', 'Vainplex GmbH'],
['He works at Acme GmbH.', 'Acme GmbH'],
['The owner of Stark Industries, LLC is Tony Stark.', 'Stark Industries, LLC'],
['Globex Corp. is another example.', 'Globex Corp.'],
['This also catches Acme Inc. and Cyberdyne Systems Ltd.', ['Acme Inc.', 'Cyberdyne Systems Ltd.']],
['No match for Vainplex alone', null],
['No match for Acme alone', null],
];
runTestCases(REGEX_PATTERNS.organization_suffix, testCases);
});