@cavelang/store 0.27.3 → 0.29.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/Authors.md +5 -0
- package/License.md +6 -0
- package/README.md +121 -14
- package/dist/src/adapter-entry.d.ts +9 -0
- package/dist/src/adapter-entry.d.ts.map +1 -0
- package/dist/src/adapter-entry.js +7 -0
- package/dist/src/adapter-entry.js.map +1 -0
- package/dist/src/adapter.d.ts +51 -0
- package/dist/src/adapter.d.ts.map +1 -0
- package/dist/src/adapter.js +3 -0
- package/dist/src/adapter.js.map +1 -0
- package/dist/src/backup.d.ts +23 -0
- package/dist/src/backup.d.ts.map +1 -0
- package/dist/src/backup.js +164 -0
- package/dist/src/backup.js.map +1 -0
- package/dist/src/index.d.ts +8 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +5 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/node-adapter-entry.d.ts +3 -0
- package/dist/src/node-adapter-entry.d.ts.map +1 -0
- package/dist/src/node-adapter-entry.js +3 -0
- package/dist/src/node-adapter-entry.js.map +1 -0
- package/dist/src/node-adapter.d.ts +4 -0
- package/dist/src/node-adapter.d.ts.map +1 -0
- package/dist/src/node-adapter.js +20 -0
- package/dist/src/node-adapter.js.map +1 -0
- package/dist/src/open.d.ts +3 -18
- package/dist/src/open.d.ts.map +1 -1
- package/dist/src/open.js +4 -52
- package/dist/src/open.js.map +1 -1
- package/dist/src/provenance.d.ts +24 -0
- package/dist/src/provenance.d.ts.map +1 -0
- package/dist/src/provenance.js +75 -0
- package/dist/src/provenance.js.map +1 -0
- package/dist/src/query-sql.d.ts +45 -0
- package/dist/src/query-sql.d.ts.map +1 -0
- package/dist/src/query-sql.js +77 -0
- package/dist/src/query-sql.js.map +1 -0
- package/dist/src/record.d.ts +29 -0
- package/dist/src/record.d.ts.map +1 -0
- package/dist/src/record.js +50 -0
- package/dist/src/record.js.map +1 -0
- package/dist/src/resolve.d.ts +2 -2
- package/dist/src/resolve.d.ts.map +1 -1
- package/dist/src/resolve.js +0 -0
- package/dist/src/resolve.js.map +1 -1
- package/dist/src/runtime.d.ts +16 -0
- package/dist/src/runtime.d.ts.map +1 -0
- package/dist/src/runtime.js +43 -0
- package/dist/src/runtime.js.map +1 -0
- package/dist/src/schema.d.ts +10 -6
- package/dist/src/schema.d.ts.map +1 -1
- package/dist/src/schema.js +113 -9
- package/dist/src/schema.js.map +1 -1
- package/dist/src/sensitivity.d.ts +24 -0
- package/dist/src/sensitivity.d.ts.map +1 -0
- package/dist/src/sensitivity.js +34 -0
- package/dist/src/sensitivity.js.map +1 -0
- package/dist/src/store.d.ts +40 -14
- package/dist/src/store.d.ts.map +1 -1
- package/dist/src/store.js +113 -74
- package/dist/src/store.js.map +1 -1
- package/package.json +25 -6
- package/src/adapter-entry.ts +18 -0
- package/src/adapter.ts +57 -0
- package/src/backup.ts +188 -0
- package/src/index.ts +8 -0
- package/src/node-adapter-entry.ts +3 -0
- package/src/node-adapter.ts +23 -0
- package/src/open.ts +7 -80
- package/src/provenance.ts +109 -0
- package/src/query-sql.ts +99 -0
- package/src/record.ts +82 -0
- package/src/resolve.ts +0 -0
- package/src/runtime.ts +78 -0
- package/src/schema.ts +137 -10
- package/src/sensitivity.ts +42 -0
- package/src/store.ts +140 -82
package/dist/src/open.d.ts
CHANGED
|
@@ -1,20 +1,5 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* Verb registry reconstructed from the configured base registry plus
|
|
6
|
-
* declaration rows visible at the transaction-time boundary.
|
|
7
|
-
*/
|
|
8
|
-
readonly registryAsOf: (asOf: string) => Canonical.Registry.t;
|
|
9
|
-
};
|
|
10
|
-
type OpenOptions = {
|
|
11
|
-
readonly registry?: Canonical.Registry.t;
|
|
12
|
-
};
|
|
13
|
-
/**
|
|
14
|
-
* Public store constructor. It retains the configured base registry so
|
|
15
|
-
* transaction-time query views can rebuild vocabulary at the same boundary
|
|
16
|
-
* as their claim rows.
|
|
17
|
-
*/
|
|
1
|
+
import type { OpenOptions, Store } from './runtime.ts';
|
|
2
|
+
export type { Store } from './runtime.ts';
|
|
3
|
+
/** Open a CAVE store with the Node.js builtin SQLite adapter. */
|
|
18
4
|
export declare const open: (path?: string, options?: OpenOptions) => Store;
|
|
19
|
-
export {};
|
|
20
5
|
//# sourceMappingURL=open.d.ts.map
|
package/dist/src/open.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"open.d.ts","sourceRoot":"","sources":["../../src/open.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"open.d.ts","sourceRoot":"","sources":["../../src/open.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,cAAc,CAAA;AAEtD,YAAY,EAAE,KAAK,EAAE,MAAM,cAAc,CAAA;AAEzC,iEAAiE;AACjE,eAAO,MAAM,IAAI,GAAI,OAAM,MAAmB,EAAE,UAAS,WAAgB,KAAG,KAChC,CAAA"}
|
package/dist/src/open.js
CHANGED
|
@@ -1,53 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import
|
|
3
|
-
|
|
4
|
-
const
|
|
5
|
-
const hasTime = text.includes('T');
|
|
6
|
-
const start = Date.parse(hasTime ? text : `${text}T00:00:00Z`);
|
|
7
|
-
if (Number.isNaN(start)) {
|
|
8
|
-
throw new Error(`CAVE: cannot parse as-of boundary ${JSON.stringify(text)}`);
|
|
9
|
-
}
|
|
10
|
-
const end = start + (hasTime ? 1_000 : 86_400_000);
|
|
11
|
-
return Uuidv7.at(end, 0, new Uint8Array(8));
|
|
12
|
-
};
|
|
13
|
-
const declarationsAsOf = (store, asOf) => {
|
|
14
|
-
const id = asOf.toLowerCase();
|
|
15
|
-
const [condition, boundary] = Uuidv7.is(id) ?
|
|
16
|
-
['tx <= ?', id] :
|
|
17
|
-
['tx < ?', upperTxBound(asOf)];
|
|
18
|
-
return store.db.prepare(`
|
|
19
|
-
SELECT subject, verb, object FROM cave_claim
|
|
20
|
-
WHERE ${condition}
|
|
21
|
-
AND negated = 0 AND object IS NOT NULL AND verb IN ('REVERSE', 'IS')
|
|
22
|
-
AND id NOT IN (SELECT child_id FROM cave_edge WHERE role IN ('WHEN', 'VIA', 'BECAUSE'))
|
|
23
|
-
ORDER BY tx
|
|
24
|
-
`).all(boundary);
|
|
25
|
-
};
|
|
26
|
-
const applyDeclarations = (baseRegistry, declarations) => {
|
|
27
|
-
let registry = baseRegistry;
|
|
28
|
-
for (const declaration of declarations) {
|
|
29
|
-
if (!Verb.isVerbToken(declaration.subject)) {
|
|
30
|
-
continue;
|
|
31
|
-
}
|
|
32
|
-
if (declaration.verb === 'REVERSE' && Verb.isVerbToken(declaration.object)) {
|
|
33
|
-
registry = Canonical.Registry.declareReverse(registry, declaration.subject, declaration.object).registry;
|
|
34
|
-
}
|
|
35
|
-
else if (declaration.verb === 'IS' && declaration.object === 'verb') {
|
|
36
|
-
registry = Canonical.Registry.declareVerb(registry, declaration.subject);
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
return registry;
|
|
40
|
-
};
|
|
41
|
-
/**
|
|
42
|
-
* Public store constructor. It retains the configured base registry so
|
|
43
|
-
* transaction-time query views can rebuild vocabulary at the same boundary
|
|
44
|
-
* as their claim rows.
|
|
45
|
-
*/
|
|
46
|
-
export const open = (path = ':memory:', options = {}) => {
|
|
47
|
-
const baseRegistry = options.registry ?? Canonical.standardRegistry;
|
|
48
|
-
const store = openStore(path, options);
|
|
49
|
-
return Object.assign(store, {
|
|
50
|
-
registryAsOf: (asOf) => applyDeclarations(baseRegistry, declarationsAsOf(store, asOf))
|
|
51
|
-
});
|
|
52
|
-
};
|
|
1
|
+
import { nodeSqliteAdapter } from "./node-adapter.js";
|
|
2
|
+
import { openWith } from "./runtime.js";
|
|
3
|
+
/** Open a CAVE store with the Node.js builtin SQLite adapter. */
|
|
4
|
+
export const open = (path = ':memory:', options = {}) => openWith(nodeSqliteAdapter, path, options);
|
|
53
5
|
//# sourceMappingURL=open.js.map
|
package/dist/src/open.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"open.js","sourceRoot":"","sources":["../../src/open.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"open.js","sourceRoot":"","sources":["../../src/open.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AACrD,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAA;AAKvC,iEAAiE;AACjE,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC,OAAe,UAAU,EAAE,UAAuB,EAAE,EAAS,EAAE,CAClF,QAAQ,CAAC,iBAAiB,EAAE,IAAI,EAAE,OAAO,CAAC,CAAA"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/** Explicit provenance dimensions derived alongside compact claim contexts. */
|
|
2
|
+
import type { Database } from './adapter.ts';
|
|
3
|
+
export type Dimension = 'actor' | 'source' | 'run' | 'domain';
|
|
4
|
+
export type t = {
|
|
5
|
+
readonly actors: readonly string[];
|
|
6
|
+
readonly sources: readonly string[];
|
|
7
|
+
readonly runs: readonly string[];
|
|
8
|
+
readonly domains: readonly string[];
|
|
9
|
+
};
|
|
10
|
+
export type Input = {
|
|
11
|
+
readonly actor?: string;
|
|
12
|
+
readonly sources?: readonly string[];
|
|
13
|
+
readonly run?: string;
|
|
14
|
+
readonly domains?: readonly string[];
|
|
15
|
+
};
|
|
16
|
+
export type Entry = {
|
|
17
|
+
readonly dimension: Dimension;
|
|
18
|
+
readonly value: string;
|
|
19
|
+
};
|
|
20
|
+
export declare const entries: (contexts: readonly string[], input?: Input) => Entry[];
|
|
21
|
+
export declare const fromEntries: (values: readonly Entry[]) => t;
|
|
22
|
+
/** Idempotently derives dimensions for rows written by older CAVE versions. */
|
|
23
|
+
export declare const backfill: (db: Database) => void;
|
|
24
|
+
//# sourceMappingURL=provenance.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provenance.d.ts","sourceRoot":"","sources":["../../src/provenance.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAE/E,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAA;AAG5C,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG,QAAQ,GAAG,KAAK,GAAG,QAAQ,CAAA;AAE7D,MAAM,MAAM,CAAC,GAAG;IACd,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAA;IAClC,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAA;IACnC,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAA;IAChC,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAA;CACpC,CAAA;AAED,MAAM,MAAM,KAAK,GAAG;IAClB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IACpC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;CACrC,CAAA;AAED,MAAM,MAAM,KAAK,GAAG;IAClB,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAA;IAC7B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CACvB,CAAA;AAwCD,eAAO,MAAM,OAAO,GAAI,UAAU,SAAS,MAAM,EAAE,EAAE,QAAO,KAAU,KAAG,KAAK,EAe7E,CAAA;AAED,eAAO,MAAM,WAAW,GAAI,QAAQ,SAAS,KAAK,EAAE,KAAG,CAKrD,CAAA;AAEF,+EAA+E;AAC/E,eAAO,MAAM,QAAQ,GAAI,IAAI,QAAQ,KAAG,IAmBvC,CAAA"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/** Explicit provenance dimensions derived alongside compact claim contexts. */
|
|
2
|
+
import { SourceSpan } from '@cavelang/core';
|
|
3
|
+
const runPrefixes = ['connect/', 'rule/', 'action/', 'automation/'];
|
|
4
|
+
const actorSource = (source) => source === 'cli' || source === 'sync' || source === 'ingest' || source.startsWith('ingest/') ||
|
|
5
|
+
source.startsWith('agent/') || source.startsWith('suggest/') ||
|
|
6
|
+
source.startsWith('cave-') || runPrefixes.some(prefix => source.startsWith(prefix));
|
|
7
|
+
const contextEntries = (contexts, authoredSources) => {
|
|
8
|
+
const result = [];
|
|
9
|
+
for (const context of contexts) {
|
|
10
|
+
const reference = SourceSpan.parse(context);
|
|
11
|
+
if (reference !== undefined) {
|
|
12
|
+
if (authoredSources) {
|
|
13
|
+
result.push({ dimension: 'source', value: reference.source });
|
|
14
|
+
continue;
|
|
15
|
+
}
|
|
16
|
+
if (runPrefixes.some(prefix => reference.source.startsWith(prefix))) {
|
|
17
|
+
result.push({ dimension: 'actor', value: reference.source }, { dimension: 'run', value: reference.source });
|
|
18
|
+
continue;
|
|
19
|
+
}
|
|
20
|
+
result.push(actorSource(reference.source) ?
|
|
21
|
+
{ dimension: 'actor', value: reference.source } :
|
|
22
|
+
{ dimension: 'source', value: reference.source });
|
|
23
|
+
continue;
|
|
24
|
+
}
|
|
25
|
+
if (context.startsWith('scope:') && context.length > 'scope:'.length) {
|
|
26
|
+
result.push({ dimension: 'domain', value: context.slice('scope:'.length) });
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
return result;
|
|
30
|
+
};
|
|
31
|
+
const clean = (values) => [...new Set(values.filter((value) => value !== undefined && value !== ''))];
|
|
32
|
+
export const entries = (contexts, input = {}) => {
|
|
33
|
+
// With an explicit actor, every src: in `contexts` was authored before
|
|
34
|
+
// compatibility stamping and therefore names evidence. During replay or
|
|
35
|
+
// migration, established actor/run prefixes are inferred conservatively.
|
|
36
|
+
const inferred = contextEntries(contexts, input.actor !== undefined);
|
|
37
|
+
return [
|
|
38
|
+
...clean([input.actor, ...inferred.filter(entry => entry.dimension === 'actor').map(entry => entry.value)])
|
|
39
|
+
.map(value => ({ dimension: 'actor', value })),
|
|
40
|
+
...clean([...(input.sources ?? []), ...inferred.filter(entry => entry.dimension === 'source').map(entry => entry.value)])
|
|
41
|
+
.map(value => ({ dimension: 'source', value })),
|
|
42
|
+
...clean([input.run, ...inferred.filter(entry => entry.dimension === 'run').map(entry => entry.value)])
|
|
43
|
+
.map(value => ({ dimension: 'run', value })),
|
|
44
|
+
...clean([...(input.domains ?? []), ...inferred.filter(entry => entry.dimension === 'domain').map(entry => entry.value)])
|
|
45
|
+
.map(value => ({ dimension: 'domain', value }))
|
|
46
|
+
];
|
|
47
|
+
};
|
|
48
|
+
export const fromEntries = (values) => ({
|
|
49
|
+
actors: values.filter(entry => entry.dimension === 'actor').map(entry => entry.value),
|
|
50
|
+
sources: values.filter(entry => entry.dimension === 'source').map(entry => entry.value),
|
|
51
|
+
runs: values.filter(entry => entry.dimension === 'run').map(entry => entry.value),
|
|
52
|
+
domains: values.filter(entry => entry.dimension === 'domain').map(entry => entry.value)
|
|
53
|
+
});
|
|
54
|
+
/** Idempotently derives dimensions for rows written by older CAVE versions. */
|
|
55
|
+
export const backfill = (db) => {
|
|
56
|
+
const missing = db.prepare(`
|
|
57
|
+
SELECT c.id, ctx.context FROM cave_claim c
|
|
58
|
+
LEFT JOIN cave_context ctx ON ctx.claim_id = c.id
|
|
59
|
+
WHERE NOT EXISTS (SELECT 1 FROM cave_provenance p WHERE p.claim_id = c.id)
|
|
60
|
+
ORDER BY c.tx, ctx.rowid
|
|
61
|
+
`).all();
|
|
62
|
+
const grouped = new Map();
|
|
63
|
+
for (const row of missing) {
|
|
64
|
+
grouped.set(row.id, [...grouped.get(row.id) ?? [], ...row.context === null ? [] : [row.context]]);
|
|
65
|
+
}
|
|
66
|
+
const insert = db.prepare(`
|
|
67
|
+
INSERT OR IGNORE INTO cave_provenance (claim_id, dimension, value) VALUES (?, ?, ?)
|
|
68
|
+
`);
|
|
69
|
+
for (const [id, contexts] of grouped) {
|
|
70
|
+
for (const entry of entries(contexts)) {
|
|
71
|
+
insert.run(id, entry.dimension, entry.value);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
};
|
|
75
|
+
//# sourceMappingURL=provenance.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provenance.js","sourceRoot":"","sources":["../../src/provenance.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Composable SQL fragments for CAVE's shared read semantics.
|
|
3
|
+
*
|
|
4
|
+
* These functions return SQL only; callers own the outer SELECT, ordering,
|
|
5
|
+
* and additional predicates. Transaction boundaries contain only validated
|
|
6
|
+
* UUIDv7 text generated here, so their literal form remains safe inside
|
|
7
|
+
* nested CTEs where positional-parameter ordering would be fragile.
|
|
8
|
+
*/
|
|
9
|
+
export type TransactionBounds = {
|
|
10
|
+
readonly lo: string;
|
|
11
|
+
readonly hi: string;
|
|
12
|
+
};
|
|
13
|
+
export type AsOfBoundary = {
|
|
14
|
+
readonly operator: '<' | '<=';
|
|
15
|
+
readonly tx: string;
|
|
16
|
+
};
|
|
17
|
+
/** UUIDv7 interval `[lo, hi)` for a UTC period or one-second timestamp. */
|
|
18
|
+
export declare const transactionBounds: (text: string) => TransactionBounds | undefined;
|
|
19
|
+
/**
|
|
20
|
+
* Inclusive transaction boundary: an exact UUID includes that append; a
|
|
21
|
+
* period/timestamp includes its whole UTC period/second through an exclusive high
|
|
22
|
+
* bound. Returns `undefined` for text that is neither form.
|
|
23
|
+
*/
|
|
24
|
+
export declare const asOfBoundary: (text: string) => AsOfBoundary | undefined;
|
|
25
|
+
/** A validated as-of predicate, optionally qualified with a table alias. */
|
|
26
|
+
export declare const asOfCondition: (boundary: AsOfBoundary, column?: string) => string;
|
|
27
|
+
/** Every claim, optionally bounded in transaction time. */
|
|
28
|
+
export declare const claims: (boundary?: AsOfBoundary) => string;
|
|
29
|
+
/**
|
|
30
|
+
* Latest transaction per claim key. `source` selects the eligible
|
|
31
|
+
* `cave_claim` rows (for example `claims(asOfBoundary(...))`); the outer row
|
|
32
|
+
* comes from the base table so the source fragment appears only once.
|
|
33
|
+
*/
|
|
34
|
+
export declare const current: (source?: string) => string;
|
|
35
|
+
/** Current, positive, entity-to-entity ALIAS edges in both directions. */
|
|
36
|
+
export declare const aliasEdges: (currentSql?: string) => string;
|
|
37
|
+
/** Full transitive alias closure as ordered pairs. Requires `WITH RECURSIVE`. */
|
|
38
|
+
export declare const aliasPairs: (currentSql?: string) => string;
|
|
39
|
+
/** Seeded alias closure. Its first SELECT consumes one positional parameter. */
|
|
40
|
+
export declare const aliasSeed: () => string;
|
|
41
|
+
/** Ready-to-prefix seeded closure; the caller supplies the seed parameter. */
|
|
42
|
+
export declare const aliasClosure: (currentSql?: string) => string;
|
|
43
|
+
/** SQL equality widened through an `alias_pair` CTE already in scope. */
|
|
44
|
+
export declare const aliasSame: (left: string, right: string) => string;
|
|
45
|
+
//# sourceMappingURL=query-sql.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query-sql.d.ts","sourceRoot":"","sources":["../../src/query-sql.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH,MAAM,MAAM,iBAAiB,GAAG;IAC9B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;CACpB,CAAA;AAED,MAAM,MAAM,YAAY,GAAG;IACzB,QAAQ,CAAC,QAAQ,EAAE,GAAG,GAAG,IAAI,CAAA;IAC7B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;CACpB,CAAA;AAED,2EAA2E;AAC3E,eAAO,MAAM,iBAAiB,GAAI,MAAM,MAAM,KAAG,iBAAiB,GAAG,SAOpE,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,YAAY,GAAI,MAAM,MAAM,KAAG,YAAY,GAAG,SAK1D,CAAA;AAED,4EAA4E;AAC5E,eAAO,MAAM,aAAa,GAAI,UAAU,YAAY,EAAE,eAAa,KAAG,MACnB,CAAA;AAEnD,2DAA2D;AAC3D,eAAO,MAAM,MAAM,GAAI,WAAW,YAAY,KAAG,MAEgB,CAAA;AAEjE;;;;GAIG;AACH,eAAO,MAAM,OAAO,GAAI,SAAQ,MAAiB,KAAG,MAMnD,CAAA;AAED,0EAA0E;AAC1E,eAAO,MAAM,UAAU,GAAI,aAAY,MAAkB,KAAG,MAQ1D,CAAA;AAEF,iFAAiF;AACjF,eAAO,MAAM,UAAU,GAAI,aAAY,MAAkB,KAAG,MAK1D,CAAA;AAEF,gFAAgF;AAChF,eAAO,MAAM,SAAS,QAAO,MAI3B,CAAA;AAEF,8EAA8E;AAC9E,eAAO,MAAM,YAAY,GAAI,aAAY,MAAkB,KAAG,MACA,CAAA;AAE9D,yEAAyE;AACzE,eAAO,MAAM,SAAS,GAAI,MAAM,MAAM,EAAE,OAAO,MAAM,KAAG,MAC8C,CAAA"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Composable SQL fragments for CAVE's shared read semantics.
|
|
3
|
+
*
|
|
4
|
+
* These functions return SQL only; callers own the outer SELECT, ordering,
|
|
5
|
+
* and additional predicates. Transaction boundaries contain only validated
|
|
6
|
+
* UUIDv7 text generated here, so their literal form remains safe inside
|
|
7
|
+
* nested CTEs where positional-parameter ordering would be fragile.
|
|
8
|
+
*/
|
|
9
|
+
import { Time, Uuidv7 } from '@cavelang/core';
|
|
10
|
+
import * as Row from "./row.js";
|
|
11
|
+
/** UUIDv7 interval `[lo, hi)` for a UTC period or one-second timestamp. */
|
|
12
|
+
export const transactionBounds = (text) => {
|
|
13
|
+
const boundary = Time.parseBoundary(text);
|
|
14
|
+
if (boundary === undefined)
|
|
15
|
+
return undefined;
|
|
16
|
+
return {
|
|
17
|
+
lo: Uuidv7.at(boundary.start, 0, new Uint8Array(8)),
|
|
18
|
+
hi: Uuidv7.at(boundary.end, 0, new Uint8Array(8)),
|
|
19
|
+
};
|
|
20
|
+
};
|
|
21
|
+
/**
|
|
22
|
+
* Inclusive transaction boundary: an exact UUID includes that append; a
|
|
23
|
+
* period/timestamp includes its whole UTC period/second through an exclusive high
|
|
24
|
+
* bound. Returns `undefined` for text that is neither form.
|
|
25
|
+
*/
|
|
26
|
+
export const asOfBoundary = (text) => {
|
|
27
|
+
const id = text.toLowerCase();
|
|
28
|
+
if (Uuidv7.is(id))
|
|
29
|
+
return { operator: '<=', tx: id };
|
|
30
|
+
const bounds = transactionBounds(text);
|
|
31
|
+
return bounds === undefined ? undefined : { operator: '<', tx: bounds.hi };
|
|
32
|
+
};
|
|
33
|
+
/** A validated as-of predicate, optionally qualified with a table alias. */
|
|
34
|
+
export const asOfCondition = (boundary, column = 'tx') => `${column} ${boundary.operator} '${boundary.tx}'`;
|
|
35
|
+
/** Every claim, optionally bounded in transaction time. */
|
|
36
|
+
export const claims = (boundary) => boundary === undefined ? 'cave_claim' :
|
|
37
|
+
`(SELECT * FROM cave_claim WHERE ${asOfCondition(boundary)})`;
|
|
38
|
+
/**
|
|
39
|
+
* Latest transaction per claim key. `source` selects the eligible
|
|
40
|
+
* `cave_claim` rows (for example `claims(asOfBoundary(...))`); the outer row
|
|
41
|
+
* comes from the base table so the source fragment appears only once.
|
|
42
|
+
*/
|
|
43
|
+
export const current = (source = claims()) => `
|
|
44
|
+
SELECT c.* FROM cave_claim c
|
|
45
|
+
JOIN (
|
|
46
|
+
SELECT claim_key, MAX(tx) AS max_tx
|
|
47
|
+
FROM ${source} GROUP BY claim_key
|
|
48
|
+
) latest ON c.claim_key = latest.claim_key AND c.tx = latest.max_tx
|
|
49
|
+
`;
|
|
50
|
+
/** Current, positive, entity-to-entity ALIAS edges in both directions. */
|
|
51
|
+
export const aliasEdges = (currentSql = current()) => `alias_edge(a, b) AS (
|
|
52
|
+
SELECT c.subject, c.object FROM (${currentSql}) c
|
|
53
|
+
WHERE c.verb = 'ALIAS' AND c.negated = 0 AND c.conf > 0 AND c.object IS NOT NULL
|
|
54
|
+
AND ${Row.entityTermSql('c.subject')} AND ${Row.entityTermSql('c.object')}
|
|
55
|
+
UNION
|
|
56
|
+
SELECT c.object, c.subject FROM (${currentSql}) c
|
|
57
|
+
WHERE c.verb = 'ALIAS' AND c.negated = 0 AND c.conf > 0 AND c.object IS NOT NULL
|
|
58
|
+
AND ${Row.entityTermSql('c.subject')} AND ${Row.entityTermSql('c.object')}
|
|
59
|
+
)`;
|
|
60
|
+
/** Full transitive alias closure as ordered pairs. Requires `WITH RECURSIVE`. */
|
|
61
|
+
export const aliasPairs = (currentSql = current()) => `${aliasEdges(currentSql)},
|
|
62
|
+
alias_pair(a, b) AS (
|
|
63
|
+
SELECT a, b FROM alias_edge
|
|
64
|
+
UNION
|
|
65
|
+
SELECT p.a, e.b FROM alias_pair p JOIN alias_edge e ON e.a = p.b
|
|
66
|
+
)`;
|
|
67
|
+
/** Seeded alias closure. Its first SELECT consumes one positional parameter. */
|
|
68
|
+
export const aliasSeed = () => `alias_closure(name) AS (
|
|
69
|
+
SELECT ?
|
|
70
|
+
UNION
|
|
71
|
+
SELECT e.b FROM alias_closure s JOIN alias_edge e ON e.a = s.name
|
|
72
|
+
)`;
|
|
73
|
+
/** Ready-to-prefix seeded closure; the caller supplies the seed parameter. */
|
|
74
|
+
export const aliasClosure = (currentSql = current()) => `WITH RECURSIVE ${aliasEdges(currentSql)}, ${aliasSeed()}\n`;
|
|
75
|
+
/** SQL equality widened through an `alias_pair` CTE already in scope. */
|
|
76
|
+
export const aliasSame = (left, right) => `(${left} = ${right} OR EXISTS (SELECT 1 FROM alias_pair p WHERE p.a = ${left} AND p.b = ${right}))`;
|
|
77
|
+
//# sourceMappingURL=query-sql.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query-sql.js","sourceRoot":"","sources":["../../src/query-sql.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/** Versioned, storage-independent claim and transaction records. */
|
|
2
|
+
import type { Claim } from '@cavelang/core';
|
|
3
|
+
import type * as Provenance from './provenance.ts';
|
|
4
|
+
import type * as Row from './row.ts';
|
|
5
|
+
export declare const format: "cave.claim";
|
|
6
|
+
export declare const version: 1;
|
|
7
|
+
/**
|
|
8
|
+
* Public JSON representation. It deliberately contains semantic domain
|
|
9
|
+
* values rather than `cave_claim` column names, so storage migrations do not
|
|
10
|
+
* silently revise serialized APIs.
|
|
11
|
+
*/
|
|
12
|
+
export type V1 = {
|
|
13
|
+
readonly format: typeof format;
|
|
14
|
+
readonly version: typeof version;
|
|
15
|
+
readonly id: string;
|
|
16
|
+
readonly tx: string;
|
|
17
|
+
readonly key: string;
|
|
18
|
+
/** Canonical primary-direction CAVE text. */
|
|
19
|
+
readonly canonical: string;
|
|
20
|
+
/** Semantic claim; `claim.raw` retains the authored spelling. */
|
|
21
|
+
readonly claim: Claim.t;
|
|
22
|
+
readonly provenance: Provenance.t;
|
|
23
|
+
};
|
|
24
|
+
export type t = V1;
|
|
25
|
+
export declare const of: (row: Row.t, claim: Claim.t, provenance: Provenance.t) => t;
|
|
26
|
+
/** Decode a persisted v1 fixture, rejecting unknown future formats loudly. */
|
|
27
|
+
export declare const decode: (input: string | unknown) => t;
|
|
28
|
+
export declare const encode: (record: t, space?: number) => string;
|
|
29
|
+
//# sourceMappingURL=record.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"record.d.ts","sourceRoot":"","sources":["../../src/record.ts"],"names":[],"mappings":"AAAA,oEAAoE;AAGpE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAA;AAE3C,OAAO,KAAK,KAAK,UAAU,MAAM,iBAAiB,CAAA;AAClD,OAAO,KAAK,KAAK,GAAG,MAAM,UAAU,CAAA;AAEpC,eAAO,MAAM,MAAM,EAAG,YAAqB,CAAA;AAC3C,eAAO,MAAM,OAAO,EAAG,CAAU,CAAA;AAEjC;;;;GAIG;AACH,MAAM,MAAM,EAAE,GAAG;IACf,QAAQ,CAAC,MAAM,EAAE,OAAO,MAAM,CAAA;IAC9B,QAAQ,CAAC,OAAO,EAAE,OAAO,OAAO,CAAA;IAChC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;IACpB,6CAA6C;IAC7C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,iEAAiE;IACjE,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAA;IACvB,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC,CAAA;CAClC,CAAA;AAED,MAAM,MAAM,CAAC,GAAG,EAAE,CAAA;AAElB,eAAO,MAAM,EAAE,GAAI,KAAK,GAAG,CAAC,CAAC,EAAE,OAAO,KAAK,CAAC,CAAC,EAAE,YAAY,UAAU,CAAC,CAAC,KAAG,CASxE,CAAA;AAQF,8EAA8E;AAC9E,eAAO,MAAM,MAAM,GAAI,OAAO,MAAM,GAAG,OAAO,KAAG,CA6BhD,CAAA;AAED,eAAO,MAAM,MAAM,GAAI,QAAQ,CAAC,EAAE,QAAQ,MAAM,KAAG,MACT,CAAA"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/** Versioned, storage-independent claim and transaction records. */
|
|
2
|
+
import { Key, Uuidv7 } from '@cavelang/core';
|
|
3
|
+
import { emitClaim } from '@cavelang/canonical';
|
|
4
|
+
export const format = 'cave.claim';
|
|
5
|
+
export const version = 1;
|
|
6
|
+
export const of = (row, claim, provenance) => ({
|
|
7
|
+
format,
|
|
8
|
+
version,
|
|
9
|
+
id: row.id,
|
|
10
|
+
tx: row.tx,
|
|
11
|
+
key: row.claim_key,
|
|
12
|
+
canonical: emitClaim(claim),
|
|
13
|
+
claim,
|
|
14
|
+
provenance,
|
|
15
|
+
});
|
|
16
|
+
const object = (value) => typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
17
|
+
const strings = (value) => Array.isArray(value) && value.every(entry => typeof entry === 'string');
|
|
18
|
+
/** Decode a persisted v1 fixture, rejecting unknown future formats loudly. */
|
|
19
|
+
export const decode = (input) => {
|
|
20
|
+
const value = typeof input === 'string' ? JSON.parse(input) : input;
|
|
21
|
+
if (!object(value) || value['format'] !== format) {
|
|
22
|
+
throw new Error(`CAVE record: expected format ${JSON.stringify(format)}`);
|
|
23
|
+
}
|
|
24
|
+
if (value['version'] !== version) {
|
|
25
|
+
throw new Error(`CAVE record: unsupported ${format} version ${JSON.stringify(value['version'])}`);
|
|
26
|
+
}
|
|
27
|
+
const claim = value['claim'];
|
|
28
|
+
const provenance = value['provenance'];
|
|
29
|
+
if (typeof value['id'] !== 'string' || typeof value['tx'] !== 'string' ||
|
|
30
|
+
typeof value['key'] !== 'string' || typeof value['canonical'] !== 'string' ||
|
|
31
|
+
!object(claim) || !object(claim['subject']) || !object(claim['payload']) ||
|
|
32
|
+
typeof claim['verb'] !== 'string' || typeof claim['negated'] !== 'boolean' ||
|
|
33
|
+
!strings(claim['contexts']) || !Array.isArray(claim['tags']) ||
|
|
34
|
+
typeof claim['conf'] !== 'number' || typeof claim['importance'] !== 'boolean' ||
|
|
35
|
+
typeof claim['raw'] !== 'string' || !object(provenance) ||
|
|
36
|
+
!strings(provenance['actors']) || !strings(provenance['sources']) ||
|
|
37
|
+
!strings(provenance['runs']) || !strings(provenance['domains'])) {
|
|
38
|
+
throw new Error(`CAVE record: malformed ${format}/v${version}`);
|
|
39
|
+
}
|
|
40
|
+
const decoded = value;
|
|
41
|
+
if (!Uuidv7.is(decoded.id) || !Uuidv7.is(decoded.tx)) {
|
|
42
|
+
throw new Error(`CAVE record: malformed ${format}/v${version} transaction identity`);
|
|
43
|
+
}
|
|
44
|
+
if (Key.of(decoded.claim) !== decoded.key || emitClaim(decoded.claim) !== decoded.canonical) {
|
|
45
|
+
throw new Error(`CAVE record: malformed ${format}/v${version} semantic identity`);
|
|
46
|
+
}
|
|
47
|
+
return decoded;
|
|
48
|
+
};
|
|
49
|
+
export const encode = (record, space) => JSON.stringify(record, undefined, space);
|
|
50
|
+
//# sourceMappingURL=record.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"record.js","sourceRoot":"","sources":["../../src/record.ts"],"names":[],"mappings":"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"}
|
package/dist/src/resolve.d.ts
CHANGED
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
* Resolution is a read mode: nothing is rewritten, the winner is a stored
|
|
26
26
|
* row returned verbatim.
|
|
27
27
|
*/
|
|
28
|
-
import type {
|
|
28
|
+
import type { Database } from './adapter.ts';
|
|
29
29
|
import type * as Row from './row.ts';
|
|
30
30
|
/** One effective policy entry (spec §26.3). */
|
|
31
31
|
export type Entry = {
|
|
@@ -78,7 +78,7 @@ export declare const builtins: readonly Entry[];
|
|
|
78
78
|
* the caller's, so an as-of query reads the policy as of its boundary
|
|
79
79
|
* (§12.3).
|
|
80
80
|
*/
|
|
81
|
-
export declare const readPolicy: (db:
|
|
81
|
+
export declare const readPolicy: (db: Database, currentSql: string) => Entry[];
|
|
82
82
|
/**
|
|
83
83
|
* SQL over `currentSql` (a current-belief SELECT, §13.5) scoring and
|
|
84
84
|
* ranking every supported current row inside its resolution group
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolve.d.ts","sourceRoot":"","sources":["../../src/resolve.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"resolve.d.ts","sourceRoot":"","sources":["../../src/resolve.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAA;AAC5C,OAAO,KAAK,KAAK,GAAG,MAAM,UAAU,CAAA;AAEpC,+CAA+C;AAC/C,MAAM,MAAM,KAAK,GAAG;IAClB;;;;;OAKG;IACH,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,uDAAuD;IACvD,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAA;IAC5B,4EAA4E;IAC5E,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAC9B,CAAA;AAED,mEAAmE;AACnE,MAAM,MAAM,MAAM,GAAG,GAAG,CAAC,CAAC,GAAG;IAC3B,gFAAgF;IAChF,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,0DAA0D;IAC1D,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,sEAAsE;IACtE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,8BAA8B;IAC9B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;CAC1B,CAAA;AAED,uEAAuE;AACvE,MAAM,MAAM,SAAS,GAAG;IACtB,gCAAgC;IAChC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,0DAA0D;IAC1D,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAA;CACjC,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,QAAQ,EAAE,SAAS,KAAK,EAMpC,CAAA;AA0DD;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,UAAU,GAAI,IAAI,QAAQ,EAAE,YAAY,MAAM,KAAG,KAAK,EA0ClE,CAAA;AAaD;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,SAAS,GACpB,SAAS,SAAS,KAAK,EAAE,EACzB,YAAY,MAAM,EAClB,UAAS;IAAE,OAAO,CAAC,EAAE,OAAO,CAAA;CAAO,KAClC,MA2CF,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,WAAW,GACtB,SAAS,SAAS,KAAK,EAAE,EACzB,YAAY,MAAM,EAClB,UAAS;IAAE,OAAO,CAAC,EAAE,OAAO,CAAA;CAAO,KAClC,MAC4F,CAAA"}
|
package/dist/src/resolve.js
CHANGED
|
Binary file
|
package/dist/src/resolve.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolve.js","sourceRoot":"","sources":["../../src/resolve.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"resolve.js","sourceRoot":"","sources":["../../src/resolve.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import * as Canonical from '@cavelang/canonical';
|
|
2
|
+
import type { Adapter } from './adapter.ts';
|
|
3
|
+
import type { Store as BaseStore } from './store.ts';
|
|
4
|
+
export type Store = BaseStore & {
|
|
5
|
+
/**
|
|
6
|
+
* Verb registry reconstructed from the configured base registry plus
|
|
7
|
+
* declaration rows visible at the transaction-time boundary.
|
|
8
|
+
*/
|
|
9
|
+
readonly registryAsOf: (asOf: string) => Canonical.Registry.t;
|
|
10
|
+
};
|
|
11
|
+
export type OpenOptions = {
|
|
12
|
+
readonly registry?: Canonical.Registry.t;
|
|
13
|
+
};
|
|
14
|
+
/** Open a CAVE store with an explicitly selected SQLite implementation. */
|
|
15
|
+
export declare const openWith: (adapter: Adapter, path?: string, options?: OpenOptions) => Store;
|
|
16
|
+
//# sourceMappingURL=runtime.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../src/runtime.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,SAAS,MAAM,qBAAqB,CAAA;AAChD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAG3C,OAAO,KAAK,EAAE,KAAK,IAAI,SAAS,EAAE,MAAM,YAAY,CAAA;AAEpD,MAAM,MAAM,KAAK,GAAG,SAAS,GAAG;IAC9B;;;OAGG;IACH,QAAQ,CAAC,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAA;CAC9D,CAAA;AAED,MAAM,MAAM,WAAW,GAAG;IACxB,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAA;CACzC,CAAA;AAgDD,2EAA2E;AAC3E,eAAO,MAAM,QAAQ,GACnB,SAAS,OAAO,EAChB,OAAM,MAAmB,EACzB,UAAS,WAAgB,KACxB,KAOF,CAAA"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { Verb } from '@cavelang/core';
|
|
2
|
+
import * as Canonical from '@cavelang/canonical';
|
|
3
|
+
import * as QuerySql from "./query-sql.js";
|
|
4
|
+
import { open as openStore } from "./store.js";
|
|
5
|
+
const declarationsAsOf = (store, asOf) => {
|
|
6
|
+
const boundary = QuerySql.asOfBoundary(asOf);
|
|
7
|
+
if (boundary === undefined) {
|
|
8
|
+
throw new Error(`CAVE: cannot parse as-of boundary ${JSON.stringify(asOf)}`);
|
|
9
|
+
}
|
|
10
|
+
return store.db.prepare(`
|
|
11
|
+
SELECT subject, verb, object FROM cave_claim
|
|
12
|
+
WHERE tx ${boundary.operator} ?
|
|
13
|
+
AND negated = 0 AND object IS NOT NULL AND verb IN ('REVERSE', 'RENAMED-TO', 'IS')
|
|
14
|
+
AND id NOT IN (SELECT child_id FROM cave_edge WHERE role IN ('WHEN', 'VIA', 'BECAUSE'))
|
|
15
|
+
ORDER BY tx
|
|
16
|
+
`).all(boundary.tx);
|
|
17
|
+
};
|
|
18
|
+
const applyDeclarations = (baseRegistry, declarations) => {
|
|
19
|
+
let registry = baseRegistry;
|
|
20
|
+
for (const declaration of declarations) {
|
|
21
|
+
if (!Verb.isVerbToken(declaration.subject))
|
|
22
|
+
continue;
|
|
23
|
+
if (declaration.verb === 'REVERSE' && Verb.isVerbToken(declaration.object)) {
|
|
24
|
+
registry = Canonical.Registry.declareReverse(registry, declaration.subject, declaration.object).registry;
|
|
25
|
+
}
|
|
26
|
+
else if (declaration.verb === 'RENAMED-TO' && Verb.isVerbToken(declaration.object)) {
|
|
27
|
+
registry = Canonical.Registry.declareRename(registry, declaration.subject, declaration.object).registry;
|
|
28
|
+
}
|
|
29
|
+
else if (declaration.verb === 'IS' && declaration.object === 'verb') {
|
|
30
|
+
registry = Canonical.Registry.declareVerb(registry, declaration.subject);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
return registry;
|
|
34
|
+
};
|
|
35
|
+
/** Open a CAVE store with an explicitly selected SQLite implementation. */
|
|
36
|
+
export const openWith = (adapter, path = ':memory:', options = {}) => {
|
|
37
|
+
const baseRegistry = options.registry ?? Canonical.standardRegistry;
|
|
38
|
+
const store = openStore(adapter, path, options);
|
|
39
|
+
return Object.assign(store, {
|
|
40
|
+
registryAsOf: (asOf) => applyDeclarations(baseRegistry, declarationsAsOf(store, asOf))
|
|
41
|
+
});
|
|
42
|
+
};
|
|
43
|
+
//# sourceMappingURL=runtime.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../src/runtime.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAA;AACrC,OAAO,KAAK,SAAS,MAAM,qBAAqB,CAAA;AAEhD,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAA;AAC1C,OAAO,EAAE,IAAI,IAAI,SAAS,EAAE,MAAM,YAAY,CAAA;AAqB9C,MAAM,gBAAgB,GAAG,CAAC,KAAgB,EAAE,IAAY,EAAiB,EAAE;IACzE,MAAM,QAAQ,GAAG,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,CAAA;IAC5C,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,MAAM,IAAI,KAAK,CAAC,qCAAqC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IAC9E,CAAC;IACD,OAAO,KAAK,CAAC,EAAE,CAAC,OAAO,CAAC;;eAEX,QAAQ,CAAC,QAAQ;;;;GAI7B,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAkB,CAAA;AACtC,CAAC,CAAA;AAED,MAAM,iBAAiB,GAAG,CACxB,YAAkC,EAClC,YAAoC,EACd,EAAE;IACxB,IAAI,QAAQ,GAAG,YAAY,CAAA;IAC3B,KAAK,MAAM,WAAW,IAAI,YAAY,EAAE,CAAC;QACvC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,OAAO,CAAC;YAAE,SAAQ;QACpD,IAAI,WAAW,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;YAC3E,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAC,cAAc,CAC1C,QAAQ,EACR,WAAW,CAAC,OAAO,EACnB,WAAW,CAAC,MAAM,CACnB,CAAC,QAAQ,CAAA;QACZ,CAAC;aAAM,IAAI,WAAW,CAAC,IAAI,KAAK,YAAY,IAAI,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;YACrF,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAC,aAAa,CACzC,QAAQ,EACR,WAAW,CAAC,OAAO,EACnB,WAAW,CAAC,MAAM,CACnB,CAAC,QAAQ,CAAA;QACZ,CAAC;aAAM,IAAI,WAAW,CAAC,IAAI,KAAK,IAAI,IAAI,WAAW,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;YACtE,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC,QAAQ,EAAE,WAAW,CAAC,OAAO,CAAC,CAAA;QAC1E,CAAC;IACH,CAAC;IACD,OAAO,QAAQ,CAAA;AACjB,CAAC,CAAA;AAED,2EAA2E;AAC3E,MAAM,CAAC,MAAM,QAAQ,GAAG,CACtB,OAAgB,EAChB,OAAe,UAAU,EACzB,UAAuB,EAAE,EAClB,EAAE;IACT,MAAM,YAAY,GAAG,OAAO,CAAC,QAAQ,IAAI,SAAS,CAAC,gBAAgB,CAAA;IACnE,MAAM,KAAK,GAAG,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,CAAA;IAC/C,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE;QAC1B,YAAY,EAAE,CAAC,IAAY,EAAwB,EAAE,CACnD,iBAAiB,CAAC,YAAY,EAAE,gBAAgB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;KACjE,CAAC,CAAA;AACJ,CAAC,CAAA"}
|
package/dist/src/schema.d.ts
CHANGED
|
@@ -1,9 +1,13 @@
|
|
|
1
|
+
/** Ordered, transactional storage schema migrations (spec §13). */
|
|
2
|
+
import type { Capabilities, Database } from './adapter.ts';
|
|
3
|
+
export declare const currentVersion = 1;
|
|
4
|
+
/** Default Node/FTS5 schema SQL retained for callers that inspect the DDL. */
|
|
5
|
+
export declare const ddl: string;
|
|
6
|
+
export declare const validate: (db: Database, version: number, schema?: string) => void;
|
|
1
7
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
8
|
+
* Upgrade every supported older version in order. Each step owns one SQLite
|
|
9
|
+
* transaction, including its `user_version` update, so interruption leaves
|
|
10
|
+
* either the old version or the complete next version and reopen can resume.
|
|
4
11
|
*/
|
|
5
|
-
|
|
6
|
-
export declare const ddl = "\nCREATE TABLE IF NOT EXISTS cave_claim (\n id TEXT PRIMARY KEY, -- UUIDv7\n tx TEXT NOT NULL, -- UUIDv7, lexicographic = transaction order\n\n subject TEXT NOT NULL, -- canonical (primary) direction\n verb TEXT NOT NULL, -- canonical (primary) verb\n negated INTEGER NOT NULL DEFAULT 0,\n\n object TEXT, -- relation object, entity, literal\n attribute TEXT, -- for HAS attr: value\n value_text TEXT, -- value as written (incl. ~, multiplier, delimiters)\n value_num REAL, -- parsed numeric value when possible\n value_unit TEXT, -- normalized unit string\n value_approx INTEGER NOT NULL DEFAULT 0,\n\n delta_text TEXT,\n delta_num REAL,\n delta_unit TEXT,\n sigma_level REAL DEFAULT 2.0,\n\n conf REAL NOT NULL DEFAULT 1.0,\n importance INTEGER NOT NULL DEFAULT 0,\n\n comment TEXT,\n raw_line TEXT NOT NULL, -- exactly as written, incl. inverse form\n\n claim_key TEXT NOT NULL -- normalized key; shared by forward/inverse readings\n);\n\nCREATE INDEX IF NOT EXISTS idx_cave_claim_key_tx ON cave_claim (claim_key, tx);\nCREATE INDEX IF NOT EXISTS idx_cave_subject ON cave_claim (subject);\nCREATE INDEX IF NOT EXISTS idx_cave_verb ON cave_claim (verb);\nCREATE INDEX IF NOT EXISTS idx_cave_object ON cave_claim (object);\nCREATE INDEX IF NOT EXISTS idx_cave_attribute ON cave_claim (attribute);\nCREATE INDEX IF NOT EXISTS idx_cave_conf ON cave_claim (conf);\n\nCREATE TABLE IF NOT EXISTS cave_context (\n claim_id TEXT NOT NULL,\n context TEXT NOT NULL,\n FOREIGN KEY (claim_id) REFERENCES cave_claim(id)\n);\nCREATE INDEX IF NOT EXISTS idx_cave_context ON cave_context (context);\n\nCREATE TABLE IF NOT EXISTS cave_tag (\n claim_id TEXT NOT NULL,\n key TEXT NOT NULL,\n value TEXT, -- NULL for flat tags (spec \u00A713.2)\n FOREIGN KEY (claim_id) REFERENCES cave_claim(id)\n);\nCREATE INDEX IF NOT EXISTS idx_cave_tag_key ON cave_tag (key, value);\n\nCREATE TABLE IF NOT EXISTS cave_edge (\n parent_id TEXT NOT NULL,\n role TEXT NOT NULL, -- WHEN, VIA, BECAUSE, QUALIFIES\n child_id TEXT NOT NULL,\n FOREIGN KEY (parent_id) REFERENCES cave_claim(id),\n FOREIGN KEY (child_id) REFERENCES cave_claim(id)\n);\nCREATE INDEX IF NOT EXISTS idx_cave_edge_parent ON cave_edge (parent_id);\nCREATE INDEX IF NOT EXISTS idx_cave_edge_child ON cave_edge (child_id);\nCREATE INDEX IF NOT EXISTS idx_cave_edge_role ON cave_edge (role);\n\nCREATE VIRTUAL TABLE IF NOT EXISTS cave_fts USING fts5(\n claim_id, subject, verb, object, attribute, value_text, comment, raw_line\n);\n";
|
|
7
|
-
/** Creates all tables and indexes. */
|
|
8
|
-
export declare const init: (db: DatabaseSync) => void;
|
|
12
|
+
export declare const init: (db: Database, capabilities?: Capabilities) => void;
|
|
9
13
|
//# sourceMappingURL=schema.d.ts.map
|
package/dist/src/schema.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/schema.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/schema.ts"],"names":[],"mappings":"AAAA,mEAAmE;AAEnE,OAAO,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAA;AAG1D,eAAO,MAAM,cAAc,IAAI,CAAA;AAoF/B,8EAA8E;AAC9E,eAAO,MAAM,GAAG,QAAgC,CAAA;AA+ChD,eAAO,MAAM,QAAQ,GAAI,IAAI,QAAQ,EAAE,SAAS,MAAM,EAAE,eAAe,KAAG,IAwBzE,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,IAAI,GACf,IAAI,QAAQ,EACZ,eAAc,YAGb,KACA,IA+BF,CAAA"}
|