@peers-app/peers-device 0.15.4 → 0.16.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,326 @@
1
+ "use strict";
2
+ /**
3
+ * Integration + unit tests for workflow-processor.ts
4
+ *
5
+ * Uses in-memory SQLite (via peers-device DBLocal) for real WorkflowRuns table
6
+ * operations. Heavy external dependencies (tool-loader, machineStats, etc.) are
7
+ * mocked so tests exercise the lock, gating, continuation, and error logic in
8
+ * isolation.
9
+ *
10
+ * The module no longer has a side effect on import — initializeWorkflowProcessor()
11
+ * is never called in tests. Tests call tryProcessingWorkflowRun directly with an
12
+ * explicit DataContext backed by in-memory SQLite.
13
+ */
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ // ── Mocks ──
16
+ const mockMachineStats = jest.fn(() => ({
17
+ cpu: { average: 5, max: 10, cpuCount: 8 },
18
+ }));
19
+ jest.mock("./machine-stats", () => ({
20
+ machineStats: () => mockMachineStats(),
21
+ }));
22
+ const mockToolFn = jest.fn(async () => "tool-result");
23
+ const mockInitWrappedTool = jest.fn(async (_tool, _ctx) => ({
24
+ tool: _tool,
25
+ toolFn: mockToolFn,
26
+ }));
27
+ jest.mock("./tool-loader", () => ({
28
+ initWrappedTool: (a, b) => mockInitWrappedTool(a, b),
29
+ getLinkedTools: jest.fn(async () => []),
30
+ }));
31
+ const mockSendMessage = jest.fn(async () => ({ messageId: "msg-reply" }));
32
+ const noopLogger = jest.fn(async () => ({}));
33
+ const mockToolsDb = {};
34
+ jest.mock("@peers-app/peers-sdk", () => {
35
+ const actual = jest.requireActual("@peers-app/peers-sdk");
36
+ return {
37
+ ...actual,
38
+ getUserContext: jest.fn(async () => ({
39
+ getDataContext: () => ({}),
40
+ })),
41
+ getPersistentVar: jest.fn(async () => ({ value: { value: "test-value" } })),
42
+ getLogger: jest.fn(() => noopLogger),
43
+ sendMessage: jest.fn(mockSendMessage),
44
+ Assistants: jest.fn(() => ({
45
+ get: jest.fn(async () => null),
46
+ })),
47
+ Messages: jest.fn(() => ({
48
+ get: jest.fn(async () => null),
49
+ list: jest.fn(async () => []),
50
+ save: jest.fn(async () => ({})),
51
+ })),
52
+ Tools: jest.fn(() => ({
53
+ get: jest.fn(async (id) => mockToolsDb[id] ?? null),
54
+ })),
55
+ WorkflowLogs: jest.fn(() => ({
56
+ list: jest.fn(async () => []),
57
+ })),
58
+ getThreadVars: jest.fn(async () => ({})),
59
+ getAllAssistantIdsMentioned: jest.fn(async () => []),
60
+ formatMention: jest.fn(({ name }) => `@${name}`),
61
+ rpcServerCalls: actual.rpcServerCalls ?? {},
62
+ };
63
+ });
64
+ // ── Real imports (after mocks) ──
65
+ const peers_sdk_1 = require("@peers-app/peers-sdk");
66
+ const local_data_source_1 = require("./local.data-source");
67
+ const workflow_processor_1 = require("./workflow-processor");
68
+ jest.setTimeout(30_000);
69
+ // ── Shared state ──
70
+ let testDataContext;
71
+ // ── Helpers ──
72
+ function makeTool(toolId, inputSchema = { type: "none", fields: [] }) {
73
+ const tool = {
74
+ toolId,
75
+ name: `test-tool-${toolId}`,
76
+ usageDescription: "test tool",
77
+ inputSchema,
78
+ outputSchema: { type: "none", fields: [] },
79
+ code: "",
80
+ };
81
+ mockToolsDb[toolId] = tool;
82
+ return tool;
83
+ }
84
+ async function insertRun(overrides = {}) {
85
+ const toolId = overrides.instructions?.[0]?.directCallToolId ?? (0, peers_sdk_1.newid)();
86
+ if (!mockToolsDb[toolId])
87
+ makeTool(toolId);
88
+ const run = {
89
+ workflowRunId: (0, peers_sdk_1.newid)(),
90
+ parentMessageId: (0, peers_sdk_1.newid)(),
91
+ defaultAssistantId: (0, peers_sdk_1.newid)(),
92
+ instructions: [{ directCallToolId: toolId }],
93
+ currentInstructionIndex: 0,
94
+ instructionResults: [],
95
+ vars: {},
96
+ createdAt: new Date(),
97
+ ...overrides,
98
+ };
99
+ return (0, peers_sdk_1.WorkflowRuns)(testDataContext).insert(run);
100
+ }
101
+ function sleep(ms) {
102
+ return new Promise((r) => setTimeout(r, ms));
103
+ }
104
+ // ── Setup / Teardown ──
105
+ beforeAll(async () => {
106
+ (0, workflow_processor_1.setUserHomeDirectory)(() => "/tmp");
107
+ const db = new local_data_source_1.DBLocal(":memory:");
108
+ const dataSourceFactory = (metaData, schema) => new peers_sdk_1.SQLDataSource(db, metaData, schema);
109
+ const uc = new peers_sdk_1.UserContext((0, peers_sdk_1.newid)(), dataSourceFactory, true);
110
+ await uc.loadingPromise;
111
+ uc.deviceId((0, peers_sdk_1.newid)());
112
+ testDataContext = uc.defaultDataContext();
113
+ });
114
+ beforeEach(() => {
115
+ mockToolFn.mockReset().mockImplementation(async () => "tool-result");
116
+ mockInitWrappedTool.mockReset().mockImplementation(async (_tool, _ctx) => ({
117
+ tool: _tool,
118
+ toolFn: mockToolFn,
119
+ }));
120
+ mockSendMessage.mockReset().mockImplementation(async () => ({ messageId: "msg-reply" }));
121
+ mockMachineStats.mockReset().mockReturnValue({
122
+ cpu: { average: 5, max: 10, cpuCount: 8 },
123
+ });
124
+ noopLogger.mockReset().mockImplementation(async () => ({}));
125
+ for (const key of Object.keys(mockToolsDb)) {
126
+ delete mockToolsDb[key];
127
+ }
128
+ });
129
+ // ═══════════════════════════════════════════════════════════════════════════
130
+ // Workflow run context
131
+ // ═══════════════════════════════════════════════════════════════════════════
132
+ describe("workflow run context", () => {
133
+ it("passes dataContextId to wrapped tools", async () => {
134
+ const run = await insertRun();
135
+ await (0, workflow_processor_1.tryProcessingWorkflowRun)(testDataContext, run.workflowRunId);
136
+ expect(mockInitWrappedTool).toHaveBeenCalledWith(expect.anything(), expect.objectContaining({ dataContextId: testDataContext.dataContextId }));
137
+ });
138
+ it("resolves dataContextId as an implicit tool argument", async () => {
139
+ const toolId = (0, peers_sdk_1.newid)();
140
+ makeTool(toolId, {
141
+ type: peers_sdk_1.IOSchemaType.simple,
142
+ fields: [
143
+ {
144
+ name: "dataContextId",
145
+ description: "The active workflow data context",
146
+ type: peers_sdk_1.FieldType.string,
147
+ },
148
+ ],
149
+ });
150
+ const run = await insertRun({
151
+ instructions: [{ directCallToolId: toolId }],
152
+ });
153
+ await (0, workflow_processor_1.tryProcessingWorkflowRun)(testDataContext, run.workflowRunId);
154
+ expect(mockToolFn).toHaveBeenCalledWith({
155
+ dataContextId: testDataContext.dataContextId,
156
+ });
157
+ });
158
+ });
159
+ // ═══════════════════════════════════════════════════════════════════════════
160
+ // A. Local lock — concurrency prevention
161
+ // ═══════════════════════════════════════════════════════════════════════════
162
+ describe("local lock — concurrency", () => {
163
+ it("only one concurrent execution per workflowRunId", async () => {
164
+ let resolveToolCall;
165
+ mockToolFn.mockImplementation(() => new Promise((resolve) => {
166
+ resolveToolCall = () => resolve("done");
167
+ }));
168
+ const run = await insertRun();
169
+ const p1 = (0, workflow_processor_1.tryProcessingWorkflowRun)(testDataContext, run.workflowRunId);
170
+ await sleep(50);
171
+ const p2 = (0, workflow_processor_1.tryProcessingWorkflowRun)(testDataContext, run.workflowRunId);
172
+ resolveToolCall?.();
173
+ await Promise.all([p1, p2]);
174
+ expect(mockToolFn).toHaveBeenCalledTimes(1);
175
+ });
176
+ it("different workflowRunIds can run in parallel", async () => {
177
+ let resolve1;
178
+ let resolve2;
179
+ let callCount = 0;
180
+ mockToolFn.mockImplementation(() => new Promise((resolve) => {
181
+ callCount++;
182
+ if (callCount === 1)
183
+ resolve1 = () => resolve("r1");
184
+ else
185
+ resolve2 = () => resolve("r2");
186
+ }));
187
+ const run1 = await insertRun();
188
+ const run2 = await insertRun();
189
+ const p1 = (0, workflow_processor_1.tryProcessingWorkflowRun)(testDataContext, run1.workflowRunId);
190
+ const p2 = (0, workflow_processor_1.tryProcessingWorkflowRun)(testDataContext, run2.workflowRunId);
191
+ await sleep(50);
192
+ expect(mockToolFn).toHaveBeenCalledTimes(2);
193
+ resolve1?.();
194
+ resolve2?.();
195
+ await Promise.all([p1, p2]);
196
+ });
197
+ it("lock is released after completion — same ID can process again", async () => {
198
+ const run = await insertRun();
199
+ await (0, workflow_processor_1.tryProcessingWorkflowRun)(testDataContext, run.workflowRunId);
200
+ expect(mockToolFn).toHaveBeenCalledTimes(1);
201
+ const saved = await (0, peers_sdk_1.WorkflowRuns)(testDataContext).get(run.workflowRunId);
202
+ expect(saved?.completedAt).toBeDefined();
203
+ const run2 = await insertRun();
204
+ await (0, workflow_processor_1.tryProcessingWorkflowRun)(testDataContext, run2.workflowRunId);
205
+ expect(mockToolFn).toHaveBeenCalledTimes(2);
206
+ });
207
+ });
208
+ // ═══════════════════════════════════════════════════════════════════════════
209
+ // B. Lock release on error
210
+ // ═══════════════════════════════════════════════════════════════════════════
211
+ describe("lock release on error", () => {
212
+ it("tool error → inErrorState set, lock released", async () => {
213
+ mockToolFn.mockRejectedValue(new Error("boom"));
214
+ const run = await insertRun();
215
+ await (0, workflow_processor_1.tryProcessingWorkflowRun)(testDataContext, run.workflowRunId);
216
+ const saved = await (0, peers_sdk_1.WorkflowRuns)(testDataContext).get(run.workflowRunId);
217
+ expect(saved?.inErrorState).toBe(true);
218
+ mockToolFn.mockReset();
219
+ await (0, workflow_processor_1.tryProcessingWorkflowRun)(testDataContext, run.workflowRunId);
220
+ expect(mockToolFn).not.toHaveBeenCalled();
221
+ });
222
+ it("initWrappedTool throws → inErrorState set via outer catch, lock released", async () => {
223
+ mockInitWrappedTool.mockRejectedValue(new Error("init-fail"));
224
+ const run = await insertRun();
225
+ await (0, workflow_processor_1.tryProcessingWorkflowRun)(testDataContext, run.workflowRunId);
226
+ const saved = await (0, peers_sdk_1.WorkflowRuns)(testDataContext).get(run.workflowRunId);
227
+ expect(saved?.inErrorState).toBe(true);
228
+ });
229
+ });
230
+ // ═══════════════════════════════════════════════════════════════════════════
231
+ // C. Multi-step workflow continuation
232
+ // ═══════════════════════════════════════════════════════════════════════════
233
+ describe("multi-step continuation", () => {
234
+ it("two-instruction run advances and completes", async () => {
235
+ const toolId1 = (0, peers_sdk_1.newid)();
236
+ const toolId2 = (0, peers_sdk_1.newid)();
237
+ makeTool(toolId1);
238
+ makeTool(toolId2);
239
+ const run = await insertRun({
240
+ instructions: [{ directCallToolId: toolId1 }, { directCallToolId: toolId2 }],
241
+ });
242
+ await (0, workflow_processor_1.tryProcessingWorkflowRun)(testDataContext, run.workflowRunId);
243
+ let saved = await (0, peers_sdk_1.WorkflowRuns)(testDataContext).get(run.workflowRunId);
244
+ expect(saved?.currentInstructionIndex).toBe(1);
245
+ expect(saved?.completedAt).toBeUndefined();
246
+ expect(mockToolFn).toHaveBeenCalledTimes(1);
247
+ await sleep(50);
248
+ saved = await (0, peers_sdk_1.WorkflowRuns)(testDataContext).get(run.workflowRunId);
249
+ expect(saved?.completedAt).toBeDefined();
250
+ expect(mockToolFn).toHaveBeenCalledTimes(2);
251
+ });
252
+ });
253
+ // ═══════════════════════════════════════════════════════════════════════════
254
+ // D. Gating conditions
255
+ // ═══════════════════════════════════════════════════════════════════════════
256
+ describe("gating conditions", () => {
257
+ it("completed workflow is skipped", async () => {
258
+ const run = await insertRun({ completedAt: new Date() });
259
+ await (0, workflow_processor_1.tryProcessingWorkflowRun)(testDataContext, run.workflowRunId);
260
+ expect(mockToolFn).not.toHaveBeenCalled();
261
+ });
262
+ it("error-state workflow is skipped", async () => {
263
+ const run = await insertRun({ inErrorState: true });
264
+ await (0, workflow_processor_1.tryProcessingWorkflowRun)(testDataContext, run.workflowRunId);
265
+ expect(mockToolFn).not.toHaveBeenCalled();
266
+ });
267
+ it("scheduled workflow in the future is deferred", async () => {
268
+ const thirtySecondsFromNow = new Date(Date.now() + 30_000);
269
+ const run = await insertRun({ scheduleDT: thirtySecondsFromNow });
270
+ await (0, workflow_processor_1.tryProcessingWorkflowRun)(testDataContext, run.workflowRunId);
271
+ expect(mockToolFn).not.toHaveBeenCalled();
272
+ });
273
+ it("sub-workflow pending blocks parent", async () => {
274
+ const parent = await insertRun();
275
+ await insertRun({
276
+ parentWorkflowRunId: parent.workflowRunId,
277
+ });
278
+ await (0, workflow_processor_1.tryProcessingWorkflowRun)(testDataContext, parent.workflowRunId);
279
+ expect(mockToolFn).not.toHaveBeenCalled();
280
+ const run2 = await insertRun();
281
+ await (0, workflow_processor_1.tryProcessingWorkflowRun)(testDataContext, run2.workflowRunId);
282
+ expect(mockToolFn).toHaveBeenCalledTimes(1);
283
+ });
284
+ it("CPU count cap prevents processing when at limit", async () => {
285
+ mockMachineStats.mockReturnValue({
286
+ cpu: { average: 5, max: 10, cpuCount: 1 },
287
+ });
288
+ let resolveToolCall;
289
+ mockToolFn.mockImplementation(() => new Promise((resolve) => {
290
+ resolveToolCall = () => resolve("done");
291
+ }));
292
+ const run1 = await insertRun();
293
+ const p1 = (0, workflow_processor_1.tryProcessingWorkflowRun)(testDataContext, run1.workflowRunId);
294
+ await sleep(50);
295
+ const run2 = await insertRun();
296
+ await (0, workflow_processor_1.tryProcessingWorkflowRun)(testDataContext, run2.workflowRunId);
297
+ expect(mockToolFn).toHaveBeenCalledTimes(1);
298
+ resolveToolCall?.();
299
+ await p1;
300
+ });
301
+ it("nonexistent workflow run is skipped", async () => {
302
+ await (0, workflow_processor_1.tryProcessingWorkflowRun)(testDataContext, "nonexistent-id-000000000");
303
+ expect(mockToolFn).not.toHaveBeenCalled();
304
+ });
305
+ });
306
+ // ═══════════════════════════════════════════════════════════════════════════
307
+ // E. Save ordering — DB state is persisted before lock release
308
+ // ═══════════════════════════════════════════════════════════════════════════
309
+ describe("save ordering", () => {
310
+ it("after tryProcessingWorkflowRun resolves, DB has final state", async () => {
311
+ const run = await insertRun();
312
+ await (0, workflow_processor_1.tryProcessingWorkflowRun)(testDataContext, run.workflowRunId);
313
+ const saved = await (0, peers_sdk_1.WorkflowRuns)(testDataContext).get(run.workflowRunId);
314
+ expect(saved?.completedAt).toBeDefined();
315
+ expect(saved?.instructionResults).toEqual(["tool-result"]);
316
+ expect(saved?.currentInstructionIndex).toBe(1);
317
+ });
318
+ it("on error, DB has inErrorState before lock is released", async () => {
319
+ mockToolFn.mockRejectedValue(new Error("fail"));
320
+ const run = await insertRun();
321
+ await (0, workflow_processor_1.tryProcessingWorkflowRun)(testDataContext, run.workflowRunId);
322
+ const saved = await (0, peers_sdk_1.WorkflowRuns)(testDataContext).get(run.workflowRunId);
323
+ expect(saved?.inErrorState).toBe(true);
324
+ });
325
+ });
326
+ //# sourceMappingURL=workflow-processor.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow-processor.test.js","sourceRoot":"","sources":["../src/workflow-processor.test.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@peers-app/peers-device",
3
- "version": "0.15.4",
3
+ "version": "0.16.0",
4
4
  "main": "dist/index.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "repository": {
@@ -39,12 +39,12 @@
39
39
  "socket.io-client": "^4.8.0"
40
40
  },
41
41
  "peerDependencies": {
42
- "@peers-app/peers-sdk": "^0.15.4"
42
+ "@peers-app/peers-sdk": "^0.16.0"
43
43
  },
44
44
  "devDependencies": {
45
45
  "@biomejs/biome": "2.3.11",
46
46
  "@electron/rebuild": "^4.0.1",
47
- "@peers-app/peers-sdk": "0.15.4",
47
+ "@peers-app/peers-sdk": "0.16.0",
48
48
  "@types/diff-match-patch": "^1.0.36",
49
49
  "@types/jest": "^29.5.13",
50
50
  "@types/lodash": "^4.17.20",