@apart-tech/intelligence-core 0.1.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 (62) hide show
  1. package/dist/config/index.d.ts +3 -0
  2. package/dist/config/index.d.ts.map +1 -0
  3. package/dist/config/index.js +97 -0
  4. package/dist/config/index.js.map +1 -0
  5. package/dist/db/connection.d.ts +7 -0
  6. package/dist/db/connection.d.ts.map +1 -0
  7. package/dist/db/connection.js +49 -0
  8. package/dist/db/connection.js.map +1 -0
  9. package/dist/db/schema.d.ts +507 -0
  10. package/dist/db/schema.d.ts.map +1 -0
  11. package/dist/db/schema.js +77 -0
  12. package/dist/db/schema.js.map +1 -0
  13. package/dist/db/tenant.d.ts +8 -0
  14. package/dist/db/tenant.d.ts.map +1 -0
  15. package/dist/db/tenant.js +92 -0
  16. package/dist/db/tenant.js.map +1 -0
  17. package/dist/index.d.ts +16 -0
  18. package/dist/index.d.ts.map +1 -0
  19. package/dist/index.js +18 -0
  20. package/dist/index.js.map +1 -0
  21. package/dist/providers/index.d.ts +5 -0
  22. package/dist/providers/index.d.ts.map +1 -0
  23. package/dist/providers/index.js +16 -0
  24. package/dist/providers/index.js.map +1 -0
  25. package/dist/providers/openai.d.ts +9 -0
  26. package/dist/providers/openai.d.ts.map +1 -0
  27. package/dist/providers/openai.js +34 -0
  28. package/dist/providers/openai.js.map +1 -0
  29. package/dist/services/cleaning-service.d.ts +152 -0
  30. package/dist/services/cleaning-service.d.ts.map +1 -0
  31. package/dist/services/cleaning-service.js +632 -0
  32. package/dist/services/cleaning-service.js.map +1 -0
  33. package/dist/services/context-service.d.ts +13 -0
  34. package/dist/services/context-service.d.ts.map +1 -0
  35. package/dist/services/context-service.js +74 -0
  36. package/dist/services/context-service.js.map +1 -0
  37. package/dist/services/domain-seed-data.d.ts +8 -0
  38. package/dist/services/domain-seed-data.d.ts.map +1 -0
  39. package/dist/services/domain-seed-data.js +84 -0
  40. package/dist/services/domain-seed-data.js.map +1 -0
  41. package/dist/services/domain-service.d.ts +26 -0
  42. package/dist/services/domain-service.d.ts.map +1 -0
  43. package/dist/services/domain-service.js +101 -0
  44. package/dist/services/domain-service.js.map +1 -0
  45. package/dist/services/edge-service.d.ts +25 -0
  46. package/dist/services/edge-service.d.ts.map +1 -0
  47. package/dist/services/edge-service.js +90 -0
  48. package/dist/services/edge-service.js.map +1 -0
  49. package/dist/services/node-service.d.ts +34 -0
  50. package/dist/services/node-service.d.ts.map +1 -0
  51. package/dist/services/node-service.js +113 -0
  52. package/dist/services/node-service.js.map +1 -0
  53. package/dist/services/search-service.d.ts +15 -0
  54. package/dist/services/search-service.d.ts.map +1 -0
  55. package/dist/services/search-service.js +118 -0
  56. package/dist/services/search-service.js.map +1 -0
  57. package/dist/types/index.d.ts +74 -0
  58. package/dist/types/index.d.ts.map +1 -0
  59. package/dist/types/index.js +2 -0
  60. package/dist/types/index.js.map +1 -0
  61. package/package.json +42 -0
  62. package/prisma/schema.prisma +114 -0
@@ -0,0 +1,77 @@
1
+ import { pgTable, uuid, varchar, text, jsonb, integer, real, timestamp, index, customType, } from "drizzle-orm/pg-core";
2
+ // Custom type for pgvector
3
+ const vector = customType({
4
+ dataType() {
5
+ return "vector(1536)";
6
+ },
7
+ toDriver(value) {
8
+ return `[${value.join(",")}]`;
9
+ },
10
+ fromDriver(value) {
11
+ return JSON.parse(value);
12
+ },
13
+ });
14
+ // Custom type for tsvector
15
+ const tsvector = customType({
16
+ dataType() {
17
+ return "tsvector";
18
+ },
19
+ });
20
+ // ── Nodes ──────────────────────────────────────────────────────────────────
21
+ export const nodes = pgTable("nodes", {
22
+ id: uuid("id").primaryKey().defaultRandom(),
23
+ type: varchar("type", { length: 100 }).notNull(),
24
+ title: varchar("title", { length: 500 }).notNull(),
25
+ content: text("content").notNull().default(""),
26
+ embedding: vector("embedding"),
27
+ searchVector: tsvector("search_vector"),
28
+ metadata: jsonb("metadata").$type().default({}),
29
+ status: varchar("status", { length: 20 }).notNull().default("draft"),
30
+ createdBy: varchar("created_by", { length: 255 }).notNull(),
31
+ createdAt: timestamp("created_at", { withTimezone: true })
32
+ .notNull()
33
+ .defaultNow(),
34
+ updatedAt: timestamp("updated_at", { withTimezone: true })
35
+ .notNull()
36
+ .defaultNow(),
37
+ version: integer("version").notNull().default(1),
38
+ }, (table) => [
39
+ index("idx_nodes_type").on(table.type),
40
+ index("idx_nodes_status").on(table.status),
41
+ index("idx_nodes_created_by").on(table.createdBy),
42
+ index("idx_nodes_created_at").on(table.createdAt),
43
+ ]);
44
+ // ── Edges ──────────────────────────────────────────────────────────────────
45
+ export const edges = pgTable("edges", {
46
+ id: uuid("id").primaryKey().defaultRandom(),
47
+ sourceNodeId: uuid("source_node_id")
48
+ .notNull()
49
+ .references(() => nodes.id, { onDelete: "cascade" }),
50
+ targetNodeId: uuid("target_node_id")
51
+ .notNull()
52
+ .references(() => nodes.id, { onDelete: "cascade" }),
53
+ relationshipType: varchar("relationship_type", { length: 100 }).notNull(),
54
+ weight: real("weight").notNull().default(1.0),
55
+ metadata: jsonb("metadata").$type().default({}),
56
+ createdBy: varchar("created_by", { length: 255 }).notNull(),
57
+ createdAt: timestamp("created_at", { withTimezone: true })
58
+ .notNull()
59
+ .defaultNow(),
60
+ }, (table) => [
61
+ index("idx_edges_source").on(table.sourceNodeId),
62
+ index("idx_edges_target").on(table.targetNodeId),
63
+ index("idx_edges_relationship_type").on(table.relationshipType),
64
+ ]);
65
+ // ── API Keys ───────────────────────────────────────────────────────────────
66
+ export const apiKeys = pgTable("api_keys", {
67
+ id: uuid("id").primaryKey().defaultRandom(),
68
+ name: varchar("name", { length: 255 }).notNull(),
69
+ keyHash: varchar("key_hash", { length: 255 }).notNull().unique(),
70
+ createdBy: varchar("created_by", { length: 255 }).notNull(),
71
+ createdAt: timestamp("created_at", { withTimezone: true })
72
+ .notNull()
73
+ .defaultNow(),
74
+ lastUsedAt: timestamp("last_used_at", { withTimezone: true }),
75
+ active: integer("active").notNull().default(1),
76
+ });
77
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/db/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,OAAO,EACP,IAAI,EACJ,OAAO,EACP,IAAI,EACJ,KAAK,EACL,OAAO,EACP,IAAI,EACJ,SAAS,EACT,KAAK,EACL,UAAU,GACX,MAAM,qBAAqB,CAAC;AAE7B,2BAA2B;AAC3B,MAAM,MAAM,GAAG,UAAU,CAA0C;IACjE,QAAQ;QACN,OAAO,cAAc,CAAC;IACxB,CAAC;IACD,QAAQ,CAAC,KAAe;QACtB,OAAO,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;IAChC,CAAC;IACD,UAAU,CAAC,KAAc;QACvB,OAAO,IAAI,CAAC,KAAK,CAAC,KAAe,CAAa,CAAC;IACjD,CAAC;CACF,CAAC,CAAC;AAEH,2BAA2B;AAC3B,MAAM,QAAQ,GAAG,UAAU,CAAwC;IACjE,QAAQ;QACN,OAAO,UAAU,CAAC;IACpB,CAAC;CACF,CAAC,CAAC;AAEH,8EAA8E;AAE9E,MAAM,CAAC,MAAM,KAAK,GAAG,OAAO,CAC1B,OAAO,EACP;IACE,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,CAAC,aAAa,EAAE;IAC3C,IAAI,EAAE,OAAO,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,OAAO,EAAE;IAChD,KAAK,EAAE,OAAO,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,OAAO,EAAE;IAClD,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;IAC9C,SAAS,EAAE,MAAM,CAAC,WAAW,CAAC;IAC9B,YAAY,EAAE,QAAQ,CAAC,eAAe,CAAC;IACvC,QAAQ,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC,KAAK,EAA2B,CAAC,OAAO,CAAC,EAAE,CAAC;IACxE,MAAM,EAAE,OAAO,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC;IACpE,SAAS,EAAE,OAAO,CAAC,YAAY,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,OAAO,EAAE;IAC3D,SAAS,EAAE,SAAS,CAAC,YAAY,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;SACvD,OAAO,EAAE;SACT,UAAU,EAAE;IACf,SAAS,EAAE,SAAS,CAAC,YAAY,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;SACvD,OAAO,EAAE;SACT,UAAU,EAAE;IACf,OAAO,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;CACjD,EACD,CAAC,KAAK,EAAE,EAAE,CAAC;IACT,KAAK,CAAC,gBAAgB,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC;IACtC,KAAK,CAAC,kBAAkB,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC;IAC1C,KAAK,CAAC,sBAAsB,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC;IACjD,KAAK,CAAC,sBAAsB,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC;CAClD,CACF,CAAC;AAEF,8EAA8E;AAE9E,MAAM,CAAC,MAAM,KAAK,GAAG,OAAO,CAC1B,OAAO,EACP;IACE,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,CAAC,aAAa,EAAE;IAC3C,YAAY,EAAE,IAAI,CAAC,gBAAgB,CAAC;SACjC,OAAO,EAAE;SACT,UAAU,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC;IACtD,YAAY,EAAE,IAAI,CAAC,gBAAgB,CAAC;SACjC,OAAO,EAAE;SACT,UAAU,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC;IACtD,gBAAgB,EAAE,OAAO,CAAC,mBAAmB,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,OAAO,EAAE;IACzE,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC;IAC7C,QAAQ,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC,KAAK,EAA2B,CAAC,OAAO,CAAC,EAAE,CAAC;IACxE,SAAS,EAAE,OAAO,CAAC,YAAY,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,OAAO,EAAE;IAC3D,SAAS,EAAE,SAAS,CAAC,YAAY,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;SACvD,OAAO,EAAE;SACT,UAAU,EAAE;CAChB,EACD,CAAC,KAAK,EAAE,EAAE,CAAC;IACT,KAAK,CAAC,kBAAkB,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,YAAY,CAAC;IAChD,KAAK,CAAC,kBAAkB,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,YAAY,CAAC;IAChD,KAAK,CAAC,6BAA6B,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,gBAAgB,CAAC;CAChE,CACF,CAAC;AAEF,8EAA8E;AAE9E,MAAM,CAAC,MAAM,OAAO,GAAG,OAAO,CAAC,UAAU,EAAE;IACzC,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,CAAC,aAAa,EAAE;IAC3C,IAAI,EAAE,OAAO,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,OAAO,EAAE;IAChD,OAAO,EAAE,OAAO,CAAC,UAAU,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,MAAM,EAAE;IAChE,SAAS,EAAE,OAAO,CAAC,YAAY,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,OAAO,EAAE;IAC3D,SAAS,EAAE,SAAS,CAAC,YAAY,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;SACvD,OAAO,EAAE;SACT,UAAU,EAAE;IACf,UAAU,EAAE,SAAS,CAAC,cAAc,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;IAC7D,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;CAC/C,CAAC,CAAC"}
@@ -0,0 +1,8 @@
1
+ import { Prisma, PrismaClient } from "@prisma/client";
2
+ export interface TenantContext {
3
+ organizationId: string;
4
+ }
5
+ export declare const SINGLE_TENANT_ORG_ID = "00000000-0000-0000-0000-000000000000";
6
+ export declare function createTenantClient(base: PrismaClient, ctx: TenantContext): PrismaClient;
7
+ export declare function tenantWhere(ctx: TenantContext, alias?: string): Prisma.Sql;
8
+ //# sourceMappingURL=tenant.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tenant.d.ts","sourceRoot":"","sources":["../../src/db/tenant.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAEtD,MAAM,WAAW,aAAa;IAC5B,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,eAAO,MAAM,oBAAoB,yCAAyC,CAAC;AA8E3E,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,YAAY,EAClB,GAAG,EAAE,aAAa,GACjB,YAAY,CAUd;AAED,wBAAgB,WAAW,CAAC,GAAG,EAAE,aAAa,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,GAAG,CAK1E"}
@@ -0,0 +1,92 @@
1
+ import { Prisma } from "@prisma/client";
2
+ export const SINGLE_TENANT_ORG_ID = "00000000-0000-0000-0000-000000000000";
3
+ const TENANT_MODELS = [
4
+ "node",
5
+ "edge",
6
+ "domain",
7
+ "apiKey",
8
+ ];
9
+ function isTenantModel(model) {
10
+ return TENANT_MODELS.includes(model);
11
+ }
12
+ // Per-model tenant operations — $allModels doesn't compose with Prisma Accelerate,
13
+ // so we define operations explicitly for each tenant-scoped model.
14
+ function tenantOps(ctx) {
15
+ return {
16
+ async findMany({ args, query }) {
17
+ args.where = { ...args.where, organizationId: ctx.organizationId };
18
+ return query(args);
19
+ },
20
+ async findFirst({ args, query }) {
21
+ args.where = { ...args.where, organizationId: ctx.organizationId };
22
+ return query(args);
23
+ },
24
+ async findUnique({ args, query }) {
25
+ args.where = { ...args.where, organizationId: ctx.organizationId };
26
+ return query(args);
27
+ },
28
+ async create({ args, query }) {
29
+ args.data = { ...args.data, organizationId: ctx.organizationId };
30
+ return query(args);
31
+ },
32
+ async createMany({ args, query }) {
33
+ if (Array.isArray(args.data)) {
34
+ args.data = args.data.map((d) => ({
35
+ ...d,
36
+ organizationId: ctx.organizationId,
37
+ }));
38
+ }
39
+ else {
40
+ args.data = { ...args.data, organizationId: ctx.organizationId };
41
+ }
42
+ return query(args);
43
+ },
44
+ async update({ args, query }) {
45
+ args.where = { ...args.where, organizationId: ctx.organizationId };
46
+ return query(args);
47
+ },
48
+ async updateMany({ args, query }) {
49
+ args.where = { ...args.where, organizationId: ctx.organizationId };
50
+ return query(args);
51
+ },
52
+ async delete({ args, query }) {
53
+ args.where = { ...args.where, organizationId: ctx.organizationId };
54
+ return query(args);
55
+ },
56
+ async deleteMany({ args, query }) {
57
+ args.where = { ...args.where, organizationId: ctx.organizationId };
58
+ return query(args);
59
+ },
60
+ async count({ args, query }) {
61
+ args.where = { ...args.where, organizationId: ctx.organizationId };
62
+ return query(args);
63
+ },
64
+ async groupBy({ args, query }) {
65
+ args.where = { ...args.where, organizationId: ctx.organizationId };
66
+ return query(args);
67
+ },
68
+ async upsert({ args, query }) {
69
+ args.where = { ...args.where, organizationId: ctx.organizationId };
70
+ args.create = { ...args.create, organizationId: ctx.organizationId };
71
+ return query(args);
72
+ },
73
+ };
74
+ }
75
+ export function createTenantClient(base, ctx) {
76
+ const ops = tenantOps(ctx);
77
+ return base.$extends({
78
+ query: {
79
+ node: ops,
80
+ edge: ops,
81
+ domain: ops,
82
+ apiKey: ops,
83
+ },
84
+ });
85
+ }
86
+ export function tenantWhere(ctx, alias) {
87
+ const col = alias
88
+ ? Prisma.raw(`${alias}.organization_id`)
89
+ : Prisma.raw(`organization_id`);
90
+ return Prisma.sql `${col} = ${ctx.organizationId}::uuid`;
91
+ }
92
+ //# sourceMappingURL=tenant.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tenant.js","sourceRoot":"","sources":["../../src/db/tenant.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ export { getDb, getTenantDb, closeDb } from "./db/connection.js";
2
+ export type { Database } from "./db/connection.js";
3
+ export { PrismaClient } from "@prisma/client";
4
+ export { createTenantClient, tenantWhere, SINGLE_TENANT_ORG_ID } from "./db/tenant.js";
5
+ export type { TenantContext } from "./db/tenant.js";
6
+ export * from "./types/index.js";
7
+ export { loadConfig } from "./config/index.js";
8
+ export { NodeService } from "./services/node-service.js";
9
+ export { EdgeService } from "./services/edge-service.js";
10
+ export { SearchService } from "./services/search-service.js";
11
+ export { ContextService } from "./services/context-service.js";
12
+ export { DomainService } from "./services/domain-service.js";
13
+ export { CleaningService } from "./services/cleaning-service.js";
14
+ export type { OrphanNode, DuplicatePair, HealthReport, LinkSuggestion, Island, IslandBridge, ValidationReport, ValidationIssue, ValidationCategory, ValidationSeverity, NormalizeSuggestion, NormalizeReport } from "./services/cleaning-service.js";
15
+ export { createEmbeddingProvider, OpenAIEmbeddingProvider } from "./providers/index.js";
16
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AACjE,YAAY,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AACvF,YAAY,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAGpD,cAAc,kBAAkB,CAAC;AAGjC,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAG/C,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACjE,YAAY,EAAE,UAAU,EAAE,aAAa,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,EAAE,YAAY,EAAE,gBAAgB,EAAE,eAAe,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AAGrP,OAAO,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,18 @@
1
+ // Database
2
+ export { getDb, getTenantDb, closeDb } from "./db/connection.js";
3
+ export { PrismaClient } from "@prisma/client";
4
+ export { createTenantClient, tenantWhere, SINGLE_TENANT_ORG_ID } from "./db/tenant.js";
5
+ // Types
6
+ export * from "./types/index.js";
7
+ // Config
8
+ export { loadConfig } from "./config/index.js";
9
+ // Services
10
+ export { NodeService } from "./services/node-service.js";
11
+ export { EdgeService } from "./services/edge-service.js";
12
+ export { SearchService } from "./services/search-service.js";
13
+ export { ContextService } from "./services/context-service.js";
14
+ export { DomainService } from "./services/domain-service.js";
15
+ export { CleaningService } from "./services/cleaning-service.js";
16
+ // Providers
17
+ export { createEmbeddingProvider, OpenAIEmbeddingProvider } from "./providers/index.js";
18
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,WAAW;AACX,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAEjE,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAGvF,QAAQ;AACR,cAAc,kBAAkB,CAAC;AAEjC,SAAS;AACT,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAE/C,WAAW;AACX,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AAGjE,YAAY;AACZ,OAAO,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { EmbeddingProvider, ApartConfig } from "../types/index.js";
2
+ import { OpenAIEmbeddingProvider } from "./openai.js";
3
+ export declare function createEmbeddingProvider(config: ApartConfig): EmbeddingProvider;
4
+ export { OpenAIEmbeddingProvider };
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/providers/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACxE,OAAO,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AAEtD,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,WAAW,GAClB,iBAAiB,CAgBnB;AAED,OAAO,EAAE,uBAAuB,EAAE,CAAC"}
@@ -0,0 +1,16 @@
1
+ import { OpenAIEmbeddingProvider } from "./openai.js";
2
+ export function createEmbeddingProvider(config) {
3
+ switch (config.embeddings.provider) {
4
+ case "openai": {
5
+ const apiKey = process.env.OPENAI_API_KEY;
6
+ if (!apiKey) {
7
+ throw new Error("OPENAI_API_KEY environment variable is required for OpenAI embeddings");
8
+ }
9
+ return new OpenAIEmbeddingProvider(apiKey, config.embeddings.model);
10
+ }
11
+ default:
12
+ throw new Error(`Unknown embedding provider: ${config.embeddings.provider}`);
13
+ }
14
+ }
15
+ export { OpenAIEmbeddingProvider };
16
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/providers/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AAEtD,MAAM,UAAU,uBAAuB,CACrC,MAAmB;IAEnB,QAAQ,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC;QACnC,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;YAC1C,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,MAAM,IAAI,KAAK,CACb,uEAAuE,CACxE,CAAC;YACJ,CAAC;YACD,OAAO,IAAI,uBAAuB,CAAC,MAAM,EAAE,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QACtE,CAAC;QACD;YACE,MAAM,IAAI,KAAK,CACb,+BAA+B,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE,CAC5D,CAAC;IACN,CAAC;AACH,CAAC;AAED,OAAO,EAAE,uBAAuB,EAAE,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { EmbeddingProvider } from "../types/index.js";
2
+ export declare class OpenAIEmbeddingProvider implements EmbeddingProvider {
3
+ private apiKey;
4
+ private model;
5
+ constructor(apiKey: string, model?: string);
6
+ embed(text: string): Promise<number[]>;
7
+ embedBatch(texts: string[]): Promise<number[][]>;
8
+ }
9
+ //# sourceMappingURL=openai.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../../src/providers/openai.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAE3D,qBAAa,uBAAwB,YAAW,iBAAiB;IAC/D,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,KAAK,CAAS;gBAEV,MAAM,EAAE,MAAM,EAAE,KAAK,SAA2B;IAKtD,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAKtC,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;CA0BvD"}
@@ -0,0 +1,34 @@
1
+ export class OpenAIEmbeddingProvider {
2
+ apiKey;
3
+ model;
4
+ constructor(apiKey, model = "text-embedding-3-small") {
5
+ this.apiKey = apiKey;
6
+ this.model = model;
7
+ }
8
+ async embed(text) {
9
+ const [result] = await this.embedBatch([text]);
10
+ return result;
11
+ }
12
+ async embedBatch(texts) {
13
+ const response = await fetch("https://api.openai.com/v1/embeddings", {
14
+ method: "POST",
15
+ headers: {
16
+ "Content-Type": "application/json",
17
+ Authorization: `Bearer ${this.apiKey}`,
18
+ },
19
+ body: JSON.stringify({
20
+ input: texts,
21
+ model: this.model,
22
+ }),
23
+ });
24
+ if (!response.ok) {
25
+ const error = await response.text();
26
+ throw new Error(`OpenAI embedding request failed: ${error}`);
27
+ }
28
+ const data = (await response.json());
29
+ return data.data
30
+ .sort((a, b) => a.index - b.index)
31
+ .map((d) => d.embedding);
32
+ }
33
+ }
34
+ //# sourceMappingURL=openai.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai.js","sourceRoot":"","sources":["../../src/providers/openai.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,uBAAuB;IAC1B,MAAM,CAAS;IACf,KAAK,CAAS;IAEtB,YAAY,MAAc,EAAE,KAAK,GAAG,wBAAwB;QAC1D,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,IAAY;QACtB,MAAM,CAAC,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QAC/C,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,KAAe;QAC9B,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,sCAAsC,EAAE;YACnE,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;gBAClC,aAAa,EAAE,UAAU,IAAI,CAAC,MAAM,EAAE;aACvC;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gBACnB,KAAK,EAAE,KAAK;gBACZ,KAAK,EAAE,IAAI,CAAC,KAAK;aAClB,CAAC;SACH,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YACpC,MAAM,IAAI,KAAK,CAAC,oCAAoC,KAAK,EAAE,CAAC,CAAC;QAC/D,CAAC;QAED,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAElC,CAAC;QAEF,OAAO,IAAI,CAAC,IAAI;aACb,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC;aACjC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IAC7B,CAAC;CACF"}
@@ -0,0 +1,152 @@
1
+ import type { PrismaClient } from "@prisma/client";
2
+ import type { Node, Edge, EmbeddingProvider } from "../types/index.js";
3
+ import { type TenantContext } from "../db/tenant.js";
4
+ export interface OrphanNode {
5
+ node: Node;
6
+ }
7
+ export interface DuplicatePair {
8
+ nodeA: Node;
9
+ nodeB: Node;
10
+ similarity: number;
11
+ }
12
+ export interface LinkSuggestion {
13
+ source: Node;
14
+ target: Node;
15
+ similarity: number;
16
+ }
17
+ export interface Island {
18
+ id: number;
19
+ size: number;
20
+ nodes: Node[];
21
+ }
22
+ export interface IslandBridge {
23
+ from: Island;
24
+ to: Island;
25
+ suggestion: LinkSuggestion;
26
+ }
27
+ export type ValidationSeverity = "error" | "warning" | "info";
28
+ export type ValidationCategory = "self-loop" | "duplicate-edge" | "low-relevance" | "contradictory" | "rare-relationship-type";
29
+ export interface ValidationIssue {
30
+ severity: ValidationSeverity;
31
+ category: ValidationCategory;
32
+ message: string;
33
+ edges: Edge[];
34
+ sourceNode?: Node;
35
+ targetNode?: Node;
36
+ similarity?: number;
37
+ }
38
+ export interface ValidationReport {
39
+ issues: ValidationIssue[];
40
+ summary: Record<ValidationCategory, number>;
41
+ totalIssues: number;
42
+ totalEdgesChecked: number;
43
+ }
44
+ export interface NormalizeSuggestion {
45
+ fromType: string;
46
+ fromCount: number;
47
+ toType: string;
48
+ toCount: number;
49
+ similarity: number;
50
+ }
51
+ export interface NormalizeReport {
52
+ suggestions: NormalizeSuggestion[];
53
+ allTypes: {
54
+ relationshipType: string;
55
+ count: number;
56
+ }[];
57
+ }
58
+ export interface HealthReport {
59
+ nodes: {
60
+ total: number;
61
+ byStatus: {
62
+ status: string;
63
+ count: number;
64
+ }[];
65
+ byType: {
66
+ type: string;
67
+ count: number;
68
+ }[];
69
+ orphanCount: number;
70
+ undomainedCount: number;
71
+ staleCount: number;
72
+ };
73
+ edges: {
74
+ total: number;
75
+ byRelationshipType: {
76
+ relationshipType: string;
77
+ count: number;
78
+ }[];
79
+ selfLoopCount: number;
80
+ duplicateCount: number;
81
+ };
82
+ graph: {
83
+ avgEdgesPerNode: number;
84
+ connectedComponents: number;
85
+ largestComponentSize: number;
86
+ };
87
+ duplicateCandidates: number;
88
+ }
89
+ export declare class CleaningService {
90
+ private db;
91
+ private tenantCtx;
92
+ constructor(db: PrismaClient, tenantCtx?: TenantContext);
93
+ /**
94
+ * Find nodes with zero edges.
95
+ */
96
+ findOrphans(): Promise<OrphanNode[]>;
97
+ /**
98
+ * Find node pairs with cosine similarity above threshold.
99
+ */
100
+ findDuplicates(threshold?: number, limit?: number): Promise<DuplicatePair[]>;
101
+ /**
102
+ * Comprehensive graph health report.
103
+ */
104
+ getHealthReport(staleDays?: number): Promise<HealthReport>;
105
+ /**
106
+ * Validate edges for integrity issues.
107
+ */
108
+ validateEdges({ lowRelevanceThreshold, rareTypeThreshold }?: {
109
+ lowRelevanceThreshold?: number;
110
+ rareTypeThreshold?: number;
111
+ }): Promise<ValidationReport>;
112
+ /**
113
+ * Suggest links for a specific node based on embedding similarity,
114
+ * excluding nodes already connected to it.
115
+ */
116
+ suggestLinksForNode(nodeId: string, { limit, minSimilarity }?: {
117
+ limit?: number;
118
+ minSimilarity?: number;
119
+ }): Promise<LinkSuggestion[]>;
120
+ /**
121
+ * Scan the full graph for high-similarity unconnected pairs.
122
+ */
123
+ suggestLinksGlobal({ limit, minSimilarity }?: {
124
+ limit?: number;
125
+ minSimilarity?: number;
126
+ }): Promise<LinkSuggestion[]>;
127
+ /**
128
+ * Find all disconnected clusters (islands) in the graph.
129
+ * Returns islands sorted by size descending, excluding orphan nodes (size 1).
130
+ */
131
+ findIslands(): Promise<Island[]>;
132
+ /**
133
+ * Suggest bridges between the top islands using embedding similarity.
134
+ */
135
+ suggestBridges(maxBridges?: number): Promise<IslandBridge[]>;
136
+ /**
137
+ * Analyze relationship types and suggest normalizations using embedding similarity.
138
+ * Compares type names semantically to find ones that likely mean the same thing.
139
+ */
140
+ analyzeRelationshipTypes(embeddings: EmbeddingProvider, { minSimilarity }?: {
141
+ minSimilarity?: number;
142
+ }): Promise<NormalizeReport>;
143
+ /**
144
+ * Union-find returning a map of nodeId -> component root.
145
+ */
146
+ private computeComponentMap;
147
+ /**
148
+ * Summarize component map into counts for the health report.
149
+ */
150
+ private summarizeComponents;
151
+ }
152
+ //# sourceMappingURL=cleaning-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cleaning-service.d.ts","sourceRoot":"","sources":["../../src/services/cleaning-service.ts"],"names":[],"mappings":"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"}