@peers-app/peers-device 0.16.1 → 0.16.3

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/agent-functional.d.ts +37 -0
  2. package/dist/agent-functional.js +177 -0
  3. package/dist/agent-functional.js.map +1 -0
  4. package/dist/agent-functional.test.d.ts +1 -0
  5. package/dist/agent-functional.test.js +458 -0
  6. package/dist/agent-functional.test.js.map +1 -0
  7. package/dist/default-assistant-runner.d.ts +21 -0
  8. package/dist/default-assistant-runner.js +256 -0
  9. package/dist/default-assistant-runner.js.map +1 -0
  10. package/dist/default-assistant-runner.test.d.ts +1 -0
  11. package/dist/default-assistant-runner.test.js +199 -0
  12. package/dist/default-assistant-runner.test.js.map +1 -0
  13. package/dist/embeddings-client.d.ts +25 -0
  14. package/dist/embeddings-client.js +96 -0
  15. package/dist/embeddings-client.js.map +1 -0
  16. package/dist/embeddings-client.test.d.ts +1 -0
  17. package/dist/embeddings-client.test.js +124 -0
  18. package/dist/embeddings-client.test.js.map +1 -0
  19. package/dist/index.d.ts +5 -0
  20. package/dist/index.js +5 -0
  21. package/dist/index.js.map +1 -1
  22. package/dist/similar-tools.d.ts +10 -0
  23. package/dist/similar-tools.js +25 -0
  24. package/dist/similar-tools.js.map +1 -0
  25. package/dist/similar-tools.test.d.ts +1 -0
  26. package/dist/similar-tools.test.js +101 -0
  27. package/dist/similar-tools.test.js.map +1 -0
  28. package/dist/tool-loader.d.ts +14 -18
  29. package/dist/tool-loader.js +34 -90
  30. package/dist/tool-loader.js.map +1 -1
  31. package/dist/tool-search.d.ts +1 -0
  32. package/dist/tool-search.js +43 -0
  33. package/dist/tool-search.js.map +1 -0
  34. package/dist/tracked-data-source.test.js +1 -1
  35. package/dist/tracked-data-source.test.js.map +1 -1
  36. package/dist/workflow-processor.d.ts +1 -15
  37. package/dist/workflow-processor.js +14 -14
  38. package/dist/workflow-processor.js.map +1 -1
  39. package/package.json +5 -4
@@ -0,0 +1,124 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const embeddings_client_1 = require("./embeddings-client");
4
+ // ── Mock peers-sdk ──────────────────────────────────────────────────────────
5
+ const mockFindOne = jest.fn();
6
+ const mockSave = jest.fn();
7
+ jest.mock("@peers-app/peers-sdk", () => ({
8
+ Embeddings: () => ({ findOne: mockFindOne, save: mockSave }),
9
+ hashValue: (v) => `hash:${v}`,
10
+ newid: () => "mock-new-id-0000000000000",
11
+ }));
12
+ // ── Mock global fetch ───────────────────────────────────────────────────────
13
+ const mockFetch = jest.fn();
14
+ globalThis.fetch = mockFetch;
15
+ // ── Helpers ─────────────────────────────────────────────────────────────────
16
+ function makeContext(token = "test-token") {
17
+ return {
18
+ getVariable: jest.fn().mockResolvedValue(token),
19
+ };
20
+ }
21
+ function okEmbeddingResponse(embedding = [0.1, 0.2, 0.3]) {
22
+ return new Response(JSON.stringify({ data: [{ index: 0, embedding }], usage: { totalTokens: 10 } }), { status: 200, headers: { "Content-Type": "application/json" } });
23
+ }
24
+ // ── Tests ───────────────────────────────────────────────────────────────────
25
+ beforeEach(() => {
26
+ jest.clearAllMocks();
27
+ // Clear the inflight promise cache between tests by reimporting would be
28
+ // heavy; instead we rely on unique text per test to avoid collisions.
29
+ });
30
+ describe("cosineSimilarity", () => {
31
+ it("returns 1 for identical unit vectors", () => {
32
+ expect((0, embeddings_client_1.cosineSimilarity)([1, 0], [1, 0])).toBeCloseTo(1);
33
+ });
34
+ it("returns 0 for orthogonal vectors", () => {
35
+ expect((0, embeddings_client_1.cosineSimilarity)([1, 0], [0, 1])).toBeCloseTo(0);
36
+ });
37
+ it("returns -1 for opposite vectors", () => {
38
+ expect((0, embeddings_client_1.cosineSimilarity)([1, 0], [-1, 0])).toBeCloseTo(-1);
39
+ });
40
+ it("returns 0 when either vector is the zero vector", () => {
41
+ expect((0, embeddings_client_1.cosineSimilarity)([0, 0], [1, 2])).toBe(0);
42
+ });
43
+ it("throws when vectors have different lengths", () => {
44
+ expect(() => (0, embeddings_client_1.cosineSimilarity)([1], [1, 2])).toThrow("same length");
45
+ });
46
+ it("handles non-unit vectors correctly", () => {
47
+ const sim = (0, embeddings_client_1.cosineSimilarity)([3, 4], [6, 8]);
48
+ expect(sim).toBeCloseTo(1);
49
+ });
50
+ });
51
+ describe("getEmbeddings", () => {
52
+ it("returns cached embedding on cache hit", async () => {
53
+ const cached = {
54
+ embeddingId: "cached-id",
55
+ textHash: "h",
56
+ embedding: [0.1],
57
+ embeddingType: "text-embedding-3-large",
58
+ metadata: {},
59
+ };
60
+ mockFindOne.mockResolvedValueOnce(cached);
61
+ const result = await (0, embeddings_client_1.getEmbeddings)(makeContext(), "cache-hit-text-unique");
62
+ expect(result).toBe(cached);
63
+ expect(mockFetch).not.toHaveBeenCalled();
64
+ });
65
+ it("calls the API on cache miss and saves to cache", async () => {
66
+ mockFindOne.mockResolvedValueOnce(null);
67
+ mockFetch.mockResolvedValueOnce(okEmbeddingResponse([0.5, 0.6]));
68
+ const savedObj = { embeddingId: "mock-new-id-0000000000000", embedding: [0.5, 0.6] };
69
+ mockSave.mockResolvedValueOnce(savedObj);
70
+ const ctx = makeContext();
71
+ const result = await (0, embeddings_client_1.getEmbeddings)(ctx, "api-call-text-unique");
72
+ expect(ctx.getVariable).toHaveBeenCalledWith("PEERS_SERVICES_TOKEN");
73
+ expect(mockFetch).toHaveBeenCalledTimes(1);
74
+ const [url, opts] = mockFetch.mock.calls[0];
75
+ expect(url).toContain("/api/v1/embeddings/embed");
76
+ expect(opts.method).toBe("POST");
77
+ expect(JSON.parse(opts.body)).toMatchObject({
78
+ provider: "openai",
79
+ model: "text-embedding-3-large",
80
+ input: "api-call-text-unique",
81
+ });
82
+ expect(opts.headers.Authorization).toBe("Bearer test-token");
83
+ expect(mockSave).toHaveBeenCalledTimes(1);
84
+ expect(result).toBe(savedObj);
85
+ });
86
+ it("throws when no token is available", async () => {
87
+ mockFindOne.mockResolvedValueOnce(null);
88
+ await expect((0, embeddings_client_1.getEmbeddings)(makeContext(null), "no-token-text-unique")).rejects.toThrow("PEERS_SERVICES_TOKEN not set");
89
+ });
90
+ it("throws a helpful message on 402 (insufficient balance)", async () => {
91
+ mockFindOne.mockResolvedValueOnce(null);
92
+ mockFetch.mockResolvedValueOnce(new Response("out of funds", { status: 402 }));
93
+ await expect((0, embeddings_client_1.getEmbeddings)(makeContext(), "balance-text-unique")).rejects.toThrow("Insufficient Peers Services balance");
94
+ });
95
+ it("throws on generic API error", async () => {
96
+ mockFindOne.mockResolvedValueOnce(null);
97
+ mockFetch.mockResolvedValueOnce(new Response("bad request", { status: 400 }));
98
+ await expect((0, embeddings_client_1.getEmbeddings)(makeContext(), "error-text-unique")).rejects.toThrow("Embeddings API error (400)");
99
+ });
100
+ it("throws when API returns no embedding data", async () => {
101
+ mockFindOne.mockResolvedValueOnce(null);
102
+ mockFetch.mockResolvedValueOnce(new Response(JSON.stringify({ data: [] }), {
103
+ status: 200,
104
+ headers: { "Content-Type": "application/json" },
105
+ }));
106
+ await expect((0, embeddings_client_1.getEmbeddings)(makeContext(), "empty-data-text-unique")).rejects.toThrow("No embedding returned");
107
+ });
108
+ it("passes custom dimensions to the API", async () => {
109
+ mockFindOne.mockResolvedValueOnce(null);
110
+ mockFetch.mockResolvedValueOnce(okEmbeddingResponse([0.1]));
111
+ mockSave.mockResolvedValueOnce({ embedding: [0.1] });
112
+ await (0, embeddings_client_1.getEmbeddings)(makeContext(), "dims-text-unique", { dimensions: 256 });
113
+ const body = JSON.parse(mockFetch.mock.calls[0][1].body);
114
+ expect(body.dimensions).toBe(256);
115
+ });
116
+ it("uses dimensions in the cache key", async () => {
117
+ mockFindOne.mockResolvedValueOnce(null);
118
+ mockFetch.mockResolvedValueOnce(okEmbeddingResponse([0.1]));
119
+ mockSave.mockResolvedValueOnce({ embedding: [0.1] });
120
+ await (0, embeddings_client_1.getEmbeddings)(makeContext(), "dims-cache-key-text", { dimensions: 512 });
121
+ expect(mockFindOne).toHaveBeenCalledWith(expect.objectContaining({ embeddingType: "text-embedding-3-large:512" }));
122
+ });
123
+ });
124
+ //# sourceMappingURL=embeddings-client.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"embeddings-client.test.js","sourceRoot":"","sources":["../src/embeddings-client.test.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,18 +1,23 @@
1
+ export * from "./agent-functional";
1
2
  export * from "./chunk-download-manager";
2
3
  export * from "./connection-manager/connection-manager";
3
4
  export * from "./connection-manager/device-message-handler.types";
4
5
  export * from "./connection-manager/group-invite-messages";
5
6
  export * from "./connection-manager/network-manager";
6
7
  export * from "./connection-manager/protocol-manager.interface";
8
+ export * from "./default-assistant-runner";
9
+ export * from "./embeddings-client";
7
10
  export * from "./machine-stats";
8
11
  export * from "./main";
9
12
  export * from "./message-processor";
10
13
  export * from "./pvars.tracked-data-source";
11
14
  export * from "./services-client";
15
+ export * from "./similar-tools";
12
16
  export * from "./sync-group";
13
17
  export * from "./system-tools";
14
18
  export * from "./tool-call-processor";
15
19
  export * from "./tool-loader";
20
+ import "./tool-search";
16
21
  export * from "./tracked-data-source";
17
22
  export * from "./websocket-client";
18
23
  export * from "./workflow-processor";
package/dist/index.js CHANGED
@@ -14,21 +14,26 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./agent-functional"), exports);
17
18
  __exportStar(require("./chunk-download-manager"), exports);
18
19
  __exportStar(require("./connection-manager/connection-manager"), exports);
19
20
  __exportStar(require("./connection-manager/device-message-handler.types"), exports);
20
21
  __exportStar(require("./connection-manager/group-invite-messages"), exports);
21
22
  __exportStar(require("./connection-manager/network-manager"), exports);
22
23
  __exportStar(require("./connection-manager/protocol-manager.interface"), exports);
24
+ __exportStar(require("./default-assistant-runner"), exports);
25
+ __exportStar(require("./embeddings-client"), exports);
23
26
  __exportStar(require("./machine-stats"), exports);
24
27
  __exportStar(require("./main"), exports);
25
28
  __exportStar(require("./message-processor"), exports);
26
29
  __exportStar(require("./pvars.tracked-data-source"), exports);
27
30
  __exportStar(require("./services-client"), exports);
31
+ __exportStar(require("./similar-tools"), exports);
28
32
  __exportStar(require("./sync-group"), exports);
29
33
  __exportStar(require("./system-tools"), exports);
30
34
  __exportStar(require("./tool-call-processor"), exports);
31
35
  __exportStar(require("./tool-loader"), exports);
36
+ require("./tool-search");
32
37
  __exportStar(require("./tracked-data-source"), exports);
33
38
  __exportStar(require("./websocket-client"), exports);
34
39
  __exportStar(require("./workflow-processor"), exports);
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2DAAyC;AACzC,0EAAwD;AACxD,oFAAkE;AAClE,6EAA2D;AAC3D,uEAAqD;AACrD,kFAAgE;AAChE,kDAAgC;AAChC,yCAAuB;AACvB,sDAAoC;AACpC,8DAA4C;AAC5C,oDAAkC;AAClC,+CAA6B;AAC7B,iDAA+B;AAC/B,wDAAsC;AACtC,gDAA8B;AAC9B,wDAAsC;AACtC,qDAAmC;AACnC,uDAAqC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,qDAAmC;AACnC,2DAAyC;AACzC,0EAAwD;AACxD,oFAAkE;AAClE,6EAA2D;AAC3D,uEAAqD;AACrD,kFAAgE;AAChE,6DAA2C;AAC3C,sDAAoC;AACpC,kDAAgC;AAChC,yCAAuB;AACvB,sDAAoC;AACpC,8DAA4C;AAC5C,oDAAkC;AAClC,kDAAgC;AAChC,+CAA6B;AAC7B,iDAA+B;AAC/B,wDAAsC;AACtC,gDAA8B;AAC9B,yBAAuB;AAEvB,wDAAsC;AACtC,qDAAmC;AACnC,uDAAqC"}
@@ -0,0 +1,10 @@
1
+ import { type ITool, type IWorkflowRunContext } from "@peers-app/peers-sdk";
2
+ /**
3
+ * Find tools whose embedding is similar to the given text, ranked by cosine similarity.
4
+ */
5
+ export declare function getSimilarTools(args: {
6
+ context: IWorkflowRunContext;
7
+ text: string;
8
+ similarityThreshold?: number;
9
+ maxCount?: number;
10
+ }): Promise<ITool[]>;
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getSimilarTools = getSimilarTools;
4
+ const peers_sdk_1 = require("@peers-app/peers-sdk");
5
+ const embeddings_client_1 = require("./embeddings-client");
6
+ /**
7
+ * Find tools whose embedding is similar to the given text, ranked by cosine similarity.
8
+ */
9
+ async function getSimilarTools(args) {
10
+ const { context, text, similarityThreshold = 0.2, maxCount = 5 } = args;
11
+ const textEmbedding = await (0, embeddings_client_1.getEmbeddings)(context, text);
12
+ const allTools = await (0, peers_sdk_1.Tools)().list();
13
+ let allToolEmbeddings = await Promise.all(allTools.map(async (tool) => {
14
+ const toolText = `${tool.name}\n\n${tool.usageDescription}\n\n${tool.detailedDescription}`.trim();
15
+ const toolEmbeddings = await (0, embeddings_client_1.getEmbeddings)(context, toolText);
16
+ return {
17
+ tool,
18
+ similarity: (0, embeddings_client_1.cosineSimilarity)(toolEmbeddings.embedding, textEmbedding.embedding),
19
+ };
20
+ }));
21
+ allToolEmbeddings = allToolEmbeddings.sort((a, b) => b.similarity - a.similarity);
22
+ const similarTools = allToolEmbeddings.filter((tool) => tool.similarity >= similarityThreshold);
23
+ return similarTools.slice(0, maxCount).map((tool) => tool.tool);
24
+ }
25
+ //# sourceMappingURL=similar-tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"similar-tools.js","sourceRoot":"","sources":["../src/similar-tools.ts"],"names":[],"mappings":";;AAMA,0CAwBC;AA9BD,oDAAmF;AACnF,2DAAsE;AAEtE;;GAEG;AACI,KAAK,UAAU,eAAe,CAAC,IAKrC;IACC,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,mBAAmB,GAAG,GAAG,EAAE,QAAQ,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC;IAExE,MAAM,aAAa,GAAG,MAAM,IAAA,iCAAa,EAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IACzD,MAAM,QAAQ,GAAG,MAAM,IAAA,iBAAK,GAAE,CAAC,IAAI,EAAE,CAAC;IACtC,IAAI,iBAAiB,GAAG,MAAM,OAAO,CAAC,GAAG,CACvC,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;QAC1B,MAAM,QAAQ,GACZ,GAAG,IAAI,CAAC,IAAI,OAAO,IAAI,CAAC,gBAAgB,OAAO,IAAI,CAAC,mBAAmB,EAAE,CAAC,IAAI,EAAE,CAAC;QACnF,MAAM,cAAc,GAAG,MAAM,IAAA,iCAAa,EAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QAC9D,OAAO;YACL,IAAI;YACJ,UAAU,EAAE,IAAA,oCAAgB,EAAC,cAAc,CAAC,SAAS,EAAE,aAAa,CAAC,SAAS,CAAC;SAChF,CAAC;IACJ,CAAC,CAAC,CACH,CAAC;IACF,iBAAiB,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC;IAClF,MAAM,YAAY,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,IAAI,mBAAmB,CAAC,CAAC;IAChG,OAAO,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAClE,CAAC"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,101 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const similar_tools_1 = require("./similar-tools");
4
+ // ── Mock embeddings-client ──────────────────────────────────────────────────
5
+ const mockGetEmbeddings = jest.fn();
6
+ jest.mock("./embeddings-client", () => ({
7
+ getEmbeddings: (...args) => mockGetEmbeddings(...args),
8
+ cosineSimilarity: jest.requireActual("./embeddings-client").cosineSimilarity,
9
+ }));
10
+ // ── Mock peers-sdk ──────────────────────────────────────────────────────────
11
+ const mockToolsList = jest.fn();
12
+ jest.mock("@peers-app/peers-sdk", () => ({
13
+ Tools: () => ({ list: mockToolsList }),
14
+ }));
15
+ // ── Helpers ─────────────────────────────────────────────────────────────────
16
+ function fakeEmbedding(vec) {
17
+ return { embedding: vec };
18
+ }
19
+ function fakeTool(name) {
20
+ return {
21
+ toolId: `id-${name}`,
22
+ name,
23
+ usageDescription: `${name} usage`,
24
+ detailedDescription: `${name} detail`,
25
+ };
26
+ }
27
+ const context = { getVariable: jest.fn() };
28
+ beforeEach(() => {
29
+ jest.clearAllMocks();
30
+ });
31
+ // ── Tests ───────────────────────────────────────────────────────────────────
32
+ describe("getSimilarTools", () => {
33
+ it("returns tools sorted by similarity above the threshold", async () => {
34
+ const toolA = fakeTool("alpha");
35
+ const toolB = fakeTool("bravo");
36
+ const toolC = fakeTool("charlie");
37
+ mockToolsList.mockResolvedValueOnce([toolA, toolB, toolC]);
38
+ // Query embedding: unit vector [1, 0]
39
+ // alpha -> [1, 0] -> similarity 1.0
40
+ // bravo -> [0.7, 0.7] -> similarity ~0.707
41
+ // charlie -> [0, 1] -> similarity 0.0 (below threshold)
42
+ mockGetEmbeddings
43
+ .mockResolvedValueOnce(fakeEmbedding([1, 0])) // query text
44
+ .mockResolvedValueOnce(fakeEmbedding([1, 0])) // alpha
45
+ .mockResolvedValueOnce(fakeEmbedding([0.7, 0.7])) // bravo
46
+ .mockResolvedValueOnce(fakeEmbedding([0, 1])); // charlie
47
+ const result = await (0, similar_tools_1.getSimilarTools)({
48
+ context,
49
+ text: "search query",
50
+ similarityThreshold: 0.2,
51
+ });
52
+ expect(result).toHaveLength(2);
53
+ expect(result[0].name).toBe("alpha");
54
+ expect(result[1].name).toBe("bravo");
55
+ });
56
+ it("respects maxCount", async () => {
57
+ const tools = Array.from({ length: 5 }, (_, i) => fakeTool(`tool-${i}`));
58
+ mockToolsList.mockResolvedValueOnce(tools);
59
+ // All tools are close to the query
60
+ mockGetEmbeddings.mockResolvedValueOnce(fakeEmbedding([1, 0])); // query
61
+ for (const _ of tools) {
62
+ mockGetEmbeddings.mockResolvedValueOnce(fakeEmbedding([0.9, 0.1]));
63
+ }
64
+ const result = await (0, similar_tools_1.getSimilarTools)({
65
+ context,
66
+ text: "query",
67
+ maxCount: 2,
68
+ });
69
+ expect(result).toHaveLength(2);
70
+ });
71
+ it("returns empty array when no tools exceed the threshold", async () => {
72
+ mockToolsList.mockResolvedValueOnce([fakeTool("x")]);
73
+ mockGetEmbeddings
74
+ .mockResolvedValueOnce(fakeEmbedding([1, 0])) // query
75
+ .mockResolvedValueOnce(fakeEmbedding([0, 1])); // tool (orthogonal)
76
+ const result = await (0, similar_tools_1.getSimilarTools)({
77
+ context,
78
+ text: "query",
79
+ similarityThreshold: 0.5,
80
+ });
81
+ expect(result).toHaveLength(0);
82
+ });
83
+ it("returns empty array when there are no tools", async () => {
84
+ mockToolsList.mockResolvedValueOnce([]);
85
+ mockGetEmbeddings.mockResolvedValueOnce(fakeEmbedding([1, 0]));
86
+ const result = await (0, similar_tools_1.getSimilarTools)({ context, text: "query" });
87
+ expect(result).toHaveLength(0);
88
+ });
89
+ it("uses default threshold=0.2 and maxCount=5", async () => {
90
+ const tools = Array.from({ length: 8 }, (_, i) => fakeTool(`t${i}`));
91
+ mockToolsList.mockResolvedValueOnce(tools);
92
+ // query = [1, 0]. All tools get [0.9, 0.4] => similarity ~0.91, all above 0.2
93
+ mockGetEmbeddings.mockResolvedValueOnce(fakeEmbedding([1, 0]));
94
+ for (const _ of tools) {
95
+ mockGetEmbeddings.mockResolvedValueOnce(fakeEmbedding([0.9, 0.4]));
96
+ }
97
+ const result = await (0, similar_tools_1.getSimilarTools)({ context, text: "q" });
98
+ expect(result).toHaveLength(5); // default maxCount
99
+ });
100
+ });
101
+ //# sourceMappingURL=similar-tools.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"similar-tools.test.js","sourceRoot":"","sources":["../src/similar-tools.test.ts"],"names":[],"mappings":"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"}
@@ -1,30 +1,17 @@
1
1
  import { type ITool, type IToolInstance, type IWorkflowRunContext } from "@peers-app/peers-sdk";
2
- /**
3
- * Injects the function that returns the root application data directory
4
- * (where tool code is cached on disk). Must be called once during app
5
- * initialisation before any tool is loaded via {@link initTool}.
6
- */
7
- export declare function setPeersAppDir(fn: () => string): void;
8
- /**
9
- * Derives a unique filesystem-safe identifier for a tool, combining its
10
- * human-readable name with the last 5 characters of its ID.
11
- */
12
- export declare function getToolUniqueIdentifier(tool: ITool): string;
2
+ import type { IAgentTool } from "./agent-functional";
13
3
  /**
14
4
  * Resolves an {@link ITool} definition into a runnable {@link IToolInstance}.
15
5
  *
16
6
  * Resolution order:
17
7
  * 1. System-tool registry ({@link systemToolInstances})
18
8
  * 2. Package-registered tool factory (`getRegisteredTool` from peers-sdk)
19
- * 3. Write the tool's `code` to disk, `require()` it, and cache the result
20
9
  *
21
- * @param tool - The tool definition to initialise.
22
- * @param opts - Pass `{ refresh: true }` to force a reload even when the
23
- * code hash has not changed.
10
+ * If neither registry contains the tool, an error is thrown.
11
+ *
12
+ * @param tool - The tool definition to initialize.
24
13
  */
25
- export declare function initTool(tool: ITool, opts?: {
26
- refresh: boolean;
27
- }): Promise<IToolInstance>;
14
+ export declare function initTool(tool: ITool): Promise<IToolInstance>;
28
15
  /**
29
16
  * Loads a tool via {@link initTool} and wraps its `toolFn` so that every
30
17
  * invocation is automatically logged to the {@link WorkflowLogs} table
@@ -39,3 +26,12 @@ export declare function initWrappedTool(tool: ITool, context: IWorkflowRunContex
39
26
  * and returns the corresponding {@link ITool} records.
40
27
  */
41
28
  export declare function getLinkedTools(markdown: string): Promise<ITool[]>;
29
+ /**
30
+ * Wraps a peers {@link ITool} into the {@link IAgentTool} format expected by
31
+ * the inference-based agent.
32
+ *
33
+ * Resolves the tool instance (with logging and error handling from
34
+ * {@link initWrappedTool}), converts the Zod input schema to JSON Schema
35
+ * for the inference API, and returns an executable {@link IAgentTool}.
36
+ */
37
+ export declare function toAgentTool(tool: ITool, context: IWorkflowRunContext): Promise<IAgentTool>;
@@ -1,51 +1,25 @@
1
1
  "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
2
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.setPeersAppDir = setPeersAppDir;
7
- exports.getToolUniqueIdentifier = getToolUniqueIdentifier;
8
3
  exports.initTool = initTool;
9
4
  exports.initWrappedTool = initWrappedTool;
10
5
  exports.getLinkedTools = getLinkedTools;
11
- const node_crypto_1 = require("node:crypto");
12
- const promises_1 = require("node:fs/promises");
13
- const node_path_1 = __importDefault(require("node:path"));
6
+ exports.toAgentTool = toAgentTool;
14
7
  const peers_sdk_1 = require("@peers-app/peers-sdk");
15
8
  const lodash_1 = require("lodash");
9
+ const zod_to_json_schema_1 = require("zod-to-json-schema");
16
10
  const system_tools_1 = require("./system-tools");
17
- let _getPeersAppDir;
18
- /**
19
- * Injects the function that returns the root application data directory
20
- * (where tool code is cached on disk). Must be called once during app
21
- * initialisation before any tool is loaded via {@link initTool}.
22
- */
23
- function setPeersAppDir(fn) {
24
- _getPeersAppDir = fn;
25
- }
26
- /**
27
- * Derives a unique filesystem-safe identifier for a tool, combining its
28
- * human-readable name with the last 5 characters of its ID.
29
- */
30
- function getToolUniqueIdentifier(tool) {
31
- // TODO there is probably a better way to solve name collisions
32
- return `${tool.name}_${tool.toolId.slice(20)}`;
33
- }
34
- const toolCodeCache = {};
35
- const toolCodeCacheSha = {};
36
11
  /**
37
12
  * Resolves an {@link ITool} definition into a runnable {@link IToolInstance}.
38
13
  *
39
14
  * Resolution order:
40
15
  * 1. System-tool registry ({@link systemToolInstances})
41
16
  * 2. Package-registered tool factory (`getRegisteredTool` from peers-sdk)
42
- * 3. Write the tool's `code` to disk, `require()` it, and cache the result
43
17
  *
44
- * @param tool - The tool definition to initialise.
45
- * @param opts - Pass `{ refresh: true }` to force a reload even when the
46
- * code hash has not changed.
18
+ * If neither registry contains the tool, an error is thrown.
19
+ *
20
+ * @param tool - The tool definition to initialize.
47
21
  */
48
- async function initTool(tool, opts = { refresh: false }) {
22
+ async function initTool(tool) {
49
23
  const sysToolInstance = (0, system_tools_1.systemToolInstances)(tool.toolId);
50
24
  if (sysToolInstance) {
51
25
  return sysToolInstance;
@@ -54,63 +28,8 @@ async function initTool(tool, opts = { refresh: false }) {
54
28
  if (registeredToolInstance) {
55
29
  return registeredToolInstance;
56
30
  }
57
- const toolUID = getToolUniqueIdentifier(tool);
58
- const codeHash = (0, node_crypto_1.createHash)("sha256").update(tool.code).digest("hex");
59
- const refresh = opts.refresh || toolCodeCacheSha[toolUID] !== codeHash;
60
- if (toolCodeCache[toolUID] && !refresh) {
61
- return toolCodeCache[toolUID];
62
- }
63
- delete toolCodeCache[toolUID];
64
- delete toolCodeCacheSha[toolUID];
65
- if (!_getPeersAppDir) {
66
- throw new Error("setPeersAppDir must be called before initTool");
67
- }
68
- const rootDir = _getPeersAppDir();
69
- const toolDir = node_path_1.default.join(rootDir, "tools", toolUID);
70
- const cacheKeys = Object.keys(require.cache);
71
- for (const cacheKey of cacheKeys) {
72
- const requireCache = require.cache[cacheKey];
73
- const cachePath = requireCache?.path;
74
- if (cachePath) {
75
- if (cachePath.toLowerCase().startsWith(toolDir.toLowerCase())) {
76
- delete require.cache[cacheKey];
77
- }
78
- }
79
- }
80
- await (0, promises_1.mkdir)(toolDir, { recursive: true });
81
- const toolFilePath = node_path_1.default.join(toolDir, "index.js");
82
- let toolCode = tool.code;
83
- toolCode = toolCode.trim();
84
- if (toolCode.startsWith("```") && toolCode.endsWith("```")) {
85
- toolCode = toolCode.slice(3, -3);
86
- }
87
- await (0, promises_1.writeFile)(toolFilePath, toolCode);
88
- let toolModule = require(toolFilePath);
89
- let toolInstance = {
90
- tool,
91
- toolFn: (...args) => "Error: toolFn was not set",
92
- };
93
- if (toolModule.default) {
94
- toolInstance = {
95
- ...toolInstance,
96
- ...toolModule,
97
- };
98
- toolModule = toolModule.default;
99
- }
100
- if (typeof toolModule === "function") {
101
- toolInstance.toolFn = toolModule;
102
- }
103
- else {
104
- toolInstance = {
105
- ...toolInstance,
106
- toolFn: () => `Error: the module built from the tool code did not return a tool function. The module should export a function named "toolFn" or make the default export a function.`,
107
- ...toolModule,
108
- tool,
109
- };
110
- }
111
- toolCodeCacheSha[toolUID] = codeHash;
112
- toolCodeCache[toolUID] = toolInstance;
113
- return toolCodeCache[toolUID];
31
+ throw new Error(`Tool "${tool.name}" (${tool.toolId}) is not registered as a system tool or package tool. ` +
32
+ `Inline code execution is no longer supported.`);
114
33
  }
115
34
  /**
116
35
  * Loads a tool via {@link initTool} and wraps its `toolFn` so that every
@@ -123,7 +42,7 @@ async function initTool(tool, opts = { refresh: false }) {
123
42
  async function initWrappedTool(tool, context) {
124
43
  const { logger } = context;
125
44
  let toolInstance = {
126
- toolFn: (...args) => "toolFn placeholder",
45
+ toolFn: () => "toolFn placeholder",
127
46
  tool,
128
47
  };
129
48
  try {
@@ -183,4 +102,29 @@ async function getLinkedTools(markdown) {
183
102
  });
184
103
  return fixedTools;
185
104
  }
105
+ /**
106
+ * Wraps a peers {@link ITool} into the {@link IAgentTool} format expected by
107
+ * the inference-based agent.
108
+ *
109
+ * Resolves the tool instance (with logging and error handling from
110
+ * {@link initWrappedTool}), converts the Zod input schema to JSON Schema
111
+ * for the inference API, and returns an executable {@link IAgentTool}.
112
+ */
113
+ async function toAgentTool(tool, context) {
114
+ const toolInstance = await initWrappedTool(tool, context);
115
+ const zodSchema = toolInstance.inputSchema || (0, peers_sdk_1.fieldsToSchema)(tool.inputSchema.fields);
116
+ const jsonSchema = (0, zod_to_json_schema_1.zodToJsonSchema)(zodSchema);
117
+ return {
118
+ name: tool.name,
119
+ description: tool.usageDescription,
120
+ parameters: jsonSchema,
121
+ execute: async (args) => {
122
+ let result = await toolInstance.toolFn(args);
123
+ if ((0, lodash_1.isObject)(result)) {
124
+ result = JSON.stringify(result, null, 2);
125
+ }
126
+ return String(result);
127
+ },
128
+ };
129
+ }
186
130
  //# sourceMappingURL=tool-loader.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tool-loader.js","sourceRoot":"","sources":["../src/tool-loader.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tool-loader.js","sourceRoot":"","sources":["../src/tool-loader.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const peers_sdk_1 = require("@peers-app/peers-sdk");
4
+ const similar_tools_1 = require("./similar-tools");
5
+ const system_tools_1 = require("./system-tools");
6
+ (0, system_tools_1.registerSystemTool)({
7
+ toolId: "000peers0tool00toolsearch",
8
+ name: "tool-search",
9
+ usageDescription: "Search existing tools. Pass 'all' to get all tools. Sometimes a user asks what tools are available. This tool can be used to answer that question.",
10
+ inputSchema: {
11
+ type: peers_sdk_1.IOSchemaType.complex,
12
+ fields: [
13
+ {
14
+ name: "searchText",
15
+ type: peers_sdk_1.FieldType.string,
16
+ description: "The text to search for tools with. Pass 'all' or nothing to get all the tools",
17
+ },
18
+ ],
19
+ },
20
+ }, {
21
+ toolFn: async (args, context) => {
22
+ const { searchText } = args;
23
+ let tools;
24
+ if (args.searchText === "all" || !args.searchText?.trim()) {
25
+ tools = await (0, peers_sdk_1.Tools)().list();
26
+ }
27
+ else {
28
+ tools = await (0, similar_tools_1.getSimilarTools)({ context, text: searchText });
29
+ }
30
+ const toolsStr = tools
31
+ .map((t) => [
32
+ `toolId: ${t.toolId}`,
33
+ `name: ${t.name}`,
34
+ `${t.usageDescription}`,
35
+ `\n${t.detailedDescription || ""}`,
36
+ ]
37
+ .join("\n")
38
+ .trim())
39
+ .join("\n\n\n");
40
+ return toolsStr || "No tools found";
41
+ },
42
+ });
43
+ //# sourceMappingURL=tool-search.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-search.js","sourceRoot":"","sources":["../src/tool-search.ts"],"names":[],"mappings":";;AAAA,oDAM8B;AAC9B,mDAAkD;AAClD,iDAAoD;AAEpD,IAAA,iCAAkB,EAChB;IACE,MAAM,EAAE,2BAA2B;IACnC,IAAI,EAAE,aAAa;IACnB,gBAAgB,EACd,oJAAoJ;IACtJ,WAAW,EAAE;QACX,IAAI,EAAE,wBAAY,CAAC,OAAO;QAC1B,MAAM,EAAE;YACN;gBACE,IAAI,EAAE,YAAY;gBAClB,IAAI,EAAE,qBAAS,CAAC,MAAM;gBACtB,WAAW,EACT,gFAAgF;aACnF;SACF;KACF;CACF,EACD;IACE,MAAM,EAAE,KAAK,EAAE,IAAS,EAAE,OAA4B,EAAE,EAAE;QACxD,MAAM,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC;QAC5B,IAAI,KAAc,CAAC;QACnB,IAAI,IAAI,CAAC,UAAU,KAAK,KAAK,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,EAAE,CAAC;YAC1D,KAAK,GAAG,MAAM,IAAA,iBAAK,GAAE,CAAC,IAAI,EAAE,CAAC;QAC/B,CAAC;aAAM,CAAC;YACN,KAAK,GAAG,MAAM,IAAA,+BAAe,EAAC,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;QAC/D,CAAC;QACD,MAAM,QAAQ,GAAG,KAAK;aACnB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CACT;YACE,WAAW,CAAC,CAAC,MAAM,EAAE;YACrB,SAAS,CAAC,CAAC,IAAI,EAAE;YACjB,GAAG,CAAC,CAAC,gBAAgB,EAAE;YACvB,KAAK,CAAC,CAAC,mBAAmB,IAAI,EAAE,EAAE;SACnC;aACE,IAAI,CAAC,IAAI,CAAC;aACV,IAAI,EAAE,CACV;aACA,IAAI,CAAC,QAAQ,CAAC,CAAC;QAClB,OAAO,QAAQ,IAAI,gBAAgB,CAAC;IACtC,CAAC;CACF,CACF,CAAC"}