okf-core 0.0.0-bootstrap → 1.0.0-rc.2
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 +203 -0
- package/README.md +40 -4
- package/dist/analyze.d.ts +6 -0
- package/dist/analyze.d.ts.map +1 -0
- package/dist/analyze.js +225 -0
- package/dist/analyze.js.map +1 -0
- package/dist/changes.d.ts +6 -0
- package/dist/changes.d.ts.map +1 -0
- package/dist/changes.js +81 -0
- package/dist/changes.js.map +1 -0
- package/dist/conformance.d.ts +5 -0
- package/dist/conformance.d.ts.map +1 -0
- package/dist/conformance.js +103 -0
- package/dist/conformance.js.map +1 -0
- package/dist/derive.d.ts +14 -0
- package/dist/derive.d.ts.map +1 -0
- package/dist/derive.js +356 -0
- package/dist/derive.js.map +1 -0
- package/dist/diagnostics.d.ts +4 -0
- package/dist/diagnostics.d.ts.map +1 -0
- package/dist/diagnostics.js +19 -0
- package/dist/diagnostics.js.map +1 -0
- package/dist/diff.d.ts +2 -0
- package/dist/diff.d.ts.map +1 -0
- package/dist/diff.js +76 -0
- package/dist/diff.js.map +1 -0
- package/dist/frontmatter.d.ts +12 -0
- package/dist/frontmatter.d.ts.map +1 -0
- package/dist/frontmatter.js +110 -0
- package/dist/frontmatter.js.map +1 -0
- package/dist/graph.d.ts +3 -0
- package/dist/graph.d.ts.map +1 -0
- package/dist/graph.js +42 -0
- package/dist/graph.js.map +1 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +10 -0
- package/dist/index.js.map +1 -0
- package/dist/links.d.ts +10 -0
- package/dist/links.d.ts.map +1 -0
- package/dist/links.js +104 -0
- package/dist/links.js.map +1 -0
- package/dist/listing.d.ts +15 -0
- package/dist/listing.d.ts.map +1 -0
- package/dist/listing.js +38 -0
- package/dist/listing.js.map +1 -0
- package/dist/markdown.d.ts +18 -0
- package/dist/markdown.d.ts.map +1 -0
- package/dist/markdown.js +22 -0
- package/dist/markdown.js.map +1 -0
- package/dist/paths.d.ts +35 -0
- package/dist/paths.d.ts.map +1 -0
- package/dist/paths.js +103 -0
- package/dist/paths.js.map +1 -0
- package/dist/search.d.ts +5 -0
- package/dist/search.d.ts.map +1 -0
- package/dist/search.js +122 -0
- package/dist/search.js.map +1 -0
- package/dist/types.d.ts +54 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/package.json +31 -5
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../src/paths.ts"],"names":[],"mappings":"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"}
|
package/dist/search.d.ts
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { BundleAnalysis } from "okf-contracts";
|
|
2
|
+
import type { SearchResult } from "./types.js";
|
|
3
|
+
export declare function queryTerms(query: string): readonly string[];
|
|
4
|
+
export declare function searchBundle(analysis: BundleAnalysis, query: string, limit?: number): SearchResult;
|
|
5
|
+
//# sourceMappingURL=search.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../src/search.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAIpD,OAAO,KAAK,EAAiB,YAAY,EAAE,MAAM,YAAY,CAAC;AA8B9D,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CAI3D;AA6CD,wBAAgB,YAAY,CAAC,QAAQ,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,SAAK,GAAG,YAAY,CAyD9F"}
|
package/dist/search.js
ADDED
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import { markdownHeadings } from "./markdown.js";
|
|
2
|
+
import { byCodePoint } from "./paths.js";
|
|
3
|
+
const TOKEN = /[0-9a-z]+/g;
|
|
4
|
+
const FRONTMATTER = /^---[ \t]*\r?\n([\s\S]*?)\r?\n---[ \t]*(?:\r?\n|$)/;
|
|
5
|
+
const FRONTMATTER_FIELD = /^(?:title|description)[ \t]*:[ \t]*(.+?)[ \t]*$/gm;
|
|
6
|
+
const STOPWORDS = new Set("a an and are as at be by for from how in is it its of on or that the this to was what when where which why with".split(" "));
|
|
7
|
+
const EMPHASIS_WEIGHT = 3;
|
|
8
|
+
const PHRASE_WEIGHT = 8;
|
|
9
|
+
const MAX_PASSAGES_PER_DOCUMENT = 3;
|
|
10
|
+
function tokenize(text) {
|
|
11
|
+
return text.toLowerCase().match(TOKEN) ?? [];
|
|
12
|
+
}
|
|
13
|
+
function normalize(text) {
|
|
14
|
+
return text.toLowerCase().split(/\s+/).filter(Boolean).join(" ");
|
|
15
|
+
}
|
|
16
|
+
function counts(tokens) {
|
|
17
|
+
const result = new Map();
|
|
18
|
+
for (const token of tokens) {
|
|
19
|
+
result.set(token, (result.get(token) ?? 0) + 1);
|
|
20
|
+
}
|
|
21
|
+
return result;
|
|
22
|
+
}
|
|
23
|
+
export function queryTerms(query) {
|
|
24
|
+
const tokens = tokenize(query);
|
|
25
|
+
const meaningful = tokens.filter((token) => !STOPWORDS.has(token));
|
|
26
|
+
return meaningful.length > 0 ? meaningful : tokens;
|
|
27
|
+
}
|
|
28
|
+
function analyze(text, path) {
|
|
29
|
+
const emphasisSource = [path.replace(/[/-]/g, " ")];
|
|
30
|
+
let body = text;
|
|
31
|
+
const frontmatter = FRONTMATTER.exec(text);
|
|
32
|
+
if (frontmatter) {
|
|
33
|
+
for (const field of (frontmatter[1] ?? "").matchAll(FRONTMATTER_FIELD)) {
|
|
34
|
+
emphasisSource.push(field[1] ?? "");
|
|
35
|
+
}
|
|
36
|
+
body = text.slice(frontmatter[0].length);
|
|
37
|
+
}
|
|
38
|
+
for (const heading of markdownHeadings(body)) {
|
|
39
|
+
emphasisSource.push(heading.text);
|
|
40
|
+
}
|
|
41
|
+
return { emphasis: counts(tokenize(emphasisSource.join(" "))), body: counts(tokenize(body)) };
|
|
42
|
+
}
|
|
43
|
+
function passagesFor(text, terms, phrase, limit) {
|
|
44
|
+
const lines = text.split(/\r?\n/);
|
|
45
|
+
const scored = [];
|
|
46
|
+
lines.forEach((line, index) => {
|
|
47
|
+
const stripped = line.trim();
|
|
48
|
+
if (!stripped)
|
|
49
|
+
return;
|
|
50
|
+
const present = new Set(tokenize(stripped));
|
|
51
|
+
let hits = 0;
|
|
52
|
+
for (const term of terms)
|
|
53
|
+
if (present.has(term))
|
|
54
|
+
hits += 1;
|
|
55
|
+
const exact = phrase.length > 0 && normalize(stripped).includes(phrase);
|
|
56
|
+
if (hits > 0 || exact) {
|
|
57
|
+
scored.push({ weight: hits + (exact ? PHRASE_WEIGHT : 0), line: index + 1, snippet: stripped.slice(0, 500) });
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
|
+
if (scored.length === 0) {
|
|
61
|
+
const first = lines.findIndex((line) => line.trim().length > 0);
|
|
62
|
+
return first < 0 ? [] : [{ line: first + 1, snippet: (lines[first] ?? "").trim().slice(0, 500) }];
|
|
63
|
+
}
|
|
64
|
+
scored.sort((left, right) => right.weight - left.weight || left.line - right.line);
|
|
65
|
+
return scored.slice(0, limit).map(({ line, snippet }) => ({ line, snippet }));
|
|
66
|
+
}
|
|
67
|
+
export function searchBundle(analysis, query, limit = 20) {
|
|
68
|
+
const safeLimit = Number.isFinite(limit) ? Math.max(0, Math.floor(limit)) : 20;
|
|
69
|
+
const terms = queryTerms(query);
|
|
70
|
+
const distinct = new Set(terms);
|
|
71
|
+
const phrase = distinct.size > 1 ? normalize(query) : "";
|
|
72
|
+
const entries = analysis.documents.map((document) => ({
|
|
73
|
+
document,
|
|
74
|
+
analysis: analyze(document.content, document.path),
|
|
75
|
+
phraseHits: phrase ? normalize(document.content).split(phrase).length - 1 : 0,
|
|
76
|
+
}));
|
|
77
|
+
const frequency = new Map();
|
|
78
|
+
for (const entry of entries) {
|
|
79
|
+
for (const token of new Set([...entry.analysis.emphasis.keys(), ...entry.analysis.body.keys()])) {
|
|
80
|
+
frequency.set(token, (frequency.get(token) ?? 0) + 1);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
const idf = new Map();
|
|
84
|
+
for (const term of distinct) {
|
|
85
|
+
idf.set(term, Math.log(1 + entries.length / (1 + (frequency.get(term) ?? 0))));
|
|
86
|
+
}
|
|
87
|
+
const ranked = entries
|
|
88
|
+
.map((entry) => {
|
|
89
|
+
let total = 0;
|
|
90
|
+
let matched = 0;
|
|
91
|
+
for (const term of distinct) {
|
|
92
|
+
const amount = (entry.analysis.body.get(term) ?? 0) + EMPHASIS_WEIGHT * (entry.analysis.emphasis.get(term) ?? 0);
|
|
93
|
+
if (amount > 0) {
|
|
94
|
+
matched += 1;
|
|
95
|
+
total += (idf.get(term) ?? 0) * (1 + Math.log(amount));
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
const coverage = distinct.size === 0 ? 0 : matched / distinct.size;
|
|
99
|
+
return { ...entry, score: total * coverage * coverage + PHRASE_WEIGHT * entry.phraseHits };
|
|
100
|
+
})
|
|
101
|
+
.filter((entry) => entry.score > 0)
|
|
102
|
+
.sort((left, right) => right.score - left.score || byCodePoint(left.document.path, right.document.path));
|
|
103
|
+
const matches = [];
|
|
104
|
+
let truncated = false;
|
|
105
|
+
for (const entry of ranked) {
|
|
106
|
+
if (matches.length >= safeLimit) {
|
|
107
|
+
truncated = true;
|
|
108
|
+
break;
|
|
109
|
+
}
|
|
110
|
+
const budget = Math.min(MAX_PASSAGES_PER_DOCUMENT, safeLimit - matches.length);
|
|
111
|
+
for (const passage of passagesFor(entry.document.content, distinct, phrase, budget)) {
|
|
112
|
+
matches.push({
|
|
113
|
+
path: entry.document.path,
|
|
114
|
+
line: passage.line,
|
|
115
|
+
snippet: passage.snippet,
|
|
116
|
+
score: Math.round(entry.score * 10_000) / 10_000,
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
return { terms: [...terms], matches, truncated };
|
|
121
|
+
}
|
|
122
|
+
//# sourceMappingURL=search.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search.js","sourceRoot":"","sources":["../src/search.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import type { AnalyzedDocument, BundleGraph, Diagnostic, DiagnosticGroups } from "okf-contracts";
|
|
2
|
+
export interface ProfileDiagnostic {
|
|
3
|
+
readonly code: string;
|
|
4
|
+
readonly severity?: "error" | "warning" | "info";
|
|
5
|
+
readonly path: string;
|
|
6
|
+
readonly message: string;
|
|
7
|
+
readonly range?: Diagnostic["range"];
|
|
8
|
+
}
|
|
9
|
+
export interface ValidationProfileContext {
|
|
10
|
+
readonly okfVersion: string | null;
|
|
11
|
+
readonly documents: readonly AnalyzedDocument[];
|
|
12
|
+
readonly graph: BundleGraph;
|
|
13
|
+
readonly diagnostics: Pick<DiagnosticGroups, "core" | "guidance">;
|
|
14
|
+
readonly today: string | null;
|
|
15
|
+
}
|
|
16
|
+
export interface ValidationProfile {
|
|
17
|
+
readonly id: string;
|
|
18
|
+
validate(context: ValidationProfileContext): readonly ProfileDiagnostic[];
|
|
19
|
+
}
|
|
20
|
+
export interface AnalyzeBundleOptions {
|
|
21
|
+
/** Deterministic ISO date used for staleness. Omit rather than consulting the clock. */
|
|
22
|
+
readonly today?: string;
|
|
23
|
+
/**
|
|
24
|
+
* The bundle files that are not OKF documents: the query an Attested Computation runs, the
|
|
25
|
+
* script its attester executes. The analysis never opens them, it only needs to know they
|
|
26
|
+
* exist so a contract path that names one resolves. Paths take the same shape as
|
|
27
|
+
* `AnalyzedDocument.path` — bundle-root-relative, forward slashes — so the two sets compare
|
|
28
|
+
* directly. Omit it and only loaded documents are known, which is the previous behaviour.
|
|
29
|
+
*/
|
|
30
|
+
readonly nonDocumentPaths?: ReadonlySet<string>;
|
|
31
|
+
readonly profile?: ValidationProfile;
|
|
32
|
+
}
|
|
33
|
+
export interface ParsedDocumentResult {
|
|
34
|
+
readonly document: AnalyzedDocument;
|
|
35
|
+
readonly diagnostics: Pick<DiagnosticGroups, "core" | "guidance">;
|
|
36
|
+
}
|
|
37
|
+
export interface ParseDocumentOptions {
|
|
38
|
+
readonly knownPaths?: ReadonlySet<string>;
|
|
39
|
+
/** Bundle files that are not documents; see `AnalyzeBundleOptions.nonDocumentPaths`. */
|
|
40
|
+
readonly nonDocumentPaths?: ReadonlySet<string>;
|
|
41
|
+
readonly today?: string;
|
|
42
|
+
}
|
|
43
|
+
export interface SearchPassage {
|
|
44
|
+
readonly path: string;
|
|
45
|
+
readonly line: number;
|
|
46
|
+
readonly snippet: string;
|
|
47
|
+
readonly score: number;
|
|
48
|
+
}
|
|
49
|
+
export interface SearchResult {
|
|
50
|
+
readonly terms: readonly string[];
|
|
51
|
+
readonly matches: readonly SearchPassage[];
|
|
52
|
+
readonly truncated: boolean;
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,gBAAgB,EAChB,WAAW,EACX,UAAU,EACV,gBAAgB,EACjB,MAAM,eAAe,CAAC;AAEvB,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;IACjD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,KAAK,CAAC,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC;CACtC;AAED,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,QAAQ,CAAC,SAAS,EAAE,SAAS,gBAAgB,EAAE,CAAC;IAChD,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC;IAC5B,QAAQ,CAAC,WAAW,EAAE,IAAI,CAAC,gBAAgB,EAAE,MAAM,GAAG,UAAU,CAAC,CAAC;IAClE,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,OAAO,EAAE,wBAAwB,GAAG,SAAS,iBAAiB,EAAE,CAAC;CAC3E;AAED,MAAM,WAAW,oBAAoB;IACnC,wFAAwF;IACxF,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB;;;;;;OAMG;IACH,QAAQ,CAAC,gBAAgB,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAChD,QAAQ,CAAC,OAAO,CAAC,EAAE,iBAAiB,CAAC;CACtC;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,CAAC;IACpC,QAAQ,CAAC,WAAW,EAAE,IAAI,CAAC,gBAAgB,EAAE,MAAM,GAAG,UAAU,CAAC,CAAC;CACnE;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,UAAU,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC1C,wFAAwF;IACxF,QAAQ,CAAC,gBAAgB,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAChD,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,QAAQ,CAAC,OAAO,EAAE,SAAS,aAAa,EAAE,CAAC;IAC3C,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;CAC7B"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
|
package/package.json
CHANGED
|
@@ -1,15 +1,41 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "okf-core",
|
|
3
|
-
"version": "
|
|
4
|
-
"description": "
|
|
5
|
-
"
|
|
3
|
+
"version": "1.0.0-rc.2",
|
|
4
|
+
"description": "Canonical parser, validator, link resolver, graph, and search engine for OKF v0.2",
|
|
5
|
+
"type": "module",
|
|
6
6
|
"repository": {
|
|
7
7
|
"type": "git",
|
|
8
8
|
"url": "git+https://github.com/disusered/okf-toolkit.git",
|
|
9
9
|
"directory": "packages/core"
|
|
10
10
|
},
|
|
11
|
+
"homepage": "https://github.com/disusered/okf-toolkit#readme",
|
|
12
|
+
"bugs": {
|
|
13
|
+
"url": "https://github.com/disusered/okf-toolkit/issues"
|
|
14
|
+
},
|
|
11
15
|
"publishConfig": {
|
|
12
16
|
"access": "public"
|
|
13
17
|
},
|
|
14
|
-
"
|
|
15
|
-
|
|
18
|
+
"license": "Apache-2.0",
|
|
19
|
+
"engines": {
|
|
20
|
+
"node": ">=24 <25"
|
|
21
|
+
},
|
|
22
|
+
"files": [
|
|
23
|
+
"dist"
|
|
24
|
+
],
|
|
25
|
+
"exports": {
|
|
26
|
+
".": {
|
|
27
|
+
"types": "./dist/index.d.ts",
|
|
28
|
+
"default": "./dist/index.js"
|
|
29
|
+
}
|
|
30
|
+
},
|
|
31
|
+
"dependencies": {
|
|
32
|
+
"mdast-util-from-markdown": "^2.0.2",
|
|
33
|
+
"yaml": "^2.9.0",
|
|
34
|
+
"okf-contracts": "1.0.0-rc.2"
|
|
35
|
+
},
|
|
36
|
+
"scripts": {
|
|
37
|
+
"build": "tsc -p tsconfig.json",
|
|
38
|
+
"test": "tsc -p tsconfig.test.json && node --test .test-dist/test/*.test.js",
|
|
39
|
+
"typecheck": "tsc --noEmit -p tsconfig.test.json"
|
|
40
|
+
}
|
|
41
|
+
}
|