@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.
Files changed (79) hide show
  1. package/Authors.md +5 -0
  2. package/License.md +6 -0
  3. package/README.md +121 -14
  4. package/dist/src/adapter-entry.d.ts +9 -0
  5. package/dist/src/adapter-entry.d.ts.map +1 -0
  6. package/dist/src/adapter-entry.js +7 -0
  7. package/dist/src/adapter-entry.js.map +1 -0
  8. package/dist/src/adapter.d.ts +51 -0
  9. package/dist/src/adapter.d.ts.map +1 -0
  10. package/dist/src/adapter.js +3 -0
  11. package/dist/src/adapter.js.map +1 -0
  12. package/dist/src/backup.d.ts +23 -0
  13. package/dist/src/backup.d.ts.map +1 -0
  14. package/dist/src/backup.js +164 -0
  15. package/dist/src/backup.js.map +1 -0
  16. package/dist/src/index.d.ts +8 -0
  17. package/dist/src/index.d.ts.map +1 -1
  18. package/dist/src/index.js +5 -0
  19. package/dist/src/index.js.map +1 -1
  20. package/dist/src/node-adapter-entry.d.ts +3 -0
  21. package/dist/src/node-adapter-entry.d.ts.map +1 -0
  22. package/dist/src/node-adapter-entry.js +3 -0
  23. package/dist/src/node-adapter-entry.js.map +1 -0
  24. package/dist/src/node-adapter.d.ts +4 -0
  25. package/dist/src/node-adapter.d.ts.map +1 -0
  26. package/dist/src/node-adapter.js +20 -0
  27. package/dist/src/node-adapter.js.map +1 -0
  28. package/dist/src/open.d.ts +3 -18
  29. package/dist/src/open.d.ts.map +1 -1
  30. package/dist/src/open.js +4 -52
  31. package/dist/src/open.js.map +1 -1
  32. package/dist/src/provenance.d.ts +24 -0
  33. package/dist/src/provenance.d.ts.map +1 -0
  34. package/dist/src/provenance.js +75 -0
  35. package/dist/src/provenance.js.map +1 -0
  36. package/dist/src/query-sql.d.ts +45 -0
  37. package/dist/src/query-sql.d.ts.map +1 -0
  38. package/dist/src/query-sql.js +77 -0
  39. package/dist/src/query-sql.js.map +1 -0
  40. package/dist/src/record.d.ts +29 -0
  41. package/dist/src/record.d.ts.map +1 -0
  42. package/dist/src/record.js +50 -0
  43. package/dist/src/record.js.map +1 -0
  44. package/dist/src/resolve.d.ts +2 -2
  45. package/dist/src/resolve.d.ts.map +1 -1
  46. package/dist/src/resolve.js +0 -0
  47. package/dist/src/resolve.js.map +1 -1
  48. package/dist/src/runtime.d.ts +16 -0
  49. package/dist/src/runtime.d.ts.map +1 -0
  50. package/dist/src/runtime.js +43 -0
  51. package/dist/src/runtime.js.map +1 -0
  52. package/dist/src/schema.d.ts +10 -6
  53. package/dist/src/schema.d.ts.map +1 -1
  54. package/dist/src/schema.js +113 -9
  55. package/dist/src/schema.js.map +1 -1
  56. package/dist/src/sensitivity.d.ts +24 -0
  57. package/dist/src/sensitivity.d.ts.map +1 -0
  58. package/dist/src/sensitivity.js +34 -0
  59. package/dist/src/sensitivity.js.map +1 -0
  60. package/dist/src/store.d.ts +40 -14
  61. package/dist/src/store.d.ts.map +1 -1
  62. package/dist/src/store.js +113 -74
  63. package/dist/src/store.js.map +1 -1
  64. package/package.json +25 -6
  65. package/src/adapter-entry.ts +18 -0
  66. package/src/adapter.ts +57 -0
  67. package/src/backup.ts +188 -0
  68. package/src/index.ts +8 -0
  69. package/src/node-adapter-entry.ts +3 -0
  70. package/src/node-adapter.ts +23 -0
  71. package/src/open.ts +7 -80
  72. package/src/provenance.ts +109 -0
  73. package/src/query-sql.ts +99 -0
  74. package/src/record.ts +82 -0
  75. package/src/resolve.ts +0 -0
  76. package/src/runtime.ts +78 -0
  77. package/src/schema.ts +137 -10
  78. package/src/sensitivity.ts +42 -0
  79. package/src/store.ts +140 -82
@@ -1,8 +1,7 @@
1
- /**
2
- * Storage schema (spec §13.1, §13.2) — verbatim from the specification,
3
- * with `IF NOT EXISTS` added so opening an existing database is idempotent.
4
- */
5
- export const ddl = `
1
+ /** Ordered, transactional storage schema migrations (spec §13). */
2
+ import * as Provenance from "./provenance.js";
3
+ export const currentVersion = 1;
4
+ const ddlBeforeFts = `
6
5
  CREATE TABLE IF NOT EXISTS cave_claim (
7
6
  id TEXT PRIMARY KEY, -- UUIDv7
8
7
  tx TEXT NOT NULL, -- UUIDv7, lexicographic = transaction order
@@ -45,6 +44,16 @@ CREATE TABLE IF NOT EXISTS cave_context (
45
44
  FOREIGN KEY (claim_id) REFERENCES cave_claim(id)
46
45
  );
47
46
  CREATE INDEX IF NOT EXISTS idx_cave_context ON cave_context (context);
47
+ CREATE INDEX IF NOT EXISTS idx_cave_context_claim ON cave_context (claim_id, context);
48
+
49
+ CREATE TABLE IF NOT EXISTS cave_provenance (
50
+ claim_id TEXT NOT NULL,
51
+ dimension TEXT NOT NULL CHECK (dimension IN ('actor', 'source', 'run', 'domain')),
52
+ value TEXT NOT NULL,
53
+ PRIMARY KEY (claim_id, dimension, value),
54
+ FOREIGN KEY (claim_id) REFERENCES cave_claim(id)
55
+ );
56
+ CREATE INDEX IF NOT EXISTS idx_cave_provenance_lookup ON cave_provenance (dimension, value, claim_id);
48
57
 
49
58
  CREATE TABLE IF NOT EXISTS cave_tag (
50
59
  claim_id TEXT NOT NULL,
@@ -53,6 +62,7 @@ CREATE TABLE IF NOT EXISTS cave_tag (
53
62
  FOREIGN KEY (claim_id) REFERENCES cave_claim(id)
54
63
  );
55
64
  CREATE INDEX IF NOT EXISTS idx_cave_tag_key ON cave_tag (key, value);
65
+ CREATE INDEX IF NOT EXISTS idx_cave_tag_claim ON cave_tag (claim_id, key, value);
56
66
 
57
67
  CREATE TABLE IF NOT EXISTS cave_edge (
58
68
  parent_id TEXT NOT NULL,
@@ -65,12 +75,106 @@ CREATE INDEX IF NOT EXISTS idx_cave_edge_parent ON cave_edge (parent_id);
65
75
  CREATE INDEX IF NOT EXISTS idx_cave_edge_child ON cave_edge (child_id);
66
76
  CREATE INDEX IF NOT EXISTS idx_cave_edge_role ON cave_edge (role);
67
77
 
68
- CREATE VIRTUAL TABLE IF NOT EXISTS cave_fts USING fts5(
78
+ `;
79
+ const ftsDdl = (fullText) => `
80
+ CREATE VIRTUAL TABLE IF NOT EXISTS cave_fts USING ${fullText}(
69
81
  claim_id, subject, verb, object, attribute, value_text, comment, raw_line
70
82
  );
71
83
  `;
72
- /** Creates all tables and indexes. */
73
- export const init = (db) => {
74
- db.exec(ddl);
84
+ /** Default Node/FTS5 schema SQL retained for callers that inspect the DDL. */
85
+ export const ddl = ddlBeforeFts + ftsDdl('fts5');
86
+ const ddlFor = (capabilities) => ddlBeforeFts + ftsDdl(capabilities.fullText);
87
+ const migrations = [
88
+ {
89
+ version: 1,
90
+ up: (db, capabilities) => {
91
+ db.exec(ddlFor(capabilities));
92
+ Provenance.backfill(db);
93
+ }
94
+ }
95
+ ];
96
+ const versionOf = (db) => db.prepare('PRAGMA user_version').get().user_version;
97
+ const requiredTables = [
98
+ 'cave_claim', 'cave_context', 'cave_provenance', 'cave_tag', 'cave_edge', 'cave_fts'
99
+ ];
100
+ const requiredIndexes = [
101
+ 'idx_cave_claim_key_tx', 'idx_cave_subject', 'idx_cave_verb', 'idx_cave_object',
102
+ 'idx_cave_attribute', 'idx_cave_conf', 'idx_cave_context', 'idx_cave_context_claim',
103
+ 'idx_cave_provenance_lookup', 'idx_cave_tag_key', 'idx_cave_tag_claim',
104
+ 'idx_cave_edge_parent', 'idx_cave_edge_child', 'idx_cave_edge_role'
105
+ ];
106
+ const requiredColumns = {
107
+ cave_claim: [
108
+ 'id', 'tx', 'subject', 'verb', 'negated', 'object', 'attribute', 'value_text',
109
+ 'value_num', 'value_unit', 'value_approx', 'delta_text', 'delta_num', 'delta_unit',
110
+ 'sigma_level', 'conf', 'importance', 'comment', 'raw_line', 'claim_key'
111
+ ],
112
+ cave_context: ['claim_id', 'context'],
113
+ cave_provenance: ['claim_id', 'dimension', 'value'],
114
+ cave_tag: ['claim_id', 'key', 'value'],
115
+ cave_edge: ['parent_id', 'role', 'child_id'],
116
+ cave_fts: ['claim_id', 'subject', 'verb', 'object', 'attribute', 'value_text', 'comment', 'raw_line']
117
+ };
118
+ export const validate = (db, version, schema = 'main') => {
119
+ if (!/^[A-Za-z_][A-Za-z0-9_]*$/.test(schema)) {
120
+ throw new Error(`CAVE: invalid SQLite schema name ${JSON.stringify(schema)}`);
121
+ }
122
+ const objects = new Map(db.prepare(`SELECT name, type FROM ${schema}.sqlite_schema WHERE name LIKE 'cave_%' OR name LIKE 'idx_cave_%'`)
123
+ .all().map(row => [row.name, row.type]));
124
+ const problems = [
125
+ ...requiredTables.flatMap(name => objects.has(name) ? [] : [`missing table ${name}`]),
126
+ ...requiredIndexes.flatMap(name => objects.get(name) === 'index' ? [] : [`missing index ${name}`]),
127
+ ...Object.entries(requiredColumns).flatMap(([table, required]) => {
128
+ if (!objects.has(table)) {
129
+ return [];
130
+ }
131
+ const columns = new Set(db.prepare(`PRAGMA ${schema}.table_info(${table})`).all().map(row => row.name));
132
+ return required.flatMap(column => columns.has(column) ? [] : [`missing column ${table}.${column}`]);
133
+ })
134
+ ];
135
+ if (problems.length > 0) {
136
+ throw new Error(`CAVE: schema version ${version} is incompatible: ${problems.join(', ')}`);
137
+ }
138
+ };
139
+ /**
140
+ * Upgrade every supported older version in order. Each step owns one SQLite
141
+ * transaction, including its `user_version` update, so interruption leaves
142
+ * either the old version or the complete next version and reopen can resume.
143
+ */
144
+ export const init = (db, capabilities = {
145
+ transactions: { immediate: true, savepoints: true },
146
+ fullText: 'fts5',
147
+ }) => {
148
+ let version = versionOf(db);
149
+ if (version > currentVersion) {
150
+ throw new Error(`CAVE: schema version ${version} is newer than this runtime supports (${currentVersion}); upgrade CAVE`);
151
+ }
152
+ for (const migration of migrations) {
153
+ if (migration.version <= version) {
154
+ continue;
155
+ }
156
+ if (migration.version !== version + 1) {
157
+ throw new Error(`CAVE: no schema migration path from version ${version} to ${migration.version}`);
158
+ }
159
+ db.exec('BEGIN IMMEDIATE');
160
+ try {
161
+ migration.up(db, capabilities);
162
+ db.exec(`PRAGMA user_version = ${migration.version}`);
163
+ validate(db, migration.version);
164
+ db.exec('COMMIT');
165
+ version = migration.version;
166
+ }
167
+ catch (error) {
168
+ try {
169
+ db.exec('ROLLBACK');
170
+ }
171
+ catch {
172
+ // SQLite may already have rolled back a failed statement.
173
+ }
174
+ const detail = error instanceof Error ? error.message : String(error);
175
+ throw new Error(`CAVE: schema migration ${version} -> ${migration.version} failed: ${detail}`);
176
+ }
177
+ }
178
+ validate(db, version);
75
179
  };
76
180
  //# sourceMappingURL=schema.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/schema.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,MAAM,CAAC,MAAM,GAAG,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkElB,CAAA;AAED,sCAAsC;AACtC,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC,EAAgB,EAAQ,EAAE;IAC7C,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AACd,CAAC,CAAA"}
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/schema.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Sensitivity labels and row visibility (spec §9.7).
3
+ *
4
+ * Claims opt into a level with `#sensitivity:<level>`. Unlabelled rows are
5
+ * `internal`; malformed, flat, or unknown labels fail closed as `restricted`.
6
+ * Several labels on one row resolve to the most restrictive one.
7
+ */
8
+ export declare const levels: readonly ["public", "internal", "confidential", "restricted"];
9
+ export type Level = (typeof levels)[number];
10
+ export declare const defaultLevel: Level;
11
+ export declare const defaultMaximum: Level;
12
+ export declare const parse: (value: string) => undefined | Level;
13
+ export declare const rank: (level: Level) => number;
14
+ /**
15
+ * SQL predicate that allows rows at or below `maximum`. `alias` must be a
16
+ * trusted SQL identifier supplied by CAVE code, never user input.
17
+ */
18
+ export declare const sql: (alias: string, maximum?: Level) => string;
19
+ /** Most restrictive recognized label; malformed labels are `restricted`. */
20
+ export declare const ofTags: (tags: readonly {
21
+ key: string;
22
+ value?: null | string;
23
+ }[]) => Level;
24
+ //# sourceMappingURL=sensitivity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sensitivity.d.ts","sourceRoot":"","sources":["../../src/sensitivity.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,eAAO,MAAM,MAAM,+DAAgE,CAAA;AACnF,MAAM,MAAM,KAAK,GAAG,CAAC,OAAO,MAAM,CAAC,CAAC,MAAM,CAAC,CAAA;AAE3C,eAAO,MAAM,YAAY,EAAE,KAAkB,CAAA;AAC7C,eAAO,MAAM,cAAc,EAAE,KAAkB,CAAA;AAE/C,eAAO,MAAM,KAAK,GAAI,OAAO,MAAM,KAAG,SAAS,GAAG,KACY,CAAA;AAE9D,eAAO,MAAM,IAAI,GAAI,OAAO,KAAK,KAAG,MAA+B,CAAA;AAEnE;;;GAGG;AACH,eAAO,MAAM,GAAG,GAAI,OAAO,MAAM,EAAE,UAAS,KAAsB,KAAG,MAGoD,CAAA;AAEzH,4EAA4E;AAC5E,eAAO,MAAM,MAAM,GAAI,MAAM,SAAS;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,IAAI,GAAG,MAAM,CAAA;CAAE,EAAE,KAAG,KAYhF,CAAA"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Sensitivity labels and row visibility (spec §9.7).
3
+ *
4
+ * Claims opt into a level with `#sensitivity:<level>`. Unlabelled rows are
5
+ * `internal`; malformed, flat, or unknown labels fail closed as `restricted`.
6
+ * Several labels on one row resolve to the most restrictive one.
7
+ */
8
+ export const levels = ['public', 'internal', 'confidential', 'restricted'];
9
+ export const defaultLevel = 'internal';
10
+ export const defaultMaximum = 'internal';
11
+ export const parse = (value) => levels.includes(value) ? value : undefined;
12
+ export const rank = (level) => levels.indexOf(level);
13
+ /**
14
+ * SQL predicate that allows rows at or below `maximum`. `alias` must be a
15
+ * trusted SQL identifier supplied by CAVE code, never user input.
16
+ */
17
+ export const sql = (alias, maximum = defaultMaximum) => `COALESCE((SELECT MAX(CASE s.value ` +
18
+ `WHEN 'public' THEN 0 WHEN 'internal' THEN 1 WHEN 'confidential' THEN 2 WHEN 'restricted' THEN 3 ELSE 3 END) ` +
19
+ `FROM cave_tag s WHERE s.claim_id = ${alias}.id AND s.key = 'sensitivity'), ${rank(defaultLevel)}) <= ${rank(maximum)}`;
20
+ /** Most restrictive recognized label; malformed labels are `restricted`. */
21
+ export const ofTags = (tags) => {
22
+ let effective;
23
+ for (const tag of tags) {
24
+ if (tag.key !== 'sensitivity') {
25
+ continue;
26
+ }
27
+ const level = tag.value === undefined || tag.value === null ? 'restricted' : parse(tag.value) ?? 'restricted';
28
+ if (effective === undefined || rank(level) > rank(effective)) {
29
+ effective = level;
30
+ }
31
+ }
32
+ return effective ?? defaultLevel;
33
+ };
34
+ //# sourceMappingURL=sensitivity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sensitivity.js","sourceRoot":"","sources":["../../src/sensitivity.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,QAAQ,EAAE,UAAU,EAAE,cAAc,EAAE,YAAY,CAAU,CAAA;AAGnF,MAAM,CAAC,MAAM,YAAY,GAAU,UAAU,CAAA;AAC7C,MAAM,CAAC,MAAM,cAAc,GAAU,UAAU,CAAA;AAE/C,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,KAAa,EAAqB,EAAE,CACxD,MAAM,CAAC,QAAQ,CAAC,KAAc,CAAC,CAAC,CAAC,CAAC,KAAc,CAAC,CAAC,CAAC,SAAS,CAAA;AAE9D,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC,KAAY,EAAU,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;AAEnE;;;GAGG;AACH,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC,KAAa,EAAE,UAAiB,cAAc,EAAU,EAAE,CAC5E,oCAAoC;IACpC,8GAA8G;IAC9G,sCAAsC,KAAK,mCAAmC,IAAI,CAAC,YAAY,CAAC,QAAQ,IAAI,CAAC,OAAO,CAAC,EAAE,CAAA;AAEzH,4EAA4E;AAC5E,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,IAAuD,EAAS,EAAE;IACvF,IAAI,SAA4B,CAAA;IAChC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,IAAI,GAAG,CAAC,GAAG,KAAK,aAAa,EAAE,CAAC;YAC9B,SAAQ;QACV,CAAC;QACD,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,KAAK,SAAS,IAAI,GAAG,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,YAAY,CAAA;QAC7G,IAAI,SAAS,KAAK,SAAS,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;YAC7D,SAAS,GAAG,KAAK,CAAA;QACnB,CAAC;IACH,CAAC;IACD,OAAO,SAAS,IAAI,YAAY,CAAA;AAClC,CAAC,CAAA"}
@@ -1,15 +1,15 @@
1
1
  /**
2
2
  * The CAVE store (spec §13) — append-only claim persistence on the Node.js
3
- * builtin `node:sqlite`.
3
+ * through an explicit synchronous SQLite adapter.
4
4
  *
5
5
  * - one row per fact, canonical direction; inverses are query-time views
6
6
  * over existing indexes, never materialized rows (spec §13.3);
7
7
  * - current belief = latest tx per claim key (spec §9.1, §13.5);
8
8
  * - the verb registry is rebuilt from stored in-band declaration claims on
9
- * open, so a reopened database keeps its inverse vocabulary;
9
+ * open, so a reopened database keeps its inverse and lifecycle vocabulary;
10
10
  * - full-text search over subjects, objects, values, comments and raw
11
11
  * lines via FTS5;
12
- * - appends can stamp actor provenance (spec §9.5): pass `source` and every
12
+ * - appends record actor provenance and keep compatibility stamps (spec §9.5): pass `source` and every
13
13
  * claim without a `src:` context gets `@src:<actor>` — applied before the
14
14
  * claim key is computed, so different actors keep separate belief series;
15
15
  * - contradiction resolution (spec §26): coexisting series about one fact
@@ -17,11 +17,14 @@
17
17
  * confidence and tx — `resolvedBeliefs`, `contested`, and the `resolve`
18
18
  * traversal opt-in.
19
19
  */
20
- import { DatabaseSync } from 'node:sqlite';
21
- import { Claim } from '@cavelang/core';
20
+ import { Claim, Context } from '@cavelang/core';
22
21
  import * as Canonical from '@cavelang/canonical';
22
+ import type { Adapter } from './adapter.ts';
23
23
  import * as Resolve from './resolve.ts';
24
24
  import * as Row from './row.ts';
25
+ import * as Sensitivity from './sensitivity.ts';
26
+ import * as Provenance from './provenance.ts';
27
+ import * as Record from './record.ts';
25
28
  export type IngestResult = {
26
29
  /** ids of the batch's claim rows, in document order — for a row skipped as already present (`ids` replay, spec §28.1), the existing id. */
27
30
  readonly ids: readonly string[];
@@ -33,7 +36,8 @@ export type IngestResult = {
33
36
  };
34
37
  export type AppendOptions = {
35
38
  /**
36
- * Actor provenance (spec §9.5): stamp `@src:<source>` on every appended
39
+ * Actor provenance (spec §9.5): record actor `<source>` and stamp
40
+ * `@src:<source>` on every appended
37
41
  * claim that carries no `src:` context — e.g. `cli`, `agent/claude-code`,
38
42
  * `ingest/93a01c626b3f`. Applied before the claim key is computed, so the
39
43
  * stamp is part of claim identity; claims that already name a source keep
@@ -42,15 +46,23 @@ export type AppendOptions = {
42
46
  */
43
47
  readonly source?: string;
44
48
  /**
45
- * Lifecycle stamping (spec §9.5): stamp `@src:<source>` even when the
49
+ * Lifecycle ownership (spec §9.5.1): record run `<source>` and stamp
50
+ * `@src:<source>` even when the
46
51
  * claim already names a source. Connect records, rule conclusions and
47
- * action effects are found for retraction and attribution by their
48
- * stamp, so an authored `src:` context must not displace it — both are
49
- * kept (multi-source rows resolve per §26.3). The exact stamp context
52
+ * action effects are found for retraction and attribution by their run,
53
+ * so an authored `src:` context must not displace it — both contexts are
54
+ * kept for compatibility (multi-source rows resolve per §26.3). The exact stamp context
50
55
  * is never duplicated. Without this flag an authored source suppresses
51
56
  * the stamp.
52
57
  */
53
58
  readonly lifecycle?: boolean;
59
+ /**
60
+ * Additional structured contexts applied to every row before keying. Used
61
+ * by connectors to attach source spans without rewriting generated text.
62
+ */
63
+ readonly contexts?: readonly Context.t[];
64
+ /** Explicit provenance dimensions; compact contexts remain unchanged. */
65
+ readonly provenance?: Provenance.Input;
54
66
  /**
55
67
  * Explicit row identity (spec §28.1), index-aligned with the result's
56
68
  * claims: a claim with an id here is replayed under it — inserted with
@@ -109,13 +121,17 @@ export declare const defaultDbPath: () => string;
109
121
  * already stored; pass `Canonical.Registry.empty` for a declaration-free
110
122
  * start.
111
123
  */
112
- export declare const open: (path?: string, options?: {
124
+ export declare const open: (adapter: Adapter, path?: string, options?: {
113
125
  registry?: Canonical.Registry.t;
114
126
  }) => {
115
- /** Raw database handle used by `@cavelang/query`; treat as read-only. */
116
- db: DatabaseSync;
127
+ /** Adapter that owns this database connection and its capabilities. */
128
+ adapter: Adapter;
129
+ /** Raw adapter database handle — used by `@cavelang/query`; treat as read-only. */
130
+ db: import("./adapter.ts").Database;
117
131
  /** Current verb registry (input registry + stored + ingested declarations). */
118
132
  registry: () => Canonical.Registry.t;
133
+ /** Configured registry before any in-band declarations are applied. */
134
+ baseRegistry: () => Canonical.Registry.t;
119
135
  /**
120
136
  * Rebuilds the registry from the base plus stored declarations — after
121
137
  * rows arrive outside `ingest`/`insertResult` (a §28 merge writes
@@ -198,6 +214,12 @@ export declare const open: (path?: string, options?: {
198
214
  byTag(key: string, value?: string): Row.t[];
199
215
  /** Rows carrying a context (spec §13.5), newest first. */
200
216
  byContext(context: string): Row.t[];
217
+ /** Rows carrying one explicit provenance dimension, newest first. */
218
+ byProvenance(dimension: Provenance.Dimension, value: string): Row.t[];
219
+ /** Explicit actor, physical source, lifecycle run, and domain metadata. */
220
+ provenanceOf: (row: Row.t | string) => Provenance.t;
221
+ /** Map a database-shaped row to the stable `cave.claim/v1` contract. */
222
+ recordOf: (row: Row.t) => Record.t;
201
223
  /** Members of a topic — forward `CONTAINS` traversal (spec §11.2). */
202
224
  topicMembers(topic: string, options_?: TraverseOptions): string[];
203
225
  /** Topics containing an entity — the inverse `CONTAINS` read (spec §11.2). */
@@ -206,10 +228,13 @@ export declare const open: (path?: string, options?: {
206
228
  * Full-text search, newest first. The query is treated as a literal
207
229
  * phrase by default (safe for terms like `token-expiry`, which FTS5
208
230
  * would otherwise parse as a column filter); pass `raw` to use full
209
- * FTS5 MATCH syntax.
231
+ * FTS5 MATCH syntax. `limit` caps the rows inside the query itself,
232
+ * so a broad search never materializes more than the caller reads.
210
233
  */
211
234
  search(query: string, options_?: {
212
235
  raw?: boolean;
236
+ limit?: number;
237
+ maxSensitivity?: Sensitivity.Level;
213
238
  }): Row.t[];
214
239
  /**
215
240
  * Appends edges between *existing* claim rows (spec §13.2) — the
@@ -247,6 +272,7 @@ export declare const open: (path?: string, options?: {
247
272
  exportText(options_?: {
248
273
  current?: boolean;
249
274
  tx?: boolean;
275
+ maxSensitivity?: Sensitivity.Level;
250
276
  }): string;
251
277
  close(): void;
252
278
  };
@@ -1 +1 @@
1
- {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/store.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/store.ts"],"names":[],"mappings":"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"}