@happyvertical/smrt-core 0.40.70 → 0.42.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 (193) hide show
  1. package/AGENTS.md +3 -3
  2. package/agents/change-feed.md +1 -1
  3. package/agents/schema-paths.md +561 -32
  4. package/dist/browser.js +5 -4
  5. package/dist/cascade.d.ts +120 -0
  6. package/dist/cascade.d.ts.map +1 -0
  7. package/dist/cascade.js +430 -0
  8. package/dist/cascade.js.map +1 -0
  9. package/dist/change-feed.d.ts +34 -2
  10. package/dist/change-feed.d.ts.map +1 -1
  11. package/dist/change-feed.js +54 -13
  12. package/dist/change-feed.js.map +1 -1
  13. package/dist/change-signals.d.ts.map +1 -1
  14. package/dist/change-signals.js +8 -1
  15. package/dist/change-signals.js.map +1 -1
  16. package/dist/class.d.ts +36 -3
  17. package/dist/class.d.ts.map +1 -1
  18. package/dist/class.js +69 -14
  19. package/dist/class.js.map +1 -1
  20. package/dist/collection-cache.js +0 -0
  21. package/dist/collection-cache.js.map +1 -1
  22. package/dist/collection.d.ts +29 -0
  23. package/dist/collection.d.ts.map +1 -1
  24. package/dist/collection.js +68 -16
  25. package/dist/collection.js.map +1 -1
  26. package/dist/config.d.ts +10 -0
  27. package/dist/config.d.ts.map +1 -1
  28. package/dist/config.js.map +1 -1
  29. package/dist/decorators/index.d.ts +63 -5
  30. package/dist/decorators/index.d.ts.map +1 -1
  31. package/dist/decorators/index.js +37 -5
  32. package/dist/decorators/index.js.map +1 -1
  33. package/dist/dispatch/collections/Dispatches.d.ts.map +1 -1
  34. package/dist/dispatch/collections/Dispatches.js +21 -6
  35. package/dist/dispatch/collections/Dispatches.js.map +1 -1
  36. package/dist/dispatch/models/Dispatch.d.ts +1 -1
  37. package/dist/dispatch/models/Dispatch.d.ts.map +1 -1
  38. package/dist/dispatch/models/Dispatch.js +3 -2
  39. package/dist/dispatch/models/Dispatch.js.map +1 -1
  40. package/dist/dispatch/models/DispatchSubscription.d.ts +1 -1
  41. package/dist/dispatch/models/DispatchSubscription.d.ts.map +1 -1
  42. package/dist/dispatch/models/DispatchSubscription.js +2 -1
  43. package/dist/dispatch/models/DispatchSubscription.js.map +1 -1
  44. package/dist/dispatch/types.d.ts +5 -0
  45. package/dist/dispatch/types.d.ts.map +1 -1
  46. package/dist/embedded-write-queue.d.ts +46 -0
  47. package/dist/embedded-write-queue.d.ts.map +1 -0
  48. package/dist/embedded-write-queue.js +66 -0
  49. package/dist/embedded-write-queue.js.map +1 -0
  50. package/dist/embeddings/storage.d.ts +7 -0
  51. package/dist/embeddings/storage.d.ts.map +1 -1
  52. package/dist/embeddings/storage.js +31 -13
  53. package/dist/embeddings/storage.js.map +1 -1
  54. package/dist/errors.d.ts +1 -1
  55. package/dist/hierarchical.js +1 -1
  56. package/dist/index.d.ts +2 -1
  57. package/dist/index.d.ts.map +1 -1
  58. package/dist/index.js +8 -6
  59. package/dist/interceptors.d.ts +21 -0
  60. package/dist/interceptors.d.ts.map +1 -1
  61. package/dist/interceptors.js +27 -1
  62. package/dist/interceptors.js.map +1 -1
  63. package/dist/learning/memory.d.ts.map +1 -1
  64. package/dist/learning/memory.js +5 -4
  65. package/dist/learning/memory.js.map +1 -1
  66. package/dist/manifest/generator.d.ts.map +1 -1
  67. package/dist/manifest/generator.js +4 -7
  68. package/dist/manifest/generator.js.map +1 -1
  69. package/dist/manifest/static-manifest.js +10 -10
  70. package/dist/manifest/static-manifest.js.map +1 -1
  71. package/dist/manifest/store.js +1 -1
  72. package/dist/manifest/store.js.map +1 -1
  73. package/dist/manifest.json +19 -19
  74. package/dist/migrations/differ.d.ts +9 -1
  75. package/dist/migrations/differ.d.ts.map +1 -1
  76. package/dist/migrations/differ.js +12 -7
  77. package/dist/migrations/differ.js.map +1 -1
  78. package/dist/migrations/index.d.ts +2 -0
  79. package/dist/migrations/index.d.ts.map +1 -1
  80. package/dist/migrations/index.js +3 -1
  81. package/dist/migrations/integer-width.d.ts +99 -0
  82. package/dist/migrations/integer-width.d.ts.map +1 -0
  83. package/dist/migrations/integer-width.js +237 -0
  84. package/dist/migrations/integer-width.js.map +1 -0
  85. package/dist/migrations/minor-units.d.ts +162 -0
  86. package/dist/migrations/minor-units.d.ts.map +1 -0
  87. package/dist/migrations/minor-units.js +383 -0
  88. package/dist/migrations/minor-units.js.map +1 -0
  89. package/dist/migrations/tracker.d.ts.map +1 -1
  90. package/dist/migrations/tracker.js +28 -20
  91. package/dist/migrations/tracker.js.map +1 -1
  92. package/dist/migrations.js +3 -1
  93. package/dist/object.d.ts +98 -5
  94. package/dist/object.d.ts.map +1 -1
  95. package/dist/object.js +138 -30
  96. package/dist/object.js.map +1 -1
  97. package/dist/query-bounds.d.ts +5 -1
  98. package/dist/query-bounds.d.ts.map +1 -1
  99. package/dist/query-bounds.js +5 -1
  100. package/dist/query-bounds.js.map +1 -1
  101. package/dist/registry/class-registration.d.ts.map +1 -1
  102. package/dist/registry/class-registration.js +3 -1
  103. package/dist/registry/class-registration.js.map +1 -1
  104. package/dist/registry/manifest-field-merge.d.ts +12 -0
  105. package/dist/registry/manifest-field-merge.d.ts.map +1 -1
  106. package/dist/registry/manifest-field-merge.js +14 -2
  107. package/dist/registry/manifest-field-merge.js.map +1 -1
  108. package/dist/registry/schema-builder.d.ts +22 -1
  109. package/dist/registry/schema-builder.d.ts.map +1 -1
  110. package/dist/registry/schema-builder.js +205 -165
  111. package/dist/registry/schema-builder.js.map +1 -1
  112. package/dist/registry/types.d.ts +3 -2
  113. package/dist/registry/types.d.ts.map +1 -1
  114. package/dist/registry.d.ts +41 -46
  115. package/dist/registry.d.ts.map +1 -1
  116. package/dist/registry.js +61 -83
  117. package/dist/registry.js.map +1 -1
  118. package/dist/scanner/manifest-generator.d.ts +45 -0
  119. package/dist/scanner/manifest-generator.d.ts.map +1 -1
  120. package/dist/scanner/manifest-generator.js +92 -28
  121. package/dist/scanner/manifest-generator.js.map +1 -1
  122. package/dist/schema/conflict-target.d.ts +104 -0
  123. package/dist/schema/conflict-target.d.ts.map +1 -0
  124. package/dist/schema/conflict-target.js +129 -0
  125. package/dist/schema/conflict-target.js.map +1 -0
  126. package/dist/schema/ddl/duckdb-strategy.d.ts.map +1 -1
  127. package/dist/schema/ddl/duckdb-strategy.js +3 -1
  128. package/dist/schema/ddl/duckdb-strategy.js.map +1 -1
  129. package/dist/schema/ddl/postgres-strategy.d.ts.map +1 -1
  130. package/dist/schema/ddl/postgres-strategy.js +14 -1
  131. package/dist/schema/ddl/postgres-strategy.js.map +1 -1
  132. package/dist/schema/generator.d.ts +245 -41
  133. package/dist/schema/generator.d.ts.map +1 -1
  134. package/dist/schema/generator.js +397 -241
  135. package/dist/schema/generator.js.map +1 -1
  136. package/dist/schema/index-utils.d.ts +120 -0
  137. package/dist/schema/index-utils.d.ts.map +1 -1
  138. package/dist/schema/index-utils.js +242 -1
  139. package/dist/schema/index-utils.js.map +1 -1
  140. package/dist/schema/index.d.ts +2 -3
  141. package/dist/schema/index.d.ts.map +1 -1
  142. package/dist/schema/index.js +2 -3
  143. package/dist/schema/live-parity.d.ts +3 -1
  144. package/dist/schema/live-parity.d.ts.map +1 -1
  145. package/dist/schema/live-parity.js +23 -2
  146. package/dist/schema/live-parity.js.map +1 -1
  147. package/dist/schema/system-table-shapes.d.ts +13 -0
  148. package/dist/schema/system-table-shapes.d.ts.map +1 -1
  149. package/dist/schema/system-table-shapes.js +14 -1
  150. package/dist/schema/system-table-shapes.js.map +1 -1
  151. package/dist/schema/types.d.ts +17 -10
  152. package/dist/schema/types.d.ts.map +1 -1
  153. package/dist/schema/utils.d.ts +1 -1
  154. package/dist/schema/utils.d.ts.map +1 -1
  155. package/dist/schema/utils.js +3 -3
  156. package/dist/schema/utils.js.map +1 -1
  157. package/dist/schema.js +2 -3
  158. package/dist/smrt-knowledge.json +9 -9
  159. package/dist/system/compatibility.d.ts +42 -0
  160. package/dist/system/compatibility.d.ts.map +1 -1
  161. package/dist/system/compatibility.js +182 -9
  162. package/dist/system/compatibility.js.map +1 -1
  163. package/dist/system/index.d.ts +1 -0
  164. package/dist/system/index.d.ts.map +1 -1
  165. package/dist/system/index.js +3 -2
  166. package/dist/system/retention.d.ts +237 -0
  167. package/dist/system/retention.d.ts.map +1 -0
  168. package/dist/system/retention.js +497 -0
  169. package/dist/system/retention.js.map +1 -0
  170. package/dist/system/schema.d.ts +102 -16
  171. package/dist/system/schema.d.ts.map +1 -1
  172. package/dist/system/schema.js +85 -47
  173. package/dist/system/schema.js.map +1 -1
  174. package/dist/system/types.d.ts +0 -2
  175. package/dist/system/types.d.ts.map +1 -1
  176. package/dist/testing/database.d.ts.map +1 -1
  177. package/dist/testing/database.js.map +1 -1
  178. package/dist/utils/safe-integer.d.ts +19 -0
  179. package/dist/utils/safe-integer.d.ts.map +1 -0
  180. package/dist/utils/safe-integer.js +31 -0
  181. package/dist/utils/safe-integer.js.map +1 -0
  182. package/dist/utils.d.ts +2 -1
  183. package/dist/utils.d.ts.map +1 -1
  184. package/dist/utils.js +6 -3
  185. package/dist/utils.js.map +1 -1
  186. package/dist/vite-plugin/index.d.ts.map +1 -1
  187. package/dist/vite-plugin/index.js +4 -62
  188. package/dist/vite-plugin/index.js.map +1 -1
  189. package/package.json +4 -4
  190. package/dist/schema/override-system.d.ts +0 -43
  191. package/dist/schema/override-system.d.ts.map +0 -1
  192. package/dist/schema/override-system.js +0 -205
  193. package/dist/schema/override-system.js.map +0 -1
@@ -0,0 +1,237 @@
1
+ import { DatabaseInterface } from '@happyvertical/sql';
2
+ /** Retention for the append-only change feed (`_smrt_changes`). */
3
+ export interface ChangeFeedRetentionPolicy {
4
+ /** Run this task (default `true`). */
5
+ enabled?: boolean;
6
+ /** Drop entries older than this many days (default 30). */
7
+ maxAgeDays?: number;
8
+ /** Additionally keep at most this many newest entries (default: unbounded). */
9
+ maxRows?: number;
10
+ }
11
+ /** Retention for AI usage telemetry (`_smrt_ai_usage`). */
12
+ export interface AiUsageRetentionPolicy {
13
+ /** Run this task (default `true`). */
14
+ enabled?: boolean;
15
+ /** Drop records older than this many days (default 90). */
16
+ maxAgeDays?: number;
17
+ /** Additionally keep at most this many newest records (default: unbounded). */
18
+ maxRows?: number;
19
+ }
20
+ /** Retention for remembered context entries (`_smrt_contexts`). */
21
+ export interface ContextsRetentionPolicy {
22
+ /** Run this task (default `true`). */
23
+ enabled?: boolean;
24
+ }
25
+ /** Retention for the dispatch queue (`_smrt_dispatch`). */
26
+ export interface DispatchRetentionPolicy {
27
+ /** Run this task (default `true`). */
28
+ enabled?: boolean;
29
+ /** Drop completed dispatches processed more than this many days ago (default 30). */
30
+ completedOlderThanDays?: number;
31
+ /** Drop failed dispatches last touched more than this many days ago (default 90). */
32
+ failedOlderThanDays?: number;
33
+ }
34
+ /**
35
+ * Retention policy for a sweep.
36
+ *
37
+ * Every table is pruned by default; set a table's entry to `false` (or
38
+ * `{ enabled: false }`) to opt that table out, or `enabled: false` at the top
39
+ * level to opt the whole sweep out.
40
+ */
41
+ export interface RetentionPolicy {
42
+ /** Run the sweep at all (default `true`). */
43
+ enabled?: boolean;
44
+ /** Report what would be pruned without deleting anything (default `false`). */
45
+ dryRun?: boolean;
46
+ /** `_smrt_changes` retention, or `false` to skip. */
47
+ changes?: ChangeFeedRetentionPolicy | false;
48
+ /** `_smrt_ai_usage` retention, or `false` to skip. */
49
+ aiUsage?: AiUsageRetentionPolicy | false;
50
+ /** `_smrt_contexts` expiry enforcement, or `false` to skip. */
51
+ contexts?: ContextsRetentionPolicy | false;
52
+ /** `_smrt_dispatch` retention, or `false` to skip. */
53
+ dispatch?: DispatchRetentionPolicy | false;
54
+ /**
55
+ * Enable/disable individual tasks contributed through
56
+ * {@link registerRetentionTask}, keyed by task name. Unlisted tasks run.
57
+ */
58
+ tasks?: Record<string, boolean>;
59
+ }
60
+ /**
61
+ * Documented retention defaults.
62
+ *
63
+ * Chosen to be generous relative to every in-tree consumer: change-feed
64
+ * cursors resync automatically past the window, AI usage outlives a monthly
65
+ * billing cycle by two months, and dispatch keeps a full quarter of failures
66
+ * for forensics. Applications that need longer history raise these; those that
67
+ * need none set the table to `false`.
68
+ */
69
+ export declare const DEFAULT_RETENTION_POLICY: {
70
+ changes: ChangeFeedRetentionPolicy;
71
+ aiUsage: AiUsageRetentionPolicy;
72
+ contexts: ContextsRetentionPolicy;
73
+ dispatch: DispatchRetentionPolicy;
74
+ };
75
+ /** Per-run inputs handed to every retention task. */
76
+ export interface RetentionTaskContext {
77
+ /** Count what would be deleted instead of deleting it. */
78
+ dryRun: boolean;
79
+ /** Sweep start time — every task derives its cutoffs from this one clock. */
80
+ now: Date;
81
+ }
82
+ /** What one task did (or why it did nothing). */
83
+ export interface RetentionTaskResult {
84
+ /** Task name, unique within a sweep. */
85
+ task: string;
86
+ /** Rows deleted, or — under `dryRun` — rows that would be deleted. */
87
+ pruned: number;
88
+ /**
89
+ * Why the task did no work: `disabled` (policy opted it out) or
90
+ * `unavailable` (the table does not exist in this database).
91
+ */
92
+ skipped?: 'disabled' | 'unavailable';
93
+ /** Message of the error this task failed with, if any. */
94
+ error?: string;
95
+ /** Optional per-bucket breakdown (e.g. completed vs failed dispatches). */
96
+ details?: Record<string, number>;
97
+ }
98
+ /** What a task returns; a bare number is shorthand for `{ pruned }`. */
99
+ export type RetentionTaskOutcome = number | {
100
+ pruned: number;
101
+ details?: Record<string, number>;
102
+ };
103
+ /**
104
+ * A retention task contributed by a package that owns its own tables.
105
+ *
106
+ * Tasks must honour `context.dryRun` — a task that deletes during a dry run
107
+ * makes the whole preview a lie.
108
+ */
109
+ export interface RetentionTask {
110
+ /** Unique name; also the {@link RetentionPolicy.tasks} opt-out key. */
111
+ name: string;
112
+ /** One-line description surfaced by `smrt db:prune --json`. */
113
+ description?: string;
114
+ /** Perform (or, under `dryRun`, count) the deletion. */
115
+ run(db: DatabaseInterface, context: RetentionTaskContext): Promise<RetentionTaskOutcome>;
116
+ }
117
+ /**
118
+ * Register a retention task so {@link runRetentionSweep} includes it.
119
+ *
120
+ * Registering a task does not schedule anything — a task only runs when
121
+ * something calls {@link runRetentionSweep}, and the policy can still turn it
122
+ * off by name. Re-registering the same name replaces the previous task, which
123
+ * keeps module re-evaluation (HMR, repeated test imports) idempotent.
124
+ *
125
+ * @throws If `task.name` is empty, or is one of the four built-in table
126
+ * names (`changes`, `ai-usage`, `contexts`, `dispatch`) — see
127
+ * {@link RESERVED_TASK_NAMES}.
128
+ */
129
+ export declare function registerRetentionTask(task: RetentionTask): void;
130
+ /** Remove a registered retention task. Returns `true` if one was removed. */
131
+ export declare function unregisterRetentionTask(name: string): boolean;
132
+ /** Registered retention tasks, ordered by name for deterministic sweeps. */
133
+ export declare function getRetentionTasks(): RetentionTask[];
134
+ /** Drop every registered retention task (test helper). */
135
+ export declare function clearRetentionTasks(): void;
136
+ /** Bounds for {@link pruneAiUsage}. At least one bound is required. */
137
+ export interface AiUsageRetention {
138
+ /** Delete records older than this many milliseconds. */
139
+ maxAgeMs?: number;
140
+ /**
141
+ * Keep at most this many newest records (by `created_at`).
142
+ *
143
+ * A ceiling, not a floor: combined with `maxAgeMs`, the two bounds union
144
+ * — a row past the age cutoff is deleted regardless of `maxRows`, so
145
+ * `maxRows` never resurrects rows the age bound already excludes. If every
146
+ * row is already older than `maxAgeMs`, a finite `maxRows` keeps none of
147
+ * them; it does not guarantee `maxRows` survivors independent of age. (A
148
+ * `maxRows` that overrode age this way would defeat the reason `maxAgeMs`
149
+ * usually exists in the first place — a compliance/privacy deletion
150
+ * deadline that a row-count floor should not be able to postpone.)
151
+ *
152
+ * Rows sharing the cutoff timestamp all survive, so the retained count can
153
+ * exceed `maxRows` by the size of one timestamp tie.
154
+ */
155
+ maxRows?: number;
156
+ /**
157
+ * Restrict the prune to one tenant: a string matches that tenant, `null`
158
+ * matches the global (tenant-less) records. Omit to prune every tenant.
159
+ */
160
+ tenantId?: string | null;
161
+ /** Count matching records without deleting them. */
162
+ dryRun?: boolean;
163
+ /** Clock for the age cutoff (default: now). */
164
+ now?: Date;
165
+ }
166
+ /**
167
+ * Prune AI usage telemetry to bound `_smrt_ai_usage` growth.
168
+ *
169
+ * `_smrt_ai_usage` gains one row per AI call and persistence is on by default,
170
+ * so a busy deployment writes millions of rows a year with nothing to remove
171
+ * them. Both bounds may be combined; each is applied independently and the
172
+ * returned count is the total deleted.
173
+ *
174
+ * Predicates are covered by `idx_smrt_ai_usage_tenant_created`
175
+ * (`tenant_id, created_at`) — the same index the subscriptions billing meter
176
+ * needs for its `tenant_id + created_at` range scan.
177
+ *
178
+ * @param db - Database holding the system tables.
179
+ * @param retention - At least one of `maxAgeMs` / `maxRows`.
180
+ * @returns Number of records deleted (or, under `dryRun`, matched).
181
+ */
182
+ export declare function pruneAiUsage(db: DatabaseInterface, retention: AiUsageRetention): Promise<{
183
+ pruned: number;
184
+ }>;
185
+ /**
186
+ * Delete context entries whose `expires_at` has passed.
187
+ *
188
+ * `remember({ expiresAt })` has always stored the expiry and never acted on
189
+ * it. Enforcement is deliberately prune-side only: `recall()`/`recallAll()`
190
+ * keep their documented "expiry is not applied at read time" contract, so this
191
+ * bounds storage without changing read semantics for existing callers.
192
+ * (`LearningMemory` filters expired rows itself.)
193
+ *
194
+ * Rows with a `NULL` `expires_at` never expire and are never touched.
195
+ * The predicate is covered by `idx_smrt_contexts_expires_at`.
196
+ *
197
+ * @param db - Database holding the system tables.
198
+ * @param options.now - Clock for the expiry comparison (default: now).
199
+ * @param options.dryRun - Count matching rows without deleting them.
200
+ * @returns Number of expired entries deleted (or, under `dryRun`, matched).
201
+ */
202
+ export declare function pruneExpiredContexts(db: DatabaseInterface, options?: {
203
+ now?: Date;
204
+ dryRun?: boolean;
205
+ }): Promise<{
206
+ pruned: number;
207
+ }>;
208
+ /** Aggregate outcome of one {@link runRetentionSweep} call. */
209
+ export interface RetentionSweepResult {
210
+ /** Whether this run only counted rows. */
211
+ dryRun: boolean;
212
+ /** Sweep start time, ISO-8601. */
213
+ startedAt: string;
214
+ /** Wall-clock duration of the sweep. */
215
+ durationMs: number;
216
+ /** Total rows pruned (or matched) across all tasks. */
217
+ pruned: number;
218
+ /** Per-task outcomes, in execution order. */
219
+ tasks: RetentionTaskResult[];
220
+ /** Whether any task failed — the sweep never throws for a task failure. */
221
+ failed: boolean;
222
+ }
223
+ /**
224
+ * Apply a {@link RetentionPolicy} across every framework-owned table.
225
+ *
226
+ * Built-in tasks run first, in a fixed order (`changes`, `ai-usage`,
227
+ * `contexts`, `dispatch`), followed by tasks registered via
228
+ * {@link registerRetentionTask} in name order. Tables that do not exist in
229
+ * this database are reported as `skipped: 'unavailable'` rather than failing —
230
+ * a sweep must be safe to run against a partially bootstrapped database.
231
+ *
232
+ * @param db - Database holding the system tables.
233
+ * @param policy - Overrides on {@link DEFAULT_RETENTION_POLICY}.
234
+ * @returns Per-task and aggregate counts; never throws for a task failure.
235
+ */
236
+ export declare function runRetentionSweep(db: DatabaseInterface, policy?: RetentionPolicy): Promise<RetentionSweepResult>;
237
+ //# sourceMappingURL=retention.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retention.d.ts","sourceRoot":"","sources":["../../src/system/retention.ts"],"names":[],"mappings":"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"}