@apart-tech/intelligence-core 1.17.3 → 1.19.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 (47) 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 +19 -0
  4. package/dist/auth/ability.js.map +1 -1
  5. package/dist/auth/ability.test.js +58 -4
  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 +13 -1
  11. package/dist/index.d.ts.map +1 -1
  12. package/dist/index.js +7 -0
  13. package/dist/index.js.map +1 -1
  14. package/dist/services/__tests__/agent-instruction-service.test.d.ts +2 -0
  15. package/dist/services/__tests__/agent-instruction-service.test.d.ts.map +1 -0
  16. package/dist/services/__tests__/agent-instruction-service.test.js +408 -0
  17. package/dist/services/__tests__/agent-instruction-service.test.js.map +1 -0
  18. package/dist/services/agent-instruction-service.d.ts +82 -0
  19. package/dist/services/agent-instruction-service.d.ts.map +1 -0
  20. package/dist/services/agent-instruction-service.js +249 -0
  21. package/dist/services/agent-instruction-service.js.map +1 -0
  22. package/dist/services/agent-run-service.d.ts +61 -0
  23. package/dist/services/agent-run-service.d.ts.map +1 -1
  24. package/dist/services/agent-run-service.js +72 -0
  25. package/dist/services/agent-run-service.js.map +1 -1
  26. package/dist/services/chat-context-service.d.ts +33 -0
  27. package/dist/services/chat-context-service.d.ts.map +1 -0
  28. package/dist/services/chat-context-service.js +110 -0
  29. package/dist/services/chat-context-service.js.map +1 -0
  30. package/dist/services/chat-service.d.ts +83 -0
  31. package/dist/services/chat-service.d.ts.map +1 -0
  32. package/dist/services/chat-service.js +103 -0
  33. package/dist/services/chat-service.js.map +1 -0
  34. package/dist/services/chat-usage-service.d.ts +36 -0
  35. package/dist/services/chat-usage-service.d.ts.map +1 -0
  36. package/dist/services/chat-usage-service.js +89 -0
  37. package/dist/services/chat-usage-service.js.map +1 -0
  38. package/dist/services/llm-router-service.d.ts +29 -0
  39. package/dist/services/llm-router-service.d.ts.map +1 -0
  40. package/dist/services/llm-router-service.js +70 -0
  41. package/dist/services/llm-router-service.js.map +1 -0
  42. package/dist/services/org-llm-provider-service.d.ts +47 -0
  43. package/dist/services/org-llm-provider-service.d.ts.map +1 -0
  44. package/dist/services/org-llm-provider-service.js +126 -0
  45. package/dist/services/org-llm-provider-service.js.map +1 -0
  46. package/package.json +1 -1
  47. package/prisma/schema.prisma +317 -162
@@ -0,0 +1,249 @@
1
+ import { createHash } from "node:crypto";
2
+ // ── Service ────────────────────────────────────────────────────────────────
3
+ export class AgentInstructionService {
4
+ db;
5
+ constructor(db) {
6
+ this.db = db;
7
+ }
8
+ /**
9
+ * Compute a SHA-256 hash of the instruction content fields. Deterministic
10
+ * through sorted-key canonical JSON so the same logical content always
11
+ * produces the same hash regardless of property insertion order.
12
+ */
13
+ static computeHash(input) {
14
+ const canonical = JSON.stringify(input, Object.keys(input).sort());
15
+ return createHash("sha256").update(canonical).digest("hex");
16
+ }
17
+ async create(organizationId, input) {
18
+ const contentHash = AgentInstructionService.computeHash({
19
+ systemPrompt: input.systemPrompt ?? "",
20
+ tools: input.tools ?? [],
21
+ guardrails: input.guardrails ?? {},
22
+ modelConfig: input.modelConfig ?? {},
23
+ });
24
+ const row = await this.db.agentInstruction.create({
25
+ data: {
26
+ organizationId,
27
+ agentTypeId: input.agentTypeId ?? null,
28
+ taskType: input.taskType ?? null,
29
+ version: input.version,
30
+ status: "draft",
31
+ systemPrompt: input.systemPrompt ?? "",
32
+ tools: input.tools ?? [],
33
+ guardrails: input.guardrails ?? {},
34
+ modelConfig: input.modelConfig ?? {},
35
+ contentHash,
36
+ changeNote: input.changeNote ?? null,
37
+ createdBy: input.createdBy,
38
+ },
39
+ });
40
+ return this.toRecord(row);
41
+ }
42
+ async updateDraft(id, organizationId, input) {
43
+ const existing = await this.db.agentInstruction.findFirst({
44
+ where: { id, organizationId },
45
+ });
46
+ if (!existing)
47
+ throw new Error("Instruction not found");
48
+ if (existing.status !== "draft") {
49
+ throw new Error("Only draft instructions can be updated");
50
+ }
51
+ const merged = {
52
+ systemPrompt: input.systemPrompt ?? existing.systemPrompt,
53
+ tools: input.tools ?? existing.tools,
54
+ guardrails: input.guardrails ?? existing.guardrails,
55
+ modelConfig: input.modelConfig ?? existing.modelConfig,
56
+ };
57
+ const contentHash = AgentInstructionService.computeHash(merged);
58
+ const row = await this.db.agentInstruction.update({
59
+ where: { id },
60
+ data: {
61
+ systemPrompt: merged.systemPrompt,
62
+ tools: merged.tools,
63
+ guardrails: merged.guardrails,
64
+ modelConfig: merged.modelConfig,
65
+ contentHash,
66
+ changeNote: input.changeNote ?? existing.changeNote,
67
+ version: input.version ?? existing.version,
68
+ updatedAt: new Date(),
69
+ },
70
+ });
71
+ return this.toRecord(row);
72
+ }
73
+ async publish(id, organizationId) {
74
+ const existing = await this.db.agentInstruction.findFirst({
75
+ where: { id, organizationId },
76
+ });
77
+ if (!existing)
78
+ throw new Error("Instruction not found");
79
+ if (existing.status !== "draft") {
80
+ throw new Error("Only draft instructions can be published");
81
+ }
82
+ // Recompute hash on publish to capture any intermediate edits
83
+ const contentHash = AgentInstructionService.computeHash({
84
+ systemPrompt: existing.systemPrompt,
85
+ tools: existing.tools,
86
+ guardrails: existing.guardrails,
87
+ modelConfig: existing.modelConfig,
88
+ });
89
+ const now = new Date();
90
+ // Auto-deprecate the currently published version for the same scope
91
+ const currentPublished = await this.db.agentInstruction.findFirst({
92
+ where: {
93
+ organizationId,
94
+ agentTypeId: existing.agentTypeId,
95
+ taskType: existing.taskType,
96
+ status: "published",
97
+ },
98
+ });
99
+ if (currentPublished) {
100
+ await this.db.agentInstruction.update({
101
+ where: { id: currentPublished.id },
102
+ data: { status: "deprecated", deprecatedAt: now, updatedAt: now },
103
+ });
104
+ }
105
+ const row = await this.db.agentInstruction.update({
106
+ where: { id },
107
+ data: {
108
+ status: "published",
109
+ contentHash,
110
+ publishedAt: now,
111
+ updatedAt: now,
112
+ },
113
+ });
114
+ return this.toRecord(row);
115
+ }
116
+ async deprecate(id, organizationId) {
117
+ const existing = await this.db.agentInstruction.findFirst({
118
+ where: { id, organizationId },
119
+ });
120
+ if (!existing)
121
+ throw new Error("Instruction not found");
122
+ if (existing.status !== "published") {
123
+ throw new Error("Only published instructions can be deprecated");
124
+ }
125
+ const now = new Date();
126
+ const row = await this.db.agentInstruction.update({
127
+ where: { id },
128
+ data: { status: "deprecated", deprecatedAt: now, updatedAt: now },
129
+ });
130
+ return this.toRecord(row);
131
+ }
132
+ async getById(id, organizationId) {
133
+ const row = await this.db.agentInstruction.findFirst({
134
+ where: { id, organizationId },
135
+ });
136
+ return row ? this.toRecord(row) : null;
137
+ }
138
+ async list(organizationId, opts) {
139
+ const rows = await this.db.agentInstruction.findMany({
140
+ where: {
141
+ organizationId,
142
+ ...(opts?.agentTypeId ? { agentTypeId: opts.agentTypeId } : {}),
143
+ ...(opts?.taskType !== undefined ? { taskType: opts.taskType } : {}),
144
+ ...(opts?.status ? { status: opts.status } : {}),
145
+ },
146
+ orderBy: { createdAt: "desc" },
147
+ take: opts?.limit ?? 50,
148
+ });
149
+ return rows.map((r) => this.toRecord(r));
150
+ }
151
+ /**
152
+ * Resolve the active published instruction for a given scope.
153
+ * Resolution order: task-specific published → global published → null.
154
+ */
155
+ async getPublished(organizationId, agentTypeId, taskType) {
156
+ // Try task-specific first
157
+ if (taskType) {
158
+ const specific = await this.db.agentInstruction.findFirst({
159
+ where: {
160
+ organizationId,
161
+ agentTypeId: agentTypeId ?? null,
162
+ taskType,
163
+ status: "published",
164
+ },
165
+ orderBy: { publishedAt: "desc" },
166
+ });
167
+ if (specific)
168
+ return this.toRecord(specific);
169
+ }
170
+ // Fall back to global (taskType = null)
171
+ const global = await this.db.agentInstruction.findFirst({
172
+ where: {
173
+ organizationId,
174
+ agentTypeId: agentTypeId ?? null,
175
+ taskType: null,
176
+ status: "published",
177
+ },
178
+ orderBy: { publishedAt: "desc" },
179
+ });
180
+ return global ? this.toRecord(global) : null;
181
+ }
182
+ async fork(id, organizationId, newVersion, createdBy) {
183
+ const source = await this.db.agentInstruction.findFirst({
184
+ where: { id, organizationId },
185
+ });
186
+ if (!source)
187
+ throw new Error("Instruction not found");
188
+ const contentHash = AgentInstructionService.computeHash({
189
+ systemPrompt: source.systemPrompt,
190
+ tools: source.tools,
191
+ guardrails: source.guardrails,
192
+ modelConfig: source.modelConfig,
193
+ });
194
+ const row = await this.db.agentInstruction.create({
195
+ data: {
196
+ organizationId,
197
+ agentTypeId: source.agentTypeId,
198
+ taskType: source.taskType,
199
+ version: newVersion,
200
+ status: "draft",
201
+ systemPrompt: source.systemPrompt,
202
+ tools: source.tools,
203
+ guardrails: source.guardrails,
204
+ modelConfig: source.modelConfig,
205
+ contentHash,
206
+ parentVersionId: source.id,
207
+ changeNote: `Forked from v${source.version}`,
208
+ createdBy,
209
+ },
210
+ });
211
+ return this.toRecord(row);
212
+ }
213
+ async diff(idA, idB, organizationId) {
214
+ const [a, b] = await Promise.all([
215
+ this.getById(idA, organizationId),
216
+ this.getById(idB, organizationId),
217
+ ]);
218
+ if (!a)
219
+ throw new Error(`Instruction ${idA} not found`);
220
+ if (!b)
221
+ throw new Error(`Instruction ${idB} not found`);
222
+ return { a, b };
223
+ }
224
+ toRecord(row) {
225
+ return {
226
+ id: row.id,
227
+ organizationId: row.organizationId,
228
+ agentTypeId: row.agentTypeId ?? null,
229
+ taskType: row.taskType ?? null,
230
+ version: row.version,
231
+ status: row.status,
232
+ systemPrompt: row.systemPrompt,
233
+ tools: row.tools,
234
+ guardrails: row.guardrails,
235
+ modelConfig: row.modelConfig,
236
+ contentHash: row.contentHash ?? null,
237
+ parentVersionId: row.parentVersionId ?? null,
238
+ changeNote: row.changeNote ?? null,
239
+ publishedAt: row.publishedAt ?? null,
240
+ deprecatedAt: row.deprecatedAt ?? null,
241
+ effectiveFrom: row.effectiveFrom ?? null,
242
+ effectiveTo: row.effectiveTo ?? null,
243
+ createdBy: row.createdBy,
244
+ createdAt: row.createdAt,
245
+ updatedAt: row.updatedAt,
246
+ };
247
+ }
248
+ }
249
+ //# sourceMappingURL=agent-instruction-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-instruction-service.js","sourceRoot":"","sources":["../../src/services/agent-instruction-service.ts"],"names":[],"mappings":"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"}
@@ -32,6 +32,46 @@ export interface AgentRun {
32
32
  * before use.
33
33
  */
34
34
  capturedAbility: unknown;
35
+ /** FK to `AgentInstruction.id` — the instruction version pinned at spawn time. */
36
+ instructionId: string | null;
37
+ /** Accumulated reasoning trace entries (append-only JSONB array). */
38
+ reasoningTrace: unknown;
39
+ /** Accumulated tool call log entries (append-only JSONB array). */
40
+ toolsCalled: unknown;
41
+ /** Structured decision outcome set at completion. */
42
+ outcome: unknown;
43
+ /** Confidence score (0–1) associated with the outcome. */
44
+ confidence: number | null;
45
+ /** Task type discriminator for instruction resolution. */
46
+ taskType: string | null;
47
+ /** Outcome status (e.g. "approved", "rejected", "escalated"). */
48
+ outcomeStatus: string | null;
49
+ }
50
+ export interface TraceEntry {
51
+ type: string;
52
+ content: string;
53
+ timestamp: string;
54
+ metadata?: Record<string, unknown>;
55
+ }
56
+ export interface ToolCallEntry {
57
+ tool: string;
58
+ args: unknown;
59
+ result: unknown;
60
+ timestamp: string;
61
+ durationMs?: number;
62
+ }
63
+ export interface OutcomeInput {
64
+ decision: string;
65
+ confidence?: number;
66
+ reasoning?: string;
67
+ alternativesConsidered?: string[];
68
+ }
69
+ export interface AgentRunTrace {
70
+ reasoningTrace: unknown;
71
+ toolsCalled: unknown;
72
+ outcome: unknown;
73
+ confidence: number | null;
74
+ outcomeStatus: string | null;
35
75
  }
36
76
  export interface AgentRunCreateInput {
37
77
  prompt: string;
@@ -55,6 +95,10 @@ export interface AgentRunCreateInput {
55
95
  * `OrgAgentPrincipal` path in the middleware grants `manage all`.
56
96
  */
57
97
  capturedAbility?: unknown;
98
+ /** FK to `AgentInstruction.id` — the instruction version pinned at spawn time. */
99
+ instructionId?: string | null;
100
+ /** Task type discriminator for instruction resolution. */
101
+ taskType?: string | null;
58
102
  }
59
103
  export declare class AgentRunService {
60
104
  private db;
@@ -73,6 +117,23 @@ export declare class AgentRunService {
73
117
  status?: string;
74
118
  type?: string;
75
119
  }): Promise<AgentRun[]>;
120
+ /**
121
+ * Append a reasoning trace entry to the run's reasoning_trace JSONB array.
122
+ * Uses raw SQL with COALESCE for crash-safe append without read-modify-write.
123
+ */
124
+ appendTrace(id: string, organizationId: string, entry: TraceEntry): Promise<void>;
125
+ /**
126
+ * Append a tool call entry to the run's tools_called JSONB array.
127
+ */
128
+ appendToolCall(id: string, organizationId: string, entry: ToolCallEntry): Promise<void>;
129
+ /**
130
+ * Set the structured outcome and optional confidence/status on a run.
131
+ */
132
+ setOutcome(id: string, organizationId: string, input: OutcomeInput, outcomeStatus?: string): Promise<void>;
133
+ /**
134
+ * Get the full trace, tool calls, outcome, and confidence for a run.
135
+ */
136
+ getTrace(id: string, organizationId: string): Promise<AgentRunTrace | null>;
76
137
  private toAgentRun;
77
138
  }
78
139
  //# sourceMappingURL=agent-run-service.d.ts.map
@@ -1 +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,IAAI,EAAE,MAAM,CAAC;IACb,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;IAClB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B;;;;OAIG;IACH,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB;;;;OAIG;IACH,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B;;;;;;OAMG;IACH,eAAe,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB;;OAEG;IACH,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC;;;;;OAKG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,qBAAa,eAAe;IACd,OAAO,CAAC,EAAE;gBAAF,EAAE,EAAE,YAAY;IAE9B,MAAM,CACV,cAAc,EAAE,MAAM,EACtB,KAAK,EAAE,mBAAmB,GACzB,OAAO,CAAC,QAAQ,CAAC;IA2Bd,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,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,GACxD,OAAO,CAAC,QAAQ,EAAE,CAAC;IAatB,OAAO,CAAC,UAAU;CAmBnB"}
1
+ {"version":3,"file":"agent-run-service.d.ts","sourceRoot":"","sources":["../../src/services/agent-run-service.ts"],"names":[],"mappings":"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"}
@@ -24,6 +24,8 @@ export class AgentRunService {
24
24
  capturedAbility: input.capturedAbility == null
25
25
  ? undefined
26
26
  : input.capturedAbility,
27
+ instructionId: input.instructionId ?? null,
28
+ taskType: input.taskType ?? null,
27
29
  },
28
30
  });
29
31
  return this.toAgentRun(run);
@@ -61,6 +63,69 @@ export class AgentRunService {
61
63
  });
62
64
  return runs.map((r) => this.toAgentRun(r));
63
65
  }
66
+ /**
67
+ * Append a reasoning trace entry to the run's reasoning_trace JSONB array.
68
+ * Uses raw SQL with COALESCE for crash-safe append without read-modify-write.
69
+ */
70
+ async appendTrace(id, organizationId, entry) {
71
+ const entryJson = JSON.stringify(entry);
72
+ await this.db.$executeRaw `
73
+ UPDATE agent_runs
74
+ SET reasoning_trace = COALESCE(reasoning_trace, '[]'::jsonb) || ${entryJson}::jsonb,
75
+ updated_at = NOW()
76
+ WHERE id = ${id}::uuid AND organization_id = ${organizationId}::uuid
77
+ `;
78
+ }
79
+ /**
80
+ * Append a tool call entry to the run's tools_called JSONB array.
81
+ */
82
+ async appendToolCall(id, organizationId, entry) {
83
+ const entryJson = JSON.stringify(entry);
84
+ await this.db.$executeRaw `
85
+ UPDATE agent_runs
86
+ SET tools_called = COALESCE(tools_called, '[]'::jsonb) || ${entryJson}::jsonb,
87
+ updated_at = NOW()
88
+ WHERE id = ${id}::uuid AND organization_id = ${organizationId}::uuid
89
+ `;
90
+ }
91
+ /**
92
+ * Set the structured outcome and optional confidence/status on a run.
93
+ */
94
+ async setOutcome(id, organizationId, input, outcomeStatus) {
95
+ const outcomeJson = JSON.stringify(input);
96
+ await this.db.$executeRaw `
97
+ UPDATE agent_runs
98
+ SET outcome = ${outcomeJson}::jsonb,
99
+ confidence = ${input.confidence ?? null},
100
+ outcome_status = ${outcomeStatus ?? null},
101
+ updated_at = NOW()
102
+ WHERE id = ${id}::uuid AND organization_id = ${organizationId}::uuid
103
+ `;
104
+ }
105
+ /**
106
+ * Get the full trace, tool calls, outcome, and confidence for a run.
107
+ */
108
+ async getTrace(id, organizationId) {
109
+ const run = await this.db.agentRun.findFirst({
110
+ where: { id, organizationId },
111
+ select: {
112
+ reasoningTrace: true,
113
+ toolsCalled: true,
114
+ outcome: true,
115
+ confidence: true,
116
+ outcomeStatus: true,
117
+ },
118
+ });
119
+ if (!run)
120
+ return null;
121
+ return {
122
+ reasoningTrace: run.reasoningTrace,
123
+ toolsCalled: run.toolsCalled,
124
+ outcome: run.outcome,
125
+ confidence: run.confidence ? Number(run.confidence) : null,
126
+ outcomeStatus: run.outcomeStatus ?? null,
127
+ };
128
+ }
64
129
  toAgentRun(run) {
65
130
  return {
66
131
  id: run.id,
@@ -78,6 +143,13 @@ export class AgentRunService {
78
143
  agentId: run.agentId ?? null,
79
144
  invokedByUserId: run.invokedByUserId ?? null,
80
145
  capturedAbility: run.capturedAbility ?? null,
146
+ instructionId: run.instructionId ?? null,
147
+ reasoningTrace: run.reasoningTrace ?? null,
148
+ toolsCalled: run.toolsCalled ?? null,
149
+ outcome: run.outcome ?? null,
150
+ confidence: run.confidence != null ? Number(run.confidence) : null,
151
+ taskType: run.taskType ?? null,
152
+ outcomeStatus: run.outcomeStatus ?? null,
81
153
  };
82
154
  }
83
155
  }
@@ -1 +1 @@
1
- {"version":3,"file":"agent-run-service.js","sourceRoot":"","sources":["../../src/services/agent-run-service.ts"],"names":[],"mappings":"AA6DA,MAAM,OAAO,eAAe;IACN;IAApB,YAAoB,EAAgB;QAAhB,OAAE,GAAF,EAAE,CAAc;IAAG,CAAC;IAExC,KAAK,CAAC,MAAM,CACV,cAAsB,EACtB,KAA0B;QAE1B,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC;YACxC,IAAI,EAAE;gBACJ,cAAc;gBACd,MAAM,EAAE,KAAK,CAAC,MAAM;gBACpB,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,YAAY;gBAChC,KAAK,EAAE,KAAK,CAAC,KAAK;gBAClB,MAAM,EAAE,SAAS;gBACjB,SAAS,EAAE,KAAK,CAAC,SAAS;gBAC1B,UAAU,EAAE,KAAK,CAAC,UAAU,IAAI,IAAI;gBACpC,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,IAAI;gBAC9B,eAAe,EAAE,KAAK,CAAC,eAAe,IAAI,IAAI;gBAC9C,+DAA+D;gBAC/D,+DAA+D;gBAC/D,8DAA8D;gBAC9D,+DAA+D;gBAC/D,iEAAiE;gBACjE,yBAAyB;gBACzB,eAAe,EACb,KAAK,CAAC,eAAe,IAAI,IAAI;oBAC3B,CAAC,CAAC,SAAS;oBACX,CAAC,CAAE,KAAK,CAAC,eAA0B;aACxC;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,IAAyD;QAEzD,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;gBAChD,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC3C;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,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,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;YACxB,UAAU,EAAE,GAAG,CAAC,UAAU;YAC1B,OAAO,EAAE,GAAG,CAAC,OAAO,IAAI,IAAI;YAC5B,eAAe,EAAE,GAAG,CAAC,eAAe,IAAI,IAAI;YAC5C,eAAe,EAAE,GAAG,CAAC,eAAe,IAAI,IAAI;SAC7C,CAAC;IACJ,CAAC;CACF"}
1
+ {"version":3,"file":"agent-run-service.js","sourceRoot":"","sources":["../../src/services/agent-run-service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ import type { ContextService } from "./context-service.js";
2
+ import type { ChatService } from "./chat-service.js";
3
+ export interface ChatContextOptions {
4
+ query: string;
5
+ sessionId: string;
6
+ userId: string;
7
+ workspaceId?: string;
8
+ }
9
+ export interface ChatContextPackage {
10
+ systemPrompt: string;
11
+ contextNodeIds: string[];
12
+ }
13
+ /**
14
+ * Composes the system prompt for chat messages by assembling:
15
+ * 1. Org-level guidelines (always-applied system instructions)
16
+ * 2. Conversation history (from the session)
17
+ * 3. RAG context from the knowledge graph
18
+ * 4. Priority document content
19
+ *
20
+ * Token budget allocation (configurable):
21
+ * - Guidelines: 2K tokens
22
+ * - History: 8K tokens
23
+ * - RAG: 4K tokens
24
+ * - Priority docs: 2K tokens
25
+ */
26
+ export declare class ChatContextService {
27
+ private contextService;
28
+ private chatService;
29
+ private db;
30
+ constructor(contextService: ContextService, chatService: ChatService, db: import("@prisma/client").PrismaClient);
31
+ assemble(options: ChatContextOptions): Promise<ChatContextPackage>;
32
+ }
33
+ //# sourceMappingURL=chat-context-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat-context-service.d.ts","sourceRoot":"","sources":["../../src/services/chat-context-service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,kBAAkB;IACjC,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,EAAE,CAAC;CAC1B;AAcD;;;;;;;;;;;;GAYG;AACH,qBAAa,kBAAkB;IAE3B,OAAO,CAAC,cAAc;IACtB,OAAO,CAAC,WAAW;IACnB,OAAO,CAAC,EAAE;gBAFF,cAAc,EAAE,cAAc,EAC9B,WAAW,EAAE,WAAW,EACxB,EAAE,EAAE,OAAO,gBAAgB,EAAE,YAAY;IAG7C,QAAQ,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,kBAAkB,CAAC;CA2FzE"}
@@ -0,0 +1,110 @@
1
+ /**
2
+ * Composes the system prompt for chat messages by assembling:
3
+ * 1. Org-level guidelines (always-applied system instructions)
4
+ * 2. Conversation history (from the session)
5
+ * 3. RAG context from the knowledge graph
6
+ * 4. Priority document content
7
+ *
8
+ * Token budget allocation (configurable):
9
+ * - Guidelines: 2K tokens
10
+ * - History: 8K tokens
11
+ * - RAG: 4K tokens
12
+ * - Priority docs: 2K tokens
13
+ */
14
+ export class ChatContextService {
15
+ contextService;
16
+ chatService;
17
+ db;
18
+ constructor(contextService, chatService, db) {
19
+ this.contextService = contextService;
20
+ this.chatService = chatService;
21
+ this.db = db;
22
+ }
23
+ async assemble(options) {
24
+ const parts = [];
25
+ const contextNodeIds = [];
26
+ // 1. Org guidelines — always-applied system instructions
27
+ try {
28
+ const guidelines = await this.db.orgChatGuideline.findMany({
29
+ where: { enabled: true },
30
+ orderBy: { priority: "desc" },
31
+ });
32
+ if (guidelines.length > 0) {
33
+ parts.push("## Organization Guidelines\n");
34
+ for (const g of guidelines) {
35
+ parts.push(`### ${g.title}\n${g.content}\n`);
36
+ }
37
+ }
38
+ }
39
+ catch {
40
+ // Guidelines table may not exist yet — continue without
41
+ }
42
+ // 2. Conversation history
43
+ try {
44
+ const messages = await this.chatService.getMessages(options.sessionId, { limit: 50 });
45
+ if (messages.length > 0) {
46
+ parts.push("## Conversation History\n");
47
+ for (const msg of messages) {
48
+ const role = msg.role === "user" ? "User" : "Assistant";
49
+ // Use PII-stripped content for context if available
50
+ const content = msg.contentClean ?? msg.content;
51
+ parts.push(`${role}: ${content}\n`);
52
+ }
53
+ }
54
+ }
55
+ catch {
56
+ // Session may not have messages yet
57
+ }
58
+ // 3. RAG context from the knowledge graph
59
+ try {
60
+ const contextPackage = await this.contextService.assemble({
61
+ query: options.query,
62
+ maxNodes: 10,
63
+ maxDepth: 2,
64
+ workspace: options.workspaceId,
65
+ });
66
+ if (contextPackage.nodes.length > 0) {
67
+ parts.push("## Relevant Knowledge\n");
68
+ for (const node of contextPackage.nodes) {
69
+ parts.push(`### ${node.title} (${node.type})\n${node.content}\n`);
70
+ contextNodeIds.push(node.id);
71
+ }
72
+ }
73
+ }
74
+ catch {
75
+ // Context service may fail — continue without RAG
76
+ }
77
+ // 4. Priority documents
78
+ try {
79
+ const priorityDocs = await this.db.orgPriorityDocument.findMany({
80
+ orderBy: { boostWeight: "desc" },
81
+ take: 5,
82
+ });
83
+ if (priorityDocs.length > 0) {
84
+ // Fetch the actual node content for priority docs
85
+ const nodeIds = priorityDocs.map((d) => d.nodeId);
86
+ const nodes = await this.db.node.findMany({
87
+ where: { id: { in: nodeIds } },
88
+ select: { id: true, title: true, content: true, type: true },
89
+ });
90
+ if (nodes.length > 0) {
91
+ parts.push("## Priority Documents\n");
92
+ for (const node of nodes) {
93
+ parts.push(`### ${node.title} (${node.type})\n${node.content}\n`);
94
+ if (!contextNodeIds.includes(node.id)) {
95
+ contextNodeIds.push(node.id);
96
+ }
97
+ }
98
+ }
99
+ }
100
+ }
101
+ catch {
102
+ // Priority docs may not exist
103
+ }
104
+ return {
105
+ systemPrompt: parts.join("\n"),
106
+ contextNodeIds,
107
+ };
108
+ }
109
+ }
110
+ //# sourceMappingURL=chat-context-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat-context-service.js","sourceRoot":"","sources":["../../src/services/chat-context-service.ts"],"names":[],"mappings":"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"}