@apart-tech/intelligence-core 1.4.0 → 1.6.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 (39) hide show
  1. package/dist/config/index.d.ts.map +1 -1
  2. package/dist/config/index.js +11 -0
  3. package/dist/config/index.js.map +1 -1
  4. package/dist/index.d.ts +13 -0
  5. package/dist/index.d.ts.map +1 -1
  6. package/dist/index.js +8 -0
  7. package/dist/index.js.map +1 -1
  8. package/dist/lib/jwt.d.ts +13 -0
  9. package/dist/lib/jwt.d.ts.map +1 -0
  10. package/dist/lib/jwt.js +23 -0
  11. package/dist/lib/jwt.js.map +1 -0
  12. package/dist/services/agent-cli-reference.d.ts +7 -0
  13. package/dist/services/agent-cli-reference.d.ts.map +1 -0
  14. package/dist/services/agent-cli-reference.js +91 -0
  15. package/dist/services/agent-cli-reference.js.map +1 -0
  16. package/dist/services/agent-run-service.d.ts +36 -0
  17. package/dist/services/agent-run-service.d.ts.map +1 -0
  18. package/dist/services/agent-run-service.js +65 -0
  19. package/dist/services/agent-run-service.js.map +1 -0
  20. package/dist/services/invite-service.d.ts +12 -0
  21. package/dist/services/invite-service.d.ts.map +1 -0
  22. package/dist/services/invite-service.js +62 -0
  23. package/dist/services/invite-service.js.map +1 -0
  24. package/dist/services/membership-service.d.ts +19 -0
  25. package/dist/services/membership-service.d.ts.map +1 -0
  26. package/dist/services/membership-service.js +43 -0
  27. package/dist/services/membership-service.js.map +1 -0
  28. package/dist/services/org-agent-config-service.d.ts +29 -0
  29. package/dist/services/org-agent-config-service.d.ts.map +1 -0
  30. package/dist/services/org-agent-config-service.js +99 -0
  31. package/dist/services/org-agent-config-service.js.map +1 -0
  32. package/dist/services/user-service.d.ts +14 -0
  33. package/dist/services/user-service.d.ts.map +1 -0
  34. package/dist/services/user-service.js +39 -0
  35. package/dist/services/user-service.js.map +1 -0
  36. package/dist/types/index.d.ts +5 -0
  37. package/dist/types/index.d.ts.map +1 -1
  38. package/package.json +2 -1
  39. package/prisma/schema.prisma +103 -5
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AA0DrD,wBAAgB,UAAU,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,WAAW,CA6DpD"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AA0DrD,wBAAgB,UAAU,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,WAAW,CAyEpD"}
@@ -109,6 +109,17 @@ export function loadConfig(cwd) {
109
109
  organizationId: process.env.ORGANIZATION_ID,
110
110
  };
111
111
  }
112
+ // Auth0 config (all three must be present to enable)
113
+ const auth0Domain = process.env.AUTH0_DOMAIN;
114
+ const auth0Audience = process.env.AUTH0_AUDIENCE;
115
+ const auth0ClientId = process.env.AUTH0_CLIENT_ID;
116
+ if (auth0Domain && auth0Audience && auth0ClientId) {
117
+ config.auth0 = {
118
+ domain: auth0Domain,
119
+ audience: auth0Audience,
120
+ clientId: auth0ClientId,
121
+ };
122
+ }
112
123
  return config;
113
124
  }
114
125
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -4,6 +4,8 @@ export { PrismaClient } from "@prisma/client";
4
4
  export { createTenantClient, tenantWhere, SINGLE_TENANT_ORG_ID } from "./db/tenant.js";
5
5
  export type { TenantContext } from "./db/tenant.js";
6
6
  export { encryptAesGcm, decryptAesGcm, deriveKey } from "./lib/crypto.js";
7
+ export { verifyAuth0Jwt } from "./lib/jwt.js";
8
+ export type { Auth0Config, Auth0JwtPayload } from "./lib/jwt.js";
7
9
  export * from "./types/index.js";
8
10
  export { loadConfig } from "./config/index.js";
9
11
  export { NodeService } from "./services/node-service.js";
@@ -22,7 +24,18 @@ export type { PiiEncryptionOptions, PiiReport, PiiProcessingResult } from "./ser
22
24
  export { OrgPiiConfigService } from "./services/org-pii-config-service.js";
23
25
  export type { OrgPiiConfig, OrgPiiConfigWithKey, PiiMode } from "./services/org-pii-config-service.js";
24
26
  export type { OrgEmbeddingConfig, OrgEmbeddingConfigWithKey } from "./services/org-embedding-config-service.js";
27
+ export { OrgAgentConfigService } from "./services/org-agent-config-service.js";
28
+ export type { OrgAgentConfig, OrgAgentConfigWithKeys } from "./services/org-agent-config-service.js";
29
+ export { AgentRunService } from "./services/agent-run-service.js";
30
+ export type { AgentRun } from "./services/agent-run-service.js";
31
+ export { CLI_REFERENCE } from "./services/agent-cli-reference.js";
25
32
  export type { OrphanNode, DuplicatePair, HealthReport, LinkSuggestion, Island, IslandBridge, ValidationReport, ValidationIssue, ValidationCategory, ValidationSeverity, NormalizeSuggestion, NormalizeReport } from "./services/cleaning-service.js";
33
+ export { UserService } from "./services/user-service.js";
34
+ export type { User, MembershipWithOrg } from "./services/user-service.js";
35
+ export { MembershipService } from "./services/membership-service.js";
36
+ export type { MembershipWithUser } from "./services/membership-service.js";
37
+ export { InviteService } from "./services/invite-service.js";
38
+ export type { Invite } from "./services/invite-service.js";
26
39
  export { createEmbeddingProvider, validateEmbeddingKey, OpenAIEmbeddingProvider, VoyageEmbeddingProvider, OllamaEmbeddingProvider } from "./providers/index.js";
27
40
  export type { CreateEmbeddingProviderOptions } from "./providers/index.js";
28
41
  export { BatchingEmbeddingProvider } from "./providers/batching.js";
@@ -1 +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,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAG1E,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,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACnE,YAAY,EAAE,eAAe,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AACnH,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,EAAE,yBAAyB,EAAE,MAAM,4CAA4C,CAAC;AACvF,OAAO,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AACxE,YAAY,EAAE,QAAQ,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AACvF,OAAO,EAAE,oBAAoB,EAAE,MAAM,sCAAsC,CAAC;AAC5E,YAAY,EAAE,oBAAoB,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAC;AACjH,OAAO,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAC;AAC3E,YAAY,EAAE,YAAY,EAAE,mBAAmB,EAAE,OAAO,EAAE,MAAM,sCAAsC,CAAC;AACvG,YAAY,EAAE,kBAAkB,EAAE,yBAAyB,EAAE,MAAM,4CAA4C,CAAC;AAChH,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,oBAAoB,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAChK,YAAY,EAAE,8BAA8B,EAAE,MAAM,sBAAsB,CAAC;AAC3E,OAAO,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AACpE,YAAY,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,wBAAwB,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACpG,YAAY,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,YAAY,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -4,6 +4,8 @@ export { PrismaClient } from "@prisma/client";
4
4
  export { createTenantClient, tenantWhere, SINGLE_TENANT_ORG_ID } from "./db/tenant.js";
5
5
  // Crypto
6
6
  export { encryptAesGcm, decryptAesGcm, deriveKey } from "./lib/crypto.js";
7
+ // JWT
8
+ export { verifyAuth0Jwt } from "./lib/jwt.js";
7
9
  // Types
8
10
  export * from "./types/index.js";
9
11
  // Config
@@ -20,6 +22,12 @@ export { OrgEmbeddingConfigService } from "./services/org-embedding-config-servi
20
22
  export { PiiDetectorService } from "./services/pii-detector-service.js";
21
23
  export { PiiEncryptionService } from "./services/pii-encryption-service.js";
22
24
  export { OrgPiiConfigService } from "./services/org-pii-config-service.js";
25
+ export { OrgAgentConfigService } from "./services/org-agent-config-service.js";
26
+ export { AgentRunService } from "./services/agent-run-service.js";
27
+ export { CLI_REFERENCE } from "./services/agent-cli-reference.js";
28
+ export { UserService } from "./services/user-service.js";
29
+ export { MembershipService } from "./services/membership-service.js";
30
+ export { InviteService } from "./services/invite-service.js";
23
31
  // Providers
24
32
  export { createEmbeddingProvider, validateEmbeddingKey, OpenAIEmbeddingProvider, VoyageEmbeddingProvider, OllamaEmbeddingProvider } from "./providers/index.js";
25
33
  export { BatchingEmbeddingProvider } from "./providers/batching.js";
package/dist/index.js.map CHANGED
@@ -1 +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,SAAS;AACT,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE1E,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,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAEnE,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,EAAE,yBAAyB,EAAE,MAAM,4CAA4C,CAAC;AACvF,OAAO,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AAExE,OAAO,EAAE,oBAAoB,EAAE,MAAM,sCAAsC,CAAC;AAE5E,OAAO,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAC;AAK3E,YAAY;AACZ,OAAO,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAEhK,OAAO,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AAEpE,OAAO,EAAE,wBAAwB,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEpG,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC"}
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,SAAS;AACT,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE1E,MAAM;AACN,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAG9C,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,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAEnE,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,EAAE,yBAAyB,EAAE,MAAM,4CAA4C,CAAC;AACvF,OAAO,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AAExE,OAAO,EAAE,oBAAoB,EAAE,MAAM,sCAAsC,CAAC;AAE5E,OAAO,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAC;AAG3E,OAAO,EAAE,qBAAqB,EAAE,MAAM,wCAAwC,CAAC;AAE/E,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAElE,OAAO,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAElE,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAEzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAErE,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAG7D,YAAY;AACZ,OAAO,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAEhK,OAAO,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AAEpE,OAAO,EAAE,wBAAwB,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEpG,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1,13 @@
1
+ import type { JWTPayload } from "jose";
2
+ export interface Auth0Config {
3
+ domain: string;
4
+ audience: string;
5
+ }
6
+ export interface Auth0JwtPayload extends JWTPayload {
7
+ sub: string;
8
+ email?: string;
9
+ name?: string;
10
+ org_id?: string;
11
+ }
12
+ export declare function verifyAuth0Jwt(token: string, config: Auth0Config): Promise<Auth0JwtPayload>;
13
+ //# sourceMappingURL=jwt.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jwt.d.ts","sourceRoot":"","sources":["../../src/lib/jwt.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC;AAEvC,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,eAAgB,SAAQ,UAAU;IACjD,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAaD,wBAAsB,cAAc,CAClC,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,WAAW,GAClB,OAAO,CAAC,eAAe,CAAC,CAc1B"}
@@ -0,0 +1,23 @@
1
+ import { createRemoteJWKSet, jwtVerify } from "jose";
2
+ const jwksCache = new Map();
3
+ function getJWKS(domain) {
4
+ const key = domain;
5
+ if (!jwksCache.has(key)) {
6
+ const url = new URL(`https://${domain}/.well-known/jwks.json`);
7
+ jwksCache.set(key, createRemoteJWKSet(url));
8
+ }
9
+ return jwksCache.get(key);
10
+ }
11
+ export async function verifyAuth0Jwt(token, config) {
12
+ const jwks = getJWKS(config.domain);
13
+ const issuer = `https://${config.domain}/`;
14
+ const { payload } = await jwtVerify(token, jwks, {
15
+ audience: config.audience,
16
+ issuer,
17
+ });
18
+ if (!payload.sub) {
19
+ throw new Error("JWT missing sub claim");
20
+ }
21
+ return payload;
22
+ }
23
+ //# sourceMappingURL=jwt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jwt.js","sourceRoot":"","sources":["../../src/lib/jwt.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AAerD,MAAM,SAAS,GAAG,IAAI,GAAG,EAAiD,CAAC;AAE3E,SAAS,OAAO,CAAC,MAAc;IAC7B,MAAM,GAAG,GAAG,MAAM,CAAC;IACnB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;QACxB,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,WAAW,MAAM,wBAAwB,CAAC,CAAC;QAC/D,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9C,CAAC;IACD,OAAO,SAAS,CAAC,GAAG,CAAC,GAAG,CAAE,CAAC;AAC7B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,KAAa,EACb,MAAmB;IAEnB,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACpC,MAAM,MAAM,GAAG,WAAW,MAAM,CAAC,MAAM,GAAG,CAAC;IAE3C,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE;QAC/C,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,MAAM;KACP,CAAC,CAAC;IAEH,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;IAC3C,CAAC;IAED,OAAO,OAA0B,CAAC;AACpC,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Condensed CLI reference for AI agents running inside E2B sandboxes.
3
+ * Injected into the agent prompt so it knows how to interact with the knowledge graph.
4
+ * Kept under ~1500 tokens to be cost-efficient.
5
+ */
6
+ export declare const CLI_REFERENCE = "# Apart Intelligence CLI \u2014 Quick Reference\n\nYou have access to the `ai` CLI to read from and write to the organization's knowledge graph.\n\n## Reading\n\n**Search** \u2014 find nodes by natural language query:\n```\nai search \"authentication patterns\" -l 10 -t policy\nai search \"onboarding flow\" --format json\n```\nFlags: `-l/--limit <n>`, `-t/--type <type>`, `-d/--domain <slug>`, `-f/--format text|json`, `--include-drafts`\n\n**Context** \u2014 assemble related knowledge for a topic (nodes + edges):\n```\nai context \"user authentication\" --depth 2 --max-nodes 30\n```\nFlags: `-d/--depth <n>`, `-n/--max-nodes <n>`, `-w/--workspace <slug>`, `--format text|json|markdown`\n\n**Get** \u2014 retrieve a specific node by ID:\n```\nai get <node-id>\n```\n\n**Types** \u2014 list all node types in use:\n```\nai types\n```\n\n**Domains** \u2014 list domain taxonomy:\n```\nai domains\n```\n\n**Drafts** \u2014 list nodes pending review:\n```\nai drafts -l 20\n```\n\n**Health** \u2014 graph health overview:\n```\nai health\n```\n\n## Writing\n\n**Add** \u2014 create a new node:\n```\nai add \"Node content here\" --type research --title \"Title\" -d engineering -s draft\n```\nFlags: `-t/--type <type>` (required), `--title <title>`, `-d/--domain <slug>`, `-s/--status draft|approved`\n\n**Update** \u2014 modify an existing node:\n```\nai update <node-id> --title \"New Title\" --content \"Updated content\"\n```\n\n**Delete** \u2014 remove a node:\n```\nai delete <node-id>\n```\n\n**Link** \u2014 create a relationship between nodes:\n```\nai link <source-id> <target-id> -r \"relates-to\"\n```\nFlags: `-r/--relationship <type>` (e.g. relates-to, supersedes, part-of, depends-on)\n\n**Approve** \u2014 approve a draft node:\n```\nai approve <node-id>\n```\n\n**Import** \u2014 bulk import nodes and edges from JSON:\n```\nai import data.json\n```\nJSON format: `{ \"nodes\": [{ \"ref\": \"n1\", \"type\": \"...\", \"title\": \"...\", \"content\": \"...\" }], \"edges\": [{ \"source\": \"n1\", \"target\": \"n2\", \"relationshipType\": \"...\" }] }`\n\n## Tips\n- Use `--format json` when you need to parse output programmatically.\n- Always set `--type` when adding nodes. Common types: research, policy, process, decision, note, analysis, summary.\n- Use `ai search` before adding nodes to avoid duplicates.\n- Create nodes as `draft` status unless the org prompt says otherwise.\n";
7
+ //# sourceMappingURL=agent-cli-reference.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-cli-reference.d.ts","sourceRoot":"","sources":["../../src/services/agent-cli-reference.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,eAAO,MAAM,aAAa,w2EAoFzB,CAAC"}
@@ -0,0 +1,91 @@
1
+ /**
2
+ * Condensed CLI reference for AI agents running inside E2B sandboxes.
3
+ * Injected into the agent prompt so it knows how to interact with the knowledge graph.
4
+ * Kept under ~1500 tokens to be cost-efficient.
5
+ */
6
+ export const CLI_REFERENCE = `# Apart Intelligence CLI — Quick Reference
7
+
8
+ You have access to the \`ai\` CLI to read from and write to the organization's knowledge graph.
9
+
10
+ ## Reading
11
+
12
+ **Search** — find nodes by natural language query:
13
+ \`\`\`
14
+ ai search "authentication patterns" -l 10 -t policy
15
+ ai search "onboarding flow" --format json
16
+ \`\`\`
17
+ Flags: \`-l/--limit <n>\`, \`-t/--type <type>\`, \`-d/--domain <slug>\`, \`-f/--format text|json\`, \`--include-drafts\`
18
+
19
+ **Context** — assemble related knowledge for a topic (nodes + edges):
20
+ \`\`\`
21
+ ai context "user authentication" --depth 2 --max-nodes 30
22
+ \`\`\`
23
+ Flags: \`-d/--depth <n>\`, \`-n/--max-nodes <n>\`, \`-w/--workspace <slug>\`, \`--format text|json|markdown\`
24
+
25
+ **Get** — retrieve a specific node by ID:
26
+ \`\`\`
27
+ ai get <node-id>
28
+ \`\`\`
29
+
30
+ **Types** — list all node types in use:
31
+ \`\`\`
32
+ ai types
33
+ \`\`\`
34
+
35
+ **Domains** — list domain taxonomy:
36
+ \`\`\`
37
+ ai domains
38
+ \`\`\`
39
+
40
+ **Drafts** — list nodes pending review:
41
+ \`\`\`
42
+ ai drafts -l 20
43
+ \`\`\`
44
+
45
+ **Health** — graph health overview:
46
+ \`\`\`
47
+ ai health
48
+ \`\`\`
49
+
50
+ ## Writing
51
+
52
+ **Add** — create a new node:
53
+ \`\`\`
54
+ ai add "Node content here" --type research --title "Title" -d engineering -s draft
55
+ \`\`\`
56
+ Flags: \`-t/--type <type>\` (required), \`--title <title>\`, \`-d/--domain <slug>\`, \`-s/--status draft|approved\`
57
+
58
+ **Update** — modify an existing node:
59
+ \`\`\`
60
+ ai update <node-id> --title "New Title" --content "Updated content"
61
+ \`\`\`
62
+
63
+ **Delete** — remove a node:
64
+ \`\`\`
65
+ ai delete <node-id>
66
+ \`\`\`
67
+
68
+ **Link** — create a relationship between nodes:
69
+ \`\`\`
70
+ ai link <source-id> <target-id> -r "relates-to"
71
+ \`\`\`
72
+ Flags: \`-r/--relationship <type>\` (e.g. relates-to, supersedes, part-of, depends-on)
73
+
74
+ **Approve** — approve a draft node:
75
+ \`\`\`
76
+ ai approve <node-id>
77
+ \`\`\`
78
+
79
+ **Import** — bulk import nodes and edges from JSON:
80
+ \`\`\`
81
+ ai import data.json
82
+ \`\`\`
83
+ JSON format: \`{ "nodes": [{ "ref": "n1", "type": "...", "title": "...", "content": "..." }], "edges": [{ "source": "n1", "target": "n2", "relationshipType": "..." }] }\`
84
+
85
+ ## Tips
86
+ - Use \`--format json\` when you need to parse output programmatically.
87
+ - Always set \`--type\` when adding nodes. Common types: research, policy, process, decision, note, analysis, summary.
88
+ - Use \`ai search\` before adding nodes to avoid duplicates.
89
+ - Create nodes as \`draft\` status unless the org prompt says otherwise.
90
+ `;
91
+ //# sourceMappingURL=agent-cli-reference.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-cli-reference.js","sourceRoot":"","sources":["../../src/services/agent-cli-reference.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoF5B,CAAC"}
@@ -0,0 +1,36 @@
1
+ import type { PrismaClient } from "@prisma/client";
2
+ export interface AgentRun {
3
+ id: string;
4
+ prompt: string;
5
+ status: string;
6
+ result: string;
7
+ error: string | null;
8
+ sandboxId: string | null;
9
+ model: string;
10
+ startedAt: Date;
11
+ completedAt: Date | null;
12
+ createdBy: string;
13
+ }
14
+ export declare class AgentRunService {
15
+ private db;
16
+ constructor(db: PrismaClient);
17
+ create(organizationId: string, input: {
18
+ prompt: string;
19
+ model: string;
20
+ createdBy: string;
21
+ }): Promise<AgentRun>;
22
+ updateStatus(id: string, organizationId: string, update: {
23
+ status: string;
24
+ result?: string;
25
+ error?: string;
26
+ sandboxId?: string;
27
+ completedAt?: Date;
28
+ }): Promise<AgentRun>;
29
+ getById(id: string, organizationId: string): Promise<AgentRun | null>;
30
+ list(organizationId: string, opts?: {
31
+ limit?: number;
32
+ status?: string;
33
+ }): Promise<AgentRun[]>;
34
+ private toAgentRun;
35
+ }
36
+ //# sourceMappingURL=agent-run-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-run-service.d.ts","sourceRoot":"","sources":["../../src/services/agent-run-service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAEnD,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,IAAI,CAAC;IAChB,WAAW,EAAE,IAAI,GAAG,IAAI,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,qBAAa,eAAe;IACd,OAAO,CAAC,EAAE;gBAAF,EAAE,EAAE,YAAY;IAE9B,MAAM,CACV,cAAc,EAAE,MAAM,EACtB,KAAK,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,GAC1D,OAAO,CAAC,QAAQ,CAAC;IAad,YAAY,CAChB,EAAE,EAAE,MAAM,EACV,cAAc,EAAE,MAAM,EACtB,MAAM,EAAE;QACN,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,WAAW,CAAC,EAAE,IAAI,CAAC;KACpB,GACA,OAAO,CAAC,QAAQ,CAAC;IAcd,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;IAQrE,IAAI,CACR,cAAc,EAAE,MAAM,EACtB,IAAI,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,GACzC,OAAO,CAAC,QAAQ,EAAE,CAAC;IAYtB,OAAO,CAAC,UAAU;CAcnB"}
@@ -0,0 +1,65 @@
1
+ export class AgentRunService {
2
+ db;
3
+ constructor(db) {
4
+ this.db = db;
5
+ }
6
+ async create(organizationId, input) {
7
+ const run = await this.db.agentRun.create({
8
+ data: {
9
+ organizationId,
10
+ prompt: input.prompt,
11
+ model: input.model,
12
+ status: "pending",
13
+ createdBy: input.createdBy,
14
+ },
15
+ });
16
+ return this.toAgentRun(run);
17
+ }
18
+ async updateStatus(id, organizationId, update) {
19
+ const run = await this.db.agentRun.update({
20
+ where: { id, organizationId },
21
+ data: {
22
+ status: update.status,
23
+ result: update.result,
24
+ error: update.error,
25
+ sandboxId: update.sandboxId,
26
+ completedAt: update.completedAt,
27
+ },
28
+ });
29
+ return this.toAgentRun(run);
30
+ }
31
+ async getById(id, organizationId) {
32
+ const run = await this.db.agentRun.findFirst({
33
+ where: { id, organizationId },
34
+ });
35
+ if (!run)
36
+ return null;
37
+ return this.toAgentRun(run);
38
+ }
39
+ async list(organizationId, opts) {
40
+ const runs = await this.db.agentRun.findMany({
41
+ where: {
42
+ organizationId,
43
+ ...(opts?.status ? { status: opts.status } : {}),
44
+ },
45
+ orderBy: { startedAt: "desc" },
46
+ take: opts?.limit ?? 20,
47
+ });
48
+ return runs.map((r) => this.toAgentRun(r));
49
+ }
50
+ toAgentRun(run) {
51
+ return {
52
+ id: run.id,
53
+ prompt: run.prompt,
54
+ status: run.status,
55
+ result: run.result,
56
+ error: run.error,
57
+ sandboxId: run.sandboxId,
58
+ model: run.model,
59
+ startedAt: run.startedAt,
60
+ completedAt: run.completedAt,
61
+ createdBy: run.createdBy,
62
+ };
63
+ }
64
+ }
65
+ //# sourceMappingURL=agent-run-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-run-service.js","sourceRoot":"","sources":["../../src/services/agent-run-service.ts"],"names":[],"mappings":"AAeA,MAAM,OAAO,eAAe;IACN;IAApB,YAAoB,EAAgB;QAAhB,OAAE,GAAF,EAAE,CAAc;IAAG,CAAC;IAExC,KAAK,CAAC,MAAM,CACV,cAAsB,EACtB,KAA2D;QAE3D,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC;YACxC,IAAI,EAAE;gBACJ,cAAc;gBACd,MAAM,EAAE,KAAK,CAAC,MAAM;gBACpB,KAAK,EAAE,KAAK,CAAC,KAAK;gBAClB,MAAM,EAAE,SAAS;gBACjB,SAAS,EAAE,KAAK,CAAC,SAAS;aAC3B;SACF,CAAC,CAAC;QACH,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IAC9B,CAAC;IAED,KAAK,CAAC,YAAY,CAChB,EAAU,EACV,cAAsB,EACtB,MAMC;QAED,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC;YACxC,KAAK,EAAE,EAAE,EAAE,EAAE,cAAc,EAAE;YAC7B,IAAI,EAAE;gBACJ,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,SAAS,EAAE,MAAM,CAAC,SAAS;gBAC3B,WAAW,EAAE,MAAM,CAAC,WAAW;aAChC;SACF,CAAC,CAAC;QACH,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IAC9B,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,EAAU,EAAE,cAAsB;QAC9C,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC;YAC3C,KAAK,EAAE,EAAE,EAAE,EAAE,cAAc,EAAE;SAC9B,CAAC,CAAC;QACH,IAAI,CAAC,GAAG;YAAE,OAAO,IAAI,CAAC;QACtB,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IAC9B,CAAC;IAED,KAAK,CAAC,IAAI,CACR,cAAsB,EACtB,IAA0C;QAE1C,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC;YAC3C,KAAK,EAAE;gBACL,cAAc;gBACd,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACjD;YACD,OAAO,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE;YAC9B,IAAI,EAAE,IAAI,EAAE,KAAK,IAAI,EAAE;SACxB,CAAC,CAAC;QACH,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7C,CAAC;IAEO,UAAU,CAAC,GAAQ;QACzB,OAAO;YACL,EAAE,EAAE,GAAG,CAAC,EAAE;YACV,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,KAAK,EAAE,GAAG,CAAC,KAAK;YAChB,SAAS,EAAE,GAAG,CAAC,SAAS;YACxB,KAAK,EAAE,GAAG,CAAC,KAAK;YAChB,SAAS,EAAE,GAAG,CAAC,SAAS;YACxB,WAAW,EAAE,GAAG,CAAC,WAAW;YAC5B,SAAS,EAAE,GAAG,CAAC,SAAS;SACzB,CAAC;IACJ,CAAC;CACF"}
@@ -0,0 +1,12 @@
1
+ import type { PrismaClient, Invite } from "@prisma/client";
2
+ export type { Invite } from "@prisma/client";
3
+ export declare class InviteService {
4
+ private db;
5
+ constructor(db: PrismaClient);
6
+ create(email: string, organizationId: string, role: string, invitedBy: string): Promise<Invite>;
7
+ getByToken(token: string): Promise<Invite | null>;
8
+ listByOrg(organizationId: string): Promise<Invite[]>;
9
+ accept(token: string, userId: string): Promise<Invite>;
10
+ revoke(id: string): Promise<Invite>;
11
+ }
12
+ //# sourceMappingURL=invite-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"invite-service.d.ts","sourceRoot":"","sources":["../../src/services/invite-service.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAE3D,YAAY,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAI7C,qBAAa,aAAa;IACZ,OAAO,CAAC,EAAE;gBAAF,EAAE,EAAE,YAAY;IAE9B,MAAM,CACV,KAAK,EAAE,MAAM,EACb,cAAc,EAAE,MAAM,EACtB,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,MAAM,CAAC;IAgBZ,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAIjD,SAAS,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAOpD,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAwBtD,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAM1C"}
@@ -0,0 +1,62 @@
1
+ import { randomBytes } from "crypto";
2
+ const INVITE_TTL_DAYS = 7;
3
+ export class InviteService {
4
+ db;
5
+ constructor(db) {
6
+ this.db = db;
7
+ }
8
+ async create(email, organizationId, role, invitedBy) {
9
+ const token = randomBytes(32).toString("hex");
10
+ const expiresAt = new Date(Date.now() + INVITE_TTL_DAYS * 24 * 60 * 60 * 1000);
11
+ return this.db.invite.create({
12
+ data: {
13
+ email: email.toLowerCase(),
14
+ organizationId,
15
+ role,
16
+ token,
17
+ invitedBy,
18
+ expiresAt,
19
+ },
20
+ });
21
+ }
22
+ async getByToken(token) {
23
+ return this.db.invite.findUnique({ where: { token } });
24
+ }
25
+ async listByOrg(organizationId) {
26
+ return this.db.invite.findMany({
27
+ where: { organizationId, status: "pending" },
28
+ orderBy: { createdAt: "desc" },
29
+ });
30
+ }
31
+ async accept(token, userId) {
32
+ const invite = await this.db.invite.findUnique({ where: { token } });
33
+ if (!invite)
34
+ throw new Error("Invite not found");
35
+ if (invite.status !== "pending")
36
+ throw new Error("Invite already used");
37
+ if (invite.expiresAt < new Date())
38
+ throw new Error("Invite expired");
39
+ // Create membership and mark invite accepted in a transaction
40
+ const [updated] = await this.db.$transaction([
41
+ this.db.invite.update({
42
+ where: { id: invite.id },
43
+ data: { status: "accepted" },
44
+ }),
45
+ this.db.membership.create({
46
+ data: {
47
+ userId,
48
+ organizationId: invite.organizationId,
49
+ role: invite.role,
50
+ },
51
+ }),
52
+ ]);
53
+ return updated;
54
+ }
55
+ async revoke(id) {
56
+ return this.db.invite.update({
57
+ where: { id },
58
+ data: { status: "revoked" },
59
+ });
60
+ }
61
+ }
62
+ //# sourceMappingURL=invite-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"invite-service.js","sourceRoot":"","sources":["../../src/services/invite-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAKrC,MAAM,eAAe,GAAG,CAAC,CAAC;AAE1B,MAAM,OAAO,aAAa;IACJ;IAApB,YAAoB,EAAgB;QAAhB,OAAE,GAAF,EAAE,CAAc;IAAG,CAAC;IAExC,KAAK,CAAC,MAAM,CACV,KAAa,EACb,cAAsB,EACtB,IAAY,EACZ,SAAiB;QAEjB,MAAM,KAAK,GAAG,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAC9C,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,eAAe,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;QAE/E,OAAO,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC;YAC3B,IAAI,EAAE;gBACJ,KAAK,EAAE,KAAK,CAAC,WAAW,EAAE;gBAC1B,cAAc;gBACd,IAAI;gBACJ,KAAK;gBACL,SAAS;gBACT,SAAS;aACV;SACF,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,KAAa;QAC5B,OAAO,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;IACzD,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,cAAsB;QACpC,OAAO,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC;YAC7B,KAAK,EAAE,EAAE,cAAc,EAAE,MAAM,EAAE,SAAS,EAAE;YAC5C,OAAO,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE;SAC/B,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,KAAa,EAAE,MAAc;QACxC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;QACrE,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;QACjD,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS;YAAE,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;QACxE,IAAI,MAAM,CAAC,SAAS,GAAG,IAAI,IAAI,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAC;QAErE,8DAA8D;QAC9D,MAAM,CAAC,OAAO,CAAC,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC;YAC3C,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC;gBACpB,KAAK,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE;gBACxB,IAAI,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE;aAC7B,CAAC;YACF,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC;gBACxB,IAAI,EAAE;oBACJ,MAAM;oBACN,cAAc,EAAE,MAAM,CAAC,cAAc;oBACrC,IAAI,EAAE,MAAM,CAAC,IAAI;iBAClB;aACF,CAAC;SACH,CAAC,CAAC;QAEH,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,EAAU;QACrB,OAAO,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC;YAC3B,KAAK,EAAE,EAAE,EAAE,EAAE;YACb,IAAI,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE;SAC5B,CAAC,CAAC;IACL,CAAC;CACF"}
@@ -0,0 +1,19 @@
1
+ import type { PrismaClient, Membership, User, Organization } from "@prisma/client";
2
+ export type MembershipWithUser = Membership & {
3
+ user: User;
4
+ };
5
+ export type MembershipWithOrg = Membership & {
6
+ organization: Organization;
7
+ };
8
+ export declare class MembershipService {
9
+ private db;
10
+ constructor(db: PrismaClient);
11
+ create(userId: string, organizationId: string, role?: string): Promise<Membership>;
12
+ findByUserAndOrg(userId: string, organizationId: string): Promise<Membership | null>;
13
+ listByUser(userId: string): Promise<MembershipWithOrg[]>;
14
+ listByOrg(organizationId: string): Promise<MembershipWithUser[]>;
15
+ updateRole(id: string, role: string): Promise<Membership>;
16
+ remove(id: string): Promise<void>;
17
+ countOwners(organizationId: string): Promise<number>;
18
+ }
19
+ //# sourceMappingURL=membership-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"membership-service.d.ts","sourceRoot":"","sources":["../../src/services/membership-service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAEnF,MAAM,MAAM,kBAAkB,GAAG,UAAU,GAAG;IAAE,IAAI,EAAE,IAAI,CAAA;CAAE,CAAC;AAC7D,MAAM,MAAM,iBAAiB,GAAG,UAAU,GAAG;IAAE,YAAY,EAAE,YAAY,CAAA;CAAE,CAAC;AAE5E,qBAAa,iBAAiB;IAChB,OAAO,CAAC,EAAE;gBAAF,EAAE,EAAE,YAAY;IAE9B,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,IAAI,GAAE,MAAiB,GAAG,OAAO,CAAC,UAAU,CAAC;IAM5F,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAMpF,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC;IAOxD,SAAS,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC;IAOhE,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAOzD,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIjC,WAAW,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAK3D"}
@@ -0,0 +1,43 @@
1
+ export class MembershipService {
2
+ db;
3
+ constructor(db) {
4
+ this.db = db;
5
+ }
6
+ async create(userId, organizationId, role = "member") {
7
+ return this.db.membership.create({
8
+ data: { userId, organizationId, role },
9
+ });
10
+ }
11
+ async findByUserAndOrg(userId, organizationId) {
12
+ return this.db.membership.findUnique({
13
+ where: { userId_organizationId: { userId, organizationId } },
14
+ });
15
+ }
16
+ async listByUser(userId) {
17
+ return this.db.membership.findMany({
18
+ where: { userId },
19
+ include: { organization: true },
20
+ });
21
+ }
22
+ async listByOrg(organizationId) {
23
+ return this.db.membership.findMany({
24
+ where: { organizationId },
25
+ include: { user: true },
26
+ });
27
+ }
28
+ async updateRole(id, role) {
29
+ return this.db.membership.update({
30
+ where: { id },
31
+ data: { role },
32
+ });
33
+ }
34
+ async remove(id) {
35
+ await this.db.membership.delete({ where: { id } });
36
+ }
37
+ async countOwners(organizationId) {
38
+ return this.db.membership.count({
39
+ where: { organizationId, role: "owner" },
40
+ });
41
+ }
42
+ }
43
+ //# sourceMappingURL=membership-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"membership-service.js","sourceRoot":"","sources":["../../src/services/membership-service.ts"],"names":[],"mappings":"AAKA,MAAM,OAAO,iBAAiB;IACR;IAApB,YAAoB,EAAgB;QAAhB,OAAE,GAAF,EAAE,CAAc;IAAG,CAAC;IAExC,KAAK,CAAC,MAAM,CAAC,MAAc,EAAE,cAAsB,EAAE,OAAe,QAAQ;QAC1E,OAAO,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC;YAC/B,IAAI,EAAE,EAAE,MAAM,EAAE,cAAc,EAAE,IAAI,EAAE;SACvC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,MAAc,EAAE,cAAsB;QAC3D,OAAO,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC;YACnC,KAAK,EAAE,EAAE,qBAAqB,EAAE,EAAE,MAAM,EAAE,cAAc,EAAE,EAAE;SAC7D,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,MAAc;QAC7B,OAAO,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC;YACjC,KAAK,EAAE,EAAE,MAAM,EAAE;YACjB,OAAO,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE;SAChC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,cAAsB;QACpC,OAAO,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC;YACjC,KAAK,EAAE,EAAE,cAAc,EAAE;YACzB,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE;SACxB,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,EAAU,EAAE,IAAY;QACvC,OAAO,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC;YAC/B,KAAK,EAAE,EAAE,EAAE,EAAE;YACb,IAAI,EAAE,EAAE,IAAI,EAAE;SACf,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,EAAU;QACrB,MAAM,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IACrD,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,cAAsB;QACtC,OAAO,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC;YAC9B,KAAK,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,OAAO,EAAE;SACzC,CAAC,CAAC;IACL,CAAC;CACF"}
@@ -0,0 +1,29 @@
1
+ import type { PrismaClient } from "@prisma/client";
2
+ export interface OrgAgentConfig {
3
+ model: string;
4
+ promptTemplate: string;
5
+ maxTimeoutMinutes: number;
6
+ enabled: boolean;
7
+ updatedAt: Date;
8
+ updatedBy: string;
9
+ }
10
+ export interface OrgAgentConfigWithKeys extends OrgAgentConfig {
11
+ claudeApiKey: string;
12
+ e2bApiKey: string;
13
+ }
14
+ export declare class OrgAgentConfigService {
15
+ private db;
16
+ constructor(db: PrismaClient);
17
+ get(organizationId: string): Promise<OrgAgentConfig | null>;
18
+ getWithKeys(organizationId: string): Promise<OrgAgentConfigWithKeys | null>;
19
+ set(organizationId: string, input: {
20
+ claudeApiKey: string;
21
+ e2bApiKey?: string;
22
+ model?: string;
23
+ promptTemplate?: string;
24
+ maxTimeoutMinutes?: number;
25
+ updatedBy?: string;
26
+ }): Promise<OrgAgentConfig>;
27
+ delete(organizationId: string): Promise<boolean>;
28
+ }
29
+ //# sourceMappingURL=org-agent-config-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"org-agent-config-service.d.ts","sourceRoot":"","sources":["../../src/services/org-agent-config-service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAgBnD,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,EAAE,MAAM,CAAC;IACvB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,IAAI,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,sBAAuB,SAAQ,cAAc;IAC5D,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,qBAAa,qBAAqB;IACpB,OAAO,CAAC,EAAE;gBAAF,EAAE,EAAE,YAAY;IAE9B,GAAG,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;IAe3D,WAAW,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,GAAG,IAAI,CAAC;IA2B3E,GAAG,CACP,cAAc,EAAE,MAAM,EACtB,KAAK,EAAE;QACL,YAAY,EAAE,MAAM,CAAC;QACrB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,iBAAiB,CAAC,EAAE,MAAM,CAAC;QAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,GACA,OAAO,CAAC,cAAc,CAAC;IAkCpB,MAAM,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;CAQvD"}
@@ -0,0 +1,99 @@
1
+ import { encryptAesGcm, decryptAesGcm, deriveKey } from "../lib/crypto.js";
2
+ function getEncryptionKey() {
3
+ const secret = process.env.AGENT_KEY_SECRET ?? "apart-default-agent-key-secret-change-me";
4
+ return deriveKey(secret);
5
+ }
6
+ function encrypt(plaintext) {
7
+ return encryptAesGcm(plaintext, getEncryptionKey());
8
+ }
9
+ function decrypt(encoded) {
10
+ return decryptAesGcm(encoded, getEncryptionKey());
11
+ }
12
+ export class OrgAgentConfigService {
13
+ db;
14
+ constructor(db) {
15
+ this.db = db;
16
+ }
17
+ async get(organizationId) {
18
+ const config = await this.db.orgAgentConfig.findUnique({
19
+ where: { organizationId },
20
+ });
21
+ if (!config)
22
+ return null;
23
+ return {
24
+ model: config.model,
25
+ promptTemplate: config.promptTemplate,
26
+ maxTimeoutMinutes: config.maxTimeoutMinutes,
27
+ enabled: config.enabled,
28
+ updatedAt: config.updatedAt,
29
+ updatedBy: config.updatedBy,
30
+ };
31
+ }
32
+ async getWithKeys(organizationId) {
33
+ const config = await this.db.orgAgentConfig.findUnique({
34
+ where: { organizationId },
35
+ });
36
+ if (!config)
37
+ return null;
38
+ // E2B key: org-level overrides server-level env var
39
+ const e2bApiKey = config.e2bApiKeyEncrypted
40
+ ? decrypt(config.e2bApiKeyEncrypted)
41
+ : process.env.E2B_API_KEY;
42
+ if (!e2bApiKey) {
43
+ throw new Error("No E2B API key configured. Set E2B_API_KEY on the server or provide one during agent config setup.");
44
+ }
45
+ return {
46
+ model: config.model,
47
+ promptTemplate: config.promptTemplate,
48
+ maxTimeoutMinutes: config.maxTimeoutMinutes,
49
+ enabled: config.enabled,
50
+ claudeApiKey: decrypt(config.claudeApiKeyEncrypted),
51
+ e2bApiKey,
52
+ updatedAt: config.updatedAt,
53
+ updatedBy: config.updatedBy,
54
+ };
55
+ }
56
+ async set(organizationId, input) {
57
+ const encryptedClaude = encrypt(input.claudeApiKey);
58
+ const encryptedE2b = input.e2bApiKey ? encrypt(input.e2bApiKey) : null;
59
+ const config = await this.db.orgAgentConfig.upsert({
60
+ where: { organizationId },
61
+ create: {
62
+ organizationId,
63
+ claudeApiKeyEncrypted: encryptedClaude,
64
+ e2bApiKeyEncrypted: encryptedE2b,
65
+ model: input.model ?? "sonnet",
66
+ promptTemplate: input.promptTemplate ?? "",
67
+ maxTimeoutMinutes: input.maxTimeoutMinutes ?? 30,
68
+ updatedBy: input.updatedBy ?? "api",
69
+ },
70
+ update: {
71
+ claudeApiKeyEncrypted: encryptedClaude,
72
+ e2bApiKeyEncrypted: encryptedE2b !== undefined ? encryptedE2b : undefined,
73
+ model: input.model ?? undefined,
74
+ promptTemplate: input.promptTemplate ?? undefined,
75
+ maxTimeoutMinutes: input.maxTimeoutMinutes ?? undefined,
76
+ updatedAt: new Date(),
77
+ updatedBy: input.updatedBy ?? "api",
78
+ },
79
+ });
80
+ return {
81
+ model: config.model,
82
+ promptTemplate: config.promptTemplate,
83
+ maxTimeoutMinutes: config.maxTimeoutMinutes,
84
+ enabled: config.enabled,
85
+ updatedAt: config.updatedAt,
86
+ updatedBy: config.updatedBy,
87
+ };
88
+ }
89
+ async delete(organizationId) {
90
+ try {
91
+ await this.db.orgAgentConfig.delete({ where: { organizationId } });
92
+ return true;
93
+ }
94
+ catch {
95
+ return false;
96
+ }
97
+ }
98
+ }
99
+ //# sourceMappingURL=org-agent-config-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"org-agent-config-service.js","sourceRoot":"","sources":["../../src/services/org-agent-config-service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import type { PrismaClient, User, Membership, Organization } from "@prisma/client";
2
+ export type { User } from "@prisma/client";
3
+ export type MembershipWithOrg = Membership & {
4
+ organization: Organization;
5
+ };
6
+ export declare class UserService {
7
+ private db;
8
+ constructor(db: PrismaClient);
9
+ findOrCreateByAuth0Sub(auth0Sub: string, email: string, name?: string): Promise<User>;
10
+ getById(id: string): Promise<User | null>;
11
+ getByAuth0Sub(auth0Sub: string): Promise<User | null>;
12
+ getMemberships(userId: string): Promise<MembershipWithOrg[]>;
13
+ }
14
+ //# sourceMappingURL=user-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user-service.d.ts","sourceRoot":"","sources":["../../src/services/user-service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAEnF,YAAY,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAE3C,MAAM,MAAM,iBAAiB,GAAG,UAAU,GAAG;IAAE,YAAY,EAAE,YAAY,CAAA;CAAE,CAAC;AAE5E,qBAAa,WAAW;IACV,OAAO,CAAC,EAAE;gBAAF,EAAE,EAAE,YAAY;IAE9B,sBAAsB,CAC1B,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,EACb,IAAI,CAAC,EAAE,MAAM,GACZ,OAAO,CAAC,IAAI,CAAC;IAsBV,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;IAIzC,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;IAIrD,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC;CAMnE"}
@@ -0,0 +1,39 @@
1
+ export class UserService {
2
+ db;
3
+ constructor(db) {
4
+ this.db = db;
5
+ }
6
+ async findOrCreateByAuth0Sub(auth0Sub, email, name) {
7
+ const existing = await this.db.user.findUnique({ where: { auth0Sub } });
8
+ if (existing) {
9
+ // Update email/name if changed
10
+ if (existing.email !== email || (name && existing.name !== name)) {
11
+ return this.db.user.update({
12
+ where: { id: existing.id },
13
+ data: {
14
+ email,
15
+ ...(name ? { name } : {}),
16
+ updatedAt: new Date(),
17
+ },
18
+ });
19
+ }
20
+ return existing;
21
+ }
22
+ return this.db.user.create({
23
+ data: { auth0Sub, email, name },
24
+ });
25
+ }
26
+ async getById(id) {
27
+ return this.db.user.findUnique({ where: { id } });
28
+ }
29
+ async getByAuth0Sub(auth0Sub) {
30
+ return this.db.user.findUnique({ where: { auth0Sub } });
31
+ }
32
+ async getMemberships(userId) {
33
+ return this.db.membership.findMany({
34
+ where: { userId },
35
+ include: { organization: true },
36
+ });
37
+ }
38
+ }
39
+ //# sourceMappingURL=user-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user-service.js","sourceRoot":"","sources":["../../src/services/user-service.ts"],"names":[],"mappings":"AAMA,MAAM,OAAO,WAAW;IACF;IAApB,YAAoB,EAAgB;QAAhB,OAAE,GAAF,EAAE,CAAc;IAAG,CAAC;IAExC,KAAK,CAAC,sBAAsB,CAC1B,QAAgB,EAChB,KAAa,EACb,IAAa;QAEb,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC;QACxE,IAAI,QAAQ,EAAE,CAAC;YACb,+BAA+B;YAC/B,IAAI,QAAQ,CAAC,KAAK,KAAK,KAAK,IAAI,CAAC,IAAI,IAAI,QAAQ,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;gBACjE,OAAO,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC;oBACzB,KAAK,EAAE,EAAE,EAAE,EAAE,QAAQ,CAAC,EAAE,EAAE;oBAC1B,IAAI,EAAE;wBACJ,KAAK;wBACL,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;wBACzB,SAAS,EAAE,IAAI,IAAI,EAAE;qBACtB;iBACF,CAAC,CAAC;YACL,CAAC;YACD,OAAO,QAAQ,CAAC;QAClB,CAAC;QAED,OAAO,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC;YACzB,IAAI,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE;SAChC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,EAAU;QACtB,OAAO,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IACpD,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,QAAgB;QAClC,OAAO,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC;IAC1D,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,MAAc;QACjC,OAAO,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC;YACjC,KAAK,EAAE,EAAE,MAAM,EAAE;YACjB,OAAO,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE;SAChC,CAAC,CAAC;IACL,CAAC;CACF"}
@@ -96,5 +96,10 @@ export interface ApartConfig {
96
96
  mode: "self-hosted" | "cloud";
97
97
  organizationId?: string;
98
98
  };
99
+ auth0?: {
100
+ domain: string;
101
+ audience: string;
102
+ clientId: string;
103
+ };
99
104
  }
100
105
  //# sourceMappingURL=index.d.ts.map
@@ -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.4.0",
3
+ "version": "1.6.0",
4
4
  "description": "Core library: database, services, and providers for Apart Intelligence",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -22,6 +22,7 @@
22
22
  "@cdssnc/sanitize-pii": "^2.1.2",
23
23
  "@prisma/client": "^6.6.0",
24
24
  "@prisma/extension-accelerate": "^3.0.1",
25
+ "jose": "^6.2.1",
25
26
  "prisma": "^6.6.0",
26
27
  "yaml": "^2.6.0",
27
28
  "zod": "^3.24.0"
@@ -8,11 +8,12 @@ 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
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)
16
17
 
17
18
  nodes Node[]
18
19
  edges Edge[]
@@ -21,10 +22,62 @@ model Organization {
21
22
  workspaces Workspace[]
22
23
  embeddingConfig OrgEmbeddingConfig?
23
24
  piiConfig OrgPiiConfig?
25
+ agentConfig OrgAgentConfig?
26
+ agentRuns AgentRun[]
27
+ memberships Membership[]
28
+ invites Invite[]
24
29
 
25
30
  @@map("organizations")
26
31
  }
27
32
 
33
+ model User {
34
+ id String @id @default(uuid()) @db.Uuid
35
+ auth0Sub String @unique @map("auth0_sub") @db.VarChar(255)
36
+ email String @db.VarChar(320)
37
+ name String? @db.VarChar(200)
38
+ avatarUrl String? @map("avatar_url") @db.Text
39
+ createdAt DateTime @default(now()) @map("created_at") @db.Timestamptz
40
+ updatedAt DateTime @default(now()) @map("updated_at") @db.Timestamptz
41
+
42
+ memberships Membership[]
43
+
44
+ @@index([email], map: "idx_users_email")
45
+ @@map("users")
46
+ }
47
+
48
+ model Membership {
49
+ id String @id @default(uuid()) @db.Uuid
50
+ userId String @map("user_id") @db.Uuid
51
+ organizationId String @map("organization_id") @db.Uuid
52
+ role String @default("member") @db.VarChar(50)
53
+ createdAt DateTime @default(now()) @map("created_at") @db.Timestamptz
54
+
55
+ user User @relation(fields: [userId], references: [id], onDelete: Cascade)
56
+ organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)
57
+
58
+ @@unique([userId, organizationId], map: "uq_membership_user_org")
59
+ @@index([organizationId], map: "idx_memberships_organization")
60
+ @@map("memberships")
61
+ }
62
+
63
+ model Invite {
64
+ id String @id @default(uuid()) @db.Uuid
65
+ email String @db.VarChar(320)
66
+ organizationId String @map("organization_id") @db.Uuid
67
+ role String @default("member") @db.VarChar(50)
68
+ token String @unique @db.VarChar(64)
69
+ status String @default("pending") @db.VarChar(20)
70
+ invitedBy String @map("invited_by") @db.VarChar(255)
71
+ expiresAt DateTime @map("expires_at") @db.Timestamptz
72
+ createdAt DateTime @default(now()) @map("created_at") @db.Timestamptz
73
+
74
+ organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)
75
+
76
+ @@index([email], map: "idx_invites_email")
77
+ @@index([organizationId], map: "idx_invites_organization")
78
+ @@map("invites")
79
+ }
80
+
28
81
  model OrgEmbeddingConfig {
29
82
  id String @id @default(uuid()) @db.Uuid
30
83
  organizationId String @unique @map("organization_id") @db.Uuid
@@ -163,6 +216,43 @@ model Workspace {
163
216
  @@map("workspaces")
164
217
  }
165
218
 
219
+ model OrgAgentConfig {
220
+ id String @id @default(uuid()) @db.Uuid
221
+ organizationId String @unique @map("organization_id") @db.Uuid
222
+ claudeApiKeyEncrypted String @map("claude_api_key_encrypted") @db.Text
223
+ e2bApiKeyEncrypted String? @map("e2b_api_key_encrypted") @db.Text
224
+ model String @default("sonnet") @db.VarChar(50)
225
+ promptTemplate String @default("") @map("prompt_template") @db.Text
226
+ maxTimeoutMinutes Int @default(30) @map("max_timeout_minutes")
227
+ enabled Boolean @default(true)
228
+ updatedAt DateTime @default(now()) @map("updated_at") @db.Timestamptz
229
+ updatedBy String @default("api") @map("updated_by") @db.VarChar(255)
230
+
231
+ organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)
232
+
233
+ @@map("org_agent_config")
234
+ }
235
+
236
+ model AgentRun {
237
+ id String @id @default(uuid()) @db.Uuid
238
+ organizationId String @map("organization_id") @db.Uuid
239
+ prompt String @db.Text
240
+ status String @default("pending") @db.VarChar(20)
241
+ result String @default("") @db.Text
242
+ error String? @db.Text
243
+ sandboxId String? @map("sandbox_id") @db.VarChar(100)
244
+ model String @default("sonnet") @db.VarChar(50)
245
+ startedAt DateTime @default(now()) @map("started_at") @db.Timestamptz
246
+ completedAt DateTime? @map("completed_at") @db.Timestamptz
247
+ createdBy String @map("created_by") @db.VarChar(255)
248
+
249
+ organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)
250
+
251
+ @@index([organizationId], map: "idx_agent_runs_organization")
252
+ @@index([status], map: "idx_agent_runs_status")
253
+ @@map("agent_runs")
254
+ }
255
+
166
256
  model ApiKey {
167
257
  id String @id @default(uuid()) @db.Uuid
168
258
  name String @db.VarChar(255)
@@ -178,3 +268,11 @@ model ApiKey {
178
268
  @@index([organizationId], map: "idx_api_keys_organization")
179
269
  @@map("api_keys")
180
270
  }
271
+
272
+ model EmbeddingCache {
273
+ contentHash String @id @map("content_hash") @db.VarChar(64)
274
+ embedding Unsupported("vector")
275
+ createdAt DateTime @default(now()) @map("created_at") @db.Timestamptz
276
+
277
+ @@map("embedding_cache")
278
+ }