@apart-tech/intelligence-core 1.11.3 → 1.11.5

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 (88) hide show
  1. package/dist/auth/ability.d.ts +148 -0
  2. package/dist/auth/ability.d.ts.map +1 -0
  3. package/dist/auth/ability.js +285 -0
  4. package/dist/auth/ability.js.map +1 -0
  5. package/dist/auth/ability.test.d.ts +2 -0
  6. package/dist/auth/ability.test.d.ts.map +1 -0
  7. package/dist/auth/ability.test.js +680 -0
  8. package/dist/auth/ability.test.js.map +1 -0
  9. package/dist/auth/delegation-jwt.d.ts +167 -0
  10. package/dist/auth/delegation-jwt.d.ts.map +1 -0
  11. package/dist/auth/delegation-jwt.js +237 -0
  12. package/dist/auth/delegation-jwt.js.map +1 -0
  13. package/dist/auth/delegation-jwt.test.d.ts +2 -0
  14. package/dist/auth/delegation-jwt.test.d.ts.map +1 -0
  15. package/dist/auth/delegation-jwt.test.js +283 -0
  16. package/dist/auth/delegation-jwt.test.js.map +1 -0
  17. package/dist/auth/principal.d.ts +94 -0
  18. package/dist/auth/principal.d.ts.map +1 -0
  19. package/dist/auth/principal.js +33 -0
  20. package/dist/auth/principal.js.map +1 -0
  21. package/dist/config/config.test.d.ts +2 -0
  22. package/dist/config/config.test.d.ts.map +1 -0
  23. package/dist/config/config.test.js +57 -0
  24. package/dist/config/config.test.js.map +1 -0
  25. package/dist/config/index.d.ts.map +1 -1
  26. package/dist/config/index.js +17 -0
  27. package/dist/config/index.js.map +1 -1
  28. package/dist/index.d.ts +13 -1
  29. package/dist/index.d.ts.map +1 -1
  30. package/dist/index.js +6 -0
  31. package/dist/index.js.map +1 -1
  32. package/dist/lib/__tests__/jwt.test.d.ts +2 -0
  33. package/dist/lib/__tests__/jwt.test.d.ts.map +1 -0
  34. package/dist/lib/__tests__/jwt.test.js +97 -0
  35. package/dist/lib/__tests__/jwt.test.js.map +1 -0
  36. package/dist/lib/jwt.d.ts +20 -0
  37. package/dist/lib/jwt.d.ts.map +1 -1
  38. package/dist/lib/jwt.js +56 -3
  39. package/dist/lib/jwt.js.map +1 -1
  40. package/dist/services/__tests__/delegation-cleanup-service.test.d.ts +2 -0
  41. package/dist/services/__tests__/delegation-cleanup-service.test.d.ts.map +1 -0
  42. package/dist/services/__tests__/delegation-cleanup-service.test.js +211 -0
  43. package/dist/services/__tests__/delegation-cleanup-service.test.js.map +1 -0
  44. package/dist/services/agent-run-service.d.ts +44 -7
  45. package/dist/services/agent-run-service.d.ts.map +1 -1
  46. package/dist/services/agent-run-service.js +14 -0
  47. package/dist/services/agent-run-service.js.map +1 -1
  48. package/dist/services/agent-schedule-service.d.ts +21 -0
  49. package/dist/services/agent-schedule-service.d.ts.map +1 -1
  50. package/dist/services/agent-schedule-service.js +12 -0
  51. package/dist/services/agent-schedule-service.js.map +1 -1
  52. package/dist/services/audit-event-service.d.ts +76 -0
  53. package/dist/services/audit-event-service.d.ts.map +1 -0
  54. package/dist/services/audit-event-service.js +48 -0
  55. package/dist/services/audit-event-service.js.map +1 -0
  56. package/dist/services/cleaning-service.d.ts.map +1 -1
  57. package/dist/services/cleaning-service.js +5 -1
  58. package/dist/services/cleaning-service.js.map +1 -1
  59. package/dist/services/delegation-cleanup-service.d.ts +133 -0
  60. package/dist/services/delegation-cleanup-service.d.ts.map +1 -0
  61. package/dist/services/delegation-cleanup-service.js +111 -0
  62. package/dist/services/delegation-cleanup-service.js.map +1 -0
  63. package/dist/services/edge-service.d.ts.map +1 -1
  64. package/dist/services/edge-service.js +3 -0
  65. package/dist/services/edge-service.js.map +1 -1
  66. package/dist/services/org-agent-type-service.d.ts +15 -0
  67. package/dist/services/org-agent-type-service.d.ts.map +1 -1
  68. package/dist/services/org-agent-type-service.js +2 -0
  69. package/dist/services/org-agent-type-service.js.map +1 -1
  70. package/dist/services/usage-service.d.ts +48 -0
  71. package/dist/services/usage-service.d.ts.map +1 -0
  72. package/dist/services/usage-service.js +116 -0
  73. package/dist/services/usage-service.js.map +1 -0
  74. package/dist/services/user-service.d.ts.map +1 -1
  75. package/dist/services/user-service.js +24 -6
  76. package/dist/services/user-service.js.map +1 -1
  77. package/dist/services/user-service.test.d.ts +2 -0
  78. package/dist/services/user-service.test.d.ts.map +1 -0
  79. package/dist/services/user-service.test.js +86 -0
  80. package/dist/services/user-service.test.js.map +1 -0
  81. package/dist/types/index.d.ts +13 -0
  82. package/dist/types/index.d.ts.map +1 -1
  83. package/package.json +3 -2
  84. package/prisma/schema.prisma +158 -82
  85. package/dist/db/schema.d.ts +0 -507
  86. package/dist/db/schema.d.ts.map +0 -1
  87. package/dist/db/schema.js +0 -77
  88. package/dist/db/schema.js.map +0 -1
@@ -8,12 +8,17 @@ datasource db {
8
8
  }
9
9
 
10
10
  model Organization {
11
- id String @id @default(uuid()) @db.Uuid
12
- name String @db.VarChar(200)
13
- slug String @unique @db.VarChar(200)
14
- metadata Json @default("{}")
15
- createdAt DateTime @default(now()) @map("created_at") @db.Timestamptz
16
- auth0OrgId String? @unique @map("auth0_org_id") @db.VarChar(100)
11
+ id String @id @default(uuid()) @db.Uuid
12
+ name String @db.VarChar(200)
13
+ slug String @unique @db.VarChar(200)
14
+ metadata Json @default("{}")
15
+ createdAt DateTime @default(now()) @map("created_at") @db.Timestamptz
16
+ auth0OrgId String? @unique @map("auth0_org_id") @db.VarChar(100)
17
+ authorizationMode String @default("internal") @map("authorization_mode") @db.VarChar(30)
18
+ plan String @default("free") @db.VarChar(20)
19
+ stripeCustomerId String? @unique @map("stripe_customer_id") @db.VarChar(255)
20
+ stripeSubscriptionId String? @map("stripe_subscription_id") @db.VarChar(255)
21
+ currentPeriodEnd DateTime? @map("current_period_end") @db.Timestamptz
17
22
 
18
23
  nodes Node[]
19
24
  edges Edge[]
@@ -29,23 +34,27 @@ model Organization {
29
34
  invites Invite[]
30
35
  orgAgentTypes OrgAgentType[]
31
36
  orgMcpServers OrgMcpServer[]
37
+ usageRecords UsageRecord[]
32
38
 
33
39
  @@map("organizations")
34
40
  }
35
41
 
36
42
  model User {
37
- id String @id @default(uuid()) @db.Uuid
38
- auth0Sub String @unique @map("auth0_sub") @db.VarChar(255)
39
- email String @db.VarChar(320)
40
- name String? @db.VarChar(200)
41
- avatarUrl String? @map("avatar_url") @db.Text
42
- createdAt DateTime @default(now()) @map("created_at") @db.Timestamptz
43
- updatedAt DateTime @default(now()) @map("updated_at") @db.Timestamptz
43
+ id String @id @default(uuid()) @db.Uuid
44
+ auth0Sub String @unique @map("auth0_sub") @db.VarChar(255)
45
+ email String @db.VarChar(320)
46
+ name String? @db.VarChar(200)
47
+ avatarUrl String? @map("avatar_url") @db.Text
48
+ createdAt DateTime @default(now()) @map("created_at") @db.Timestamptz
49
+ updatedAt DateTime @default(now()) @map("updated_at") @db.Timestamptz
44
50
  claudeOauthTokenEncrypted String? @map("claude_oauth_token_encrypted") @db.Text
45
51
  apartRefreshTokenEncrypted String? @map("apart_refresh_token_encrypted") @db.Text
46
52
  agentSecretsEncrypted String? @map("agent_secrets_encrypted") @db.Text
47
53
 
48
- memberships Membership[]
54
+ memberships Membership[]
55
+ createdAgentTypes OrgAgentType[] @relation("OrgAgentTypeCreatedBy")
56
+ invokedAgentRuns AgentRun[] @relation("AgentRunInvokedBy")
57
+ scheduledAgents AgentSchedule[] @relation("AgentScheduleScheduledBy")
49
58
 
50
59
  @@index([email], map: "idx_users_email")
51
60
  @@map("users")
@@ -138,21 +147,21 @@ model Domain {
138
147
  }
139
148
 
140
149
  model Node {
141
- id String @id @default(uuid()) @db.Uuid
142
- type String @db.VarChar(100)
143
- title String @db.VarChar(500)
144
- content String @default("") @db.Text
150
+ id String @id @default(uuid()) @db.Uuid
151
+ type String @db.VarChar(100)
152
+ title String @db.VarChar(500)
153
+ content String @default("") @db.Text
145
154
  embedding Unsupported("vector")?
146
- searchVector Unsupported("tsvector")? @map("search_vector")
147
- metadata Json @default("{}")
148
- status String @default("draft") @db.VarChar(20)
149
- createdBy String @map("created_by") @db.VarChar(255)
150
- createdAt DateTime @default(now()) @map("created_at") @db.Timestamptz
151
- updatedAt DateTime @default(now()) @map("updated_at") @db.Timestamptz
152
- version Int @default(1)
153
- hasPii Boolean @default(false) @map("has_pii")
154
- domainId String? @map("domain_id") @db.Uuid
155
- organizationId String @map("organization_id") @db.Uuid
155
+ searchVector Unsupported("tsvector")? @map("search_vector")
156
+ metadata Json @default("{}")
157
+ status String @default("draft") @db.VarChar(20)
158
+ createdBy String @map("created_by") @db.VarChar(255)
159
+ createdAt DateTime @default(now()) @map("created_at") @db.Timestamptz
160
+ updatedAt DateTime @default(now()) @map("updated_at") @db.Timestamptz
161
+ version Int @default(1)
162
+ hasPii Boolean @default(false) @map("has_pii")
163
+ domainId String? @map("domain_id") @db.Uuid
164
+ organizationId String @map("organization_id") @db.Uuid
156
165
 
157
166
  sourceEdges Edge[] @relation("SourceNode")
158
167
  targetEdges Edge[] @relation("TargetNode")
@@ -191,23 +200,23 @@ model Edge {
191
200
  }
192
201
 
193
202
  model Workspace {
194
- id String @id @default(uuid()) @db.Uuid
195
- name String @db.VarChar(200)
196
- slug String @db.VarChar(200)
197
- description String @default("") @db.Text
203
+ id String @id @default(uuid()) @db.Uuid
204
+ name String @db.VarChar(200)
205
+ slug String @db.VarChar(200)
206
+ description String @default("") @db.Text
198
207
 
199
208
  // Filter rules
200
- domainSlugs Json @default("[]") @map("domain_slugs")
201
- nodeTypes Json @default("[]") @map("node_types")
202
- tags Json @default("[]") @map("tags")
209
+ domainSlugs Json @default("[]") @map("domain_slugs")
210
+ nodeTypes Json @default("[]") @map("node_types")
211
+ tags Json @default("[]") @map("tags")
203
212
 
204
213
  // Context assembly overrides
205
- maxDepth Int? @map("max_depth")
206
- maxNodes Int? @map("max_nodes")
207
- includeDrafts Boolean @default(false) @map("include_drafts")
214
+ maxDepth Int? @map("max_depth")
215
+ maxNodes Int? @map("max_nodes")
216
+ includeDrafts Boolean @default(false) @map("include_drafts")
208
217
 
209
218
  // Layer 1: map description for AI
210
- systemPrompt String @default("") @map("system_prompt") @db.Text
219
+ systemPrompt String @default("") @map("system_prompt") @db.Text
211
220
 
212
221
  metadata Json @default("{}")
213
222
  createdBy String @map("created_by") @db.VarChar(255)
@@ -251,11 +260,22 @@ model OrgAgentType {
251
260
  createdBy String @map("created_by") @db.VarChar(255)
252
261
  createdAt DateTime @default(now()) @map("created_at") @db.Timestamptz
253
262
  updatedAt DateTime @default(now()) @map("updated_at") @db.Timestamptz
254
-
255
- organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)
263
+ kind String @default("org_agent") @db.VarChar(30)
264
+ auth0ClientId String? @unique @map("auth0_client_id") @db.VarChar(255)
265
+ intrinsicPolicy Json @default("{}") @map("intrinsic_policy")
266
+ toolCatalogue String[] @default([]) @map("tool_catalogue")
267
+ requiresCiba Boolean @default(false) @map("requires_ciba")
268
+ createdByUserId String? @map("created_by_user_id") @db.Uuid
269
+
270
+ organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)
271
+ createdByUser User? @relation("OrgAgentTypeCreatedBy", fields: [createdByUserId], references: [id], onDelete: SetNull)
272
+ agentRuns AgentRun[] @relation("AgentRunAgent")
273
+ schedules AgentSchedule[] @relation("AgentScheduleAgent")
274
+ apiKeys ApiKey[] @relation("ApiKeyAgent")
256
275
 
257
276
  @@unique([organizationId, slug], map: "uq_org_agent_type_org_slug")
258
277
  @@index([organizationId], map: "idx_org_agent_types_organization")
278
+ @@index([createdByUserId], map: "idx_org_agent_types_created_by_user_id")
259
279
  @@map("org_agent_types")
260
280
  }
261
281
 
@@ -279,56 +299,75 @@ model OrgMcpServer {
279
299
  }
280
300
 
281
301
  model AgentRun {
282
- id String @id @default(uuid()) @db.Uuid
283
- organizationId String @map("organization_id") @db.Uuid
284
- prompt String @db.Text
285
- type String @default("researcher") @db.VarChar(30)
286
- status String @default("pending") @db.VarChar(20)
287
- result String @default("") @db.Text
288
- error String? @db.Text
289
- sandboxId String? @map("sandbox_id") @db.VarChar(100)
290
- model String @default("sonnet") @db.VarChar(50)
291
- startedAt DateTime @default(now()) @map("started_at") @db.Timestamptz
292
- completedAt DateTime? @map("completed_at") @db.Timestamptz
293
- createdBy String @map("created_by") @db.VarChar(255)
294
- scheduleId String? @map("schedule_id") @db.Uuid
295
-
296
- organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)
297
- schedule AgentSchedule? @relation(fields: [scheduleId], references: [id], onDelete: SetNull)
302
+ id String @id @default(uuid()) @db.Uuid
303
+ organizationId String @map("organization_id") @db.Uuid
304
+ prompt String @db.Text
305
+ type String @default("researcher") @db.VarChar(30)
306
+ status String @default("pending") @db.VarChar(20)
307
+ result String @default("") @db.Text
308
+ error String? @db.Text
309
+ sandboxId String? @map("sandbox_id") @db.VarChar(100)
310
+ model String @default("sonnet") @db.VarChar(50)
311
+ startedAt DateTime @default(now()) @map("started_at") @db.Timestamptz
312
+ completedAt DateTime? @map("completed_at") @db.Timestamptz
313
+ createdBy String @map("created_by") @db.VarChar(255)
314
+ scheduleId String? @map("schedule_id") @db.Uuid
315
+ agentId String? @map("agent_id") @db.Uuid
316
+ invokedByUserId String? @map("invoked_by_user_id") @db.Uuid
317
+ parentAgentRunId String? @map("parent_agent_run_id") @db.Uuid
318
+ actClaim Json? @map("act_claim")
319
+ capturedAbility Json? @map("captured_ability")
320
+
321
+ organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)
322
+ schedule AgentSchedule? @relation(fields: [scheduleId], references: [id], onDelete: SetNull)
323
+ agent OrgAgentType? @relation("AgentRunAgent", fields: [agentId], references: [id], onDelete: SetNull)
324
+ invokedByUser User? @relation("AgentRunInvokedBy", fields: [invokedByUserId], references: [id], onDelete: SetNull)
325
+ parent AgentRun? @relation("AgentRunParent", fields: [parentAgentRunId], references: [id], onDelete: SetNull)
326
+ children AgentRun[] @relation("AgentRunParent")
298
327
 
299
328
  @@index([organizationId], map: "idx_agent_runs_organization")
300
329
  @@index([status], map: "idx_agent_runs_status")
301
330
  @@index([type], map: "idx_agent_runs_type")
302
331
  @@index([scheduleId], map: "idx_agent_runs_schedule")
332
+ @@index([agentId], map: "idx_agent_runs_agent_id")
333
+ @@index([invokedByUserId], map: "idx_agent_runs_invoked_by_user_id")
334
+ @@index([parentAgentRunId], map: "idx_agent_runs_parent_agent_run_id")
303
335
  @@map("agent_runs")
304
336
  }
305
337
 
306
338
  model AgentSchedule {
307
- id String @id @default(uuid()) @db.Uuid
308
- organizationId String @map("organization_id") @db.Uuid
309
- name String @db.VarChar(200)
310
- description String @default("") @db.Text
311
- cronExpression String @map("cron_expression") @db.VarChar(100)
312
- timezone String @default("UTC") @db.VarChar(50)
313
- agentType String @default("researcher") @map("agent_type") @db.VarChar(30)
314
- prompt String @db.Text
315
- model String @default("sonnet") @db.VarChar(50)
316
- workspace String? @db.VarChar(200)
317
- enabled Boolean @default(true)
318
- apiKeyEncrypted String @map("api_key_encrypted") @db.Text
319
- apiKeyHash String @map("api_key_hash") @db.VarChar(64)
320
- gcpJobName String? @map("gcp_job_name") @db.VarChar(500)
321
- lastTriggeredAt DateTime? @map("last_triggered_at") @db.Timestamptz
322
- lastRunId String? @map("last_run_id") @db.Uuid
323
- createdBy String @map("created_by") @db.VarChar(255)
324
- createdAt DateTime @default(now()) @map("created_at") @db.Timestamptz
325
- updatedAt DateTime @default(now()) @map("updated_at") @db.Timestamptz
326
-
327
- organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)
328
- runs AgentRun[]
339
+ id String @id @default(uuid()) @db.Uuid
340
+ organizationId String @map("organization_id") @db.Uuid
341
+ name String @db.VarChar(200)
342
+ description String @default("") @db.Text
343
+ cronExpression String @map("cron_expression") @db.VarChar(100)
344
+ timezone String @default("UTC") @db.VarChar(50)
345
+ agentType String @default("researcher") @map("agent_type") @db.VarChar(30)
346
+ prompt String @db.Text
347
+ model String @default("sonnet") @db.VarChar(50)
348
+ workspace String? @db.VarChar(200)
349
+ enabled Boolean @default(true)
350
+ apiKeyEncrypted String @map("api_key_encrypted") @db.Text
351
+ apiKeyHash String @map("api_key_hash") @db.VarChar(64)
352
+ gcpJobName String? @map("gcp_job_name") @db.VarChar(500)
353
+ lastTriggeredAt DateTime? @map("last_triggered_at") @db.Timestamptz
354
+ lastRunId String? @map("last_run_id") @db.Uuid
355
+ createdBy String @map("created_by") @db.VarChar(255)
356
+ createdAt DateTime @default(now()) @map("created_at") @db.Timestamptz
357
+ updatedAt DateTime @default(now()) @map("updated_at") @db.Timestamptz
358
+ agentId String? @map("agent_id") @db.Uuid
359
+ scheduledByUserId String? @map("scheduled_by_user_id") @db.Uuid
360
+ capturedAbility Json? @map("captured_ability")
361
+
362
+ organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)
363
+ runs AgentRun[]
364
+ agent OrgAgentType? @relation("AgentScheduleAgent", fields: [agentId], references: [id], onDelete: SetNull)
365
+ scheduledByUser User? @relation("AgentScheduleScheduledBy", fields: [scheduledByUserId], references: [id], onDelete: SetNull)
329
366
 
330
367
  @@index([organizationId], map: "idx_agent_schedules_organization")
331
368
  @@index([apiKeyHash], map: "idx_agent_schedules_api_key_hash")
369
+ @@index([agentId], map: "idx_agent_schedules_agent_id")
370
+ @@index([scheduledByUserId], map: "idx_agent_schedules_scheduled_by_user_id")
332
371
  @@map("agent_schedules")
333
372
  }
334
373
 
@@ -341,17 +380,54 @@ model ApiKey {
341
380
  lastUsedAt DateTime? @map("last_used_at") @db.Timestamptz
342
381
  active Int @default(1)
343
382
  organizationId String @map("organization_id") @db.Uuid
383
+ agentId String? @map("agent_id") @db.Uuid
344
384
 
345
- organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)
385
+ organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)
386
+ agent OrgAgentType? @relation("ApiKeyAgent", fields: [agentId], references: [id], onDelete: SetNull)
346
387
 
347
388
  @@index([organizationId], map: "idx_api_keys_organization")
389
+ @@index([agentId], map: "idx_api_keys_agent_id")
348
390
  @@map("api_keys")
349
391
  }
350
392
 
351
393
  model EmbeddingCache {
352
- contentHash String @id @map("content_hash") @db.VarChar(64)
394
+ contentHash String @id @map("content_hash") @db.VarChar(64)
353
395
  embedding Unsupported("vector")
354
- createdAt DateTime @default(now()) @map("created_at") @db.Timestamptz
396
+ createdAt DateTime @default(now()) @map("created_at") @db.Timestamptz
355
397
 
356
398
  @@map("embedding_cache")
357
399
  }
400
+
401
+ model AuditEvent {
402
+ id String @id @default(uuid()) @db.Uuid
403
+ agentRunId String? @map("agent_run_id") @db.Uuid
404
+ principalType String @map("principal_type") @db.VarChar(30)
405
+ principalId String @map("principal_id") @db.VarChar(255)
406
+ organizationId String @map("organization_id") @db.Uuid
407
+ action String @db.VarChar(100)
408
+ subjectType String? @map("subject_type") @db.VarChar(100)
409
+ subjectId String? @map("subject_id") @db.VarChar(255)
410
+ effectiveAbility Json @default("{}") @map("effective_ability")
411
+ result String @db.VarChar(20)
412
+ createdAt DateTime @default(now()) @map("created_at") @db.Timestamptz
413
+
414
+ @@index([organizationId], map: "idx_audit_events_organization_id")
415
+ @@index([agentRunId], map: "idx_audit_events_agent_run_id")
416
+ @@index([createdAt], map: "idx_audit_events_created_at")
417
+ @@map("audit_events")
418
+ }
419
+
420
+ model UsageRecord {
421
+ id String @id @default(uuid()) @db.Uuid
422
+ organizationId String @map("organization_id") @db.Uuid
423
+ metric String @db.VarChar(50)
424
+ periodStart DateTime @map("period_start") @db.Date
425
+ count Int @default(0)
426
+ updatedAt DateTime @default(now()) @map("updated_at") @db.Timestamptz
427
+
428
+ organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)
429
+
430
+ @@unique([organizationId, metric, periodStart], map: "uq_usage_org_metric_period")
431
+ @@index([organizationId], map: "idx_usage_records_organization")
432
+ @@map("usage_records")
433
+ }