@vortex-os/ontos 0.1.0 → 0.2.0
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/README.md +32 -17
- package/dist/actions/index.d.ts +28 -1
- package/dist/actions/index.d.ts.map +1 -1
- package/dist/actions/index.js +12 -0
- package/dist/actions/index.js.map +1 -1
- package/dist/enrich/domain-range.d.ts +25 -0
- package/dist/enrich/domain-range.d.ts.map +1 -0
- package/dist/enrich/domain-range.js +60 -0
- package/dist/enrich/domain-range.js.map +1 -0
- package/dist/enrich/index.d.ts +50 -0
- package/dist/enrich/index.d.ts.map +1 -0
- package/dist/enrich/index.js +67 -0
- package/dist/enrich/index.js.map +1 -0
- package/dist/enrich/tier.d.ts +27 -0
- package/dist/enrich/tier.d.ts.map +1 -0
- package/dist/enrich/tier.js +38 -0
- package/dist/enrich/tier.js.map +1 -0
- package/dist/enrich/types.d.ts +101 -0
- package/dist/enrich/types.d.ts.map +1 -0
- package/dist/enrich/types.js +11 -0
- package/dist/enrich/types.js.map +1 -0
- package/dist/enrich/validate.d.ts +32 -0
- package/dist/enrich/validate.d.ts.map +1 -0
- package/dist/enrich/validate.js +104 -0
- package/dist/enrich/validate.js.map +1 -0
- package/dist/extract/deterministic.d.ts.map +1 -1
- package/dist/extract/deterministic.js +20 -0
- package/dist/extract/deterministic.js.map +1 -1
- package/dist/extract/types.d.ts +1 -1
- package/dist/extract/types.d.ts.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/sqlite/index.d.ts +1 -1
- package/dist/sqlite/index.d.ts.map +1 -1
- package/dist/sqlite/schema.d.ts +1 -1
- package/dist/sqlite/schema.d.ts.map +1 -1
- package/dist/sqlite/schema.js +38 -0
- package/dist/sqlite/schema.js.map +1 -1
- package/dist/sqlite/store.d.ts +70 -1
- package/dist/sqlite/store.d.ts.map +1 -1
- package/dist/sqlite/store.js +244 -1
- package/dist/sqlite/store.js.map +1 -1
- package/dist/writeback.d.ts +60 -0
- package/dist/writeback.d.ts.map +1 -0
- package/dist/writeback.js +138 -0
- package/dist/writeback.js.map +1 -0
- package/package.json +4 -2
- package/scripts/enrich-ontos.mjs +182 -0
- package/scripts/rebuild-ontos.mjs +1 -0
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Validation for agent-mediated enrichment (0.2.0): the controlled vocabulary,
|
|
3
|
+
* the domain/range table, id-prefix typing, and the request builder. Pure — no
|
|
4
|
+
* I/O, no store; the caller passes a resolver so this stays testable.
|
|
5
|
+
*/
|
|
6
|
+
import { makeRelId } from "../sqlite/store.js";
|
|
7
|
+
import { extractDeterministic } from "../extract/deterministic.js";
|
|
8
|
+
import { OBJECT_TYPES, RELATION_TYPES, DOMAIN_RANGE, typeFromId, domainRangeViolated } from "./domain-range.js";
|
|
9
|
+
// Re-exported so existing importers (barrel, tests) keep their paths.
|
|
10
|
+
export { OBJECT_TYPES, RELATION_TYPES, DOMAIN_RANGE, typeFromId } from "./domain-range.js";
|
|
11
|
+
function isRelationType(s) {
|
|
12
|
+
return RELATION_TYPES.includes(s);
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Validate one raw proposal against the vocabulary, domain/range, and id
|
|
16
|
+
* resolution order. Returns the validated proposal or a reject reason. Domain/range
|
|
17
|
+
* is enforced only when BOTH ends resolve to a typed id; an unresolved end keeps its
|
|
18
|
+
* raw label (sourceResolved/targetResolved=false) and skips the constraint it can't
|
|
19
|
+
* check (a later resolution/confirmation re-checks it).
|
|
20
|
+
*/
|
|
21
|
+
export function validateProposal(raw, resolve) {
|
|
22
|
+
if (!isRelationType(raw.rel))
|
|
23
|
+
return { ok: false, reason: "unknown-relation" };
|
|
24
|
+
if (!(typeof raw.confidence === "number" && raw.confidence >= 0 && raw.confidence <= 1)) {
|
|
25
|
+
return { ok: false, reason: "bad-confidence" };
|
|
26
|
+
}
|
|
27
|
+
if (!raw.evidencePath || typeof raw.evidencePath !== "string") {
|
|
28
|
+
return { ok: false, reason: "no-evidence" };
|
|
29
|
+
}
|
|
30
|
+
// The verdict is agent-supplied JSON — validate it at runtime, not just at
|
|
31
|
+
// compile time. A string "false" or a bogus verifier must NOT slip through as a
|
|
32
|
+
// truthy/self verdict (Codex review 2026-06-18).
|
|
33
|
+
if (typeof raw.agreed !== "boolean" || (raw.verifier !== "cross-model" && raw.verifier !== "self")) {
|
|
34
|
+
return { ok: false, reason: "bad-verdict" };
|
|
35
|
+
}
|
|
36
|
+
const srcResolved = resolve(raw.sourceRef);
|
|
37
|
+
const tgtResolved = resolve(raw.targetRef);
|
|
38
|
+
let sourceId = srcResolved ?? raw.sourceRef;
|
|
39
|
+
let targetId = tgtResolved ?? raw.targetRef;
|
|
40
|
+
let sourceResolved = srcResolved !== null;
|
|
41
|
+
let targetResolved = tgtResolved !== null;
|
|
42
|
+
// Domain/range: only when a side's type is known (resolved to a typed id at
|
|
43
|
+
// propose time — the confirm path re-checks against the objects' stored types).
|
|
44
|
+
if (domainRangeViolated(raw.rel, typeFromId(sourceId), typeFromId(targetId))) {
|
|
45
|
+
return { ok: false, reason: "domain-range" };
|
|
46
|
+
}
|
|
47
|
+
// Symmetric relations (contradicts) have no direction: canonicalize the endpoint
|
|
48
|
+
// order so "A contradicts B" and "B contradicts A" share one relId — idempotent,
|
|
49
|
+
// and a reverse-order deterministic edge is still caught as a duplicate (Codex).
|
|
50
|
+
if (DOMAIN_RANGE[raw.rel].symmetric && targetId < sourceId) {
|
|
51
|
+
[sourceId, targetId] = [targetId, sourceId];
|
|
52
|
+
[sourceResolved, targetResolved] = [targetResolved, sourceResolved];
|
|
53
|
+
}
|
|
54
|
+
return {
|
|
55
|
+
ok: true,
|
|
56
|
+
value: {
|
|
57
|
+
relId: makeRelId(sourceId, raw.rel, targetId),
|
|
58
|
+
rel: raw.rel,
|
|
59
|
+
sourceId,
|
|
60
|
+
targetId,
|
|
61
|
+
sourceResolved,
|
|
62
|
+
targetResolved,
|
|
63
|
+
confidence: raw.confidence,
|
|
64
|
+
evidenceSpan: raw.evidenceSpan ?? null,
|
|
65
|
+
evidencePath: raw.evidencePath,
|
|
66
|
+
},
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
const REQUEST_RULES = [
|
|
70
|
+
"Propose ONLY relations from the listed relation types — never invent a new type.",
|
|
71
|
+
"Obey the domain/range table (an id's type is its prefix before ':').",
|
|
72
|
+
"Reuse a knownObjectId when the entity already exists; do not coin a new name for it.",
|
|
73
|
+
"Cite an evidence span (a quote or char range) from THIS record for every proposal.",
|
|
74
|
+
"A bare [[wikilink]] is a candidate only — do not emit it as a typed relation unless the prose states the relation.",
|
|
75
|
+
"Skip relations deterministic extraction already found (listed in alreadyFound).",
|
|
76
|
+
"Assign a confidence in [0,1]; omit anything you are not reasonably sure of.",
|
|
77
|
+
];
|
|
78
|
+
/**
|
|
79
|
+
* Build the extraction request for one record (Phase 1 §4 step 3). Pure: the
|
|
80
|
+
* caller supplies the known object ids the agent should reuse.
|
|
81
|
+
*/
|
|
82
|
+
export function buildEnrichmentRequest(record, deterministic, knownObjectIds = []) {
|
|
83
|
+
return {
|
|
84
|
+
path: record.path,
|
|
85
|
+
category: record.category,
|
|
86
|
+
prose: record.body,
|
|
87
|
+
alreadyFound: {
|
|
88
|
+
objectIds: deterministic.objects.map((o) => o.id),
|
|
89
|
+
relations: deterministic.relations.map((r) => `${r.sourceId} ${r.rel} ${r.targetId}`),
|
|
90
|
+
},
|
|
91
|
+
vocabulary: {
|
|
92
|
+
objectTypes: OBJECT_TYPES,
|
|
93
|
+
relationTypes: RELATION_TYPES,
|
|
94
|
+
domainRange: DOMAIN_RANGE,
|
|
95
|
+
},
|
|
96
|
+
knownObjectIds,
|
|
97
|
+
rules: REQUEST_RULES,
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
/** Convenience: deterministic extraction + the request that fills its gaps. */
|
|
101
|
+
export function requestFor(record, knownObjectIds = []) {
|
|
102
|
+
return buildEnrichmentRequest(record, extractDeterministic(record), knownObjectIds);
|
|
103
|
+
}
|
|
104
|
+
//# sourceMappingURL=validate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/enrich/validate.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deterministic.d.ts","sourceRoot":"","sources":["../../src/extract/deterministic.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAiB,WAAW,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"deterministic.d.ts","sourceRoot":"","sources":["../../src/extract/deterministic.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAiB,WAAW,EAAE,MAAM,YAAY,CAAC;AAoH5E;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,WAAW,GAAG,aAAa,CAavE"}
|
|
@@ -76,6 +76,24 @@ function fromDecision(record) {
|
|
|
76
76
|
links: wikilinks(id, record.body, record.path),
|
|
77
77
|
};
|
|
78
78
|
}
|
|
79
|
+
/**
|
|
80
|
+
* Runbook -> an `action:<slug>` object (label = the H1 title). A runbook is an
|
|
81
|
+
* executable/checkable remedy (§1 Action/Guard), so it becomes a `resolved-by`
|
|
82
|
+
* TARGET that LLM enrichment (or a future structured field) can link a failure to.
|
|
83
|
+
* Body wikilinks are candidates for human typing.
|
|
84
|
+
*/
|
|
85
|
+
function fromRunbook(record) {
|
|
86
|
+
const slug = basenameSlug(record.path);
|
|
87
|
+
if (slug === "_INDEX" || slug.startsWith("_"))
|
|
88
|
+
return empty();
|
|
89
|
+
const id = `action:${slug}`;
|
|
90
|
+
const title = (record.body.match(/^#\s+(.+)$/m)?.[1] ?? slug).trim();
|
|
91
|
+
return {
|
|
92
|
+
objects: [{ id, type: "action", label: title, source: record.path }],
|
|
93
|
+
relations: [],
|
|
94
|
+
links: wikilinks(id, record.body, record.path),
|
|
95
|
+
};
|
|
96
|
+
}
|
|
79
97
|
/** Memory -> a `rule:<slug>` object (label = frontmatter `name`); body wikilinks as candidates. */
|
|
80
98
|
function fromMemory(record) {
|
|
81
99
|
const slug = basenameSlug(record.path);
|
|
@@ -103,6 +121,8 @@ export function extractDeterministic(record) {
|
|
|
103
121
|
return fromDecision(record);
|
|
104
122
|
case "memory":
|
|
105
123
|
return fromMemory(record);
|
|
124
|
+
case "runbook":
|
|
125
|
+
return fromRunbook(record);
|
|
106
126
|
default:
|
|
107
127
|
return empty();
|
|
108
128
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deterministic.js","sourceRoot":"","sources":["../../src/extract/deterministic.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"deterministic.js","sourceRoot":"","sources":["../../src/extract/deterministic.ts"],"names":[],"mappings":"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"}
|
package/dist/extract/types.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { OntObject, OntRelation } from "../types.js";
|
|
2
2
|
/** Which record family a file came from (the rebuild walk knows this from the dir). */
|
|
3
|
-
export type RecordCategory = "failure" | "decision" | "memory" | "worklog" | "handoff" | "other";
|
|
3
|
+
export type RecordCategory = "failure" | "decision" | "memory" | "runbook" | "worklog" | "handoff" | "other";
|
|
4
4
|
/** A parsed VortEX markdown record, the input to extraction. */
|
|
5
5
|
export interface RecordInput {
|
|
6
6
|
readonly path: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/extract/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1D,uFAAuF;AACvF,MAAM,MAAM,cAAc,GAAG,SAAS,GAAG,UAAU,GAAG,QAAQ,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/extract/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1D,uFAAuF;AACvF,MAAM,MAAM,cAAc,GAAG,SAAS,GAAG,UAAU,GAAG,QAAQ,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,CAAC;AAE7G,gEAAgE;AAChE,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAC;IAClC,QAAQ,CAAC,WAAW,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACxD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED;;;;GAIG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,uFAAuF;IACvF,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,OAAO,EAAE,SAAS,EAAE,CAAC;IAC9B,qGAAqG;IACrG,QAAQ,CAAC,SAAS,EAAE,WAAW,EAAE,CAAC;IAClC,mFAAmF;IACnF,QAAQ,CAAC,KAAK,EAAE,aAAa,EAAE,CAAC;CACjC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
export * as sqlite from "./sqlite/index.js";
|
|
2
2
|
export * as extract from "./extract/index.js";
|
|
3
|
+
export * as enrich from "./enrich/index.js";
|
|
4
|
+
export * as writeback from "./writeback.js";
|
|
3
5
|
export * as actions from "./actions/index.js";
|
|
4
6
|
export type * from "./types.js";
|
|
5
7
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAC;AAC5C,OAAO,KAAK,OAAO,MAAM,oBAAoB,CAAC;AAC9C,OAAO,KAAK,OAAO,MAAM,oBAAoB,CAAC;AAC9C,mBAAmB,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAC;AAC5C,OAAO,KAAK,OAAO,MAAM,oBAAoB,CAAC;AAC9C,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAC;AAC5C,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAC;AAC5C,OAAO,KAAK,OAAO,MAAM,oBAAoB,CAAC;AAC9C,mBAAmB,YAAY,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
export * as sqlite from "./sqlite/index.js";
|
|
2
2
|
export * as extract from "./extract/index.js";
|
|
3
|
+
export * as enrich from "./enrich/index.js";
|
|
4
|
+
export * as writeback from "./writeback.js";
|
|
3
5
|
export * as actions from "./actions/index.js";
|
|
4
6
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAC;AAC5C,OAAO,KAAK,OAAO,MAAM,oBAAoB,CAAC;AAC9C,OAAO,KAAK,OAAO,MAAM,oBAAoB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAC;AAC5C,OAAO,KAAK,OAAO,MAAM,oBAAoB,CAAC;AAC9C,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAC;AAC5C,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAC;AAC5C,OAAO,KAAK,OAAO,MAAM,oBAAoB,CAAC"}
|
package/dist/sqlite/index.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/sqlite/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACnD,YAAY,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/sqlite/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACnD,YAAY,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC/D,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC"}
|
package/dist/sqlite/schema.d.ts
CHANGED
|
@@ -6,5 +6,5 @@
|
|
|
6
6
|
* Multi-hop traversal is a recursive CTE over `relations` — no graph DB
|
|
7
7
|
* (TypeDB/Neo4j) is needed at Phase 1 scale (see the build spec, storage section).
|
|
8
8
|
*/
|
|
9
|
-
export declare const SCHEMA = "\nCREATE TABLE IF NOT EXISTS objects (\n id TEXT PRIMARY KEY,\n type TEXT NOT NULL,\n subtype TEXT,\n label TEXT NOT NULL,\n source TEXT\n);\nCREATE INDEX IF NOT EXISTS idx_objects_type ON objects(type);\n\nCREATE TABLE IF NOT EXISTS relations (\n rel_id TEXT PRIMARY KEY,\n rel TEXT NOT NULL,\n source_id TEXT NOT NULL,\n target_id TEXT NOT NULL,\n provenance TEXT NOT NULL,\n confidence REAL NOT NULL DEFAULT 1.0,\n confirmed TEXT,\n evidence TEXT,\n FOREIGN KEY (source_id) REFERENCES objects(id) ON DELETE CASCADE,\n FOREIGN KEY (target_id) REFERENCES objects(id) ON DELETE CASCADE\n);\nCREATE INDEX IF NOT EXISTS idx_relations_source ON relations(source_id, rel);\nCREATE INDEX IF NOT EXISTS idx_relations_target ON relations(target_id, rel);\n\nCREATE TABLE IF NOT EXISTS aliases (\n alias TEXT PRIMARY KEY,\n canonical_id TEXT NOT NULL,\n FOREIGN KEY (canonical_id) REFERENCES objects(id) ON DELETE CASCADE\n);\n";
|
|
9
|
+
export declare const SCHEMA = "\nCREATE TABLE IF NOT EXISTS objects (\n id TEXT PRIMARY KEY,\n type TEXT NOT NULL,\n subtype TEXT,\n label TEXT NOT NULL,\n source TEXT\n);\nCREATE INDEX IF NOT EXISTS idx_objects_type ON objects(type);\n\nCREATE TABLE IF NOT EXISTS relations (\n rel_id TEXT PRIMARY KEY,\n rel TEXT NOT NULL,\n source_id TEXT NOT NULL,\n target_id TEXT NOT NULL,\n provenance TEXT NOT NULL,\n confidence REAL NOT NULL DEFAULT 1.0,\n confirmed TEXT,\n evidence TEXT,\n FOREIGN KEY (source_id) REFERENCES objects(id) ON DELETE CASCADE,\n FOREIGN KEY (target_id) REFERENCES objects(id) ON DELETE CASCADE\n);\nCREATE INDEX IF NOT EXISTS idx_relations_source ON relations(source_id, rel);\nCREATE INDEX IF NOT EXISTS idx_relations_target ON relations(target_id, rel);\n\nCREATE TABLE IF NOT EXISTS aliases (\n alias TEXT PRIMARY KEY,\n canonical_id TEXT NOT NULL,\n FOREIGN KEY (canonical_id) REFERENCES objects(id) ON DELETE CASCADE\n);\n\n-- LLM enrichment proposals (0.2.0). DELIBERATELY SEPARATE from `relations`:\n-- the trusted graph (`relations`) is written only by deterministic extraction\n-- or by human-confirmed promotion, so `why`/the recurring-failure guard \u2014 which\n-- read `relations` with no trust filter \u2014 are never silently influenced by an\n-- LLM guess. No FK to `objects`: a proposed source/target may be UNRESOLVED (a\n-- raw label the LLM produced that is not yet a canonical object). Survives the\n-- deterministic rebuild's `clear()` (LLM proposals are expensive to regenerate).\nCREATE TABLE IF NOT EXISTS relation_proposals (\n rel_id TEXT PRIMARY KEY,\n rel TEXT NOT NULL,\n source_id TEXT NOT NULL,\n target_id TEXT NOT NULL,\n source_resolved INTEGER NOT NULL DEFAULT 0,\n target_resolved INTEGER NOT NULL DEFAULT 0,\n trust TEXT NOT NULL, -- high | medium | low\n trust_rank INTEGER NOT NULL, -- 3 | 2 | 1 (monotonic upgrade + ordering)\n verified_by TEXT NOT NULL, -- deterministic | cross-model | self\n confidence REAL NOT NULL DEFAULT 0,\n evidence_path TEXT,\n evidence_span TEXT,\n source_record_hash TEXT, -- the extraction hash that produced this\n proposed_at TEXT,\n confirmed TEXT, -- ISO date if promoted into `relations`; null = proposed\n rejected_at TEXT, -- ISO date a human rejected it (sticky: no re-surface/re-ask)\n asked_at TEXT -- ISO date last surfaced as an in-context question (cooldown)\n);\nCREATE INDEX IF NOT EXISTS idx_proposals_trust ON relation_proposals(trust_rank);\n\n-- Per-record extraction state for change detection (\u00A74 step 3 \"changed files\n-- only\"). EXTRACTION hash (did the text change?) is tracked separately from\n-- verification state, so a text-unchanged record can still get a verification-only\n-- re-run that upgrades a proposal's trust when a cross-checker becomes available.\nCREATE TABLE IF NOT EXISTS enrichment_state (\n record_path TEXT PRIMARY KEY,\n extraction_hash TEXT NOT NULL,\n enriched_at TEXT\n);\n";
|
|
10
10
|
//# sourceMappingURL=schema.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/sqlite/schema.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,eAAO,MAAM,MAAM,
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/sqlite/schema.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,eAAO,MAAM,MAAM,u9FAoElB,CAAC"}
|
package/dist/sqlite/schema.js
CHANGED
|
@@ -36,5 +36,43 @@ CREATE TABLE IF NOT EXISTS aliases (
|
|
|
36
36
|
canonical_id TEXT NOT NULL,
|
|
37
37
|
FOREIGN KEY (canonical_id) REFERENCES objects(id) ON DELETE CASCADE
|
|
38
38
|
);
|
|
39
|
+
|
|
40
|
+
-- LLM enrichment proposals (0.2.0). DELIBERATELY SEPARATE from \`relations\`:
|
|
41
|
+
-- the trusted graph (\`relations\`) is written only by deterministic extraction
|
|
42
|
+
-- or by human-confirmed promotion, so \`why\`/the recurring-failure guard — which
|
|
43
|
+
-- read \`relations\` with no trust filter — are never silently influenced by an
|
|
44
|
+
-- LLM guess. No FK to \`objects\`: a proposed source/target may be UNRESOLVED (a
|
|
45
|
+
-- raw label the LLM produced that is not yet a canonical object). Survives the
|
|
46
|
+
-- deterministic rebuild's \`clear()\` (LLM proposals are expensive to regenerate).
|
|
47
|
+
CREATE TABLE IF NOT EXISTS relation_proposals (
|
|
48
|
+
rel_id TEXT PRIMARY KEY,
|
|
49
|
+
rel TEXT NOT NULL,
|
|
50
|
+
source_id TEXT NOT NULL,
|
|
51
|
+
target_id TEXT NOT NULL,
|
|
52
|
+
source_resolved INTEGER NOT NULL DEFAULT 0,
|
|
53
|
+
target_resolved INTEGER NOT NULL DEFAULT 0,
|
|
54
|
+
trust TEXT NOT NULL, -- high | medium | low
|
|
55
|
+
trust_rank INTEGER NOT NULL, -- 3 | 2 | 1 (monotonic upgrade + ordering)
|
|
56
|
+
verified_by TEXT NOT NULL, -- deterministic | cross-model | self
|
|
57
|
+
confidence REAL NOT NULL DEFAULT 0,
|
|
58
|
+
evidence_path TEXT,
|
|
59
|
+
evidence_span TEXT,
|
|
60
|
+
source_record_hash TEXT, -- the extraction hash that produced this
|
|
61
|
+
proposed_at TEXT,
|
|
62
|
+
confirmed TEXT, -- ISO date if promoted into \`relations\`; null = proposed
|
|
63
|
+
rejected_at TEXT, -- ISO date a human rejected it (sticky: no re-surface/re-ask)
|
|
64
|
+
asked_at TEXT -- ISO date last surfaced as an in-context question (cooldown)
|
|
65
|
+
);
|
|
66
|
+
CREATE INDEX IF NOT EXISTS idx_proposals_trust ON relation_proposals(trust_rank);
|
|
67
|
+
|
|
68
|
+
-- Per-record extraction state for change detection (§4 step 3 "changed files
|
|
69
|
+
-- only"). EXTRACTION hash (did the text change?) is tracked separately from
|
|
70
|
+
-- verification state, so a text-unchanged record can still get a verification-only
|
|
71
|
+
-- re-run that upgrades a proposal's trust when a cross-checker becomes available.
|
|
72
|
+
CREATE TABLE IF NOT EXISTS enrichment_state (
|
|
73
|
+
record_path TEXT PRIMARY KEY,
|
|
74
|
+
extraction_hash TEXT NOT NULL,
|
|
75
|
+
enriched_at TEXT
|
|
76
|
+
);
|
|
39
77
|
`;
|
|
40
78
|
//# sourceMappingURL=schema.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/sqlite/schema.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/sqlite/schema.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoErB,CAAC"}
|
package/dist/sqlite/store.d.ts
CHANGED
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
import type { OntObject, OntRelation, RelationType, WalkStep } from "../types.js";
|
|
2
|
+
import type { RelationProposal } from "../enrich/types.js";
|
|
3
|
+
/** The persisted enrichment-proposal shape (0.2.0). Same fields as RelationProposal. */
|
|
4
|
+
export type ProposalRow = RelationProposal;
|
|
2
5
|
/**
|
|
3
6
|
* §5-bis relation-id recipe. Stable over the (source, relation, target) triple,
|
|
4
7
|
* so re-accepting the same relation is idempotent (never duplicates).
|
|
@@ -19,6 +22,14 @@ export declare class OntosStore {
|
|
|
19
22
|
readonly dbPath: string;
|
|
20
23
|
private db;
|
|
21
24
|
constructor(dbPath: string);
|
|
25
|
+
/**
|
|
26
|
+
* Additive column migration: `CREATE TABLE IF NOT EXISTS` does NOT add new
|
|
27
|
+
* columns to a table that already exists from an earlier schema, so an index
|
|
28
|
+
* built by a prior 0.2.0-dev build would lack newer columns and crash on query.
|
|
29
|
+
* Add any missing column here (the index is regenerable, so additive-only is
|
|
30
|
+
* enough — no data backfill). Idempotent.
|
|
31
|
+
*/
|
|
32
|
+
private migrate;
|
|
22
33
|
close(): void;
|
|
23
34
|
/** Run a function inside one transaction (bulk upserts during a rebuild). */
|
|
24
35
|
transaction(fn: () => void): void;
|
|
@@ -30,12 +41,27 @@ export declare class OntosStore {
|
|
|
30
41
|
*/
|
|
31
42
|
clear(): void;
|
|
32
43
|
upsertObject(obj: OntObject): void;
|
|
33
|
-
/**
|
|
44
|
+
/**
|
|
45
|
+
* Idempotent on relId (§5-bis): re-accepting the same relation updates, never
|
|
46
|
+
* duplicates. SAFETY GUARD (0.2.0): an UNCONFIRMED `llm` relation must never
|
|
47
|
+
* enter the trusted graph — LLM output lives in `relation_proposals` until a
|
|
48
|
+
* human confirms it (a confirmed llm relation, with a `confirmed` date, is the
|
|
49
|
+
* promotion path and is allowed). This makes "proposals never influence
|
|
50
|
+
* why()/guard" structural, not caller-dependent (Codex review 2026-06-18).
|
|
51
|
+
*/
|
|
34
52
|
upsertRelation(rel: OntRelation): void;
|
|
35
53
|
addAlias(alias: string, canonicalId: string): void;
|
|
36
54
|
/** §3 identity: resolve a name to a canonical object id (a real object id wins, then an alias). */
|
|
37
55
|
resolveAlias(name: string): string | null;
|
|
38
56
|
getObject(id: string): OntObject | null;
|
|
57
|
+
/** Index health snapshot (for `vortex ontos check` / the session-start ambient line). */
|
|
58
|
+
counts(): {
|
|
59
|
+
objects: number;
|
|
60
|
+
relations: number;
|
|
61
|
+
proposals: number;
|
|
62
|
+
};
|
|
63
|
+
/** All canonical object ids (for the enrichment request's knownObjectIds — reuse, don't invent). */
|
|
64
|
+
allObjectIds(): string[];
|
|
39
65
|
/** Outgoing relations from an object, optionally filtered by relation type. */
|
|
40
66
|
neighbors(id: string, rels?: readonly RelationType[]): OntRelation[];
|
|
41
67
|
/**
|
|
@@ -45,6 +71,49 @@ export declare class OntosStore {
|
|
|
45
71
|
* No graph DB is needed for this scale.
|
|
46
72
|
*/
|
|
47
73
|
traverse(startId: string, opts?: TraverseOptions): WalkStep[];
|
|
74
|
+
/** Provenance of a relation in the TRUSTED graph, or null if absent (tier HIGH check). */
|
|
75
|
+
relationProvenance(relId: string): string | null;
|
|
76
|
+
/**
|
|
77
|
+
* Store an LLM enrichment proposal (0.2.0) — into `relation_proposals`, NEVER
|
|
78
|
+
* into the trusted `relations` graph. Idempotent on relId AND monotonic: a
|
|
79
|
+
* re-proposal upgrades trust (e.g. self LOW → cross-model MEDIUM) but never
|
|
80
|
+
* downgrades it. Returns "inserted" | "upgraded" | "kept".
|
|
81
|
+
*/
|
|
82
|
+
upsertProposal(p: ProposalRow): "inserted" | "upgraded" | "refreshed" | "kept";
|
|
83
|
+
getProposal(relId: string): ProposalRow | null;
|
|
84
|
+
/** Proposals at or above a minimum trust rank (default all), highest trust first. */
|
|
85
|
+
listProposals(minRank?: number): ProposalRow[];
|
|
86
|
+
/** Drop all proposals (the deliberate `enrich --rebuild`; NOT the deterministic rebuild). */
|
|
87
|
+
clearProposals(): void;
|
|
88
|
+
/**
|
|
89
|
+
* Unconfirmed, un-rejected proposals touching an object — the "possible (unverified)"
|
|
90
|
+
* hint surface for the actions to weave in. Confirmed proposals are already trusted
|
|
91
|
+
* edges in `relations`; rejected ones are suppressed. Highest trust first.
|
|
92
|
+
*/
|
|
93
|
+
proposalsFor(objectId: string): ProposalRow[];
|
|
94
|
+
/**
|
|
95
|
+
* Promote a proposal into the TRUSTED graph — the in-context "yes, that's right"
|
|
96
|
+
* (NOT a batch curation chore). Writes the relation with provenance="llm" + a
|
|
97
|
+
* `confirmed` date (the upsertRelation guard allows a CONFIRMED llm relation), and
|
|
98
|
+
* marks the proposal confirmed. Refuses unless BOTH endpoints already exist as
|
|
99
|
+
* objects (you can only confirm a link between known things). Returns true on promote.
|
|
100
|
+
*/
|
|
101
|
+
confirmProposal(relId: string, date: string): boolean;
|
|
102
|
+
/** Reject a proposal (sticky): it is never promoted, surfaced as a hint, or re-asked. */
|
|
103
|
+
rejectProposal(relId: string, date: string): boolean;
|
|
104
|
+
/** Stamp that a proposal was just surfaced as an in-context question (re-ask cooldown). */
|
|
105
|
+
markAsked(relId: string, date: string): void;
|
|
106
|
+
/** All record paths that have an enrichment_state row (for the GC liveness check). */
|
|
107
|
+
allEnrichmentPaths(): string[];
|
|
108
|
+
/** Drop the enrichment_state row for a vanished record (so it re-enriches if it returns). */
|
|
109
|
+
deleteEnrichmentState(recordPath: string): boolean;
|
|
110
|
+
/** Distinct evidence_path values across UNCONFIRMED, UN-rejected proposals (GC candidates). */
|
|
111
|
+
pendingProposalEvidencePaths(): string[];
|
|
112
|
+
/** Drop UNCONFIRMED, UN-rejected proposals whose evidence record vanished. Returns count dropped. */
|
|
113
|
+
dropPendingProposalsByEvidence(evidencePath: string): number;
|
|
114
|
+
/** Change detection: the extraction hash last enriched for a record, or null. */
|
|
115
|
+
getExtractionHash(recordPath: string): string | null;
|
|
116
|
+
setExtractionState(recordPath: string, extractionHash: string, enrichedAt?: string | null): void;
|
|
48
117
|
/** §5A helper: how many failures recur as (share a pattern with) this one. */
|
|
49
118
|
recurrenceCount(problemId: string): number;
|
|
50
119
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/sqlite/store.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/sqlite/store.ts"],"names":[],"mappings":"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"}
|