@apart-tech/intelligence-core 1.17.3 → 1.18.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.
@@ -0,0 +1,408 @@
1
+ import { describe, expect, it, vi, beforeEach } from "vitest";
2
+ import { AgentInstructionService } from "../agent-instruction-service.js";
3
+ // ── Mock Prisma ────────────────────────────────────────────────────────────
4
+ function createMockDb() {
5
+ return {
6
+ agentInstruction: {
7
+ create: vi.fn(),
8
+ findFirst: vi.fn(),
9
+ findMany: vi.fn(),
10
+ update: vi.fn(),
11
+ },
12
+ $executeRaw: vi.fn(),
13
+ $queryRaw: vi.fn(),
14
+ };
15
+ }
16
+ // ── computeHash ────────────────────────────────────────────────────────────
17
+ describe("AgentInstructionService.computeHash", () => {
18
+ it("produces a deterministic 64-char hex hash", () => {
19
+ const hash = AgentInstructionService.computeHash({
20
+ systemPrompt: "You are a lease reviewer.",
21
+ tools: ["search", "get"],
22
+ guardrails: { maxTokens: 4096 },
23
+ modelConfig: { temperature: 0.2 },
24
+ });
25
+ expect(hash).toHaveLength(64);
26
+ expect(/^[0-9a-f]{64}$/.test(hash)).toBe(true);
27
+ });
28
+ it("is deterministic — same input always produces the same hash", () => {
29
+ const input = {
30
+ systemPrompt: "test",
31
+ tools: [1, 2],
32
+ guardrails: {},
33
+ modelConfig: { a: 1 },
34
+ };
35
+ const h1 = AgentInstructionService.computeHash(input);
36
+ const h2 = AgentInstructionService.computeHash(input);
37
+ expect(h1).toBe(h2);
38
+ });
39
+ it("different content produces different hashes", () => {
40
+ const h1 = AgentInstructionService.computeHash({
41
+ systemPrompt: "A",
42
+ tools: [],
43
+ guardrails: {},
44
+ modelConfig: {},
45
+ });
46
+ const h2 = AgentInstructionService.computeHash({
47
+ systemPrompt: "B",
48
+ tools: [],
49
+ guardrails: {},
50
+ modelConfig: {},
51
+ });
52
+ expect(h1).not.toBe(h2);
53
+ });
54
+ });
55
+ // ── create ──────────────────────────────────────────────────────────────────
56
+ describe("AgentInstructionService.create", () => {
57
+ let db;
58
+ let svc;
59
+ beforeEach(() => {
60
+ db = createMockDb();
61
+ svc = new AgentInstructionService(db);
62
+ });
63
+ it("creates a draft instruction with computed hash", async () => {
64
+ const fakeRow = {
65
+ id: "inst-1",
66
+ organizationId: "org-1",
67
+ agentTypeId: "at-1",
68
+ taskType: null,
69
+ version: "1.0.0",
70
+ status: "draft",
71
+ systemPrompt: "You are a reviewer.",
72
+ tools: [],
73
+ guardrails: {},
74
+ modelConfig: {},
75
+ contentHash: "abc123",
76
+ parentVersionId: null,
77
+ changeNote: "Initial draft",
78
+ publishedAt: null,
79
+ deprecatedAt: null,
80
+ effectiveFrom: null,
81
+ effectiveTo: null,
82
+ createdBy: "user-1",
83
+ createdAt: new Date(),
84
+ updatedAt: new Date(),
85
+ };
86
+ db.agentInstruction.create.mockResolvedValue(fakeRow);
87
+ const result = await svc.create("org-1", {
88
+ agentTypeId: "at-1",
89
+ version: "1.0.0",
90
+ systemPrompt: "You are a reviewer.",
91
+ changeNote: "Initial draft",
92
+ createdBy: "user-1",
93
+ });
94
+ expect(db.agentInstruction.create).toHaveBeenCalledOnce();
95
+ const callData = db.agentInstruction.create.mock.calls[0][0].data;
96
+ expect(callData.organizationId).toBe("org-1");
97
+ expect(callData.status).toBe("draft");
98
+ expect(callData.contentHash).toHaveLength(64);
99
+ expect(result.id).toBe("inst-1");
100
+ expect(result.status).toBe("draft");
101
+ });
102
+ });
103
+ // ── updateDraft ─────────────────────────────────────────────────────────────
104
+ describe("AgentInstructionService.updateDraft", () => {
105
+ let db;
106
+ let svc;
107
+ beforeEach(() => {
108
+ db = createMockDb();
109
+ svc = new AgentInstructionService(db);
110
+ });
111
+ it("updates a draft instruction and recomputes hash", async () => {
112
+ const existing = {
113
+ id: "inst-1",
114
+ organizationId: "org-1",
115
+ status: "draft",
116
+ systemPrompt: "old",
117
+ tools: [],
118
+ guardrails: {},
119
+ modelConfig: {},
120
+ changeNote: null,
121
+ version: "1.0.0",
122
+ };
123
+ db.agentInstruction.findFirst.mockResolvedValue(existing);
124
+ db.agentInstruction.update.mockResolvedValue({
125
+ ...existing,
126
+ systemPrompt: "new",
127
+ contentHash: "newhash",
128
+ updatedAt: new Date(),
129
+ });
130
+ const result = await svc.updateDraft("inst-1", "org-1", {
131
+ systemPrompt: "new",
132
+ });
133
+ expect(db.agentInstruction.update).toHaveBeenCalledOnce();
134
+ expect(result.systemPrompt).toBe("new");
135
+ });
136
+ it("rejects update of non-draft instruction", async () => {
137
+ db.agentInstruction.findFirst.mockResolvedValue({
138
+ id: "inst-1",
139
+ organizationId: "org-1",
140
+ status: "published",
141
+ });
142
+ await expect(svc.updateDraft("inst-1", "org-1", { systemPrompt: "new" })).rejects.toThrow("Only draft instructions can be updated");
143
+ });
144
+ it("throws when instruction not found", async () => {
145
+ db.agentInstruction.findFirst.mockResolvedValue(null);
146
+ await expect(svc.updateDraft("inst-999", "org-1", { systemPrompt: "new" })).rejects.toThrow("Instruction not found");
147
+ });
148
+ });
149
+ // ── publish ─────────────────────────────────────────────────────────────────
150
+ describe("AgentInstructionService.publish", () => {
151
+ let db;
152
+ let svc;
153
+ beforeEach(() => {
154
+ db = createMockDb();
155
+ svc = new AgentInstructionService(db);
156
+ });
157
+ it("publishes a draft and auto-deprecates previous published version", async () => {
158
+ const draft = {
159
+ id: "inst-2",
160
+ organizationId: "org-1",
161
+ agentTypeId: "at-1",
162
+ taskType: null,
163
+ status: "draft",
164
+ systemPrompt: "New prompt",
165
+ tools: [],
166
+ guardrails: {},
167
+ modelConfig: {},
168
+ };
169
+ const previousPublished = {
170
+ id: "inst-1",
171
+ status: "published",
172
+ };
173
+ db.agentInstruction.findFirst
174
+ .mockResolvedValueOnce(draft) // find the draft
175
+ .mockResolvedValueOnce(previousPublished); // find current published
176
+ db.agentInstruction.update
177
+ .mockResolvedValueOnce({ ...previousPublished, status: "deprecated" }) // deprecate old
178
+ .mockResolvedValueOnce({
179
+ ...draft,
180
+ status: "published",
181
+ publishedAt: new Date(),
182
+ contentHash: "abc",
183
+ updatedAt: new Date(),
184
+ });
185
+ const result = await svc.publish("inst-2", "org-1");
186
+ // Should have deprecated the old one first
187
+ expect(db.agentInstruction.update).toHaveBeenCalledTimes(2);
188
+ const deprecateCall = db.agentInstruction.update.mock.calls[0];
189
+ expect(deprecateCall[0].where.id).toBe("inst-1");
190
+ expect(deprecateCall[0].data.status).toBe("deprecated");
191
+ // Then published the new one
192
+ const publishCall = db.agentInstruction.update.mock.calls[1];
193
+ expect(publishCall[0].where.id).toBe("inst-2");
194
+ expect(publishCall[0].data.status).toBe("published");
195
+ expect(result.status).toBe("published");
196
+ });
197
+ it("rejects publish of non-draft instruction", async () => {
198
+ db.agentInstruction.findFirst.mockResolvedValue({
199
+ id: "inst-1",
200
+ organizationId: "org-1",
201
+ status: "published",
202
+ });
203
+ await expect(svc.publish("inst-1", "org-1")).rejects.toThrow("Only draft instructions can be published");
204
+ });
205
+ });
206
+ // ── deprecate ───────────────────────────────────────────────────────────────
207
+ describe("AgentInstructionService.deprecate", () => {
208
+ let db;
209
+ let svc;
210
+ beforeEach(() => {
211
+ db = createMockDb();
212
+ svc = new AgentInstructionService(db);
213
+ });
214
+ it("deprecates a published instruction", async () => {
215
+ db.agentInstruction.findFirst.mockResolvedValue({
216
+ id: "inst-1",
217
+ organizationId: "org-1",
218
+ status: "published",
219
+ });
220
+ db.agentInstruction.update.mockResolvedValue({
221
+ id: "inst-1",
222
+ organizationId: "org-1",
223
+ status: "deprecated",
224
+ deprecatedAt: new Date(),
225
+ updatedAt: new Date(),
226
+ });
227
+ const result = await svc.deprecate("inst-1", "org-1");
228
+ expect(result.status).toBe("deprecated");
229
+ });
230
+ it("rejects deprecation of non-published instruction", async () => {
231
+ db.agentInstruction.findFirst.mockResolvedValue({
232
+ id: "inst-1",
233
+ organizationId: "org-1",
234
+ status: "draft",
235
+ });
236
+ await expect(svc.deprecate("inst-1", "org-1")).rejects.toThrow("Only published instructions can be deprecated");
237
+ });
238
+ });
239
+ // ── getPublished ────────────────────────────────────────────────────────────
240
+ describe("AgentInstructionService.getPublished", () => {
241
+ let db;
242
+ let svc;
243
+ beforeEach(() => {
244
+ db = createMockDb();
245
+ svc = new AgentInstructionService(db);
246
+ });
247
+ it("returns task-specific published instruction when available", async () => {
248
+ const taskSpecific = {
249
+ id: "inst-task",
250
+ organizationId: "org-1",
251
+ agentTypeId: "at-1",
252
+ taskType: "lease_review",
253
+ status: "published",
254
+ systemPrompt: "Task-specific prompt",
255
+ version: "1.0.0",
256
+ tools: [],
257
+ guardrails: {},
258
+ modelConfig: {},
259
+ contentHash: "abc",
260
+ parentVersionId: null,
261
+ changeNote: null,
262
+ publishedAt: new Date(),
263
+ deprecatedAt: null,
264
+ effectiveFrom: null,
265
+ effectiveTo: null,
266
+ createdBy: "u-1",
267
+ createdAt: new Date(),
268
+ updatedAt: new Date(),
269
+ };
270
+ db.agentInstruction.findFirst.mockResolvedValueOnce(taskSpecific);
271
+ const result = await svc.getPublished("org-1", "at-1", "lease_review");
272
+ expect(result?.taskType).toBe("lease_review");
273
+ });
274
+ it("falls back to global when no task-specific instruction exists", async () => {
275
+ const globalInst = {
276
+ id: "inst-global",
277
+ organizationId: "org-1",
278
+ agentTypeId: "at-1",
279
+ taskType: null,
280
+ status: "published",
281
+ systemPrompt: "Global prompt",
282
+ version: "1.0.0",
283
+ tools: [],
284
+ guardrails: {},
285
+ modelConfig: {},
286
+ contentHash: "abc",
287
+ parentVersionId: null,
288
+ changeNote: null,
289
+ publishedAt: new Date(),
290
+ deprecatedAt: null,
291
+ effectiveFrom: null,
292
+ effectiveTo: null,
293
+ createdBy: "u-1",
294
+ createdAt: new Date(),
295
+ updatedAt: new Date(),
296
+ };
297
+ db.agentInstruction.findFirst
298
+ .mockResolvedValueOnce(null) // no task-specific
299
+ .mockResolvedValueOnce(globalInst); // global fallback
300
+ const result = await svc.getPublished("org-1", "at-1", "lease_review");
301
+ expect(result?.id).toBe("inst-global");
302
+ expect(result?.taskType).toBeNull();
303
+ });
304
+ it("returns null when no published instruction exists at all", async () => {
305
+ db.agentInstruction.findFirst.mockResolvedValue(null);
306
+ const result = await svc.getPublished("org-1", "at-1");
307
+ expect(result).toBeNull();
308
+ });
309
+ });
310
+ // ── fork ────────────────────────────────────────────────────────────────────
311
+ describe("AgentInstructionService.fork", () => {
312
+ let db;
313
+ let svc;
314
+ beforeEach(() => {
315
+ db = createMockDb();
316
+ svc = new AgentInstructionService(db);
317
+ });
318
+ it("creates a draft fork linked to the parent", async () => {
319
+ const source = {
320
+ id: "inst-1",
321
+ organizationId: "org-1",
322
+ agentTypeId: "at-1",
323
+ taskType: null,
324
+ version: "1.0.0",
325
+ status: "published",
326
+ systemPrompt: "Original",
327
+ tools: [],
328
+ guardrails: {},
329
+ modelConfig: {},
330
+ };
331
+ const forked = {
332
+ ...source,
333
+ id: "inst-2",
334
+ version: "2.0.0",
335
+ status: "draft",
336
+ parentVersionId: "inst-1",
337
+ changeNote: "Forked from v1.0.0",
338
+ contentHash: "abc",
339
+ publishedAt: null,
340
+ deprecatedAt: null,
341
+ effectiveFrom: null,
342
+ effectiveTo: null,
343
+ createdBy: "user-1",
344
+ createdAt: new Date(),
345
+ updatedAt: new Date(),
346
+ };
347
+ db.agentInstruction.findFirst.mockResolvedValue(source);
348
+ db.agentInstruction.create.mockResolvedValue(forked);
349
+ const result = await svc.fork("inst-1", "org-1", "2.0.0", "user-1");
350
+ expect(db.agentInstruction.create).toHaveBeenCalledOnce();
351
+ const callData = db.agentInstruction.create.mock.calls[0][0].data;
352
+ expect(callData.parentVersionId).toBe("inst-1");
353
+ expect(callData.status).toBe("draft");
354
+ expect(callData.version).toBe("2.0.0");
355
+ expect(result.parentVersionId).toBe("inst-1");
356
+ });
357
+ it("throws when source instruction not found", async () => {
358
+ db.agentInstruction.findFirst.mockResolvedValue(null);
359
+ await expect(svc.fork("inst-999", "org-1", "2.0.0", "user-1")).rejects.toThrow("Instruction not found");
360
+ });
361
+ });
362
+ // ── diff ────────────────────────────────────────────────────────────────────
363
+ describe("AgentInstructionService.diff", () => {
364
+ let db;
365
+ let svc;
366
+ beforeEach(() => {
367
+ db = createMockDb();
368
+ svc = new AgentInstructionService(db);
369
+ });
370
+ it("returns both records for client-side diffing", async () => {
371
+ const instA = {
372
+ id: "a",
373
+ organizationId: "org-1",
374
+ version: "1.0.0",
375
+ status: "published",
376
+ systemPrompt: "A",
377
+ tools: [],
378
+ guardrails: {},
379
+ modelConfig: {},
380
+ agentTypeId: null,
381
+ taskType: null,
382
+ contentHash: "ha",
383
+ parentVersionId: null,
384
+ changeNote: null,
385
+ publishedAt: new Date(),
386
+ deprecatedAt: null,
387
+ effectiveFrom: null,
388
+ effectiveTo: null,
389
+ createdBy: "u-1",
390
+ createdAt: new Date(),
391
+ updatedAt: new Date(),
392
+ };
393
+ const instB = { ...instA, id: "b", version: "2.0.0", systemPrompt: "B" };
394
+ db.agentInstruction.findFirst
395
+ .mockResolvedValueOnce(instA)
396
+ .mockResolvedValueOnce(instB);
397
+ const result = await svc.diff("a", "b", "org-1");
398
+ expect(result.a.id).toBe("a");
399
+ expect(result.b.id).toBe("b");
400
+ });
401
+ it("throws when one instruction is not found", async () => {
402
+ db.agentInstruction.findFirst
403
+ .mockResolvedValueOnce(null)
404
+ .mockResolvedValueOnce(null);
405
+ await expect(svc.diff("a", "b", "org-1")).rejects.toThrow("Instruction a not found");
406
+ });
407
+ });
408
+ //# sourceMappingURL=agent-instruction-service.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-instruction-service.test.js","sourceRoot":"","sources":["../../../src/services/__tests__/agent-instruction-service.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,82 @@
1
+ import type { PrismaClient } from "@prisma/client";
2
+ export type InstructionStatus = "draft" | "published" | "deprecated";
3
+ export interface AgentInstructionRecord {
4
+ id: string;
5
+ organizationId: string;
6
+ agentTypeId: string | null;
7
+ taskType: string | null;
8
+ version: string;
9
+ status: InstructionStatus;
10
+ systemPrompt: string;
11
+ tools: unknown;
12
+ guardrails: unknown;
13
+ modelConfig: unknown;
14
+ contentHash: string | null;
15
+ parentVersionId: string | null;
16
+ changeNote: string | null;
17
+ publishedAt: Date | null;
18
+ deprecatedAt: Date | null;
19
+ effectiveFrom: Date | null;
20
+ effectiveTo: Date | null;
21
+ createdBy: string;
22
+ createdAt: Date;
23
+ updatedAt: Date;
24
+ }
25
+ export interface CreateInstructionInput {
26
+ agentTypeId?: string | null;
27
+ taskType?: string | null;
28
+ version: string;
29
+ systemPrompt?: string;
30
+ tools?: unknown;
31
+ guardrails?: unknown;
32
+ modelConfig?: unknown;
33
+ changeNote?: string;
34
+ createdBy: string;
35
+ }
36
+ export interface UpdateDraftInput {
37
+ systemPrompt?: string;
38
+ tools?: unknown;
39
+ guardrails?: unknown;
40
+ modelConfig?: unknown;
41
+ changeNote?: string;
42
+ version?: string;
43
+ }
44
+ export interface InstructionListOptions {
45
+ agentTypeId?: string;
46
+ taskType?: string;
47
+ status?: InstructionStatus;
48
+ limit?: number;
49
+ }
50
+ export declare class AgentInstructionService {
51
+ private db;
52
+ constructor(db: PrismaClient);
53
+ /**
54
+ * Compute a SHA-256 hash of the instruction content fields. Deterministic
55
+ * through sorted-key canonical JSON so the same logical content always
56
+ * produces the same hash regardless of property insertion order.
57
+ */
58
+ static computeHash(input: {
59
+ systemPrompt: string;
60
+ tools: unknown;
61
+ guardrails: unknown;
62
+ modelConfig: unknown;
63
+ }): string;
64
+ create(organizationId: string, input: CreateInstructionInput): Promise<AgentInstructionRecord>;
65
+ updateDraft(id: string, organizationId: string, input: UpdateDraftInput): Promise<AgentInstructionRecord>;
66
+ publish(id: string, organizationId: string): Promise<AgentInstructionRecord>;
67
+ deprecate(id: string, organizationId: string): Promise<AgentInstructionRecord>;
68
+ getById(id: string, organizationId: string): Promise<AgentInstructionRecord | null>;
69
+ list(organizationId: string, opts?: InstructionListOptions): Promise<AgentInstructionRecord[]>;
70
+ /**
71
+ * Resolve the active published instruction for a given scope.
72
+ * Resolution order: task-specific published → global published → null.
73
+ */
74
+ getPublished(organizationId: string, agentTypeId: string | null | undefined, taskType?: string | null): Promise<AgentInstructionRecord | null>;
75
+ fork(id: string, organizationId: string, newVersion: string, createdBy: string): Promise<AgentInstructionRecord>;
76
+ diff(idA: string, idB: string, organizationId: string): Promise<{
77
+ a: AgentInstructionRecord;
78
+ b: AgentInstructionRecord;
79
+ }>;
80
+ private toRecord;
81
+ }
82
+ //# sourceMappingURL=agent-instruction-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-instruction-service.d.ts","sourceRoot":"","sources":["../../src/services/agent-instruction-service.ts"],"names":[],"mappings":"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"}