@happyvertical/smrt-core 0.47.0 → 0.47.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (84) hide show
  1. package/AGENTS.md +2 -0
  2. package/agents/generators.md +19 -5
  3. package/agents/registry-snapshot.md +28 -0
  4. package/agents/schema-paths.md +12 -0
  5. package/agents/system-diagnostics.md +43 -0
  6. package/dist/browser.js +4 -2
  7. package/dist/change-feed.d.ts +8 -0
  8. package/dist/change-feed.d.ts.map +1 -1
  9. package/dist/change-feed.js +1 -1
  10. package/dist/change-feed.js.map +1 -1
  11. package/dist/index.d.ts +1 -0
  12. package/dist/index.d.ts.map +1 -1
  13. package/dist/index.js +5 -2
  14. package/dist/manifest/static-manifest.js +1 -1
  15. package/dist/manifest/static-manifest.js.map +1 -1
  16. package/dist/manifest/store.js +1 -1
  17. package/dist/manifest.json +1 -1
  18. package/dist/migrations/differ.d.ts +78 -0
  19. package/dist/migrations/differ.d.ts.map +1 -1
  20. package/dist/migrations/differ.js +191 -1
  21. package/dist/migrations/differ.js.map +1 -1
  22. package/dist/migrations/generator.d.ts.map +1 -1
  23. package/dist/migrations/generator.js +2 -1
  24. package/dist/migrations/generator.js.map +1 -1
  25. package/dist/postgres-permissions.d.ts +3 -0
  26. package/dist/postgres-permissions.d.ts.map +1 -1
  27. package/dist/postgres-permissions.js +49 -6
  28. package/dist/postgres-permissions.js.map +1 -1
  29. package/dist/prebuild/index.d.ts.map +1 -1
  30. package/dist/prebuild/index.js +4 -3
  31. package/dist/prebuild/index.js.map +1 -1
  32. package/dist/registry/class-registration.d.ts.map +1 -1
  33. package/dist/registry/class-registration.js +3 -1
  34. package/dist/registry/class-registration.js.map +1 -1
  35. package/dist/registry/schema-builder.js +1 -1
  36. package/dist/registry.js +1 -1
  37. package/dist/scanner/manifest-generator.d.ts.map +1 -1
  38. package/dist/scanner/manifest-generator.js +22 -1
  39. package/dist/scanner/manifest-generator.js.map +1 -1
  40. package/dist/schema/foreign-key-ddl.d.ts +18 -0
  41. package/dist/schema/foreign-key-ddl.d.ts.map +1 -1
  42. package/dist/schema/foreign-key-ddl.js +15 -2
  43. package/dist/schema/foreign-key-ddl.js.map +1 -1
  44. package/dist/schema/foreign-key-orphan-report.d.ts +57 -0
  45. package/dist/schema/foreign-key-orphan-report.d.ts.map +1 -0
  46. package/dist/schema/foreign-key-orphan-report.js +142 -0
  47. package/dist/schema/foreign-key-orphan-report.js.map +1 -0
  48. package/dist/schema/index.d.ts +1 -0
  49. package/dist/schema/index.d.ts.map +1 -1
  50. package/dist/schema/index.js +2 -1
  51. package/dist/schema/live-parity.d.ts +8 -1
  52. package/dist/schema/live-parity.d.ts.map +1 -1
  53. package/dist/schema/live-parity.js +98 -2
  54. package/dist/schema/live-parity.js.map +1 -1
  55. package/dist/schema/types.d.ts +11 -1
  56. package/dist/schema/types.d.ts.map +1 -1
  57. package/dist/schema.js +2 -1
  58. package/dist/smrt-knowledge.json +22 -10
  59. package/dist/system/diagnostics.d.ts +299 -0
  60. package/dist/system/diagnostics.d.ts.map +1 -0
  61. package/dist/system/diagnostics.js +530 -0
  62. package/dist/system/diagnostics.js.map +1 -0
  63. package/dist/system/index.d.ts +2 -0
  64. package/dist/system/index.d.ts.map +1 -1
  65. package/dist/system/index.js +3 -1
  66. package/dist/system/registry-snapshot.d.ts +112 -0
  67. package/dist/system/registry-snapshot.d.ts.map +1 -0
  68. package/dist/system/registry-snapshot.js +171 -0
  69. package/dist/system/registry-snapshot.js.map +1 -0
  70. package/dist/testing/database.d.ts.map +1 -1
  71. package/dist/testing/database.js +10 -2
  72. package/dist/testing/database.js.map +1 -1
  73. package/dist/utils/scanner-module.d.ts +16 -0
  74. package/dist/utils/scanner-module.d.ts.map +1 -1
  75. package/dist/vite-plugin/index.d.ts +34 -1
  76. package/dist/vite-plugin/index.d.ts.map +1 -1
  77. package/dist/vite-plugin/index.js +85 -5
  78. package/dist/vite-plugin/index.js.map +1 -1
  79. package/dist/vite-plugin/web-collections.d.ts +6 -0
  80. package/dist/vite-plugin/web-collections.d.ts.map +1 -1
  81. package/dist/vite-plugin/web-collections.js +9 -4
  82. package/dist/vite-plugin/web-collections.js.map +1 -1
  83. package/dist/vite-plugin.js +2 -2
  84. package/package.json +10 -10
@@ -0,0 +1,299 @@
1
+ import { DatabaseInterface } from '@happyvertical/sql';
2
+ import { ChangeFeedEntry } from '../change-feed.js';
3
+ /** Physical `_smrt_*` tables the diagnostics reader knows about. */
4
+ export declare const SYSTEM_DIAGNOSTICS_TABLES: {
5
+ readonly migrations: "_smrt_schema_migrations";
6
+ readonly dispatch: "_smrt_dispatch";
7
+ readonly dispatchSubscriptions: "_smrt_dispatch_subscriptions";
8
+ readonly changes: "_smrt_changes";
9
+ readonly jobs: "_smrt_jobs";
10
+ readonly jobEvents: "_smrt_job_events";
11
+ readonly workers: "_smrt_workers";
12
+ readonly schedules: "_smrt_agent_schedules";
13
+ readonly registry: "_smrt_registry";
14
+ };
15
+ /** Default page size for row-listing categories. */
16
+ export declare const DIAGNOSTICS_DEFAULT_LIMIT = 50;
17
+ /**
18
+ * A category whose table is missing (or whose read failed) on the live
19
+ * database. Callers must surface this as "category unavailable" — never as an
20
+ * empty-but-healthy category and never as a fabricated value.
21
+ */
22
+ export interface CategoryUnavailable {
23
+ available: false;
24
+ reason: 'table-missing' | 'retired' | 'read-error';
25
+ message: string;
26
+ tableName?: string;
27
+ }
28
+ /** Safe projection of one `_smrt_schema_migrations` row. */
29
+ export interface MigrationStatusRow {
30
+ id: string;
31
+ name: string;
32
+ version: string;
33
+ status: string;
34
+ appliedAt: string | null;
35
+ executionTimeMs: number | null;
36
+ attempts: number | null;
37
+ errorMessage: string | null;
38
+ packageName: string | null;
39
+ sourceFile: string | null;
40
+ isReversible: boolean | null;
41
+ rolledBackAt: string | null;
42
+ appliedBy: string | null;
43
+ batch: number | null;
44
+ }
45
+ /**
46
+ * Counts use `MigrationTracker`'s real status vocabulary: `completed`
47
+ * (successfully applied), `running` (in flight), `failed`, and `rolled_back`.
48
+ */
49
+ export interface MigrationStatusSummary {
50
+ total: number;
51
+ byStatus: Record<string, number>;
52
+ completed: number;
53
+ running: number;
54
+ failed: number;
55
+ rolledBack: number;
56
+ }
57
+ export type MigrationStatusResult = {
58
+ available: true;
59
+ summary: MigrationStatusSummary;
60
+ /** Most recently applied migrations, newest first. */
61
+ latest: MigrationStatusRow[];
62
+ /** Failed migrations, newest first. */
63
+ failed: MigrationStatusRow[];
64
+ } | CategoryUnavailable;
65
+ export interface MigrationStatusOptions {
66
+ /** Row budget for `latest`/`failed` lists (default {@link DIAGNOSTICS_DEFAULT_LIMIT}). */
67
+ limit?: number;
68
+ }
69
+ /**
70
+ * Bounded, SELECT-only migration history read.
71
+ *
72
+ * Deliberately does not use `MigrationTracker` — its history helpers run
73
+ * DDL-initializing bootstrap — and reads `_smrt_schema_migrations` directly.
74
+ */
75
+ export declare function readMigrationStatus(db: DatabaseInterface, options?: MigrationStatusOptions): Promise<MigrationStatusResult>;
76
+ /**
77
+ * Safe projection of one `_smrt_jobs` row. Job payload/result columns
78
+ * (`args`, `task_result`, `task_input_requests`, `task_input_responses`,
79
+ * `result_pointer`) are deliberately never selected.
80
+ */
81
+ export interface JobHealthRow {
82
+ id: string;
83
+ tenantId: string | null;
84
+ queue: string;
85
+ objectType: string;
86
+ objectId: string | null;
87
+ method: string;
88
+ status: string;
89
+ attempts: number | null;
90
+ maxAttempts: number | null;
91
+ runAt: string | null;
92
+ startedAt: string | null;
93
+ completedAt: string | null;
94
+ lastError: string | null;
95
+ taskId: string | null;
96
+ taskOwnerId: string | null;
97
+ workerId: string | null;
98
+ workerHeartbeat: string | null;
99
+ }
100
+ /** Safe projection of one `_smrt_workers` row (no sensitive columns). */
101
+ export interface WorkerHealthRow {
102
+ id: string;
103
+ workerId: string;
104
+ pid: number | null;
105
+ hostname: string | null;
106
+ startedAt: string | null;
107
+ heartbeatAt: string | null;
108
+ leaseExpiresAt: string | null;
109
+ status: string;
110
+ }
111
+ export interface JobHealthSummary {
112
+ total: number;
113
+ byStatus: Record<string, number>;
114
+ failed: number;
115
+ /** `running` jobs whose heartbeat is older than the stale threshold. */
116
+ stuck: number;
117
+ /** Total rows in `_smrt_job_events`, or null when that table is missing. */
118
+ eventCount: number | null;
119
+ }
120
+ export type JobHealthResult = {
121
+ available: true;
122
+ summary: JobHealthSummary;
123
+ jobs: JobHealthRow[];
124
+ workers: WorkerHealthRow[];
125
+ } | CategoryUnavailable;
126
+ export interface JobHealthOptions {
127
+ /** Row budget for `jobs` (default {@link DIAGNOSTICS_DEFAULT_LIMIT}). */
128
+ limit?: number;
129
+ /**
130
+ * Heartbeat older than this (ms) marks a `running` job as stuck — unless
131
+ * its owning worker still holds a fresh `_smrt_workers` lease.
132
+ */
133
+ staleAfterMs?: number;
134
+ /** Clock for staleness computations (defaults to `new Date()`). */
135
+ now?: Date;
136
+ }
137
+ /** Read `_smrt_jobs`, `_smrt_workers`, and a `_smrt_job_events` count. */
138
+ export declare function readJobHealth(db: DatabaseInterface, options?: JobHealthOptions): Promise<JobHealthResult>;
139
+ /**
140
+ * Safe projection of one `_smrt_agent_schedules` row. The sensitive
141
+ * `agent_config` and `method_args` columns are never selected.
142
+ */
143
+ export interface ScheduleHealthRow {
144
+ id: string;
145
+ tenantId: string | null;
146
+ agentType: string;
147
+ agentId: string | null;
148
+ cron: string;
149
+ timezone: string;
150
+ enabled: boolean | null;
151
+ status: string;
152
+ lastRun: string | null;
153
+ nextRun: string | null;
154
+ lastStatus: string | null;
155
+ lastError: string | null;
156
+ runCount: number | null;
157
+ successCount: number | null;
158
+ failureCount: number | null;
159
+ maxConcurrent: number | null;
160
+ runningCount: number | null;
161
+ timeout: number | null;
162
+ method: string;
163
+ }
164
+ export interface ScheduleHealthSummary {
165
+ total: number;
166
+ enabled: number;
167
+ active: number;
168
+ errored: number;
169
+ /** Schedules whose last run failed (`last_status = 'failed'`). */
170
+ failed: number;
171
+ /** Enabled, active schedules whose `next_run` is due (<= now). */
172
+ overdue: number;
173
+ }
174
+ export type ScheduleHealthResult = {
175
+ available: true;
176
+ summary: ScheduleHealthSummary;
177
+ schedules: ScheduleHealthRow[];
178
+ } | CategoryUnavailable;
179
+ export interface ScheduleHealthOptions {
180
+ /** Row budget for `schedules` (default {@link DIAGNOSTICS_DEFAULT_LIMIT}). */
181
+ limit?: number;
182
+ /** Clock for overdue computation (defaults to `new Date()`). */
183
+ now?: Date;
184
+ }
185
+ /** Read `_smrt_agent_schedules` (owned by `@happyvertical/smrt-agents`). */
186
+ export declare function readScheduleHealth(db: DatabaseInterface, options?: ScheduleHealthOptions): Promise<ScheduleHealthResult>;
187
+ /**
188
+ * Safe projection of one `_smrt_dispatch` row. The `payload` and `metadata`
189
+ * columns are never selected.
190
+ */
191
+ export interface DispatchHealthRow {
192
+ id: string;
193
+ type: string;
194
+ source: string;
195
+ sourceId: string | null;
196
+ status: string;
197
+ attempts: number | null;
198
+ lastError: string | null;
199
+ processedAt: string | null;
200
+ processedBy: string | null;
201
+ targetSubscriber: string | null;
202
+ correlationId: string | null;
203
+ tenantId: string | null;
204
+ createdAt: string | null;
205
+ updatedAt: string | null;
206
+ }
207
+ /** Safe projection of one `_smrt_dispatch_subscriptions` row. */
208
+ export interface DispatchSubscriptionHealthRow {
209
+ id: string;
210
+ signalType: string;
211
+ subscriber: string;
212
+ handler: string;
213
+ delivery: string;
214
+ enabled: boolean | null;
215
+ tenantId: string | null;
216
+ createdAt: string | null;
217
+ updatedAt: string | null;
218
+ }
219
+ export interface DispatchHealthSummary {
220
+ total: number;
221
+ byStatus: Record<string, number>;
222
+ pending: number;
223
+ processing: number;
224
+ failed: number;
225
+ completed: number;
226
+ subscriptions: number;
227
+ }
228
+ export type DispatchHealthResult = {
229
+ available: true;
230
+ summary: DispatchHealthSummary;
231
+ dispatches: DispatchHealthRow[];
232
+ subscriptions: DispatchSubscriptionHealthRow[];
233
+ } | CategoryUnavailable;
234
+ export interface DispatchHealthOptions {
235
+ /** Row budget for `dispatches`/`subscriptions` (default {@link DIAGNOSTICS_DEFAULT_LIMIT}). */
236
+ limit?: number;
237
+ }
238
+ /** Read `_smrt_dispatch` and `_smrt_dispatch_subscriptions`. */
239
+ export declare function readDispatchHealth(db: DatabaseInterface, options?: DispatchHealthOptions): Promise<DispatchHealthResult>;
240
+ export type RecentChangesResult = {
241
+ available: true;
242
+ changes: ChangeFeedEntry[];
243
+ cursor: number;
244
+ resyncRequired?: boolean;
245
+ resyncCursor?: number;
246
+ count: number;
247
+ } | CategoryUnavailable;
248
+ export interface RecentChangesOptions {
249
+ /** Cursor to read after (default 0). */
250
+ since?: number;
251
+ /** Restrict to these physical table names. */
252
+ tables?: string[];
253
+ /** Tenant narrowing filter (see the change-feed reader's tenant semantics). */
254
+ tenantId?: string | null;
255
+ /** Page size (default 200, capped like the change feed's own limit). */
256
+ limit?: number;
257
+ }
258
+ /**
259
+ * Read the recent change feed via the canonical {@link getChangesSince}
260
+ * reader with `drain: false`, so the PostgreSQL staged-entry drain (a write
261
+ * through `_smrt_drain_changes()`) never runs from a diagnostic. Entries still
262
+ * staged by an open caller transaction stay invisible until a writer drains
263
+ * them. A missing `_smrt_changes` table degrades to category-unavailable.
264
+ */
265
+ export declare function readRecentChanges(db: DatabaseInterface, options?: RecentChangesOptions): Promise<RecentChangesResult>;
266
+ /**
267
+ * `_smrt_registry` is retired: never written since system schema 1.10.1, absent
268
+ * on new databases, and deliberately not dropped by the framework. The
269
+ * diagnostics reader reports the retirement — it never reads registry rows and
270
+ * never fabricates drift; `stillPresent` is a table-existence probe only, so a
271
+ * probe failure reads as absence, which the message keeps non-committal about.
272
+ */
273
+ export interface RegistryDriftResult {
274
+ available: false;
275
+ reason: 'retired';
276
+ message: string;
277
+ tableName: string;
278
+ /** True when a legacy `_smrt_registry` table still exists on this database. */
279
+ stillPresent: boolean;
280
+ }
281
+ export declare function readRegistryDrift(db: DatabaseInterface): Promise<RegistryDriftResult>;
282
+ export interface SystemDiagnosticsOptions {
283
+ migrations?: MigrationStatusOptions;
284
+ jobs?: JobHealthOptions;
285
+ schedules?: ScheduleHealthOptions;
286
+ dispatch?: DispatchHealthOptions;
287
+ changes?: RecentChangesOptions;
288
+ }
289
+ export interface SystemDiagnosticsResult {
290
+ migrations: MigrationStatusResult;
291
+ jobs: JobHealthResult;
292
+ schedules: ScheduleHealthResult;
293
+ dispatch: DispatchHealthResult;
294
+ changes: RecentChangesResult;
295
+ registry: RegistryDriftResult;
296
+ }
297
+ /** Read every diagnostics category in one pass (SELECT-only). */
298
+ export declare function readSystemDiagnostics(db: DatabaseInterface, options?: SystemDiagnosticsOptions): Promise<SystemDiagnosticsResult>;
299
+ //# sourceMappingURL=diagnostics.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diagnostics.d.ts","sourceRoot":"","sources":["../../src/system/diagnostics.ts"],"names":[],"mappings":"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"}