diff options
| author | Adam Malczewski <[email protected]> | 2026-05-19 19:40:21 +0900 |
|---|---|---|
| committer | Adam Malczewski <[email protected]> | 2026-05-19 19:40:21 +0900 |
| commit | f78a91c20f658dd404277919a0b872b352c99bb6 (patch) | |
| tree | 58cfffb655da4443f4b7a39543b86f988f15239f /packages/core/tests/tools/registry.test.ts | |
| download | dispatch-main.tar.gz dispatch-main.zip | |
- Bun monorepo with @dispatch/core, @dispatch/api, @dispatch/frontend
- Agent runtime with Vercel AI SDK, streaming via WebSocket
- Tools: read_file, write_file, list_files (scoped to working directory)
- Hono API server with POST /chat, GET /status, GET /health, WS /ws
- Svelte 5 + DaisyUI frontend with chat UI, theme switcher, copy button
- OpenCode Go (Zen) as LLM provider, deepseek-v4-flash-free model
- Docker setup (dev + prod) with bin/ scripts and gopass secrets
- Biome v2 linting/formatting, Vitest tests (44 passing)
- Debug info attached to error messages for diagnostics
Diffstat (limited to 'packages/core/tests/tools/registry.test.ts')
| -rw-r--r-- | packages/core/tests/tools/registry.test.ts | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/packages/core/tests/tools/registry.test.ts b/packages/core/tests/tools/registry.test.ts new file mode 100644 index 0000000..b6f1fca --- /dev/null +++ b/packages/core/tests/tools/registry.test.ts @@ -0,0 +1,50 @@ +import { describe, expect, it } from "vitest"; +import { z } from "zod"; +import { createToolRegistry } from "../../src/tools/registry.js"; +import type { ToolDefinition } from "../../src/types/index.js"; + +const mockTool: ToolDefinition = { + name: "mock_tool", + description: "A mock tool for testing", + parameters: z.object({ input: z.string() }), + execute: async (_args) => "mock result", +}; + +const anotherTool: ToolDefinition = { + name: "another_tool", + description: "Another mock tool", + parameters: z.object({ value: z.number() }), + execute: async (_args) => "another result", +}; + +describe("createToolRegistry", () => { + it("returns all tools via getTools()", () => { + const registry = createToolRegistry([mockTool, anotherTool]); + const tools = registry.getTools(); + expect(tools).toHaveLength(2); + expect(tools.map((t) => t.name)).toContain("mock_tool"); + expect(tools.map((t) => t.name)).toContain("another_tool"); + }); + + it("retrieves specific tool by name", () => { + const registry = createToolRegistry([mockTool, anotherTool]); + const tool = registry.getTool("mock_tool"); + expect(tool).toBeDefined(); + expect(tool?.name).toBe("mock_tool"); + }); + + it("returns undefined for unknown tool", () => { + const registry = createToolRegistry([mockTool]); + expect(registry.getTool("nonexistent")).toBeUndefined(); + }); + + it("getAISDKTools returns correct format", () => { + const registry = createToolRegistry([mockTool, anotherTool]); + const aiTools = registry.getAISDKTools(); + expect(aiTools).toHaveProperty("mock_tool"); + expect(aiTools).toHaveProperty("another_tool"); + // Each should have description and parameters (AI SDK tool format) + expect(aiTools.mock_tool).toHaveProperty("description"); + expect(aiTools.mock_tool).toHaveProperty("parameters"); + }); +}); |
