@shrkcrft/knowledge 0.1.0-alpha.1
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.
- package/LICENSE +21 -0
- package/README.md +15 -0
- package/dist/define/define-knowledge-base.d.ts +7 -0
- package/dist/define/define-knowledge-base.d.ts.map +1 -0
- package/dist/define/define-knowledge-base.js +3 -0
- package/dist/define/define-knowledge-entry.d.ts +20 -0
- package/dist/define/define-knowledge-entry.d.ts.map +1 -0
- package/dist/define/define-knowledge-entry.js +35 -0
- package/dist/format/action-hints-formatter.d.ts +35 -0
- package/dist/format/action-hints-formatter.d.ts.map +1 -0
- package/dist/format/action-hints-formatter.js +120 -0
- package/dist/format/knowledge-formatter.d.ts +11 -0
- package/dist/format/knowledge-formatter.d.ts.map +1 -0
- package/dist/format/knowledge-formatter.js +58 -0
- package/dist/index/knowledge-index.d.ts +16 -0
- package/dist/index/knowledge-index.d.ts.map +1 -0
- package/dist/index/knowledge-index.js +63 -0
- package/dist/index/relevance-score.d.ts +9 -0
- package/dist/index/relevance-score.d.ts.map +1 -0
- package/dist/index/relevance-score.js +89 -0
- package/dist/index.d.ts +20 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +19 -0
- package/dist/load/knowledge-loader.d.ts +11 -0
- package/dist/load/knowledge-loader.d.ts.map +1 -0
- package/dist/load/knowledge-loader.js +1 -0
- package/dist/load/markdown-knowledge-loader.d.ts +6 -0
- package/dist/load/markdown-knowledge-loader.d.ts.map +1 -0
- package/dist/load/markdown-knowledge-loader.js +84 -0
- package/dist/load/typescript-knowledge-loader.d.ts +11 -0
- package/dist/load/typescript-knowledge-loader.d.ts.map +1 -0
- package/dist/load/typescript-knowledge-loader.js +78 -0
- package/dist/model/action-hints.d.ts +63 -0
- package/dist/model/action-hints.d.ts.map +1 -0
- package/dist/model/action-hints.js +23 -0
- package/dist/model/knowledge-base.d.ts +6 -0
- package/dist/model/knowledge-base.d.ts.map +1 -0
- package/dist/model/knowledge-base.js +1 -0
- package/dist/model/knowledge-entry.d.ts +84 -0
- package/dist/model/knowledge-entry.d.ts.map +1 -0
- package/dist/model/knowledge-entry.js +1 -0
- package/dist/model/knowledge-priority.d.ts +9 -0
- package/dist/model/knowledge-priority.d.ts.map +1 -0
- package/dist/model/knowledge-priority.js +16 -0
- package/dist/model/knowledge-query.d.ts +17 -0
- package/dist/model/knowledge-query.d.ts.map +1 -0
- package/dist/model/knowledge-query.js +1 -0
- package/dist/model/knowledge-search-result.d.ts +11 -0
- package/dist/model/knowledge-search-result.d.ts.map +1 -0
- package/dist/model/knowledge-search-result.js +1 -0
- package/dist/model/knowledge-type.d.ts +25 -0
- package/dist/model/knowledge-type.d.ts.map +1 -0
- package/dist/model/knowledge-type.js +27 -0
- package/dist/search/knowledge-filter.d.ts +9 -0
- package/dist/search/knowledge-filter.d.ts.map +1 -0
- package/dist/search/knowledge-filter.js +15 -0
- package/dist/search/knowledge-search.d.ts +5 -0
- package/dist/search/knowledge-search.d.ts.map +1 -0
- package/dist/search/knowledge-search.js +5 -0
- package/dist/validate/validate-knowledge-entries.d.ts +29 -0
- package/dist/validate/validate-knowledge-entries.d.ts.map +1 -0
- package/dist/validate/validate-knowledge-entries.js +101 -0
- package/package.json +51 -0
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import { isValidKnowledgeId } from '@shrkcrft/core';
|
|
2
|
+
import { ALL_KNOWLEDGE_TYPES } from "../model/knowledge-type.js";
|
|
3
|
+
import { KnowledgePriority } from "../model/knowledge-priority.js";
|
|
4
|
+
const VALID_PRIORITIES = new Set(Object.values(KnowledgePriority));
|
|
5
|
+
const VALID_TYPES = new Set(ALL_KNOWLEDGE_TYPES);
|
|
6
|
+
/**
|
|
7
|
+
* Validate a list of knowledge entries. Catches the classic problems:
|
|
8
|
+
* - missing or malformed id
|
|
9
|
+
* - duplicate ids (warning — first occurrence wins)
|
|
10
|
+
* - missing title/content/type
|
|
11
|
+
* - unknown type (warning — custom types are allowed but get flagged)
|
|
12
|
+
* - unknown priority (error)
|
|
13
|
+
*/
|
|
14
|
+
export function validateKnowledgeEntries(entries) {
|
|
15
|
+
const issues = [];
|
|
16
|
+
const seen = new Map();
|
|
17
|
+
const uniqueEntries = [];
|
|
18
|
+
for (const entry of entries) {
|
|
19
|
+
const id = typeof entry.id === 'string' ? entry.id : '';
|
|
20
|
+
const source = entry.source?.origin;
|
|
21
|
+
if (!id) {
|
|
22
|
+
issues.push({
|
|
23
|
+
code: 'missing-id',
|
|
24
|
+
entryId: '?',
|
|
25
|
+
source,
|
|
26
|
+
message: 'Knowledge entry is missing an `id`.',
|
|
27
|
+
severity: 'error',
|
|
28
|
+
});
|
|
29
|
+
continue;
|
|
30
|
+
}
|
|
31
|
+
if (!isValidKnowledgeId(id)) {
|
|
32
|
+
issues.push({
|
|
33
|
+
code: 'invalid-id-format',
|
|
34
|
+
entryId: id,
|
|
35
|
+
source,
|
|
36
|
+
message: `Entry id "${id}" does not match /^[a-z0-9]+([.-][a-z0-9]+)*$/`,
|
|
37
|
+
severity: 'error',
|
|
38
|
+
});
|
|
39
|
+
continue;
|
|
40
|
+
}
|
|
41
|
+
if (!entry.title) {
|
|
42
|
+
issues.push({
|
|
43
|
+
code: 'missing-title',
|
|
44
|
+
entryId: id,
|
|
45
|
+
source,
|
|
46
|
+
message: `Entry "${id}" is missing a title.`,
|
|
47
|
+
severity: 'error',
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
if (typeof entry.content !== 'string') {
|
|
51
|
+
issues.push({
|
|
52
|
+
code: 'missing-content',
|
|
53
|
+
entryId: id,
|
|
54
|
+
source,
|
|
55
|
+
message: `Entry "${id}" is missing content.`,
|
|
56
|
+
severity: 'error',
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
if (!entry.type) {
|
|
60
|
+
issues.push({
|
|
61
|
+
code: 'missing-type',
|
|
62
|
+
entryId: id,
|
|
63
|
+
source,
|
|
64
|
+
message: `Entry "${id}" is missing a type.`,
|
|
65
|
+
severity: 'error',
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
else if (!VALID_TYPES.has(String(entry.type)) && entry.type !== 'custom') {
|
|
69
|
+
issues.push({
|
|
70
|
+
code: 'invalid-type',
|
|
71
|
+
entryId: id,
|
|
72
|
+
source,
|
|
73
|
+
message: `Entry "${id}" uses unknown type "${entry.type}". Use KnowledgeType or set type:'custom'.`,
|
|
74
|
+
severity: 'warning',
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
if (entry.priority && !VALID_PRIORITIES.has(String(entry.priority))) {
|
|
78
|
+
issues.push({
|
|
79
|
+
code: 'invalid-priority',
|
|
80
|
+
entryId: id,
|
|
81
|
+
source,
|
|
82
|
+
message: `Entry "${id}" has invalid priority "${entry.priority}". Allowed: critical|high|medium|low.`,
|
|
83
|
+
severity: 'error',
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
if (seen.has(id)) {
|
|
87
|
+
issues.push({
|
|
88
|
+
code: 'duplicate-id',
|
|
89
|
+
entryId: id,
|
|
90
|
+
source,
|
|
91
|
+
message: `Duplicate knowledge id "${id}" — first occurrence wins, later ones ignored.`,
|
|
92
|
+
severity: 'warning',
|
|
93
|
+
});
|
|
94
|
+
continue;
|
|
95
|
+
}
|
|
96
|
+
seen.set(id, entry);
|
|
97
|
+
uniqueEntries.push(entry);
|
|
98
|
+
}
|
|
99
|
+
const hasErrors = issues.some((i) => i.severity === 'error');
|
|
100
|
+
return { valid: !hasErrors, issues, uniqueEntries };
|
|
101
|
+
}
|
package/package.json
ADDED
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@shrkcrft/knowledge",
|
|
3
|
+
"version": "0.1.0-alpha.1",
|
|
4
|
+
"description": "SharkCraft structured knowledge model: typed entries, index, search, loaders (TS + markdown), validation.",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"author": "SharkCraft contributors",
|
|
7
|
+
"type": "module",
|
|
8
|
+
"main": "./dist/index.js",
|
|
9
|
+
"types": "./dist/index.d.ts",
|
|
10
|
+
"exports": {
|
|
11
|
+
".": {
|
|
12
|
+
"types": "./dist/index.d.ts",
|
|
13
|
+
"import": "./dist/index.js",
|
|
14
|
+
"default": "./dist/index.js"
|
|
15
|
+
}
|
|
16
|
+
},
|
|
17
|
+
"files": [
|
|
18
|
+
"dist",
|
|
19
|
+
"README.md",
|
|
20
|
+
"LICENSE"
|
|
21
|
+
],
|
|
22
|
+
"repository": {
|
|
23
|
+
"type": "git",
|
|
24
|
+
"url": "git+https://github.com/sharkcraft/sharkcraft.git",
|
|
25
|
+
"directory": "packages/knowledge"
|
|
26
|
+
},
|
|
27
|
+
"homepage": "https://github.com/sharkcraft/sharkcraft",
|
|
28
|
+
"bugs": {
|
|
29
|
+
"url": "https://github.com/sharkcraft/sharkcraft/issues"
|
|
30
|
+
},
|
|
31
|
+
"keywords": [
|
|
32
|
+
"sharkcraft",
|
|
33
|
+
"knowledge",
|
|
34
|
+
"rules",
|
|
35
|
+
"retrieval",
|
|
36
|
+
"ai"
|
|
37
|
+
],
|
|
38
|
+
"engines": {
|
|
39
|
+
"bun": ">=1.1.0",
|
|
40
|
+
"node": ">=18"
|
|
41
|
+
},
|
|
42
|
+
"scripts": {
|
|
43
|
+
"typecheck": "tsc --noEmit -p tsconfig.json"
|
|
44
|
+
},
|
|
45
|
+
"dependencies": {
|
|
46
|
+
"@shrkcrft/core": "^0.1.0-alpha.1"
|
|
47
|
+
},
|
|
48
|
+
"publishConfig": {
|
|
49
|
+
"access": "public"
|
|
50
|
+
}
|
|
51
|
+
}
|