@happyvertical/smrt-core 0.57.31 → 0.57.33

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 (65) hide show
  1. package/README.md +25 -1
  2. package/agents/data-query.md +21 -0
  3. package/dist/browser.d.ts +3 -2
  4. package/dist/browser.d.ts.map +1 -1
  5. package/dist/browser.js +4 -3
  6. package/dist/class.d.ts.map +1 -1
  7. package/dist/class.js +1 -1
  8. package/dist/class.js.map +1 -1
  9. package/dist/consumer-plugin/index.d.ts +2 -2
  10. package/dist/consumer-plugin/index.d.ts.map +1 -1
  11. package/dist/consumer-plugin/index.js.map +1 -1
  12. package/dist/data-query.d.ts +16 -1
  13. package/dist/data-query.d.ts.map +1 -1
  14. package/dist/data-query.js +104 -4
  15. package/dist/data-query.js.map +1 -1
  16. package/dist/db-errors.d.ts +7 -0
  17. package/dist/db-errors.d.ts.map +1 -1
  18. package/dist/db-errors.js +34 -1
  19. package/dist/db-errors.js.map +1 -1
  20. package/dist/dispatch/bus.d.ts +3 -0
  21. package/dist/dispatch/bus.d.ts.map +1 -1
  22. package/dist/dispatch/bus.js +27 -4
  23. package/dist/dispatch/bus.js.map +1 -1
  24. package/dist/dispatch/index.d.ts +1 -1
  25. package/dist/dispatch/index.d.ts.map +1 -1
  26. package/dist/dispatch/types.d.ts +17 -0
  27. package/dist/dispatch/types.d.ts.map +1 -1
  28. package/dist/external-agent-usage.d.ts +90 -0
  29. package/dist/external-agent-usage.d.ts.map +1 -0
  30. package/dist/external-agent-usage.js +272 -0
  31. package/dist/external-agent-usage.js.map +1 -0
  32. package/dist/index.d.ts +3 -2
  33. package/dist/index.d.ts.map +1 -1
  34. package/dist/index.js +4 -3
  35. package/dist/manifest/static-manifest.js +1 -1
  36. package/dist/manifest/static-manifest.js.map +1 -1
  37. package/dist/manifest/store.js +1 -1
  38. package/dist/manifest.json +1 -1
  39. package/dist/smrt-knowledge.json +5 -6
  40. package/dist/system/retention.d.ts.map +1 -1
  41. package/dist/system/retention.js +1 -0
  42. package/dist/system/retention.js.map +1 -1
  43. package/dist/testing/database.d.ts.map +1 -1
  44. package/dist/testing/database.js +18 -0
  45. package/dist/testing/database.js.map +1 -1
  46. package/dist/vite-plugin/asset-url-compatibility.d.ts +2 -2
  47. package/dist/vite-plugin/asset-url-compatibility.d.ts.map +1 -1
  48. package/dist/vite-plugin/asset-url-compatibility.js +13 -3
  49. package/dist/vite-plugin/asset-url-compatibility.js.map +1 -1
  50. package/dist/vite-plugin/index.d.ts +5 -2
  51. package/dist/vite-plugin/index.d.ts.map +1 -1
  52. package/dist/vite-plugin/index.js.map +1 -1
  53. package/dist/vite-plugin/plugin-contract.d.ts +164 -0
  54. package/dist/vite-plugin/plugin-contract.d.ts.map +1 -0
  55. package/dist/vite-plugin/sveltekit-route-coordinator.d.ts +5 -5
  56. package/dist/vite-plugin/sveltekit-route-coordinator.d.ts.map +1 -1
  57. package/dist/vite-plugin/sveltekit-route-coordinator.js.map +1 -1
  58. package/dist/vite-plugin/worker-registration.d.ts +4 -4
  59. package/dist/vite-plugin/worker-registration.d.ts.map +1 -1
  60. package/dist/vite-plugin/worker-registration.js.map +1 -1
  61. package/dist/vite-preset/index.d.ts +2 -2
  62. package/dist/vite-preset/index.d.ts.map +1 -1
  63. package/dist/vite-preset/index.js +9 -1
  64. package/dist/vite-preset/index.js.map +1 -1
  65. package/package.json +4 -5
@@ -0,0 +1,272 @@
1
+ import { isEmbeddedDatabase, withEmbeddedWriteTransaction } from "./embedded-write-queue.js";
2
+ import { sha256Hex } from "./utils/sha256.js";
3
+ //#region src/external-agent-usage.ts
4
+ var EXTERNAL_AGENT_USAGE_OPERATION = "external-agent";
5
+ var EXTERNAL_AGENT_COUNTERS = [
6
+ "inputTokens",
7
+ "outputTokens",
8
+ "totalTokens",
9
+ "cacheReadTokens",
10
+ "cacheWriteTokens",
11
+ "reasoningTokens"
12
+ ];
13
+ var ExternalAgentUsageError = class extends Error {
14
+ code;
15
+ constructor(code, message) {
16
+ super(`External agent usage: ${message}`);
17
+ this.code = code;
18
+ this.name = "ExternalAgentUsageError";
19
+ }
20
+ };
21
+ function reject(message, code = "invalid_input") {
22
+ throw new ExternalAgentUsageError(code, message);
23
+ }
24
+ function object(value, keys) {
25
+ if (!value || typeof value !== "object" || Object.getPrototypeOf(value) !== Object.prototype && Object.getPrototypeOf(value) !== null || Array.isArray(value) || Object.keys(value).some((key) => !keys.includes(key))) reject("invalid fields");
26
+ }
27
+ function text(value) {
28
+ if (typeof value !== "string" || !value.trim() || value.length > 256 || [...value].some((character) => character.charCodeAt(0) < 32)) reject("invalid identifier");
29
+ }
30
+ function integer(value) {
31
+ if (!Number.isSafeInteger(value) || value < 0) reject("invalid counter or sequence");
32
+ }
33
+ var bindingKeys = [
34
+ "tenantId",
35
+ "workspaceId",
36
+ "projectId",
37
+ "taskId",
38
+ "sessionId",
39
+ "parentSessionId",
40
+ "role"
41
+ ];
42
+ function binding(value) {
43
+ object(value, bindingKeys);
44
+ const result = {};
45
+ for (const key of bindingKeys) {
46
+ const field = value[key];
47
+ if (key === "parentSessionId" && field === void 0) continue;
48
+ text(field);
49
+ result[key] = field;
50
+ }
51
+ if (result.sessionId === result.parentSessionId) reject("self parent");
52
+ return result;
53
+ }
54
+ /** Validate and copy only the public structured contract; arbitrary tags are refused. */
55
+ function normalizeExternalAgentUsageReport(value) {
56
+ object(value, [
57
+ "version",
58
+ "binding",
59
+ "provider",
60
+ "model",
61
+ "provenance",
62
+ "observedAt",
63
+ "sequence",
64
+ "epoch",
65
+ "basis",
66
+ "baseline",
67
+ "scope",
68
+ "inputIncludesCache",
69
+ "outputIncludesReasoning",
70
+ "counters"
71
+ ]);
72
+ if (value.version !== 1 || value.scope !== "exclusive" || !["delta", "cumulative"].includes(value.basis) || !["zero", "unknown"].includes(value.baseline)) reject("unsupported measurement contract");
73
+ text(value.provider);
74
+ text(value.model);
75
+ text(value.observedAt);
76
+ if (!Number.isFinite(Date.parse(value.observedAt))) reject("invalid timestamp");
77
+ integer(value.sequence);
78
+ integer(value.epoch);
79
+ if (typeof value.inputIncludesCache !== "boolean" || typeof value.outputIncludesReasoning !== "boolean") reject("missing component semantics");
80
+ object(value.provenance, [
81
+ "harness",
82
+ "source",
83
+ "eventId"
84
+ ]);
85
+ text(value.provenance.harness);
86
+ text(value.provenance.source);
87
+ text(value.provenance.eventId);
88
+ object(value.counters, [...EXTERNAL_AGENT_COUNTERS]);
89
+ const counters = {};
90
+ for (const key of EXTERNAL_AGENT_COUNTERS) {
91
+ const count = value.counters[key];
92
+ if (count !== void 0 && count !== null) integer(count);
93
+ counters[key] = count ?? null;
94
+ }
95
+ if (value.inputIncludesCache && counters.inputTokens != null) {
96
+ const components = (counters.cacheReadTokens ?? 0) + (counters.cacheWriteTokens ?? 0);
97
+ if (!Number.isSafeInteger(components) || components > counters.inputTokens) reject("cache exceeds inclusive input");
98
+ }
99
+ if (value.outputIncludesReasoning && counters.outputTokens != null && (counters.reasoningTokens ?? 0) > counters.outputTokens) reject("reasoning exceeds inclusive output");
100
+ return {
101
+ version: 1,
102
+ binding: binding(value.binding),
103
+ provider: value.provider,
104
+ model: value.model,
105
+ provenance: {
106
+ harness: value.provenance.harness,
107
+ source: value.provenance.source,
108
+ eventId: value.provenance.eventId
109
+ },
110
+ observedAt: new Date(value.observedAt).toISOString(),
111
+ sequence: value.sequence,
112
+ epoch: value.epoch,
113
+ basis: value.basis,
114
+ baseline: value.baseline,
115
+ scope: "exclusive",
116
+ inputIncludesCache: value.inputIncludesCache,
117
+ outputIncludesReasoning: value.outputIncludesReasoning,
118
+ counters
119
+ };
120
+ }
121
+ function streamId(scope) {
122
+ return `external-agent:${sha256Hex(JSON.stringify([scope.tenantId, scope.sessionId]))}`;
123
+ }
124
+ function rowId(scope, sequence) {
125
+ return `${streamId(scope)}:${sequence}`;
126
+ }
127
+ async function read(db, scope, sequence) {
128
+ const row = await db.get("_smrt_ai_usage", {
129
+ id: rowId(scope, sequence),
130
+ tenant_id: scope.tenantId,
131
+ operation: EXTERNAL_AGENT_USAGE_OPERATION
132
+ });
133
+ if (!row) return null;
134
+ return JSON.parse(String(row.tags));
135
+ }
136
+ function same(a, b) {
137
+ return JSON.stringify(a) === JSON.stringify(b);
138
+ }
139
+ /**
140
+ * Recorder accepts a trusted scope separately from an untrusted report. Caller
141
+ * authorizes scope ownership before construction. No ambient tenant inference.
142
+ * Existing system tables must be bootstrapped before opening a transaction.
143
+ */
144
+ var ExternalAgentUsageRecorder = class {
145
+ db;
146
+ binding;
147
+ reporter;
148
+ constructor(db, trustedBinding, reporter) {
149
+ this.db = db;
150
+ this.binding = binding(trustedBinding);
151
+ if (reporter !== void 0) {
152
+ object(reporter, ["reporterId", "reporterType"]);
153
+ text(reporter.reporterId);
154
+ if (!["agent", "user"].includes(reporter.reporterType)) reject("invalid reporter type");
155
+ this.reporter = {
156
+ reporterId: reporter.reporterId,
157
+ reporterType: reporter.reporterType
158
+ };
159
+ }
160
+ }
161
+ async record(input) {
162
+ const report = normalizeExternalAgentUsageReport(input);
163
+ if (!same(report.binding, this.binding)) reject("ownership binding mismatch");
164
+ return withEmbeddedWriteTransaction(this.db, isEmbeddedDatabase(this.db), async (tx) => {
165
+ const existing = await read(tx, this.binding, report.sequence);
166
+ if (existing) {
167
+ if (!same(existing.report, report)) reject("conflicting replay", "conflict");
168
+ return existing;
169
+ }
170
+ const previous = report.sequence === 0 ? null : await read(tx, this.binding, report.sequence - 1);
171
+ if (report.sequence === 0 ? report.epoch !== 0 : !previous) reject("out of order sequence", "conflict");
172
+ let snapshots = [];
173
+ if (previous) {
174
+ const last = previous.report;
175
+ if (!same(last.binding, report.binding) || last.provider !== report.provider || last.model !== report.model || last.basis !== report.basis || last.inputIncludesCache !== report.inputIncludesCache || last.outputIncludesReasoning !== report.outputIncludesReasoning || last.provenance.harness !== report.provenance.harness || last.provenance.source !== report.provenance.source) reject("stream attribution changed", "conflict");
176
+ if (report.epoch !== last.epoch && report.epoch !== last.epoch + 1) reject("invalid reset epoch", "conflict");
177
+ if (report.epoch === last.epoch && report.baseline !== last.baseline) reject("baseline changed without reset", "conflict");
178
+ if (Date.parse(report.observedAt) < Date.parse(last.observedAt)) reject("timestamp reordered", "conflict");
179
+ snapshots = (await tx.query("SELECT tags FROM _smrt_ai_usage WHERE tenant_id = ? AND class_name = ? AND operation = 'external-agent' AND id LIKE 'external-agent:%'", this.binding.tenantId, streamId(this.binding))).rows.map((row) => JSON.parse(String(row.tags)));
180
+ if (snapshots.some((row) => row.report.sequence !== report.sequence && row.report.provenance.eventId === report.provenance.eventId)) reject("event already recorded", "conflict");
181
+ }
182
+ const delta = {};
183
+ for (const key of EXTERNAL_AGENT_COUNTERS) {
184
+ const current = report.counters[key] ?? null;
185
+ const last = previous?.report;
186
+ const before = last?.counters[key] ?? null;
187
+ if (report.basis === "cumulative" && current !== null) {
188
+ const latestKnown = snapshots.reduce((latest, row) => row.report.epoch === report.epoch && row.report.sequence < report.sequence && row.report.counters[key] != null && (!latest || row.report.sequence > latest.report.sequence) ? row : latest, void 0);
189
+ if (latestKnown && current < latestKnown.report.counters[key]) reject("counter decreased without reset", "conflict");
190
+ }
191
+ if (report.basis === "delta") delta[key] = current;
192
+ else if (!last || report.epoch !== last.epoch) delta[key] = report.baseline === "zero" ? current : null;
193
+ else delta[key] = current !== null && before !== null ? current - before : null;
194
+ }
195
+ const receipt = {
196
+ id: rowId(this.binding, report.sequence),
197
+ report,
198
+ delta,
199
+ ...this.reporter ? { reporter: { ...this.reporter } } : {}
200
+ };
201
+ if ((await tx.query(`INSERT INTO _smrt_ai_usage (id,provider,model,operation,prompt_tokens,completion_tokens,total_tokens,estimated_cost,duration,class_name,tenant_id,tags,created_at) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?) ON CONFLICT (id) DO NOTHING RETURNING id`, receipt.id, report.provider, report.model, "external-agent", delta.inputTokens, delta.outputTokens, delta.totalTokens, null, 0, streamId(this.binding), this.binding.tenantId, JSON.stringify(receipt), report.observedAt)).rows.length) return receipt;
202
+ const winner = await read(tx, this.binding, report.sequence);
203
+ if (!winner || !same(winner.report, report)) reject("conflicting concurrent replay", "conflict");
204
+ return winner;
205
+ }, true);
206
+ }
207
+ /** Safe per-session projection; never estimates cost or coalesces unknown to zero. */
208
+ async summarize() {
209
+ const receipts = (await this.db.query("SELECT tags FROM _smrt_ai_usage WHERE tenant_id = ? AND class_name = ? AND operation = ? AND id LIKE 'external-agent:%'", this.binding.tenantId, streamId(this.binding), EXTERNAL_AGENT_USAGE_OPERATION)).rows.map((row) => JSON.parse(String(row.tags))).sort((a, b) => a.report.sequence - b.report.sequence);
210
+ if (receipts.some((row) => !same(row.report.binding, this.binding))) reject("ownership binding mismatch");
211
+ const counters = {};
212
+ for (const key of EXTERNAL_AGENT_COUNTERS) {
213
+ let total = receipts.length ? 0 : null;
214
+ for (const row of receipts) {
215
+ const count = row.delta[key];
216
+ if (count === null || total === null) total = null;
217
+ else {
218
+ total += count;
219
+ if (!Number.isSafeInteger(total)) reject("summary exceeds safe integer");
220
+ }
221
+ }
222
+ counters[key] = total;
223
+ }
224
+ const coverage = {};
225
+ for (const key of EXTERNAL_AGENT_COUNTERS) {
226
+ const knownReports = receipts.filter((row) => row.delta[key] !== null).length;
227
+ coverage[key] = {
228
+ knownReports,
229
+ unknownReports: receipts.length - knownReports
230
+ };
231
+ }
232
+ return {
233
+ binding: { ...this.binding },
234
+ source: "external-agent",
235
+ reports: receipts.length,
236
+ latest: receipts.at(-1)?.report ?? null,
237
+ counters,
238
+ complete: EXTERNAL_AGENT_COUNTERS.every((key) => counters[key] !== null),
239
+ coverage
240
+ };
241
+ }
242
+ };
243
+ /** Per-session summaries only: inclusive parent totals are never added to children. */
244
+ async function summarizeExternalAgentUsage(db, scope) {
245
+ object(scope, [
246
+ "tenantId",
247
+ "workspaceId",
248
+ "projectId",
249
+ "taskId",
250
+ "sessionId"
251
+ ]);
252
+ text(scope.tenantId);
253
+ text(scope.workspaceId);
254
+ text(scope.projectId);
255
+ if (scope.taskId !== void 0) text(scope.taskId);
256
+ if (scope.sessionId !== void 0) text(scope.sessionId);
257
+ const result = await db.query("SELECT tags FROM _smrt_ai_usage WHERE tenant_id = ? AND operation = ? AND id LIKE 'external-agent:%'", scope.tenantId, EXTERNAL_AGENT_USAGE_OPERATION);
258
+ const sessions = /* @__PURE__ */ new Map();
259
+ for (const row of result.rows) {
260
+ const candidate = JSON.parse(String(row.tags)).report.binding;
261
+ if (candidate.tenantId !== scope.tenantId) reject("persisted tenant binding mismatch");
262
+ if (candidate.workspaceId !== scope.workspaceId || candidate.projectId !== scope.projectId || scope.taskId !== void 0 && candidate.taskId !== scope.taskId || scope.sessionId !== void 0 && candidate.sessionId !== scope.sessionId) continue;
263
+ sessions.set(candidate.sessionId, candidate);
264
+ }
265
+ const summaries = [];
266
+ for (const candidate of sessions.values()) summaries.push(await new ExternalAgentUsageRecorder(db, candidate).summarize());
267
+ return summaries;
268
+ }
269
+ //#endregion
270
+ export { EXTERNAL_AGENT_COUNTERS, EXTERNAL_AGENT_USAGE_OPERATION, ExternalAgentUsageError, ExternalAgentUsageRecorder, normalizeExternalAgentUsageReport, summarizeExternalAgentUsage };
271
+
272
+ //# sourceMappingURL=external-agent-usage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"external-agent-usage.js","names":[],"sources":["../src/external-agent-usage.ts"],"sourcesContent":["/** Provider-measured external usage, separate from hosted AI billing. */\nimport type { DatabaseInterface } from '@happyvertical/sql';\nimport {\n isEmbeddedDatabase,\n withEmbeddedWriteTransaction,\n} from './embedded-write-queue.js';\nimport { sha256Hex } from './utils/sha256.js';\n\nexport const EXTERNAL_AGENT_USAGE_OPERATION = 'external-agent';\nexport const EXTERNAL_AGENT_COUNTERS = [\n 'inputTokens',\n 'outputTokens',\n 'totalTokens',\n 'cacheReadTokens',\n 'cacheWriteTokens',\n 'reasoningTokens',\n] as const;\nexport type ExternalAgentCounter = (typeof EXTERNAL_AGENT_COUNTERS)[number];\nexport type ExternalAgentCounters = Partial<\n Record<ExternalAgentCounter, number | null>\n>;\n/** Trusted ownership binding supplied by the authenticated application. */\nexport interface ExternalAgentUsageBinding {\n tenantId: string;\n workspaceId: string;\n projectId: string;\n taskId: string;\n sessionId: string;\n parentSessionId?: string;\n role: string;\n}\nexport interface ExternalAgentUsageReport {\n version: 1;\n binding: ExternalAgentUsageBinding;\n provider: string;\n model: string;\n provenance: { harness: string; source: string; eventId: string };\n observedAt: string;\n sequence: number;\n epoch: number;\n basis: 'delta' | 'cumulative';\n /** First cumulative snapshot of each epoch: known zero origin or unknown baseline. */\n baseline: 'zero' | 'unknown';\n scope: 'exclusive';\n inputIncludesCache: boolean;\n outputIncludesReasoning: boolean;\n counters: ExternalAgentCounters;\n}\nexport interface ExternalAgentUsageReporter {\n reporterId: string;\n reporterType: 'agent' | 'user';\n}\nexport interface ExternalAgentUsageReceipt {\n reporter?: ExternalAgentUsageReporter;\n id: string;\n report: ExternalAgentUsageReport;\n delta: Record<ExternalAgentCounter, number | null>;\n}\nexport interface ExternalAgentUsageSummary {\n binding: ExternalAgentUsageBinding;\n source: 'external-agent';\n reports: number;\n latest: ExternalAgentUsageReport | null;\n counters: Record<ExternalAgentCounter, number | null>;\n complete: boolean;\n coverage: Record<\n ExternalAgentCounter,\n { knownReports: number; unknownReports: number }\n >;\n}\nexport class ExternalAgentUsageError extends Error {\n constructor(\n readonly code: 'invalid_input' | 'conflict',\n message: string,\n ) {\n super(`External agent usage: ${message}`);\n this.name = 'ExternalAgentUsageError';\n }\n}\nfunction reject(\n message: string,\n code: 'invalid_input' | 'conflict' = 'invalid_input',\n): never {\n throw new ExternalAgentUsageError(code, message);\n}\nfunction object(\n value: unknown,\n keys: string[],\n): asserts value is Record<string, unknown> {\n if (\n !value ||\n typeof value !== 'object' ||\n (Object.getPrototypeOf(value) !== Object.prototype &&\n Object.getPrototypeOf(value) !== null) ||\n Array.isArray(value) ||\n Object.keys(value).some((key) => !keys.includes(key))\n )\n reject('invalid fields');\n}\nfunction text(value: unknown): asserts value is string {\n if (\n typeof value !== 'string' ||\n !value.trim() ||\n value.length > 256 ||\n [...value].some((character) => character.charCodeAt(0) < 32)\n )\n reject('invalid identifier');\n}\nfunction integer(value: unknown): asserts value is number {\n if (!Number.isSafeInteger(value) || (value as number) < 0)\n reject('invalid counter or sequence');\n}\nconst bindingKeys = [\n 'tenantId',\n 'workspaceId',\n 'projectId',\n 'taskId',\n 'sessionId',\n 'parentSessionId',\n 'role',\n];\nfunction binding(value: ExternalAgentUsageBinding): ExternalAgentUsageBinding {\n object(value, bindingKeys);\n const result: Record<string, string> = {};\n for (const key of bindingKeys) {\n const field = value[key as keyof ExternalAgentUsageBinding];\n if (key === 'parentSessionId' && field === undefined) continue;\n text(field);\n result[key] = field;\n }\n if (result.sessionId === result.parentSessionId) reject('self parent');\n return result as unknown as ExternalAgentUsageBinding;\n}\n/** Validate and copy only the public structured contract; arbitrary tags are refused. */\nexport function normalizeExternalAgentUsageReport(\n value: ExternalAgentUsageReport,\n): ExternalAgentUsageReport {\n object(value, [\n 'version',\n 'binding',\n 'provider',\n 'model',\n 'provenance',\n 'observedAt',\n 'sequence',\n 'epoch',\n 'basis',\n 'baseline',\n 'scope',\n 'inputIncludesCache',\n 'outputIncludesReasoning',\n 'counters',\n ]);\n if (\n value.version !== 1 ||\n value.scope !== 'exclusive' ||\n !['delta', 'cumulative'].includes(value.basis) ||\n !['zero', 'unknown'].includes(value.baseline)\n )\n reject('unsupported measurement contract');\n text(value.provider);\n text(value.model);\n text(value.observedAt);\n if (!Number.isFinite(Date.parse(value.observedAt)))\n reject('invalid timestamp');\n integer(value.sequence);\n integer(value.epoch);\n if (\n typeof value.inputIncludesCache !== 'boolean' ||\n typeof value.outputIncludesReasoning !== 'boolean'\n )\n reject('missing component semantics');\n object(value.provenance, ['harness', 'source', 'eventId']);\n text(value.provenance.harness);\n text(value.provenance.source);\n text(value.provenance.eventId);\n object(value.counters, [...EXTERNAL_AGENT_COUNTERS]);\n const counters: ExternalAgentCounters = {};\n for (const key of EXTERNAL_AGENT_COUNTERS) {\n const count = value.counters[key];\n if (count !== undefined && count !== null) integer(count);\n counters[key] = count ?? null;\n }\n if (value.inputIncludesCache && counters.inputTokens != null) {\n const components =\n (counters.cacheReadTokens ?? 0) + (counters.cacheWriteTokens ?? 0);\n if (!Number.isSafeInteger(components) || components > counters.inputTokens)\n reject('cache exceeds inclusive input');\n }\n if (\n value.outputIncludesReasoning &&\n counters.outputTokens != null &&\n (counters.reasoningTokens ?? 0) > counters.outputTokens\n )\n reject('reasoning exceeds inclusive output');\n return {\n version: 1,\n binding: binding(value.binding),\n provider: value.provider,\n model: value.model,\n provenance: {\n harness: value.provenance.harness,\n source: value.provenance.source,\n eventId: value.provenance.eventId,\n },\n observedAt: new Date(value.observedAt).toISOString(),\n sequence: value.sequence,\n epoch: value.epoch,\n basis: value.basis,\n baseline: value.baseline,\n scope: 'exclusive',\n inputIncludesCache: value.inputIncludesCache,\n outputIncludesReasoning: value.outputIncludesReasoning,\n counters,\n };\n}\nfunction streamId(scope: ExternalAgentUsageBinding): string {\n // A session has one binding, including across project reassignment attempts.\n return `external-agent:${sha256Hex(JSON.stringify([scope.tenantId, scope.sessionId]))}`;\n}\nfunction rowId(scope: ExternalAgentUsageBinding, sequence: number): string {\n return `${streamId(scope)}:${sequence}`;\n}\nasync function read(\n db: DatabaseInterface,\n scope: ExternalAgentUsageBinding,\n sequence: number,\n): Promise<ExternalAgentUsageReceipt | null> {\n const row = await db.get('_smrt_ai_usage', {\n id: rowId(scope, sequence),\n tenant_id: scope.tenantId,\n operation: EXTERNAL_AGENT_USAGE_OPERATION,\n });\n if (!row) return null;\n return JSON.parse(String(row.tags)) as ExternalAgentUsageReceipt;\n}\nfunction same(a: unknown, b: unknown): boolean {\n return JSON.stringify(a) === JSON.stringify(b);\n}\n/**\n * Recorder accepts a trusted scope separately from an untrusted report. Caller\n * authorizes scope ownership before construction. No ambient tenant inference.\n * Existing system tables must be bootstrapped before opening a transaction.\n */\nexport class ExternalAgentUsageRecorder {\n private readonly binding: ExternalAgentUsageBinding;\n private readonly reporter?: ExternalAgentUsageReporter;\n constructor(\n private readonly db: DatabaseInterface,\n trustedBinding: ExternalAgentUsageBinding,\n reporter?: ExternalAgentUsageReporter,\n ) {\n this.binding = binding(trustedBinding);\n if (reporter !== undefined) {\n object(reporter, ['reporterId', 'reporterType']);\n text(reporter.reporterId);\n if (!['agent', 'user'].includes(reporter.reporterType))\n reject('invalid reporter type');\n this.reporter = {\n reporterId: reporter.reporterId,\n reporterType: reporter.reporterType,\n };\n }\n }\n async record(\n input: ExternalAgentUsageReport,\n ): Promise<ExternalAgentUsageReceipt> {\n const report = normalizeExternalAgentUsageReport(input);\n if (!same(report.binding, this.binding))\n reject('ownership binding mismatch');\n return withEmbeddedWriteTransaction(\n this.db,\n isEmbeddedDatabase(this.db),\n async (tx) => {\n const existing = await read(tx, this.binding, report.sequence);\n if (existing) {\n if (!same(existing.report, report))\n reject('conflicting replay', 'conflict');\n return existing;\n }\n const previous =\n report.sequence === 0\n ? null\n : await read(tx, this.binding, report.sequence - 1);\n if (report.sequence === 0 ? report.epoch !== 0 : !previous)\n reject('out of order sequence', 'conflict');\n let snapshots: ExternalAgentUsageReceipt[] = [];\n if (previous) {\n const last = previous.report;\n if (\n !same(last.binding, report.binding) ||\n last.provider !== report.provider ||\n last.model !== report.model ||\n last.basis !== report.basis ||\n last.inputIncludesCache !== report.inputIncludesCache ||\n last.outputIncludesReasoning !== report.outputIncludesReasoning ||\n last.provenance.harness !== report.provenance.harness ||\n last.provenance.source !== report.provenance.source\n )\n reject('stream attribution changed', 'conflict');\n if (report.epoch !== last.epoch && report.epoch !== last.epoch + 1)\n reject('invalid reset epoch', 'conflict');\n if (report.epoch === last.epoch && report.baseline !== last.baseline)\n reject('baseline changed without reset', 'conflict');\n if (Date.parse(report.observedAt) < Date.parse(last.observedAt))\n reject('timestamp reordered', 'conflict');\n // A provider event is unique within its stream, even at another sequence.\n const candidates = await tx.query(\n \"SELECT tags FROM _smrt_ai_usage WHERE tenant_id = ? AND class_name = ? AND operation = 'external-agent' AND id LIKE 'external-agent:%'\",\n this.binding.tenantId,\n streamId(this.binding),\n );\n snapshots = candidates.rows.map(\n (row) => JSON.parse(String(row.tags)) as ExternalAgentUsageReceipt,\n );\n if (\n snapshots.some(\n (row) =>\n row.report.sequence !== report.sequence &&\n row.report.provenance.eventId === report.provenance.eventId,\n )\n )\n reject('event already recorded', 'conflict');\n }\n const delta = {} as Record<ExternalAgentCounter, number | null>;\n for (const key of EXTERNAL_AGENT_COUNTERS) {\n const current = report.counters[key] ?? null;\n const last = previous?.report;\n const before = last?.counters[key] ?? null;\n if (report.basis === 'cumulative' && current !== null) {\n const latestKnown = snapshots.reduce<\n ExternalAgentUsageReceipt | undefined\n >(\n (latest, row) =>\n row.report.epoch === report.epoch &&\n row.report.sequence < report.sequence &&\n row.report.counters[key] != null &&\n (!latest || row.report.sequence > latest.report.sequence)\n ? row\n : latest,\n undefined,\n );\n if (\n latestKnown &&\n current < (latestKnown.report.counters[key] as number)\n )\n reject('counter decreased without reset', 'conflict');\n }\n if (report.basis === 'delta') delta[key] = current;\n else if (!last || report.epoch !== last.epoch)\n delta[key] = report.baseline === 'zero' ? current : null;\n else {\n delta[key] =\n current !== null && before !== null ? current - before : null;\n }\n }\n const receipt: ExternalAgentUsageReceipt = {\n id: rowId(this.binding, report.sequence),\n report,\n delta,\n ...(this.reporter ? { reporter: { ...this.reporter } } : {}),\n };\n const won = await tx.query(\n `INSERT INTO _smrt_ai_usage (id,provider,model,operation,prompt_tokens,completion_tokens,total_tokens,estimated_cost,duration,class_name,tenant_id,tags,created_at) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?) ON CONFLICT (id) DO NOTHING RETURNING id`,\n receipt.id,\n report.provider,\n report.model,\n EXTERNAL_AGENT_USAGE_OPERATION,\n delta.inputTokens,\n delta.outputTokens,\n delta.totalTokens,\n null,\n 0,\n streamId(this.binding),\n this.binding.tenantId,\n JSON.stringify(receipt),\n report.observedAt,\n );\n if (won.rows.length) return receipt;\n const winner = await read(tx, this.binding, report.sequence);\n if (!winner || !same(winner.report, report))\n reject('conflicting concurrent replay', 'conflict');\n return winner;\n },\n true,\n );\n }\n /** Safe per-session projection; never estimates cost or coalesces unknown to zero. */\n async summarize(): Promise<ExternalAgentUsageSummary> {\n const result = await this.db.query(\n \"SELECT tags FROM _smrt_ai_usage WHERE tenant_id = ? AND class_name = ? AND operation = ? AND id LIKE 'external-agent:%'\",\n this.binding.tenantId,\n streamId(this.binding),\n EXTERNAL_AGENT_USAGE_OPERATION,\n );\n const receipts = result.rows\n .map((row) => JSON.parse(String(row.tags)) as ExternalAgentUsageReceipt)\n .sort((a, b) => a.report.sequence - b.report.sequence);\n if (receipts.some((row) => !same(row.report.binding, this.binding)))\n reject('ownership binding mismatch');\n const counters = {} as Record<ExternalAgentCounter, number | null>;\n for (const key of EXTERNAL_AGENT_COUNTERS) {\n let total: number | null = receipts.length ? 0 : null;\n for (const row of receipts) {\n const count = row.delta[key];\n if (count === null || total === null) total = null;\n else {\n total += count;\n if (!Number.isSafeInteger(total))\n reject('summary exceeds safe integer');\n }\n }\n counters[key] = total;\n }\n const coverage = {} as ExternalAgentUsageSummary['coverage'];\n for (const key of EXTERNAL_AGENT_COUNTERS) {\n const knownReports = receipts.filter(\n (row) => row.delta[key] !== null,\n ).length;\n coverage[key] = {\n knownReports,\n unknownReports: receipts.length - knownReports,\n };\n }\n return {\n binding: { ...this.binding },\n source: 'external-agent',\n reports: receipts.length,\n latest: receipts.at(-1)?.report ?? null,\n counters,\n complete: EXTERNAL_AGENT_COUNTERS.every((key) => counters[key] !== null),\n coverage,\n };\n }\n}\n\n/** Trusted project ownership scope, authorized by the application before reading. */\nexport interface ExternalAgentUsageQuery {\n tenantId: string;\n workspaceId: string;\n projectId: string;\n taskId?: string;\n sessionId?: string;\n}\n/** Per-session summaries only: inclusive parent totals are never added to children. */\nexport async function summarizeExternalAgentUsage(\n db: DatabaseInterface,\n scope: ExternalAgentUsageQuery,\n): Promise<ExternalAgentUsageSummary[]> {\n object(scope, [\n 'tenantId',\n 'workspaceId',\n 'projectId',\n 'taskId',\n 'sessionId',\n ]);\n text(scope.tenantId);\n text(scope.workspaceId);\n text(scope.projectId);\n if (scope.taskId !== undefined) text(scope.taskId);\n if (scope.sessionId !== undefined) text(scope.sessionId);\n const result = await db.query(\n \"SELECT tags FROM _smrt_ai_usage WHERE tenant_id = ? AND operation = ? AND id LIKE 'external-agent:%'\",\n scope.tenantId,\n EXTERNAL_AGENT_USAGE_OPERATION,\n );\n const sessions = new Map<string, ExternalAgentUsageBinding>();\n for (const row of result.rows) {\n const receipt = JSON.parse(String(row.tags)) as ExternalAgentUsageReceipt;\n const candidate = receipt.report.binding;\n if (candidate.tenantId !== scope.tenantId)\n reject('persisted tenant binding mismatch');\n if (\n candidate.workspaceId !== scope.workspaceId ||\n candidate.projectId !== scope.projectId ||\n (scope.taskId !== undefined && candidate.taskId !== scope.taskId) ||\n (scope.sessionId !== undefined && candidate.sessionId !== scope.sessionId)\n )\n continue;\n sessions.set(candidate.sessionId, candidate);\n }\n const summaries: ExternalAgentUsageSummary[] = [];\n for (const candidate of sessions.values())\n summaries.push(\n await new ExternalAgentUsageRecorder(db, candidate).summarize(),\n );\n return summaries;\n}\n"],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -31,9 +31,9 @@ export { broadcastCacheInvalidation, CACHE_INVALIDATION_CHANNEL, type Collection
31
31
  export * from "./collection-read-plan.js";
32
32
  export type { AiUsageConfig, GlobalSignalConfig, MetricsConfig, PubSubConfig, } from "./config.js";
33
33
  export { config } from "./config.js";
34
- export { canonicalizeDataQuery, createDataQueryFingerprint, DataQueryValidationError, DEFAULT_DATA_QUERY_PAGE_LIMIT, DEFAULT_DATA_QUERY_RESULT_BYTES, MAX_DATA_QUERY_CURSOR_LENGTH, MAX_DATA_QUERY_FACETS, MAX_DATA_QUERY_FILTER_DEPTH, MAX_DATA_QUERY_FILTERS, MAX_DATA_QUERY_IN_VALUES, MAX_DATA_QUERY_OFFSET, MAX_DATA_QUERY_PAGE_LIMIT, MAX_DATA_QUERY_REQUEST_BYTES, MAX_DATA_QUERY_RESULT_BYTES, MAX_DATA_QUERY_WARNINGS, normalizeDataQueryRequest, normalizeDataQueryResult, normalizeDataQuerySchema, } from "./data-query.js";
34
+ export { canonicalizeDataQuery, createDataQueryFingerprint, DataQueryValidationError, DEFAULT_DATA_QUERY_PAGE_LIMIT, DEFAULT_DATA_QUERY_RESULT_BYTES, MAX_DATA_QUERY_CURSOR_LENGTH, MAX_DATA_QUERY_FACETS, MAX_DATA_QUERY_FIELD_VALUE_DESCRIPTION_LENGTH, MAX_DATA_QUERY_FIELD_VALUE_LABEL_LENGTH, MAX_DATA_QUERY_FIELD_VALUE_LENGTH, MAX_DATA_QUERY_FIELD_VALUES, MAX_DATA_QUERY_FILTER_DEPTH, MAX_DATA_QUERY_FILTERS, MAX_DATA_QUERY_IN_VALUES, MAX_DATA_QUERY_OFFSET, MAX_DATA_QUERY_PAGE_LIMIT, MAX_DATA_QUERY_REQUEST_BYTES, MAX_DATA_QUERY_RESULT_BYTES, MAX_DATA_QUERY_WARNINGS, normalizeDataQueryFieldValues, normalizeDataQueryRequest, normalizeDataQueryResult, normalizeDataQuerySchema, } from "./data-query.js";
35
35
  export { type DatabaseConfig, isDatabaseInterface, type ResolveDatabaseOptions, resolveDatabase, } from "./database.js";
36
- export { classifyDatabaseError, classifyDialectMessage, type DatabaseErrorClassification, type DatabaseErrorKind, isAbortedTransactionError, isDeterministicDatabaseError, isNotNullViolationError, isTransientDatabaseError, isUniqueViolationError, } from "./db-errors.js";
36
+ export { classifyDatabaseError, classifyDialectMessage, type DatabaseErrorClassification, type DatabaseErrorKind, isAbortedTransactionError, isDeterministicDatabaseError, isNotNullViolationError, isTransientConnectionError, isTransientDatabaseError, isUniqueViolationError, } from "./db-errors.js";
37
37
  export type { DecisionAnswer, DecisionClient, DecisionConfig, DecisionOptions, DecisionQuestion, DecisionRequest, DecisionResult, DecisionValue, EvaluateOptions, EvaluationResult, } from "./decisions.js";
38
38
  export { executeDecision } from "./decisions.js";
39
39
  export { applyPendingDecoratorRegistrations, type CompatibleMethodDecorator, type CompatibleMethodDecoratorContext, type CompatiblePropertyDecorator, type CompatiblePropertyDecoratorContext, type LegacyPropertyDecoratorTarget, registerCompatibleFieldDecorator, registerCompatibleMethodDecorator, } from "./decorators/compatibility.js";
@@ -42,6 +42,7 @@ export * from "./dispatch/index.js";
42
42
  export { isEmbeddedDatabase, isPostgresDatabase, usesEmbeddedRevisionFallback, withEmbeddedWriteQueue, withEmbeddedWriteTransaction, } from "./embedded-write-queue.js";
43
43
  export * from "./embeddings/index.js";
44
44
  export * from "./errors.js";
45
+ export * from './external-agent-usage.js';
45
46
  export { createFilesystemAdapter, type FilesystemAdapterFactory, registerFilesystemAdapterFactory, } from "./filesystem-loader.js";
46
47
  export { createGeneratedCollectionAccess, type GeneratedCollectionAccess, type GeneratedCollectionRuntime, } from "./generated-collection-access.js";
47
48
  export * from "./generators/index.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAGH,cAAc,qBAAkB,CAAC;AACjC,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAEtD,OAAO,EACL,gBAAgB,EAChB,KAAK,WAAW,EAChB,KAAK,2BAA2B,EAChC,KAAK,gBAAgB,EACrB,KAAK,mBAAmB,EACxB,KAAK,aAAa,EAClB,mBAAmB,EACnB,iBAAiB,EACjB,KAAK,cAAc,EACnB,gBAAgB,GACjB,MAAM,cAAW,CAAC;AAGnB,OAAO,EACL,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,EACtB,YAAY,EACZ,aAAa,EACb,cAAc,EACd,4BAA4B,EAC5B,iBAAiB,EACjB,KAAK,eAAe,EACpB,KAAK,cAAc,EACnB,KAAK,mBAAmB,EACxB,KAAK,eAAe,EACpB,qBAAqB,EACrB,eAAe,EACf,qBAAqB,EACrB,KAAK,iBAAiB,EACtB,eAAe,EACf,eAAe,EACf,2BAA2B,EAC3B,iBAAiB,EACjB,eAAe,EACf,wBAAwB,EACxB,uBAAuB,EACvB,0BAA0B,GAC3B,MAAM,kBAAe,CAAC;AAIvB,OAAO,EACL,KAAK,yBAAyB,EAC9B,KAAK,gCAAgC,EACrC,KAAK,mCAAmC,EACxC,KAAK,yBAAyB,EAC9B,KAAK,yBAAyB,EAC9B,8BAA8B,EAC9B,yBAAyB,EACzB,qCAAqC,EACrC,gCAAgC,EAChC,gCAAgC,EAChC,mBAAmB,EACnB,wBAAwB,EACxB,iCAAiC,EACjC,uBAAuB,EACvB,4BAA4B,GAC7B,MAAM,wBAAqB,CAAC;AAK7B,OAAO,EACL,6BAA6B,EAC7B,+BAA+B,EAC/B,4BAA4B,EAC5B,0BAA0B,GAC3B,MAAM,8BAA2B,CAAC;AAKnC,OAAO,EACL,qBAAqB,EACrB,KAAK,YAAY,EACjB,KAAK,oBAAoB,EACzB,kBAAkB,EAClB,yBAAyB,EACzB,wBAAwB,GACzB,MAAM,qBAAkB,CAAC;AAE1B,OAAO,EACL,4BAA4B,EAC5B,iBAAiB,GAClB,MAAM,sBAAmB,CAAC;AAE3B,cAAc,YAAS,CAAC;AACxB,cAAc,iBAAc,CAAC;AAE7B,OAAO,EACL,0BAA0B,EAC1B,0BAA0B,EAC1B,KAAK,qBAAqB,EAC1B,+BAA+B,EAC/B,kBAAkB,EAClB,yBAAyB,EACzB,oBAAoB,EACpB,iBAAiB,EACjB,8BAA8B,GAC/B,MAAM,uBAAoB,CAAC;AAC5B,cAAc,2BAAwB,CAAC;AACvC,YAAY,EACV,aAAa,EACb,kBAAkB,EAClB,aAAa,EACb,YAAY,GACb,MAAM,aAAU,CAAC;AAElB,OAAO,EAAE,MAAM,EAAE,MAAM,aAAU,CAAC;AAGlC,OAAO,EACL,qBAAqB,EACrB,0BAA0B,EAC1B,wBAAwB,EACxB,6BAA6B,EAC7B,+BAA+B,EAC/B,4BAA4B,EAC5B,qBAAqB,EACrB,2BAA2B,EAC3B,sBAAsB,EACtB,wBAAwB,EACxB,qBAAqB,EACrB,yBAAyB,EACzB,4BAA4B,EAC5B,2BAA2B,EAC3B,uBAAuB,EACvB,yBAAyB,EACzB,wBAAwB,EACxB,wBAAwB,GACzB,MAAM,iBAAc,CAAC;AAEtB,OAAO,EACL,KAAK,cAAc,EACnB,mBAAmB,EACnB,KAAK,sBAAsB,EAC3B,eAAe,GAChB,MAAM,eAAY,CAAC;AAEpB,OAAO,EACL,qBAAqB,EACrB,sBAAsB,EACtB,KAAK,2BAA2B,EAChC,KAAK,iBAAiB,EACtB,yBAAyB,EACzB,4BAA4B,EAC5B,uBAAuB,EACvB,wBAAwB,EACxB,sBAAsB,GACvB,MAAM,gBAAa,CAAC;AACrB,YAAY,EACV,cAAc,EACd,cAAc,EACd,cAAc,EACd,eAAe,EACf,gBAAgB,EAChB,eAAe,EACf,cAAc,EACd,aAAa,EACb,eAAe,EACf,gBAAgB,GACjB,MAAM,gBAAa,CAAC;AACrB,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAa,CAAC;AAC9C,OAAO,EACL,kCAAkC,EAClC,KAAK,yBAAyB,EAC9B,KAAK,gCAAgC,EACrC,KAAK,2BAA2B,EAChC,KAAK,kCAAkC,EACvC,KAAK,6BAA6B,EAClC,gCAAgC,EAChC,iCAAiC,GAClC,MAAM,+BAA4B,CAAC;AAGpC,OAAO,EACL,KAAK,sBAAsB,EAC3B,eAAe,EACf,KAAK,YAAY,EACjB,KAAK,YAAY,EACjB,KAAK,EACL,UAAU,EACV,KAAK,IAAI,EACT,KAAK,aAAa,EAClB,UAAU,EACV,IAAI,EACJ,MAAM,EACN,KAAK,mBAAmB,EACxB,SAAS,EACT,KAAK,wBAAwB,EAC7B,KAAK,gBAAgB,GACtB,MAAM,uBAAoB,CAAC;AAE5B,cAAc,qBAAkB,CAAC;AACjC,OAAO,EACL,kBAAkB,EAClB,kBAAkB,EAClB,4BAA4B,EAC5B,sBAAsB,EACtB,4BAA4B,GAC7B,MAAM,2BAAwB,CAAC;AAEhC,cAAc,uBAAoB,CAAC;AACnC,cAAc,aAAU,CAAC;AAEzB,OAAO,EACL,uBAAuB,EACvB,KAAK,wBAAwB,EAC7B,gCAAgC,GACjC,MAAM,wBAAqB,CAAC;AAE7B,OAAO,EACL,+BAA+B,EAC/B,KAAK,yBAAyB,EAC9B,KAAK,0BAA0B,GAChC,MAAM,kCAA+B,CAAC;AAEvC,cAAc,uBAAoB,CAAC;AACnC,OAAO,EAAE,KAAK,aAAa,EAAE,gBAAgB,EAAE,MAAM,mBAAgB,CAAC;AAEtE,cAAc,mBAAgB,CAAC;AAC/B,OAAO,EACL,KAAK,qBAAqB,EAC1B,KAAK,qBAAqB,EAC1B,YAAY,EACZ,gBAAgB,GACjB,MAAM,eAAY,CAAC;AACpB,cAAc,gBAAa,CAAC;AAG5B,YAAY,EACV,cAAc,EACd,kBAAkB,EAClB,wBAAwB,GACzB,MAAM,kBAAe,CAAC;AACvB,OAAO,EACL,uBAAuB,EACvB,iBAAiB,EACjB,oBAAoB,EACpB,mBAAmB,EACnB,sBAAsB,EACtB,oBAAoB,EACpB,iBAAiB,EACjB,wBAAwB,GACzB,MAAM,kBAAe,CAAC;AACvB,OAAO,EACL,wBAAwB,EACxB,0BAA0B,GAC3B,MAAM,oBAAiB,CAAC;AAEzB,OAAO,EACL,uBAAuB,EACvB,KAAK,eAAe,EACpB,cAAc,EACd,KAAK,oBAAoB,EACzB,KAAK,qBAAqB,EAC1B,KAAK,oBAAoB,EACzB,KAAK,eAAe,EACpB,KAAK,qBAAqB,EAC1B,KAAK,sBAAsB,GAC5B,MAAM,qBAAkB,CAAC;AAE1B,cAAc,qBAAkB,CAAC;AACjC,YAAY,EAAE,WAAW,EAAE,MAAM,wBAAqB,CAAC;AAEvD,OAAO,EACL,kBAAkB,EAClB,cAAc,EACd,oBAAoB,EACpB,oBAAoB,EACpB,wBAAwB,EACxB,cAAc,GACf,MAAM,wBAAqB,CAAC;AAC7B,cAAc,aAAU,CAAC;AACzB,OAAO,EACL,KAAK,wBAAwB,EAC7B,+BAA+B,GAChC,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,0BAA0B,EAC1B,KAAK,iCAAiC,GACvC,MAAM,8BAA2B,CAAC;AACnC,OAAO,EACL,wBAAwB,EACxB,KAAK,0BAA0B,EAC/B,KAAK,4BAA4B,EACjC,KAAK,sBAAsB,EAC3B,uBAAuB,EACvB,kCAAkC,GACnC,MAAM,2BAA2B,CAAC;AAMnC,OAAO,EACL,4BAA4B,EAC5B,yBAAyB,EACzB,yBAAyB,EACzB,KAAK,qBAAqB,EAC1B,KAAK,wBAAwB,EAC7B,uBAAuB,GACxB,MAAM,wBAAqB,CAAC;AAE7B,OAAO,EACL,uBAAuB,EACvB,kBAAkB,EAClB,qBAAqB,EACrB,KAAK,gBAAgB,EACrB,cAAc,EACd,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,mBAAgB,CAAC;AACxB,OAAO,EACL,UAAU,EACV,KAAK,eAAe,EACpB,KAAK,sBAAsB,EAC3B,KAAK,kBAAkB,GACxB,MAAM,aAAU,CAAC;AAClB,OAAO,EACL,gBAAgB,EAChB,mBAAmB,EACnB,gBAAgB,EAChB,kBAAkB,EAClB,gBAAgB,EAChB,oBAAoB,EACpB,KAAK,wBAAwB,EAC7B,iBAAiB,EACjB,KAAK,UAAU,EACf,KAAK,oBAAoB,EACzB,KAAK,cAAc,GACpB,MAAM,kBAAe,CAAC;AACvB,OAAO,EACL,mBAAmB,EACnB,aAAa,EACb,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,gBAAgB,EAChB,gBAAgB,EAChB,SAAS,EACT,KAAK,aAAa,EAClB,KAAK,SAAS,EACd,KAAK,SAAS,EACd,KAAK,SAAS,EACd,cAAc,EACd,KAAK,MAAM,EACX,SAAS,EACT,KAAK,UAAU,EACf,KAAK,YAAY,EACjB,KAAK,iBAAiB,EACtB,UAAU,EACV,WAAW,EACX,YAAY,GACb,MAAM,kBAAe,CAAC;AACvB,cAAc,eAAY,CAAC;AAC3B,OAAO,EAAE,IAAI,IAAI,YAAY,EAAE,MAAM,eAAY,CAAC;AAElD,OAAO,EACL,KAAK,yBAAyB,EAC9B,KAAK,QAAQ,EACb,gBAAgB,EAChB,8BAA8B,EAC9B,yBAAyB,EACzB,0BAA0B,GAC3B,MAAM,mCAAgC,CAAC;AACxC,YAAY,EAAE,2BAA2B,EAAE,MAAM,iCAA8B,CAAC;AAEhF,OAAO,EACL,+BAA+B,EAC/B,uBAAuB,EACvB,KAAK,0BAA0B,EAC/B,qBAAqB,GACtB,MAAM,iCAA8B,CAAC;AAEtC,OAAO,EACL,kCAAkC,EAClC,0BAA0B,EAC1B,yBAAyB,GAC1B,MAAM,qBAAkB,CAAC;AAC1B,cAAc,eAAY,CAAC;AAE3B,cAAc,oBAAiB,CAAC;AAChC,OAAO,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,uBAAc,CAAC;AAIlE,OAAO,EACL,KAAK,oCAAoC,EACzC,6BAA6B,EAC7B,KAAK,qBAAqB,EAC1B,KAAK,2BAA2B,EAChC,KAAK,uBAAuB,GAC7B,MAAM,uCAAoC,CAAC;AAC5C,OAAO,EAAE,sBAAsB,EAAE,MAAM,iCAA8B,CAAC;AAGtE,OAAO,EACL,KAAK,mBAAmB,EACxB,qBAAqB,EACrB,KAAK,mBAAmB,EACxB,KAAK,iBAAiB,EACtB,KAAK,qBAAqB,EAC1B,KAAK,kBAAkB,EACvB,qBAAqB,EACrB,KAAK,uBAAuB,EAC5B,KAAK,sBAAsB,GAC5B,MAAM,yBAAsB,CAAC;AAC9B,OAAO,EACL,oBAAoB,EACpB,kBAAkB,EAClB,KAAK,gBAAgB,GACtB,MAAM,iCAA8B,CAAC;AAEtC,YAAY,EAAE,gBAAgB,EAAE,MAAM,mBAAgB,CAAC;AAEvD,cAAc,oBAAiB,CAAC;AAGhC,cAAc,iBAAc,CAAC;AAE7B,cAAc,mBAAgB,CAAC;AAC/B,YAAY,EACV,iBAAiB,EACjB,aAAa,EACb,kBAAkB,EAClB,YAAY,EACZ,WAAW,EACX,gBAAgB,EAChB,aAAa,EACb,iBAAiB,GAClB,MAAM,mBAAgB,CAAC;AAExB,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAe,CAAC;AAEpD,OAAO,EACL,eAAe,EACf,KAAK,mBAAmB,GACzB,MAAM,uBAAoB,CAAC;AAE5B,cAAc,kBAAe,CAAC;AAE9B,cAAc,kBAAkB,CAAC;AAGjC,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,kBAAe,CAAC;AAG/D,OAAO,EACL,0BAA0B,EAC1B,iBAAiB,EACjB,wBAAwB,GACzB,MAAM,yBAAsB,CAAC;AAE9B,OAAO,EACL,KAAK,EACL,cAAc,EACd,OAAO,EACP,KAAK,WAAW,EAChB,KAAK,UAAU,EACf,KAAK,EACL,KAAK,MAAM,EACX,KAAK,cAAc,EACnB,SAAS,EACT,aAAa,EACb,SAAS,GACV,MAAM,iBAAc,CAAC;AAGtB,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAgB,CAAC;AAE7C,OAAO,EACL,uBAAuB,EACvB,mBAAmB,EACnB,YAAY,EACZ,2BAA2B,EAC3B,aAAa,EACb,eAAe,EACf,mBAAmB,EACnB,MAAM,EACN,KAAK,mBAAmB,EACxB,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,4BAAyB,CAAC;AAEjC,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAqB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -3,7 +3,7 @@ import { DEFAULT_AI_COST_RATES, estimateAiUsageCost } from "./adapters/cost-rate
3
3
  import { MetricsAdapter } from "./adapters/metrics.js";
4
4
  import { PubSubAdapter } from "./adapters/pubsub.js";
5
5
  import "./adapters/index.js";
6
- import { classifyDatabaseError, classifyDialectMessage, isAbortedTransactionError, isDeterministicDatabaseError, isNotNullViolationError, isTransientDatabaseError, isUniqueViolationError } from "./db-errors.js";
6
+ import { classifyDatabaseError, classifyDialectMessage, isAbortedTransactionError, isDeterministicDatabaseError, isNotNullViolationError, isTransientConnectionError, isTransientDatabaseError, isUniqueViolationError } from "./db-errors.js";
7
7
  import { isEmbeddedDatabase, isPostgresDatabase, usesEmbeddedRevisionFallback, withEmbeddedWriteQueue, withEmbeddedWriteTransaction } from "./embedded-write-queue.js";
8
8
  import { SmrtError } from "./smrt-error.js";
9
9
  import { isSensitiveConnectionParam, redactDatabaseUrl, redactDatabaseUrlsInText } from "./utils/database-url.js";
@@ -55,7 +55,7 @@ import { auditChanges, auditSnapshot, getActiveAuditOptions, isAudited, requireA
55
55
  import { withAuditContext } from "./audit-context.js";
56
56
  import { filterVisibleChangeFeedEntries, getAuthorizedChangesSince, getAuthorizedTenantScopedChangesSince, hasChangeFeedEntryVisibilityHook, hasChangeFeedTableAuthorizerHook, isChangeFeedDenyAll, isChangeFeedEntryVisible, resolveAuthorizedChangeFeedTables, setChangeFeedAuthorizer, setChangeFeedEntryVisibility } from "./change-feed-authz.js";
57
57
  import { executeCollectionReadPlan } from "./collection-read-plan.js";
58
- import { DEFAULT_DATA_QUERY_PAGE_LIMIT, DEFAULT_DATA_QUERY_RESULT_BYTES, DataQueryValidationError, MAX_DATA_QUERY_CURSOR_LENGTH, MAX_DATA_QUERY_FACETS, MAX_DATA_QUERY_FILTERS, MAX_DATA_QUERY_FILTER_DEPTH, MAX_DATA_QUERY_IN_VALUES, MAX_DATA_QUERY_OFFSET, MAX_DATA_QUERY_PAGE_LIMIT, MAX_DATA_QUERY_REQUEST_BYTES, MAX_DATA_QUERY_RESULT_BYTES, MAX_DATA_QUERY_WARNINGS, canonicalizeDataQuery, createDataQueryFingerprint, normalizeDataQueryRequest, normalizeDataQueryResult, normalizeDataQuerySchema } from "./data-query.js";
58
+ import { DEFAULT_DATA_QUERY_PAGE_LIMIT, DEFAULT_DATA_QUERY_RESULT_BYTES, DataQueryValidationError, MAX_DATA_QUERY_CURSOR_LENGTH, MAX_DATA_QUERY_FACETS, MAX_DATA_QUERY_FIELD_VALUES, MAX_DATA_QUERY_FIELD_VALUE_DESCRIPTION_LENGTH, MAX_DATA_QUERY_FIELD_VALUE_LABEL_LENGTH, MAX_DATA_QUERY_FIELD_VALUE_LENGTH, MAX_DATA_QUERY_FILTERS, MAX_DATA_QUERY_FILTER_DEPTH, MAX_DATA_QUERY_IN_VALUES, MAX_DATA_QUERY_OFFSET, MAX_DATA_QUERY_PAGE_LIMIT, MAX_DATA_QUERY_REQUEST_BYTES, MAX_DATA_QUERY_RESULT_BYTES, MAX_DATA_QUERY_WARNINGS, canonicalizeDataQuery, createDataQueryFingerprint, normalizeDataQueryFieldValues, normalizeDataQueryRequest, normalizeDataQueryResult, normalizeDataQuerySchema } from "./data-query.js";
59
59
  import { crossPackageRef, field, foreignKey, manyToMany, meta, method, oneToMany } from "./decorators/index.js";
60
60
  import { Dispatch } from "./dispatch/models/Dispatch.js";
61
61
  import { DispatchCollection } from "./dispatch/collections/Dispatches.js";
@@ -64,6 +64,7 @@ import { DispatchSubscriptionCollection } from "./dispatch/collections/DispatchS
64
64
  import { DispatchBus, createDispatchBus } from "./dispatch/bus.js";
65
65
  import "./dispatch/index.js";
66
66
  import "./embeddings/index.js";
67
+ import { EXTERNAL_AGENT_COUNTERS, EXTERNAL_AGENT_USAGE_OPERATION, ExternalAgentUsageError, ExternalAgentUsageRecorder, normalizeExternalAgentUsageReport, summarizeExternalAgentUsage } from "./external-agent-usage.js";
67
68
  import { createGeneratedCollectionAccess } from "./generated-collection-access.js";
68
69
  import { PRIVATE_READ_CACHE_CONTROL, canonicalReadRepresentation, computeBodyEtag, computeTableVersionEtag, conditionalJsonResponse, ifNoneMatchHasConcreteMatch, ifNoneMatchSatisfied, resolveReadCacheControl, resolveTenantEtagDiscriminator, versionConditionalResponse, warnIfSharedCacheNeutralized } from "./generators/conditional-get.js";
69
70
  import { convertTypeToJsonSchema, generateToolFromMethod, generateToolManifest, shouldIncludeMethod } from "./tools/tool-generator.js";
@@ -115,4 +116,4 @@ import "./system/index.js";
115
116
  import { getTestDatabase } from "./testing/database.js";
116
117
  import "./tools/index.js";
117
118
  import { smrtPlugin } from "./vite-plugin/index.js";
118
- export { AGENT_SURFACE_HASH_PREFIX, AIError, APIGenerator, AiUsageCollector, AiUsagePersistenceHandler, BOOTED_PROVENANCE, CACHE_INVALIDATION_CHANNEL, CHANGE_FEED_CREDENTIAL_TABLES, CHANGE_FEED_INTERCEPTOR_NAME, CHANGE_FEED_TABLE, CHANGE_SIGNAL_CHANNEL, CRUD_OPERATIONS, ConfigurationError, ContentHasher, CosineSimilarity, DEFAULT_AI_COST_RATES, DEFAULT_CHANGES_LIMIT, DEFAULT_DATA_QUERY_PAGE_LIMIT, DEFAULT_DATA_QUERY_RESULT_BYTES, DEFAULT_DISPLAY_LABEL_FIELDS, DEFAULT_EMBEDDING_CONFIG, DEFAULT_EVENTS_HEARTBEAT_MS, DEFAULT_EVENTS_MAX_SUBSCRIBERS, DEFAULT_EVENTS_RETRY_AFTER_SECONDS, DEFAULT_FACET_LIMIT, DEFAULT_LEARNING_CONFIG, DEFAULT_LIST_LIMIT, DEFAULT_LIST_ORDER_BY, DEFAULT_POSTGRES_TIMEOUTS, DEFAULT_RETENTION_POLICY, DIAGNOSTICS_DEFAULT_LIMIT, DataQueryValidationError, DatabaseError, Dispatch, DispatchBus, DispatchCollection, DispatchSubscription, DispatchSubscriptionCollection, EmbeddingProvider, EmbeddingStorage, EmbeddingUnavailableError, ErrorUtils, FIELD_UI_FORMATS, FIELD_UI_FORMAT_TYPES, FIELD_UI_WIDGETS, FIELD_UI_WIDGET_TYPES, FilesystemError, GlobalInterceptors, IN_LIST_CHUNK_SIZE, LearningMemory, LiveSchemaParityError, MAX_CHANGES_LIMIT, MAX_DATA_QUERY_CURSOR_LENGTH, MAX_DATA_QUERY_FACETS, MAX_DATA_QUERY_FILTERS, MAX_DATA_QUERY_FILTER_DEPTH, MAX_DATA_QUERY_IN_VALUES, MAX_DATA_QUERY_OFFSET, MAX_DATA_QUERY_PAGE_LIMIT, MAX_DATA_QUERY_REQUEST_BYTES, MAX_DATA_QUERY_RESULT_BYTES, MAX_DATA_QUERY_WARNINGS, MAX_FACET_FIELDS, MAX_FACET_LIMIT, MAX_LIST_LIMIT, MAX_STI_READ_SCOPE_TYPES, MAX_SYNC_APPLY_BATCH_SIZE, MCPGenerator, MCP_STABLE_CATALOG_TTL_MS, MOCK_PROVIDER_OPTION, MODULE_DOC_HASH_PREFIX, ManifestBuilder, ManifestGenerator, ManifestManager, MetricsAdapter, NetworkError, ObjectRegistry, PLAYBOOK_PREFLIGHT_CAPABILITY, PLAYBOOK_PREFLIGHT_ROUTE_SEGMENT, POSTGRES_REVISION_GUARD_EXPRESSION, POSTGRES_TIMEOUT_ENV_VARS, PRIVATE_READ_CACHE_CONTROL, PubSubAdapter, QueryBoundsError, QueryOrderByError, RECIPE_DEMO_MODES, RELATIONSHIP_ROLES, RUN_ONCE_CLAIMS_TABLE, RunOnceClaimError, RuntimeError, SMRT_COLLECTION_BASE_NAMES, SMRT_CUSTOM_ACTION_ERROR_METADATA_KEY, SMRT_SCHEMA_VERSION, SYNC_APPLY_ROUTE_SEGMENTS, SYNC_APPLY_UUID_PATTERN, SYSTEM_DIAGNOSTICS_TABLES, SYSTEM_TABLE_NAMES, SchemaComparer, SignalBus, SignalSanitizer, SmrtClass, SmrtCollection, SmrtError, SmrtHierarchical, SmrtJunction, SmrtJunctionBase, SmrtMCPServer, SmrtObject, SmrtPolymorphicAssociation, SmrtRecipe, TenantIsolationError, ValidationError, ValidationReport, ValidationUtils, appendChange, appendChanges, applyOneToManyChildAccessors, applyPendingDecoratorRegistrations, applyPostgresPermissions, applyPostgresRuntimeTimeouts, applySyncWritablePolicy, assertPlainJson, assertPostgresSystemTimestampsCurrent, assertScopedPackageName, auditChanges, auditSnapshot, broadcastCacheInvalidation, buildCascadePlan, buildChangeEventStream, buildConnectSection, buildCustomActionInputSchema, buildCustomActionInvocationArgs, buildDefaultListOrderBy, buildDomainKnowledgeManifest, buildGlossary, buildKnowledgeGraph, bumpChangeFeed, canonicalReadRepresentation, canonicalizeDataQuery, cascadeReferencesTo, changeEventSubscribersAtCapacity, checkKnowledgeGraphFreshness, checkLiveSchemaParity, childAccessorName, chunkArray, classifyDatabaseError, classifyDialectMessage, classifyMethodWireability, classifyParameterWireability, clearRetentionTasks, clone, coerceCustomActionArgument, collectForeignKeyOrphanCounts, computeBodyEtag, computeRuntimeWebManifestHash, computeTableVersionEtag, conditionalJsonResponse, config, convertTypeToJsonSchema, createClassNamePredicate, createDataQueryFingerprint, createDispatchBus, createFilesystemAdapter, createGeneratedCollectionAccess, createInterceptorContext, createMCPServer, createManifestClassNamePredicate, createQualifiedName, createRecipeHelp, createRestServer, createSmrtClient, createSmrtServer, crossPackageRef, customActionParameterInputName, declareChangeFeedSensitiveTable, declaredTypeAcceptsDate, declaresRuntimeRestRoute, declaresRuntimeRestRouteShape, deriveRecipeDemo, deriveRunOnceClaimKey, describeDisplayLabel, detectEngine, digestRunOnceContent, discoverKnowledgeArtifactPaths, discoverManifestEntry, discoverScopedPackageDirectories, displayLabelFieldProblem, drainChangeFeed, effectiveRecipeDemo, ensureBootstrapSystemTableCompatibility, ensureCacheInvalidationListener, ensureChangeFeedTable, ensureDeferredSystemTableCompatibility, ensureDispatchSubscriptionsSystemTableCompatibility, ensureDispatchSystemTableCompatibility, ensureJobEventsSystemTableCompatibility, ensureJobsSystemTableCompatibility, ensureLegacySystemTableCompatibility, ensureSystemTables, estimateAiUsageCost, eventStreamCapacityExceededResponse, executeCollectionReadPlan, executeDecision, executeToolCall, executeToolCalls, exposedCrudVerbs, extractFieldRefs, field, fieldTypeToJsonSchema, filterVisibleChangeFeedEntries, findCollectionWriteEscalations, findField, findManifestEntryByQualifiedName, findSelectorFor, findSubclassExposureEscalations, foreignKey, formatToolResults, generateDDLForEngine, generateOpenAPISpec, generateSchemaDiff, generateToolFromMethod, generateToolManifest, getActiveAuditOptions, getAdapterInfo, getAuthorizedChangesSince, getAuthorizedTenantScopedChangesSince, getCacheGeneration, getChangeFeedSensitiveTables, getChangesSince, getClassConfigResolvers, getClassName, getConfigResolver, getDatabaseEngine, getManifest, getPackageFromQualifiedName, getRetentionTasks, getSQLFromDiff, getSystemTableShapes, getTableVersion, getTenantScopedChangesSince, getTestDatabase, handlePlaybookPreflightRoute, hasActionableChanges, hasBrowserOption, hasChangeFeedEntryVisibilityHook, hasChangeFeedTableAuthorizerHook, helpToMarkdown, ifNoneMatchHasConcreteMatch, ifNoneMatchSatisfied, importOptionalDependency, inheritCollectionExposure, inheritSubclassExposure, inheritedCollectionSurface, invalidateCollectionCache, isAbortedTransactionError, isAdvisoryOnlyChange, isApiActionEnabledForObject, isAudited, isChangeFeedDenyAll, isChangeFeedEntryVisible, isChangeFeedSensitiveTable, isCrudOperation, isCrudToolAction, isDatabaseInterface, isDeterministicDatabaseError, isEmbeddedDatabase, isFieldUIFormat, isFieldUIWidget, isFrameworkBaseClass, isFromPackage, isLazyConfigSentinel, isManualOrAdvisoryChange, isMockableProvider, isNotNullViolationError, isPostgresDatabase, isQualifiedName, isRelationshipRole, isRestActionRoutable, isRestRoutePublic, isScopedPackageName, isSensitiveConnectionParam, isServerProvider, isSmrtCollectionExtendsName, isStaleWrite, isTenantScopedClassResolved, isTransientDatabaseError, isType, isUniqueViolationError, isValid, listConfigResolvers, loadExternalManifest, loadExternalManifestSync, loadLocalTestManifestSync, loadManifestFromPathSync, manifest, manyToMany, meta, method, migratePostgresSystemTimestamps, normalizeCustomActionFailure, normalizeDataQueryRequest, normalizeDataQueryResult, normalizeDataQuerySchema, normalizeEventsMaxSubscribers, normalizeOnDelete, normalizeTypedHttpError, oneToMany, parse, parseHelp, parseQualifiedName, parseSyncApplyBatch, payloadMatchesRow, planForeignKeyCreation, planPostgresPermissions, planPostgresSystemTimestampMigrations, postgresRevisionCandidates, postgresRevisionCondition, processSyncApplyBatch, pruneAiUsage, pruneChangeFeed, pruneExpiredContexts, pruneRunOnceClaims, publishArtifactFiles, publishAtomicArtifact, qualifiedNamesEqual, queryStringDecoderFor, readAgentModuleDocs, readDispatchHealth, readJobHealth, readMethodDecoratorConfig, readMigrationStatus, readPackageAgentDoc, readRecentChanges, readRegistryDrift, readScheduleHealth, readSystemDiagnostics, redactDatabaseUrl, redactDatabaseUrlsInText, registerChangeFeedWriter, registerCompatibleFieldDecorator, registerCompatibleMethodDecorator, registerConfigResolver, registerFilesystemAdapterFactory, registerOptionalDependency, registerRetentionTask, renderHelp, requireAuditOptions, resetChangeFeedWarnings, resetChangeSignals, resetCollectionCache, resetConfigResolvers, resetVerifiedTables, resolveAgentModuleDocPaths, resolveApiMethodExposure, resolveAuthorizedChangeFeedTables, resolveCustomActionMetadata, resolveDatabase, resolveDbCacheKey, resolveDeclaredScopeMismatch, resolveDispatchTenantId, resolveDispatchTenantScope, resolveDisplayLabelField, resolveEffectiveActionMetadata, resolveExistingRunOnceClaim, resolveFileKnowledgeConfig, resolveGetStringFilter, resolveHelp, resolveLazyConfig, resolveListLimit, resolveListOffset, resolveMCPToolListCacheHint, resolveOperationPermissionAlias, resolvePostgresTimeouts, resolveReadCacheControl, resolveRegisteredObjectName, resolveTenantEtagDiscriminator, restFieldReadPermissions, restMethodForApiAction, runCascadeDelete, runOnce, runRetentionSweep, runWithTenantGate, safeParse, safeStringify, sanitizeMessagePaths, setChangeFeedAuthorizer, setChangeFeedEntryVisibility, setDispatchTenantResolver, setTenantEntryPointRunner, setTenantScopedClassResolver, setupSwaggerUI, shouldIncludeMethod, signalVisibleToTenant, smrt, smrtPlugin, smrt as smrtRegistry, snapshotRegistry, sortMCPTools, stableStringify, startRestServer, staticManifest, stopCacheInvalidationListeners, stopChangeSignalListeners, stringify, subscribeToChangeSignals, surfaceOpensOperation, tableExists, toCustomActionBoolean, toCustomActionDate, toCustomActionNumber, toSnakeCase, tryReserveChangeEventSubscriberSlot, unregisterChangeFeedWriter, unregisterConfigResolver, unregisterRetentionTask, usesEmbeddedRevisionFallback, validateHelp, validatePostgresPermissionContract, validateSyncApplyItem, validateToolCall, versionConditionalResponse, warnIfSharedCacheNeutralized, withAuditContext, withEmbeddedWriteQueue, withEmbeddedWriteTransaction, writeAudit };
119
+ export { AGENT_SURFACE_HASH_PREFIX, AIError, APIGenerator, AiUsageCollector, AiUsagePersistenceHandler, BOOTED_PROVENANCE, CACHE_INVALIDATION_CHANNEL, CHANGE_FEED_CREDENTIAL_TABLES, CHANGE_FEED_INTERCEPTOR_NAME, CHANGE_FEED_TABLE, CHANGE_SIGNAL_CHANNEL, CRUD_OPERATIONS, ConfigurationError, ContentHasher, CosineSimilarity, DEFAULT_AI_COST_RATES, DEFAULT_CHANGES_LIMIT, DEFAULT_DATA_QUERY_PAGE_LIMIT, DEFAULT_DATA_QUERY_RESULT_BYTES, DEFAULT_DISPLAY_LABEL_FIELDS, DEFAULT_EMBEDDING_CONFIG, DEFAULT_EVENTS_HEARTBEAT_MS, DEFAULT_EVENTS_MAX_SUBSCRIBERS, DEFAULT_EVENTS_RETRY_AFTER_SECONDS, DEFAULT_FACET_LIMIT, DEFAULT_LEARNING_CONFIG, DEFAULT_LIST_LIMIT, DEFAULT_LIST_ORDER_BY, DEFAULT_POSTGRES_TIMEOUTS, DEFAULT_RETENTION_POLICY, DIAGNOSTICS_DEFAULT_LIMIT, DataQueryValidationError, DatabaseError, Dispatch, DispatchBus, DispatchCollection, DispatchSubscription, DispatchSubscriptionCollection, EXTERNAL_AGENT_COUNTERS, EXTERNAL_AGENT_USAGE_OPERATION, EmbeddingProvider, EmbeddingStorage, EmbeddingUnavailableError, ErrorUtils, ExternalAgentUsageError, ExternalAgentUsageRecorder, FIELD_UI_FORMATS, FIELD_UI_FORMAT_TYPES, FIELD_UI_WIDGETS, FIELD_UI_WIDGET_TYPES, FilesystemError, GlobalInterceptors, IN_LIST_CHUNK_SIZE, LearningMemory, LiveSchemaParityError, MAX_CHANGES_LIMIT, MAX_DATA_QUERY_CURSOR_LENGTH, MAX_DATA_QUERY_FACETS, MAX_DATA_QUERY_FIELD_VALUES, MAX_DATA_QUERY_FIELD_VALUE_DESCRIPTION_LENGTH, MAX_DATA_QUERY_FIELD_VALUE_LABEL_LENGTH, MAX_DATA_QUERY_FIELD_VALUE_LENGTH, MAX_DATA_QUERY_FILTERS, MAX_DATA_QUERY_FILTER_DEPTH, MAX_DATA_QUERY_IN_VALUES, MAX_DATA_QUERY_OFFSET, MAX_DATA_QUERY_PAGE_LIMIT, MAX_DATA_QUERY_REQUEST_BYTES, MAX_DATA_QUERY_RESULT_BYTES, MAX_DATA_QUERY_WARNINGS, MAX_FACET_FIELDS, MAX_FACET_LIMIT, MAX_LIST_LIMIT, MAX_STI_READ_SCOPE_TYPES, MAX_SYNC_APPLY_BATCH_SIZE, MCPGenerator, MCP_STABLE_CATALOG_TTL_MS, MOCK_PROVIDER_OPTION, MODULE_DOC_HASH_PREFIX, ManifestBuilder, ManifestGenerator, ManifestManager, MetricsAdapter, NetworkError, ObjectRegistry, PLAYBOOK_PREFLIGHT_CAPABILITY, PLAYBOOK_PREFLIGHT_ROUTE_SEGMENT, POSTGRES_REVISION_GUARD_EXPRESSION, POSTGRES_TIMEOUT_ENV_VARS, PRIVATE_READ_CACHE_CONTROL, PubSubAdapter, QueryBoundsError, QueryOrderByError, RECIPE_DEMO_MODES, RELATIONSHIP_ROLES, RUN_ONCE_CLAIMS_TABLE, RunOnceClaimError, RuntimeError, SMRT_COLLECTION_BASE_NAMES, SMRT_CUSTOM_ACTION_ERROR_METADATA_KEY, SMRT_SCHEMA_VERSION, SYNC_APPLY_ROUTE_SEGMENTS, SYNC_APPLY_UUID_PATTERN, SYSTEM_DIAGNOSTICS_TABLES, SYSTEM_TABLE_NAMES, SchemaComparer, SignalBus, SignalSanitizer, SmrtClass, SmrtCollection, SmrtError, SmrtHierarchical, SmrtJunction, SmrtJunctionBase, SmrtMCPServer, SmrtObject, SmrtPolymorphicAssociation, SmrtRecipe, TenantIsolationError, ValidationError, ValidationReport, ValidationUtils, appendChange, appendChanges, applyOneToManyChildAccessors, applyPendingDecoratorRegistrations, applyPostgresPermissions, applyPostgresRuntimeTimeouts, applySyncWritablePolicy, assertPlainJson, assertPostgresSystemTimestampsCurrent, assertScopedPackageName, auditChanges, auditSnapshot, broadcastCacheInvalidation, buildCascadePlan, buildChangeEventStream, buildConnectSection, buildCustomActionInputSchema, buildCustomActionInvocationArgs, buildDefaultListOrderBy, buildDomainKnowledgeManifest, buildGlossary, buildKnowledgeGraph, bumpChangeFeed, canonicalReadRepresentation, canonicalizeDataQuery, cascadeReferencesTo, changeEventSubscribersAtCapacity, checkKnowledgeGraphFreshness, checkLiveSchemaParity, childAccessorName, chunkArray, classifyDatabaseError, classifyDialectMessage, classifyMethodWireability, classifyParameterWireability, clearRetentionTasks, clone, coerceCustomActionArgument, collectForeignKeyOrphanCounts, computeBodyEtag, computeRuntimeWebManifestHash, computeTableVersionEtag, conditionalJsonResponse, config, convertTypeToJsonSchema, createClassNamePredicate, createDataQueryFingerprint, createDispatchBus, createFilesystemAdapter, createGeneratedCollectionAccess, createInterceptorContext, createMCPServer, createManifestClassNamePredicate, createQualifiedName, createRecipeHelp, createRestServer, createSmrtClient, createSmrtServer, crossPackageRef, customActionParameterInputName, declareChangeFeedSensitiveTable, declaredTypeAcceptsDate, declaresRuntimeRestRoute, declaresRuntimeRestRouteShape, deriveRecipeDemo, deriveRunOnceClaimKey, describeDisplayLabel, detectEngine, digestRunOnceContent, discoverKnowledgeArtifactPaths, discoverManifestEntry, discoverScopedPackageDirectories, displayLabelFieldProblem, drainChangeFeed, effectiveRecipeDemo, ensureBootstrapSystemTableCompatibility, ensureCacheInvalidationListener, ensureChangeFeedTable, ensureDeferredSystemTableCompatibility, ensureDispatchSubscriptionsSystemTableCompatibility, ensureDispatchSystemTableCompatibility, ensureJobEventsSystemTableCompatibility, ensureJobsSystemTableCompatibility, ensureLegacySystemTableCompatibility, ensureSystemTables, estimateAiUsageCost, eventStreamCapacityExceededResponse, executeCollectionReadPlan, executeDecision, executeToolCall, executeToolCalls, exposedCrudVerbs, extractFieldRefs, field, fieldTypeToJsonSchema, filterVisibleChangeFeedEntries, findCollectionWriteEscalations, findField, findManifestEntryByQualifiedName, findSelectorFor, findSubclassExposureEscalations, foreignKey, formatToolResults, generateDDLForEngine, generateOpenAPISpec, generateSchemaDiff, generateToolFromMethod, generateToolManifest, getActiveAuditOptions, getAdapterInfo, getAuthorizedChangesSince, getAuthorizedTenantScopedChangesSince, getCacheGeneration, getChangeFeedSensitiveTables, getChangesSince, getClassConfigResolvers, getClassName, getConfigResolver, getDatabaseEngine, getManifest, getPackageFromQualifiedName, getRetentionTasks, getSQLFromDiff, getSystemTableShapes, getTableVersion, getTenantScopedChangesSince, getTestDatabase, handlePlaybookPreflightRoute, hasActionableChanges, hasBrowserOption, hasChangeFeedEntryVisibilityHook, hasChangeFeedTableAuthorizerHook, helpToMarkdown, ifNoneMatchHasConcreteMatch, ifNoneMatchSatisfied, importOptionalDependency, inheritCollectionExposure, inheritSubclassExposure, inheritedCollectionSurface, invalidateCollectionCache, isAbortedTransactionError, isAdvisoryOnlyChange, isApiActionEnabledForObject, isAudited, isChangeFeedDenyAll, isChangeFeedEntryVisible, isChangeFeedSensitiveTable, isCrudOperation, isCrudToolAction, isDatabaseInterface, isDeterministicDatabaseError, isEmbeddedDatabase, isFieldUIFormat, isFieldUIWidget, isFrameworkBaseClass, isFromPackage, isLazyConfigSentinel, isManualOrAdvisoryChange, isMockableProvider, isNotNullViolationError, isPostgresDatabase, isQualifiedName, isRelationshipRole, isRestActionRoutable, isRestRoutePublic, isScopedPackageName, isSensitiveConnectionParam, isServerProvider, isSmrtCollectionExtendsName, isStaleWrite, isTenantScopedClassResolved, isTransientConnectionError, isTransientDatabaseError, isType, isUniqueViolationError, isValid, listConfigResolvers, loadExternalManifest, loadExternalManifestSync, loadLocalTestManifestSync, loadManifestFromPathSync, manifest, manyToMany, meta, method, migratePostgresSystemTimestamps, normalizeCustomActionFailure, normalizeDataQueryFieldValues, normalizeDataQueryRequest, normalizeDataQueryResult, normalizeDataQuerySchema, normalizeEventsMaxSubscribers, normalizeExternalAgentUsageReport, normalizeOnDelete, normalizeTypedHttpError, oneToMany, parse, parseHelp, parseQualifiedName, parseSyncApplyBatch, payloadMatchesRow, planForeignKeyCreation, planPostgresPermissions, planPostgresSystemTimestampMigrations, postgresRevisionCandidates, postgresRevisionCondition, processSyncApplyBatch, pruneAiUsage, pruneChangeFeed, pruneExpiredContexts, pruneRunOnceClaims, publishArtifactFiles, publishAtomicArtifact, qualifiedNamesEqual, queryStringDecoderFor, readAgentModuleDocs, readDispatchHealth, readJobHealth, readMethodDecoratorConfig, readMigrationStatus, readPackageAgentDoc, readRecentChanges, readRegistryDrift, readScheduleHealth, readSystemDiagnostics, redactDatabaseUrl, redactDatabaseUrlsInText, registerChangeFeedWriter, registerCompatibleFieldDecorator, registerCompatibleMethodDecorator, registerConfigResolver, registerFilesystemAdapterFactory, registerOptionalDependency, registerRetentionTask, renderHelp, requireAuditOptions, resetChangeFeedWarnings, resetChangeSignals, resetCollectionCache, resetConfigResolvers, resetVerifiedTables, resolveAgentModuleDocPaths, resolveApiMethodExposure, resolveAuthorizedChangeFeedTables, resolveCustomActionMetadata, resolveDatabase, resolveDbCacheKey, resolveDeclaredScopeMismatch, resolveDispatchTenantId, resolveDispatchTenantScope, resolveDisplayLabelField, resolveEffectiveActionMetadata, resolveExistingRunOnceClaim, resolveFileKnowledgeConfig, resolveGetStringFilter, resolveHelp, resolveLazyConfig, resolveListLimit, resolveListOffset, resolveMCPToolListCacheHint, resolveOperationPermissionAlias, resolvePostgresTimeouts, resolveReadCacheControl, resolveRegisteredObjectName, resolveTenantEtagDiscriminator, restFieldReadPermissions, restMethodForApiAction, runCascadeDelete, runOnce, runRetentionSweep, runWithTenantGate, safeParse, safeStringify, sanitizeMessagePaths, setChangeFeedAuthorizer, setChangeFeedEntryVisibility, setDispatchTenantResolver, setTenantEntryPointRunner, setTenantScopedClassResolver, setupSwaggerUI, shouldIncludeMethod, signalVisibleToTenant, smrt, smrtPlugin, smrt as smrtRegistry, snapshotRegistry, sortMCPTools, stableStringify, startRestServer, staticManifest, stopCacheInvalidationListeners, stopChangeSignalListeners, stringify, subscribeToChangeSignals, summarizeExternalAgentUsage, surfaceOpensOperation, tableExists, toCustomActionBoolean, toCustomActionDate, toCustomActionNumber, toSnakeCase, tryReserveChangeEventSubscriberSlot, unregisterChangeFeedWriter, unregisterConfigResolver, unregisterRetentionTask, usesEmbeddedRevisionFallback, validateHelp, validatePostgresPermissionContract, validateSyncApplyItem, validateToolCall, versionConditionalResponse, warnIfSharedCacheNeutralized, withAuditContext, withEmbeddedWriteQueue, withEmbeddedWriteTransaction, writeAudit };
@@ -3,7 +3,7 @@ var staticManifest = {
3
3
  "version": "1.0.0",
4
4
  "timestamp": 0,
5
5
  "packageName": "@happyvertical/smrt-core",
6
- "packageVersion": "0.57.31",
6
+ "packageVersion": "0.57.33",
7
7
  "objects": {
8
8
  "@happyvertical/smrt-core:SmrtClass": {
9
9
  "name": "smrtclass",