@apart-tech/intelligence-core 1.18.0 → 1.20.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. package/dist/auth/ability.d.ts +1 -1
  2. package/dist/auth/ability.d.ts.map +1 -1
  3. package/dist/auth/ability.js +21 -3
  4. package/dist/auth/ability.js.map +1 -1
  5. package/dist/auth/ability.test.js +51 -10
  6. package/dist/auth/ability.test.js.map +1 -1
  7. package/dist/db/tenant.d.ts.map +1 -1
  8. package/dist/db/tenant.js +10 -0
  9. package/dist/db/tenant.js.map +1 -1
  10. package/dist/index.d.ts +14 -0
  11. package/dist/index.d.ts.map +1 -1
  12. package/dist/index.js +8 -0
  13. package/dist/index.js.map +1 -1
  14. package/dist/services/chat-capture-service.d.ts +19 -0
  15. package/dist/services/chat-capture-service.d.ts.map +1 -0
  16. package/dist/services/chat-capture-service.js +74 -0
  17. package/dist/services/chat-capture-service.js.map +1 -0
  18. package/dist/services/chat-context-service.d.ts +33 -0
  19. package/dist/services/chat-context-service.d.ts.map +1 -0
  20. package/dist/services/chat-context-service.js +110 -0
  21. package/dist/services/chat-context-service.js.map +1 -0
  22. package/dist/services/chat-service.d.ts +83 -0
  23. package/dist/services/chat-service.d.ts.map +1 -0
  24. package/dist/services/chat-service.js +103 -0
  25. package/dist/services/chat-service.js.map +1 -0
  26. package/dist/services/chat-usage-service.d.ts +36 -0
  27. package/dist/services/chat-usage-service.d.ts.map +1 -0
  28. package/dist/services/chat-usage-service.js +89 -0
  29. package/dist/services/chat-usage-service.js.map +1 -0
  30. package/dist/services/content-policy-service.d.ts +71 -0
  31. package/dist/services/content-policy-service.d.ts.map +1 -0
  32. package/dist/services/content-policy-service.js +109 -0
  33. package/dist/services/content-policy-service.js.map +1 -0
  34. package/dist/services/llm-router-service.d.ts +29 -0
  35. package/dist/services/llm-router-service.d.ts.map +1 -0
  36. package/dist/services/llm-router-service.js +70 -0
  37. package/dist/services/llm-router-service.js.map +1 -0
  38. package/dist/services/org-llm-provider-service.d.ts +47 -0
  39. package/dist/services/org-llm-provider-service.d.ts.map +1 -0
  40. package/dist/services/org-llm-provider-service.js +126 -0
  41. package/dist/services/org-llm-provider-service.js.map +1 -0
  42. package/dist/types/index.d.ts +6 -0
  43. package/dist/types/index.d.ts.map +1 -1
  44. package/package.json +1 -1
  45. package/prisma/schema.prisma +148 -0
@@ -0,0 +1,109 @@
1
+ export class ContentPolicyService {
2
+ db;
3
+ tenantCtx;
4
+ constructor(db, tenantCtx) {
5
+ this.db = db;
6
+ this.tenantCtx = tenantCtx;
7
+ }
8
+ async list() {
9
+ return this.db.orgContentPolicy.findMany({
10
+ orderBy: [{ priority: "desc" }, { createdAt: "asc" }],
11
+ });
12
+ }
13
+ async get(id) {
14
+ return this.db.orgContentPolicy.findUnique({ where: { id } });
15
+ }
16
+ async create(input) {
17
+ return this.db.orgContentPolicy.create({
18
+ data: {
19
+ organizationId: this.tenantCtx?.organizationId ?? "",
20
+ name: input.name,
21
+ description: input.description ?? "",
22
+ category: input.category,
23
+ keywords: input.keywords,
24
+ action: input.action,
25
+ enabled: input.enabled ?? true,
26
+ priority: input.priority ?? 0,
27
+ },
28
+ });
29
+ }
30
+ async update(id, input) {
31
+ return this.db.orgContentPolicy.update({
32
+ where: { id },
33
+ data: {
34
+ ...(input.name !== undefined && { name: input.name }),
35
+ ...(input.description !== undefined && { description: input.description }),
36
+ ...(input.category !== undefined && { category: input.category }),
37
+ ...(input.keywords !== undefined && { keywords: input.keywords }),
38
+ ...(input.action !== undefined && { action: input.action }),
39
+ ...(input.enabled !== undefined && { enabled: input.enabled }),
40
+ ...(input.priority !== undefined && { priority: input.priority }),
41
+ updatedAt: new Date(),
42
+ },
43
+ });
44
+ }
45
+ async delete(id) {
46
+ try {
47
+ await this.db.orgContentPolicy.delete({ where: { id } });
48
+ return true;
49
+ }
50
+ catch {
51
+ return false;
52
+ }
53
+ }
54
+ /**
55
+ * Evaluate content against all enabled policies.
56
+ * Returns whether the content is allowed and any violations found.
57
+ */
58
+ async evaluate(content) {
59
+ const policies = await this.db.orgContentPolicy.findMany({
60
+ where: { enabled: true },
61
+ orderBy: { priority: "desc" },
62
+ });
63
+ const violations = [];
64
+ for (const policy of policies) {
65
+ const keywords = policy.keywords;
66
+ for (const keyword of keywords) {
67
+ const lowerKeyword = keyword.toLowerCase();
68
+ // Word-boundary-aware case-insensitive match
69
+ const regex = new RegExp(`\\b${escapeRegex(lowerKeyword)}\\b`, "i");
70
+ if (regex.test(content)) {
71
+ violations.push({
72
+ policyId: policy.id,
73
+ policyName: policy.name,
74
+ category: policy.category,
75
+ action: policy.action,
76
+ matchedKeyword: keyword,
77
+ });
78
+ break; // One match per policy is enough
79
+ }
80
+ }
81
+ }
82
+ const allowed = !violations.some((v) => v.action === "block");
83
+ return { allowed, violations };
84
+ }
85
+ async logViolation(input) {
86
+ await this.db.contentPolicyLog.create({
87
+ data: {
88
+ organizationId: this.tenantCtx?.organizationId ?? "",
89
+ policyId: input.policyId,
90
+ policyName: input.policyName,
91
+ sessionId: input.sessionId,
92
+ userId: input.userId,
93
+ action: input.action,
94
+ matchedKeyword: input.matchedKeyword,
95
+ },
96
+ });
97
+ }
98
+ async listLogs(options) {
99
+ return this.db.contentPolicyLog.findMany({
100
+ orderBy: { createdAt: "desc" },
101
+ take: options?.limit ?? 50,
102
+ skip: options?.offset ?? 0,
103
+ });
104
+ }
105
+ }
106
+ function escapeRegex(str) {
107
+ return str.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
108
+ }
109
+ //# sourceMappingURL=content-policy-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"content-policy-service.js","sourceRoot":"","sources":["../../src/services/content-policy-service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ import type { OrgLlmProviderService } from "./org-llm-provider-service.js";
2
+ export interface RoutingCriteria {
3
+ preferredModel?: string;
4
+ preferredProvider?: string;
5
+ dataResidency?: string;
6
+ }
7
+ export interface RoutingDecision {
8
+ provider: string;
9
+ model: string;
10
+ apiKey: string;
11
+ baseUrl: string | null;
12
+ providerId: string;
13
+ }
14
+ export declare class LlmRouterService {
15
+ private providerService;
16
+ constructor(providerService: OrgLlmProviderService);
17
+ /**
18
+ * Route to the best available LLM provider/model based on criteria.
19
+ *
20
+ * Logic:
21
+ * 1. If preferredModel + preferredProvider specified and available → use it
22
+ * 2. If preferredModel specified → find first enabled provider with that model
23
+ * 3. Otherwise pick highest-priority enabled provider
24
+ * 4. Respect data residency constraints
25
+ */
26
+ route(organizationId: string, criteria?: RoutingCriteria): Promise<RoutingDecision | null>;
27
+ private resolveDecision;
28
+ }
29
+ //# sourceMappingURL=llm-router-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"llm-router-service.d.ts","sourceRoot":"","sources":["../../src/services/llm-router-service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAyB,MAAM,+BAA+B,CAAC;AAElG,MAAM,WAAW,eAAe;IAC9B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,qBAAa,gBAAgB;IACf,OAAO,CAAC,eAAe;gBAAf,eAAe,EAAE,qBAAqB;IAE1D;;;;;;;;OAQG;IACG,KAAK,CAAC,cAAc,EAAE,MAAM,EAAE,QAAQ,GAAE,eAAoB,GAAG,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC;YAoDtF,eAAe;CAgB9B"}
@@ -0,0 +1,70 @@
1
+ export class LlmRouterService {
2
+ providerService;
3
+ constructor(providerService) {
4
+ this.providerService = providerService;
5
+ }
6
+ /**
7
+ * Route to the best available LLM provider/model based on criteria.
8
+ *
9
+ * Logic:
10
+ * 1. If preferredModel + preferredProvider specified and available → use it
11
+ * 2. If preferredModel specified → find first enabled provider with that model
12
+ * 3. Otherwise pick highest-priority enabled provider
13
+ * 4. Respect data residency constraints
14
+ */
15
+ async route(organizationId, criteria = {}) {
16
+ const providers = await this.providerService.list(organizationId);
17
+ const enabledProviders = providers.filter((p) => p.enabled);
18
+ if (enabledProviders.length === 0)
19
+ return null;
20
+ // Filter by data residency
21
+ const residencyFiltered = criteria.dataResidency
22
+ ? enabledProviders.filter((p) => p.dataResidency === "any" || p.dataResidency === criteria.dataResidency)
23
+ : enabledProviders;
24
+ if (residencyFiltered.length === 0)
25
+ return null;
26
+ // If preferred provider + model specified
27
+ if (criteria.preferredProvider && criteria.preferredModel) {
28
+ const match = residencyFiltered.find((p) => p.provider === criteria.preferredProvider && p.models.includes(criteria.preferredModel));
29
+ if (match) {
30
+ return this.resolveDecision(organizationId, match.provider, criteria.preferredModel);
31
+ }
32
+ }
33
+ // If preferred model specified — find first provider that has it
34
+ if (criteria.preferredModel) {
35
+ const match = residencyFiltered.find((p) => p.models.includes(criteria.preferredModel));
36
+ if (match) {
37
+ return this.resolveDecision(organizationId, match.provider, criteria.preferredModel);
38
+ }
39
+ }
40
+ // If preferred provider specified — use its default model
41
+ if (criteria.preferredProvider) {
42
+ const match = residencyFiltered.find((p) => p.provider === criteria.preferredProvider);
43
+ if (match) {
44
+ const model = match.defaultModel ?? match.models[0];
45
+ if (model) {
46
+ return this.resolveDecision(organizationId, match.provider, model);
47
+ }
48
+ }
49
+ }
50
+ // Fall back to highest priority provider's default model
51
+ const best = residencyFiltered[0]; // already sorted by priority desc
52
+ const model = best.defaultModel ?? best.models[0];
53
+ if (!model)
54
+ return null;
55
+ return this.resolveDecision(organizationId, best.provider, model);
56
+ }
57
+ async resolveDecision(organizationId, provider, model) {
58
+ const withKey = await this.providerService.getWithKey(organizationId, provider);
59
+ if (!withKey)
60
+ return null;
61
+ return {
62
+ provider: withKey.provider,
63
+ model,
64
+ apiKey: withKey.apiKey,
65
+ baseUrl: withKey.baseUrl,
66
+ providerId: withKey.id,
67
+ };
68
+ }
69
+ }
70
+ //# sourceMappingURL=llm-router-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"llm-router-service.js","sourceRoot":"","sources":["../../src/services/llm-router-service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,47 @@
1
+ import type { PrismaClient } from "@prisma/client";
2
+ export type LlmProviderName = "openai" | "anthropic" | "google" | "mistral" | "ollama";
3
+ export interface OrgLlmProviderRecord {
4
+ id: string;
5
+ provider: string;
6
+ displayName: string;
7
+ baseUrl: string | null;
8
+ models: string[];
9
+ defaultModel: string | null;
10
+ dataResidency: string;
11
+ enabled: boolean;
12
+ priority: number;
13
+ maxTokensPerMin: number | null;
14
+ createdAt: Date;
15
+ updatedAt: Date;
16
+ }
17
+ export interface OrgLlmProviderWithKey extends OrgLlmProviderRecord {
18
+ apiKey: string;
19
+ }
20
+ export interface SetOrgLlmProviderInput {
21
+ provider: string;
22
+ displayName: string;
23
+ apiKey: string;
24
+ baseUrl?: string;
25
+ models: string[];
26
+ defaultModel?: string;
27
+ dataResidency?: string;
28
+ enabled?: boolean;
29
+ priority?: number;
30
+ maxTokensPerMin?: number;
31
+ }
32
+ export declare class OrgLlmProviderService {
33
+ private db;
34
+ constructor(db: PrismaClient);
35
+ set(organizationId: string, input: SetOrgLlmProviderInput): Promise<OrgLlmProviderRecord>;
36
+ get(organizationId: string, provider: string): Promise<OrgLlmProviderRecord | null>;
37
+ getWithKey(organizationId: string, provider: string): Promise<OrgLlmProviderWithKey | null>;
38
+ list(organizationId: string): Promise<OrgLlmProviderRecord[]>;
39
+ delete(organizationId: string, provider: string): Promise<boolean>;
40
+ listAvailableModels(organizationId: string): Promise<{
41
+ provider: string;
42
+ models: string[];
43
+ defaultModel: string | null;
44
+ }[]>;
45
+ private toRecord;
46
+ }
47
+ //# sourceMappingURL=org-llm-provider-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"org-llm-provider-service.d.ts","sourceRoot":"","sources":["../../src/services/org-llm-provider-service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAYnD,MAAM,MAAM,eAAe,GAAG,QAAQ,GAAG,WAAW,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,CAAC;AAEvF,MAAM,WAAW,oBAAoB;IACnC,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,SAAS,EAAE,IAAI,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;CACjB;AAED,MAAM,WAAW,qBAAsB,SAAQ,oBAAoB;IACjE,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,qBAAa,qBAAqB;IACpB,OAAO,CAAC,EAAE;gBAAF,EAAE,EAAE,YAAY;IAE9B,GAAG,CAAC,cAAc,EAAE,MAAM,EAAE,KAAK,EAAE,sBAAsB,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAwCzF,GAAG,CAAC,cAAc,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,GAAG,IAAI,CAAC;IAYnF,UAAU,CAAC,cAAc,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,qBAAqB,GAAG,IAAI,CAAC;IAiB3F,IAAI,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,EAAE,CAAC;IAQ7D,MAAM,CAAC,cAAc,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAgBlE,mBAAmB,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAC;QAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,EAAE,CAAC;IASjI,OAAO,CAAC,QAAQ;CA6BjB"}
@@ -0,0 +1,126 @@
1
+ import { encryptAesGcm, decryptAesGcm } from "../lib/crypto.js";
2
+ import { getAgentKeySecret } from "../lib/encryption-keys.js";
3
+ function encrypt(plaintext) {
4
+ return encryptAesGcm(plaintext, getAgentKeySecret());
5
+ }
6
+ function decrypt(encoded) {
7
+ return decryptAesGcm(encoded, getAgentKeySecret());
8
+ }
9
+ export class OrgLlmProviderService {
10
+ db;
11
+ constructor(db) {
12
+ this.db = db;
13
+ }
14
+ async set(organizationId, input) {
15
+ const encryptedKey = encrypt(input.apiKey);
16
+ const record = await this.db.orgLlmProvider.upsert({
17
+ where: {
18
+ organizationId_provider: {
19
+ organizationId,
20
+ provider: input.provider,
21
+ },
22
+ },
23
+ create: {
24
+ organizationId,
25
+ provider: input.provider,
26
+ displayName: input.displayName,
27
+ encryptedApiKey: encryptedKey,
28
+ baseUrl: input.baseUrl ?? null,
29
+ models: input.models,
30
+ defaultModel: input.defaultModel ?? null,
31
+ dataResidency: input.dataResidency ?? "any",
32
+ enabled: input.enabled ?? true,
33
+ priority: input.priority ?? 0,
34
+ maxTokensPerMin: input.maxTokensPerMin ?? null,
35
+ },
36
+ update: {
37
+ displayName: input.displayName,
38
+ encryptedApiKey: encryptedKey,
39
+ baseUrl: input.baseUrl ?? null,
40
+ models: input.models,
41
+ defaultModel: input.defaultModel ?? undefined,
42
+ dataResidency: input.dataResidency ?? undefined,
43
+ enabled: input.enabled ?? undefined,
44
+ priority: input.priority ?? undefined,
45
+ maxTokensPerMin: input.maxTokensPerMin ?? undefined,
46
+ updatedAt: new Date(),
47
+ },
48
+ });
49
+ return this.toRecord(record);
50
+ }
51
+ async get(organizationId, provider) {
52
+ const record = await this.db.orgLlmProvider.findUnique({
53
+ where: {
54
+ organizationId_provider: {
55
+ organizationId,
56
+ provider,
57
+ },
58
+ },
59
+ });
60
+ return record ? this.toRecord(record) : null;
61
+ }
62
+ async getWithKey(organizationId, provider) {
63
+ const record = await this.db.orgLlmProvider.findUnique({
64
+ where: {
65
+ organizationId_provider: {
66
+ organizationId,
67
+ provider,
68
+ },
69
+ },
70
+ });
71
+ if (!record)
72
+ return null;
73
+ return {
74
+ ...this.toRecord(record),
75
+ apiKey: decrypt(record.encryptedApiKey),
76
+ };
77
+ }
78
+ async list(organizationId) {
79
+ const records = await this.db.orgLlmProvider.findMany({
80
+ where: { organizationId },
81
+ orderBy: { priority: "desc" },
82
+ });
83
+ return records.map((r) => this.toRecord(r));
84
+ }
85
+ async delete(organizationId, provider) {
86
+ try {
87
+ await this.db.orgLlmProvider.delete({
88
+ where: {
89
+ organizationId_provider: {
90
+ organizationId,
91
+ provider,
92
+ },
93
+ },
94
+ });
95
+ return true;
96
+ }
97
+ catch {
98
+ return false;
99
+ }
100
+ }
101
+ async listAvailableModels(organizationId) {
102
+ const records = await this.db.orgLlmProvider.findMany({
103
+ where: { organizationId, enabled: true },
104
+ orderBy: { priority: "desc" },
105
+ select: { provider: true, models: true, defaultModel: true },
106
+ });
107
+ return records;
108
+ }
109
+ toRecord(row) {
110
+ return {
111
+ id: row.id,
112
+ provider: row.provider,
113
+ displayName: row.displayName,
114
+ baseUrl: row.baseUrl,
115
+ models: row.models,
116
+ defaultModel: row.defaultModel,
117
+ dataResidency: row.dataResidency,
118
+ enabled: row.enabled,
119
+ priority: row.priority,
120
+ maxTokensPerMin: row.maxTokensPerMin,
121
+ createdAt: row.createdAt,
122
+ updatedAt: row.updatedAt,
123
+ };
124
+ }
125
+ }
126
+ //# sourceMappingURL=org-llm-provider-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"org-llm-provider-service.js","sourceRoot":"","sources":["../../src/services/org-llm-provider-service.ts"],"names":[],"mappings":"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"}
@@ -131,6 +131,12 @@ export interface OrgMetadata {
131
131
  maxNodes?: number;
132
132
  minRelevance?: number;
133
133
  };
134
+ branding?: {
135
+ logoUrl?: string;
136
+ primaryColor?: string;
137
+ companyName?: string;
138
+ welcomeMessage?: string;
139
+ };
134
140
  }
135
141
  /** @deprecated Use ApartConfig instead */
136
142
  export type CollectiveConfig = ApartConfig;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@apart-tech/intelligence-core",
3
- "version": "1.18.0",
3
+ "version": "1.20.0",
4
4
  "description": "Core library: database, services, and providers for Apart Intelligence",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -45,6 +45,13 @@ model Organization {
45
45
  nodeChunks NodeChunk[]
46
46
  piiQueryLogs PiiQueryLog[]
47
47
  documents Document[]
48
+ llmProviders OrgLlmProvider[]
49
+ chatSessions ChatSession[]
50
+ chatMessages ChatMessage[]
51
+ chatGuidelines OrgChatGuideline[]
52
+ priorityDocuments OrgPriorityDocument[]
53
+ contentPolicies OrgContentPolicy[]
54
+ contentPolicyLogs ContentPolicyLog[]
48
55
 
49
56
  @@map("organizations")
50
57
  }
@@ -775,3 +782,144 @@ model SearchMetric {
775
782
  @@index([organizationId, createdAt], map: "idx_search_metrics_org_time")
776
783
  @@map("search_metrics")
777
784
  }
785
+
786
+ // ── Chat Gateway ────────────────────────────────────────────────────────────
787
+
788
+ model OrgLlmProvider {
789
+ id String @id @default(uuid()) @db.Uuid
790
+ organizationId String @map("organization_id") @db.Uuid
791
+ provider String @db.VarChar(30)
792
+ displayName String @map("display_name") @db.VarChar(200)
793
+ encryptedApiKey String @map("encrypted_api_key") @db.Text
794
+ baseUrl String? @map("base_url") @db.VarChar(500)
795
+ models String[]
796
+ defaultModel String? @map("default_model") @db.VarChar(100)
797
+ dataResidency String @default("any") @map("data_residency") @db.VarChar(10)
798
+ enabled Boolean @default(true)
799
+ priority Int @default(0)
800
+ maxTokensPerMin Int? @map("max_tokens_per_min")
801
+ createdAt DateTime @default(now()) @map("created_at") @db.Timestamptz
802
+ updatedAt DateTime @default(now()) @map("updated_at") @db.Timestamptz
803
+
804
+ organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)
805
+
806
+ @@unique([organizationId, provider], map: "uq_org_llm_provider_org_provider")
807
+ @@index([organizationId], map: "idx_org_llm_providers_org")
808
+ @@map("org_llm_providers")
809
+ }
810
+
811
+ model ChatSession {
812
+ id String @id @default(uuid()) @db.Uuid
813
+ organizationId String @map("organization_id") @db.Uuid
814
+ userId String @map("user_id") @db.Uuid
815
+ title String? @db.VarChar(500)
816
+ privacy String @default("shared") @db.VarChar(20)
817
+ status String @default("active") @db.VarChar(20)
818
+ workspaceId String? @map("workspace_id") @db.Uuid
819
+ graphCaptured Boolean @default(false) @map("graph_captured")
820
+ createdAt DateTime @default(now()) @map("created_at") @db.Timestamptz
821
+ updatedAt DateTime @default(now()) @map("updated_at") @db.Timestamptz
822
+
823
+ messages ChatMessage[]
824
+ organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)
825
+
826
+ @@index([organizationId, userId, createdAt], map: "idx_chat_sessions_org_user_time")
827
+ @@index([organizationId, privacy, createdAt], map: "idx_chat_sessions_org_privacy_time")
828
+ @@map("chat_sessions")
829
+ }
830
+
831
+ model ChatMessage {
832
+ id String @id @default(uuid()) @db.Uuid
833
+ sessionId String @map("session_id") @db.Uuid
834
+ organizationId String @map("organization_id") @db.Uuid
835
+ role String @db.VarChar(20)
836
+ content String @db.Text
837
+ contentClean String? @map("content_clean") @db.Text
838
+ model String? @db.VarChar(100)
839
+ providerId String? @map("provider_id") @db.Uuid
840
+ tokensIn Int? @map("tokens_in")
841
+ tokensOut Int? @map("tokens_out")
842
+ costCents Int? @map("cost_cents")
843
+ durationMs Int? @map("duration_ms")
844
+ piiDetected Boolean @default(false) @map("pii_detected")
845
+ piiReport Json? @map("pii_report")
846
+ contextNodeIds String[] @default([]) @map("context_node_ids")
847
+ documentIds String[] @default([]) @map("document_ids")
848
+ createdAt DateTime @default(now()) @map("created_at") @db.Timestamptz
849
+
850
+ session ChatSession @relation(fields: [sessionId], references: [id], onDelete: Cascade)
851
+ organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)
852
+
853
+ @@index([sessionId, createdAt], map: "idx_chat_messages_session_time")
854
+ @@index([organizationId, createdAt], map: "idx_chat_messages_org_time")
855
+ @@map("chat_messages")
856
+ }
857
+
858
+ model OrgChatGuideline {
859
+ id String @id @default(uuid()) @db.Uuid
860
+ organizationId String @map("organization_id") @db.Uuid
861
+ title String @db.VarChar(200)
862
+ content String @db.Text
863
+ priority Int @default(0)
864
+ enabled Boolean @default(true)
865
+ createdAt DateTime @default(now()) @map("created_at") @db.Timestamptz
866
+ updatedAt DateTime @default(now()) @map("updated_at") @db.Timestamptz
867
+
868
+ organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)
869
+
870
+ @@index([organizationId], map: "idx_org_chat_guidelines_org")
871
+ @@map("org_chat_guidelines")
872
+ }
873
+
874
+ model OrgPriorityDocument {
875
+ id String @id @default(uuid()) @db.Uuid
876
+ organizationId String @map("organization_id") @db.Uuid
877
+ nodeId String @map("node_id") @db.Uuid
878
+ boostWeight Int @default(1) @map("boost_weight")
879
+ createdAt DateTime @default(now()) @map("created_at") @db.Timestamptz
880
+ updatedAt DateTime @default(now()) @map("updated_at") @db.Timestamptz
881
+
882
+ organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)
883
+
884
+ @@unique([organizationId, nodeId], map: "uq_org_priority_doc_org_node")
885
+ @@index([organizationId], map: "idx_org_priority_documents_org")
886
+ @@map("org_priority_documents")
887
+ }
888
+
889
+ model OrgContentPolicy {
890
+ id String @id @default(uuid()) @db.Uuid
891
+ organizationId String @map("organization_id") @db.Uuid
892
+ name String @db.VarChar(200)
893
+ description String @default("") @db.Text
894
+ category String @db.VarChar(100)
895
+ keywords Json @default("[]")
896
+ action String @default("block") @db.VarChar(10)
897
+ enabled Boolean @default(true)
898
+ priority Int @default(0)
899
+ createdAt DateTime @default(now()) @map("created_at") @db.Timestamptz
900
+ updatedAt DateTime @default(now()) @map("updated_at") @db.Timestamptz
901
+
902
+ organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)
903
+
904
+ @@index([organizationId], map: "idx_org_content_policies_org")
905
+ @@map("org_content_policies")
906
+ }
907
+
908
+ model ContentPolicyLog {
909
+ id String @id @default(uuid()) @db.Uuid
910
+ organizationId String @map("organization_id") @db.Uuid
911
+ policyId String @map("policy_id") @db.Uuid
912
+ policyName String @map("policy_name") @db.VarChar(200)
913
+ sessionId String? @map("session_id") @db.Uuid
914
+ userId String @map("user_id") @db.Uuid
915
+ action String @db.VarChar(10)
916
+ matchedKeyword String @map("matched_keyword") @db.VarChar(500)
917
+ userOverride Boolean @default(false) @map("user_override")
918
+ createdAt DateTime @default(now()) @map("created_at") @db.Timestamptz
919
+
920
+ organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)
921
+
922
+ @@index([organizationId, createdAt], map: "idx_content_policy_logs_org_time")
923
+ @@index([policyId], map: "idx_content_policy_logs_policy")
924
+ @@map("content_policy_logs")
925
+ }