diff --git a/LICENSE b/LICENSE index 11eafda..4f92758 100644 --- a/LICENSE +++ b/LICENSE @@ -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 diff --git a/README.md b/README.md index 2195881..f9b398b 100644 --- a/README.md +++ b/README.md @@ -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 | |---|--------|--------|-------------| diff --git a/package.json b/package.json index 358b9fc..3a25feb 100644 --- a/package.json +++ b/package.json @@ -17,7 +17,7 @@ "nlp", "entity-extraction" ], - "author": "Vainplex", + "author": "OpenClaw Community", "license": "MIT", "repository": { "type": "git", diff --git a/test/entity-extractor.test.ts b/test/entity-extractor.test.ts index b2e18e7..f762944 100644 --- a/test/entity-extractor.test.ts +++ b/test/entity-extractor.test.ts @@ -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); diff --git a/test/patterns.test.ts b/test/patterns.test.ts index 2bb7468..3fd04e0 100644 --- a/test/patterns.test.ts +++ b/test/patterns.test.ts @@ -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); });