@opengeni/db 0.31.1 → 0.36.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/browser-auth.d.ts +209 -1
- package/dist/browser-downloads.d.ts +51 -0
- package/dist/browser-identities.d.ts +11 -2
- package/dist/browser-sessions.d.ts +83 -1
- package/dist/browser-state-artifacts.d.ts +75 -1
- package/dist/canonical-human-identities.d.ts +48 -0
- package/dist/canonical-human-identities.js +28 -0
- package/dist/canonical-human-identities.js.map +1 -0
- package/dist/capability-integrations.d.ts +8 -6
- package/dist/{chunk-MWDVXQOL.js → chunk-5KTIEDX7.js} +5773 -4212
- package/dist/chunk-5KTIEDX7.js.map +1 -0
- package/dist/chunk-FPVAD4CO.js +117 -0
- package/dist/chunk-FPVAD4CO.js.map +1 -0
- package/dist/chunk-GYO7ED2Q.js +259 -0
- package/dist/chunk-GYO7ED2Q.js.map +1 -0
- package/dist/{chunk-F5FT7BEZ.js → chunk-HSOWSYOX.js} +2 -2
- package/dist/{chunk-YHZXQ7HP.js → chunk-VKLB2ZGI.js} +446 -19
- package/dist/chunk-VKLB2ZGI.js.map +1 -0
- package/dist/{chunk-NBE6CHRI.js → chunk-VTPRIXKG.js} +49 -9
- package/dist/chunk-VTPRIXKG.js.map +1 -0
- package/dist/{chunk-ISI2TIUG.js → chunk-Z7VYMNPZ.js} +76 -4
- package/dist/chunk-Z7VYMNPZ.js.map +1 -0
- package/dist/database.d.ts +5 -0
- package/dist/editable-artifact-durable-export.js +2 -2
- package/dist/editable-artifacts.js +3 -3
- package/dist/index.d.ts +467 -29
- package/dist/index.js +23247 -16232
- package/dist/index.js.map +1 -1
- package/dist/insights.d.ts +23 -7
- package/dist/integration-bindings.d.ts +24 -24
- package/dist/integration-facets.d.ts +99 -0
- package/dist/interaction-revisions.d.ts +11 -0
- package/dist/interaction-schema.d.ts +698 -34
- package/dist/persistence-errors.d.ts +8 -0
- package/dist/provision-roles.js +1 -1
- package/dist/runtime-posture.d.ts +8 -7
- package/dist/schema.d.ts +9464 -5412
- package/dist/schema.js +51 -9
- package/dist/session-control.d.ts +29 -3
- package/dist/session-tenancy.d.ts +44 -0
- package/dist/session-tenancy.js +16 -0
- package/dist/session-tenancy.js.map +1 -0
- package/dist/slack-task-policy-schema.d.ts +847 -0
- package/dist/slack-task-policy.d.ts +65 -0
- package/dist/task-notes-schema.d.ts +924 -0
- package/dist/task-notes.d.ts +85 -0
- package/dist/video-generation.d.ts +9 -0
- package/dist/video-generation.js +5 -3
- package/dist/xai-subscription.d.ts +326 -0
- package/drizzle/0212_browser_state_transfer_hardening.sql +560 -0
- package/drizzle/0213_browser_interaction_authority.sql +67 -0
- package/drizzle/0214_browser_download_saves.sql +34 -0
- package/drizzle/0215_browser_controller_host.sql +385 -0
- package/drizzle/0216_browser_auth_health_evidence.sql +137 -0
- package/drizzle/0217_external_browser_auth_operations.sql +22 -0
- package/drizzle/0218_organization_tenancy_foundation.sql +299 -0
- package/drizzle/0219_organization_tenancy_managed_human_provisioning.sql +317 -0
- package/drizzle/0219_site_auth_maintenance_sessions.sql +234 -0
- package/drizzle/0220_memory_slack_append_only_cascade.sql +38 -0
- package/drizzle/0220_session_channels.sql +54 -0
- package/drizzle/0221_sessions_channel_index.sql +5 -0
- package/drizzle/0222_session_visibility_authority_epochs.sql +158 -0
- package/drizzle/0222_sessions_channel_fk.sql +89 -0
- package/drizzle/0223_pending_tool_event_output.sql +55 -0
- package/drizzle/0223_sessions_channel_fk_validate.sql +118 -0
- package/drizzle/0224_slack_post_outcome_reconciliation.sql +123 -0
- package/drizzle/0225_session_visibility_fork_activation.sql +1363 -0
- package/drizzle/0226_personal_codex_authority_foundation.sql +365 -0
- package/drizzle/0227_slack_native_actions.sql +145 -0
- package/drizzle/0228_interaction_controller_data_plane.sql +14 -0
- package/drizzle/0228_slack_task_policy.sql +400 -0
- package/drizzle/0229_slack_inbox_file_fact.sql +10 -0
- package/drizzle/0230_user_scoped_variable_sets_rigs.sql +84 -0
- package/drizzle/0231_integration_definition_identity_cutover.sql +271 -0
- package/drizzle/0232_integration_facet_authority_cutover.sql +610 -0
- package/drizzle/0233_skill_and_integration_authority_cutover.sql +1162 -0
- package/drizzle/0234_xai_subscription_authority.sql +1139 -0
- package/drizzle/0235_canonical_human_login_bindings.sql +920 -0
- package/drizzle/0236_browser_identity_lifecycle.sql +39 -0
- package/drizzle/0236_session_visibility_slack_policy.sql +72 -0
- package/drizzle/0237_interaction_transition_reaper.sql +263 -0
- package/drizzle/0238_goal_persistence_policy.sql +471 -0
- package/drizzle/0238_recover_unclaimed_session_turns.sql +307 -0
- package/drizzle/0238_supergrok_realtime_model.sql +29 -0
- package/drizzle/0239_supergrok_video_funding.sql +50 -0
- package/drizzle/0239_task_tree_notes.sql +990 -0
- package/package.json +13 -5
- package/src/browser-auth.ts +2600 -123
- package/src/browser-downloads.ts +517 -0
- package/src/browser-identities.ts +220 -3
- package/src/browser-sessions.ts +334 -45
- package/src/browser-state-artifacts.ts +402 -12
- package/src/canonical-human-identities.ts +317 -0
- package/src/capability-integrations.ts +121 -213
- package/src/database.ts +41 -1
- package/src/index.ts +4625 -411
- package/src/insights.ts +109 -28
- package/src/integration-bindings.ts +101 -101
- package/src/{integration-features.ts → integration-facets.ts} +187 -184
- package/src/interaction-revisions.ts +33 -3
- package/src/interaction-schema.ts +311 -8
- package/src/pack-components.ts +43 -43
- package/src/pack-installations.ts +0 -43
- package/src/persistence-errors.ts +60 -1
- package/src/plugin-packages.ts +9 -9
- package/src/provision-roles.ts +232 -0
- package/src/runtime-posture.ts +227 -14
- package/src/schema.ts +1188 -75
- package/src/session-control.ts +122 -37
- package/src/session-queue-commands.ts +78 -1
- package/src/session-tenancy.ts +188 -0
- package/src/session-tool-call-settlement.ts +9 -3
- package/src/slack-task-policy-schema.ts +130 -0
- package/src/slack-task-policy.ts +341 -0
- package/src/task-notes-schema.ts +135 -0
- package/src/task-notes.ts +178 -0
- package/src/video-generation.ts +90 -12
- package/src/workspace-artifacts.ts +1 -1
- package/src/xai-subscription.ts +1887 -0
- package/dist/chunk-ISI2TIUG.js.map +0 -1
- package/dist/chunk-MWDVXQOL.js.map +0 -1
- package/dist/chunk-NBE6CHRI.js.map +0 -1
- package/dist/chunk-YHZXQ7HP.js.map +0 -1
- package/dist/integration-features.d.ts +0 -99
- /package/dist/{chunk-F5FT7BEZ.js.map → chunk-HSOWSYOX.js.map} +0 -0
package/src/insights.ts
CHANGED
|
@@ -125,6 +125,10 @@ function dayKeyUtc(value: Date): string {
|
|
|
125
125
|
return value.toISOString().slice(0, 10);
|
|
126
126
|
}
|
|
127
127
|
|
|
128
|
+
function hourKeyUtc(value: Date): string {
|
|
129
|
+
return `${value.toISOString().slice(0, 13)}:00`;
|
|
130
|
+
}
|
|
131
|
+
|
|
128
132
|
export async function sumUsageQuantityInRange(
|
|
129
133
|
db: Database,
|
|
130
134
|
input: {
|
|
@@ -153,7 +157,7 @@ export async function sumUsageQuantityInRange(
|
|
|
153
157
|
});
|
|
154
158
|
}
|
|
155
159
|
|
|
156
|
-
|
|
160
|
+
async function sumUsageQuantityByBucket(
|
|
157
161
|
db: Database,
|
|
158
162
|
input: {
|
|
159
163
|
workspaceId: string;
|
|
@@ -161,12 +165,21 @@ export async function sumUsageQuantityByDay(
|
|
|
161
165
|
since: Date;
|
|
162
166
|
until: Date;
|
|
163
167
|
},
|
|
168
|
+
granularity: "day" | "hour",
|
|
164
169
|
): Promise<Map<string, number>> {
|
|
165
170
|
const context = await rlsContextForWorkspace(db, input.workspaceId);
|
|
166
171
|
return await withRlsContext(db, context, async (scopedDb) => {
|
|
172
|
+
const bucket =
|
|
173
|
+
granularity === "hour"
|
|
174
|
+
? sql<string>`to_char(date_trunc('hour', ${schema.usageEvents.occurredAt} at time zone 'UTC'), 'YYYY-MM-DD"T"HH24:00')`
|
|
175
|
+
: sql<string>`to_char(date_trunc('day', ${schema.usageEvents.occurredAt} at time zone 'UTC'), 'YYYY-MM-DD')`;
|
|
176
|
+
const bucketGroup =
|
|
177
|
+
granularity === "hour"
|
|
178
|
+
? sql`date_trunc('hour', ${schema.usageEvents.occurredAt} at time zone 'UTC')`
|
|
179
|
+
: sql`date_trunc('day', ${schema.usageEvents.occurredAt} at time zone 'UTC')`;
|
|
167
180
|
const rows = await scopedDb
|
|
168
181
|
.select({
|
|
169
|
-
|
|
182
|
+
bucket,
|
|
170
183
|
total: sql<number>`coalesce(sum(${schema.usageEvents.quantity}), 0)`,
|
|
171
184
|
})
|
|
172
185
|
.from(schema.usageEvents)
|
|
@@ -178,11 +191,35 @@ export async function sumUsageQuantityByDay(
|
|
|
178
191
|
lt(schema.usageEvents.occurredAt, input.until),
|
|
179
192
|
),
|
|
180
193
|
)
|
|
181
|
-
.groupBy(
|
|
182
|
-
return new Map(rows.map((row) => [row.
|
|
194
|
+
.groupBy(bucketGroup);
|
|
195
|
+
return new Map(rows.map((row) => [row.bucket, Number(row.total)]));
|
|
183
196
|
});
|
|
184
197
|
}
|
|
185
198
|
|
|
199
|
+
export async function sumUsageQuantityByDay(
|
|
200
|
+
db: Database,
|
|
201
|
+
input: {
|
|
202
|
+
workspaceId: string;
|
|
203
|
+
eventType: string;
|
|
204
|
+
since: Date;
|
|
205
|
+
until: Date;
|
|
206
|
+
},
|
|
207
|
+
): Promise<Map<string, number>> {
|
|
208
|
+
return await sumUsageQuantityByBucket(db, input, "day");
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
export async function sumUsageQuantityByHour(
|
|
212
|
+
db: Database,
|
|
213
|
+
input: {
|
|
214
|
+
workspaceId: string;
|
|
215
|
+
eventType: string;
|
|
216
|
+
since: Date;
|
|
217
|
+
until: Date;
|
|
218
|
+
},
|
|
219
|
+
): Promise<Map<string, number>> {
|
|
220
|
+
return await sumUsageQuantityByBucket(db, input, "hour");
|
|
221
|
+
}
|
|
222
|
+
|
|
186
223
|
export async function aggregateModelCallFacts(
|
|
187
224
|
db: Database,
|
|
188
225
|
input: {
|
|
@@ -249,7 +286,23 @@ export async function aggregateModelCallFacts(
|
|
|
249
286
|
});
|
|
250
287
|
}
|
|
251
288
|
|
|
252
|
-
|
|
289
|
+
type ModelCallFactSeriesAggregate = {
|
|
290
|
+
costMicros: number;
|
|
291
|
+
estimatedProviderCostMicros: number;
|
|
292
|
+
estimatedProviderCostKnownCalls: number;
|
|
293
|
+
inputTokens: number;
|
|
294
|
+
outputTokens: number;
|
|
295
|
+
cachedTokens: number;
|
|
296
|
+
cacheInputTokens: number;
|
|
297
|
+
cacheWriteTokens: number;
|
|
298
|
+
reasoningTokens: number;
|
|
299
|
+
totalTokens: number;
|
|
300
|
+
tokenKnownCalls: number;
|
|
301
|
+
cacheKnownCalls: number;
|
|
302
|
+
calls: number;
|
|
303
|
+
};
|
|
304
|
+
|
|
305
|
+
async function aggregateModelCallFactsByBucket(
|
|
253
306
|
db: Database,
|
|
254
307
|
input: {
|
|
255
308
|
workspaceId: string;
|
|
@@ -258,26 +311,8 @@ export async function aggregateModelCallFactsByDay(
|
|
|
258
311
|
provider?: string | null;
|
|
259
312
|
model?: string | null;
|
|
260
313
|
},
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
string,
|
|
264
|
-
{
|
|
265
|
-
costMicros: number;
|
|
266
|
-
estimatedProviderCostMicros: number;
|
|
267
|
-
estimatedProviderCostKnownCalls: number;
|
|
268
|
-
inputTokens: number;
|
|
269
|
-
outputTokens: number;
|
|
270
|
-
cachedTokens: number;
|
|
271
|
-
cacheInputTokens: number;
|
|
272
|
-
cacheWriteTokens: number;
|
|
273
|
-
reasoningTokens: number;
|
|
274
|
-
totalTokens: number;
|
|
275
|
-
tokenKnownCalls: number;
|
|
276
|
-
cacheKnownCalls: number;
|
|
277
|
-
calls: number;
|
|
278
|
-
}
|
|
279
|
-
>
|
|
280
|
-
> {
|
|
314
|
+
granularity: "day" | "hour",
|
|
315
|
+
): Promise<Map<string, ModelCallFactSeriesAggregate>> {
|
|
281
316
|
const context = await rlsContextForWorkspace(db, input.workspaceId);
|
|
282
317
|
return await withRlsContext(db, context, async (scopedDb) => {
|
|
283
318
|
const clauses = [
|
|
@@ -287,9 +322,17 @@ export async function aggregateModelCallFactsByDay(
|
|
|
287
322
|
...(input.provider ? [eq(schema.modelCallFacts.provider, input.provider)] : []),
|
|
288
323
|
...(input.model ? [eq(schema.modelCallFacts.model, input.model)] : []),
|
|
289
324
|
];
|
|
325
|
+
const bucket =
|
|
326
|
+
granularity === "hour"
|
|
327
|
+
? sql<string>`to_char(date_trunc('hour', ${schema.modelCallFacts.occurredAt} at time zone 'UTC'), 'YYYY-MM-DD"T"HH24:00')`
|
|
328
|
+
: sql<string>`to_char(date_trunc('day', ${schema.modelCallFacts.occurredAt} at time zone 'UTC'), 'YYYY-MM-DD')`;
|
|
329
|
+
const bucketGroup =
|
|
330
|
+
granularity === "hour"
|
|
331
|
+
? sql`date_trunc('hour', ${schema.modelCallFacts.occurredAt} at time zone 'UTC')`
|
|
332
|
+
: sql`date_trunc('day', ${schema.modelCallFacts.occurredAt} at time zone 'UTC')`;
|
|
290
333
|
const rows = await scopedDb
|
|
291
334
|
.select({
|
|
292
|
-
|
|
335
|
+
bucket,
|
|
293
336
|
costMicros: sql<number>`coalesce(sum(${schema.modelCallFacts.pricedCostMicros}) filter (where ${schema.modelCallFacts.billingPath} = 'opengeni_credits'), 0)`,
|
|
294
337
|
estimatedProviderCostMicros: sql<number>`coalesce(sum(${schema.modelCallFacts.estimatedProviderCostMicros}), 0)`,
|
|
295
338
|
estimatedProviderCostKnownCalls: sql<number>`count(${schema.modelCallFacts.estimatedProviderCostMicros})::int`,
|
|
@@ -306,10 +349,10 @@ export async function aggregateModelCallFactsByDay(
|
|
|
306
349
|
})
|
|
307
350
|
.from(schema.modelCallFacts)
|
|
308
351
|
.where(and(...clauses))
|
|
309
|
-
.groupBy(
|
|
352
|
+
.groupBy(bucketGroup);
|
|
310
353
|
return new Map(
|
|
311
354
|
rows.map((row) => [
|
|
312
|
-
row.
|
|
355
|
+
row.bucket,
|
|
313
356
|
{
|
|
314
357
|
costMicros: Number(row.costMicros),
|
|
315
358
|
estimatedProviderCostMicros: Number(row.estimatedProviderCostMicros),
|
|
@@ -330,6 +373,32 @@ export async function aggregateModelCallFactsByDay(
|
|
|
330
373
|
});
|
|
331
374
|
}
|
|
332
375
|
|
|
376
|
+
export async function aggregateModelCallFactsByDay(
|
|
377
|
+
db: Database,
|
|
378
|
+
input: {
|
|
379
|
+
workspaceId: string;
|
|
380
|
+
since: Date;
|
|
381
|
+
until: Date;
|
|
382
|
+
provider?: string | null;
|
|
383
|
+
model?: string | null;
|
|
384
|
+
},
|
|
385
|
+
): Promise<Map<string, ModelCallFactSeriesAggregate>> {
|
|
386
|
+
return await aggregateModelCallFactsByBucket(db, input, "day");
|
|
387
|
+
}
|
|
388
|
+
|
|
389
|
+
export async function aggregateModelCallFactsByHour(
|
|
390
|
+
db: Database,
|
|
391
|
+
input: {
|
|
392
|
+
workspaceId: string;
|
|
393
|
+
since: Date;
|
|
394
|
+
until: Date;
|
|
395
|
+
provider?: string | null;
|
|
396
|
+
model?: string | null;
|
|
397
|
+
},
|
|
398
|
+
): Promise<Map<string, ModelCallFactSeriesAggregate>> {
|
|
399
|
+
return await aggregateModelCallFactsByBucket(db, input, "hour");
|
|
400
|
+
}
|
|
401
|
+
|
|
333
402
|
export async function aggregateWarmSecondsByGroup(
|
|
334
403
|
db: Database,
|
|
335
404
|
input: InsightsTimeWindow & { workspaceId: string; limit?: number },
|
|
@@ -783,6 +852,18 @@ export function enumerateUtcDays(since: Date, until: Date): string[] {
|
|
|
783
852
|
return days;
|
|
784
853
|
}
|
|
785
854
|
|
|
855
|
+
export function enumerateUtcHours(since: Date, until: Date): string[] {
|
|
856
|
+
const hours: string[] = [];
|
|
857
|
+
const cursor = new Date(since);
|
|
858
|
+
cursor.setUTCMinutes(0, 0, 0);
|
|
859
|
+
const end = until.getTime();
|
|
860
|
+
while (cursor.getTime() < end) {
|
|
861
|
+
hours.push(hourKeyUtc(cursor));
|
|
862
|
+
cursor.setUTCHours(cursor.getUTCHours() + 1);
|
|
863
|
+
}
|
|
864
|
+
return hours;
|
|
865
|
+
}
|
|
866
|
+
|
|
786
867
|
/**
|
|
787
868
|
* Idempotent YTD backfill from authoritative agent.model.usage into model_call_facts.
|
|
788
869
|
* Never rewrites billing rows or existing live facts (onConflictDoNothing).
|