From 197259c88af5d27acabb4fd6c983e9110464cdc5 Mon Sep 17 00:00:00 2001 From: Mario Zechner Date: Tue, 16 Sep 2025 02:19:47 +0200 Subject: [PATCH] Fix NodeJS compat --- package-lock.json | 12 +-- packages/agent/package-lock.json | 4 +- packages/agent/package.json | 4 +- packages/ai/package.json | 2 +- packages/ai/src/agent/agent.ts | 8 +- packages/ai/src/agent/index.ts | 6 +- packages/ai/src/agent/tools/calculate.ts | 4 +- .../ai/src/agent/tools/get-current-time.ts | 6 +- packages/ai/src/agent/tools/index.ts | 4 +- packages/ai/src/event-stream.ts | 2 +- packages/ai/src/models.generated.ts | 102 +++++++++--------- packages/ai/src/types.ts | 12 +-- packages/ai/src/validation.ts | 11 +- packages/ai/test/tool-validation.test.ts | 11 +- packages/pods/package-lock.json | 4 +- packages/pods/package.json | 4 +- packages/tui/package-lock.json | 4 +- packages/tui/package.json | 2 +- tsconfig.base.json | 7 +- 19 files changed, 110 insertions(+), 99 deletions(-) diff --git a/package-lock.json b/package-lock.json index 58895c37..040d93eb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2813,10 +2813,10 @@ }, "packages/agent": { "name": "@mariozechner/pi-agent", - "version": "0.5.34", + "version": "0.5.39", "license": "MIT", "dependencies": { - "@mariozechner/pi-tui": "^0.5.34", + "@mariozechner/pi-tui": "^0.5.38", "@types/glob": "^8.1.0", "chalk": "^5.5.0", "glob": "^11.0.3", @@ -3195,7 +3195,7 @@ }, "packages/ai": { "name": "@mariozechner/pi-ai", - "version": "0.5.36", + "version": "0.5.39", "license": "MIT", "dependencies": { "@anthropic-ai/sdk": "^0.61.0", @@ -3235,10 +3235,10 @@ }, "packages/pods": { "name": "@mariozechner/pi", - "version": "0.5.34", + "version": "0.5.39", "license": "MIT", "dependencies": { - "@mariozechner/pi-agent": "^0.5.34", + "@mariozechner/pi-agent": "^0.5.38", "chalk": "^5.5.0" }, "bin": { @@ -3251,7 +3251,7 @@ }, "packages/tui": { "name": "@mariozechner/pi-tui", - "version": "0.5.34", + "version": "0.5.39", "license": "MIT", "dependencies": { "@types/mime-types": "^2.1.4", diff --git a/packages/agent/package-lock.json b/packages/agent/package-lock.json index 10864da2..9bd33217 100644 --- a/packages/agent/package-lock.json +++ b/packages/agent/package-lock.json @@ -1,12 +1,12 @@ { "name": "@mariozechner/pi-agent", - "version": "0.5.34", + "version": "0.5.39", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@mariozechner/pi-agent", - "version": "0.5.34", + "version": "0.5.39", "license": "MIT", "dependencies": { "@mariozechner/tui": "^0.1.1", diff --git a/packages/agent/package.json b/packages/agent/package.json index f05dc94d..3ef671cf 100644 --- a/packages/agent/package.json +++ b/packages/agent/package.json @@ -1,6 +1,6 @@ { "name": "@mariozechner/pi-agent", - "version": "0.5.34", + "version": "0.5.39", "description": "General-purpose agent with tool calling and session persistence", "type": "module", "bin": { @@ -18,7 +18,7 @@ "prepublishOnly": "npm run clean && npm run build" }, "dependencies": { - "@mariozechner/pi-tui": "^0.5.34", + "@mariozechner/pi-tui": "^0.5.39", "@types/glob": "^8.1.0", "chalk": "^5.5.0", "glob": "^11.0.3", diff --git a/packages/ai/package.json b/packages/ai/package.json index ab9ff471..0f21af44 100644 --- a/packages/ai/package.json +++ b/packages/ai/package.json @@ -1,6 +1,6 @@ { "name": "@mariozechner/pi-ai", - "version": "0.5.36", + "version": "0.5.39", "description": "Unified LLM API with automatic model discovery and provider configuration", "type": "module", "main": "./dist/index.js", diff --git a/packages/ai/src/agent/agent.ts b/packages/ai/src/agent/agent.ts index 964df2a1..75d5ec12 100644 --- a/packages/ai/src/agent/agent.ts +++ b/packages/ai/src/agent/agent.ts @@ -1,8 +1,8 @@ -import { EventStream } from "../event-stream"; +import { EventStream } from "../event-stream.js"; import { streamSimple } from "../stream.js"; import type { AssistantMessage, Context, Message, ToolResultMessage, UserMessage } from "../types.js"; import { validateToolArguments } from "../validation.js"; -import type { AgentContext, AgentEvent, AgentTool, AgentToolResult, PromptConfig } from "./types"; +import type { AgentContext, AgentEvent, AgentTool, AgentToolResult, PromptConfig } from "./types.js"; // Main prompt function - returns a stream of events export function prompt( @@ -13,8 +13,8 @@ export function prompt( streamFn?: typeof streamSimple, ): EventStream { const stream = new EventStream( - (event) => event.type === "agent_end", - (event) => (event.type === "agent_end" ? event.messages : []), + (event: AgentEvent) => event.type === "agent_end", + (event: AgentEvent) => (event.type === "agent_end" ? event.messages : []), ); // Run the prompt async diff --git a/packages/ai/src/agent/index.ts b/packages/ai/src/agent/index.ts index af776d60..196d66f7 100644 --- a/packages/ai/src/agent/index.ts +++ b/packages/ai/src/agent/index.ts @@ -1,3 +1,3 @@ -export { prompt } from "./agent"; -export * from "./tools"; -export type { AgentContext, AgentEvent, AgentTool, PromptConfig } from "./types"; +export { prompt } from "./agent.js"; +export * from "./tools/index.js"; +export type { AgentContext, AgentEvent, AgentTool, PromptConfig } from "./types.js"; diff --git a/packages/ai/src/agent/tools/calculate.ts b/packages/ai/src/agent/tools/calculate.ts index 79c9e9f2..c2a4e5a8 100644 --- a/packages/ai/src/agent/tools/calculate.ts +++ b/packages/ai/src/agent/tools/calculate.ts @@ -1,5 +1,5 @@ import { type Static, Type } from "@sinclair/typebox"; -import type { AgentTool } from "../../agent"; +import type { AgentTool } from "../../agent/types.js"; export interface CalculateResult { output: string; @@ -26,7 +26,7 @@ export const calculateTool: AgentTool = { name: "calculate", description: "Evaluate mathematical expressions", parameters: calculateSchema, - execute: async (_toolCallId, args) => { + execute: async (_toolCallId: string, args: CalculateParams) => { return calculate(args.expression); }, }; diff --git a/packages/ai/src/agent/tools/get-current-time.ts b/packages/ai/src/agent/tools/get-current-time.ts index 5cf4fa15..94afd7be 100644 --- a/packages/ai/src/agent/tools/get-current-time.ts +++ b/packages/ai/src/agent/tools/get-current-time.ts @@ -1,6 +1,6 @@ import { type Static, Type } from "@sinclair/typebox"; -import type { AgentTool } from "../../agent"; -import type { AgentToolResult } from "../types"; +import type { AgentTool } from "../../agent/index.js"; +import type { AgentToolResult } from "../types.js"; export interface GetCurrentTimeResult extends AgentToolResult<{ utcTimestamp: number }> {} @@ -39,7 +39,7 @@ export const getCurrentTimeTool: AgentTool { + execute: async (_toolCallId: string, args: GetCurrentTimeParams) => { return getCurrentTime(args.timezone); }, }; diff --git a/packages/ai/src/agent/tools/index.ts b/packages/ai/src/agent/tools/index.ts index ddd96932..0a9cc7ad 100644 --- a/packages/ai/src/agent/tools/index.ts +++ b/packages/ai/src/agent/tools/index.ts @@ -1,2 +1,2 @@ -export { calculate, calculateTool } from "./calculate"; -export { getCurrentTime, getCurrentTimeTool } from "./get-current-time"; +export { calculate, calculateTool } from "./calculate.js"; +export { getCurrentTime, getCurrentTimeTool } from "./get-current-time.js"; diff --git a/packages/ai/src/event-stream.ts b/packages/ai/src/event-stream.ts index 2f0a82a4..deead693 100644 --- a/packages/ai/src/event-stream.ts +++ b/packages/ai/src/event-stream.ts @@ -1,4 +1,4 @@ -import type { AssistantMessage, AssistantMessageEvent } from "./types"; +import type { AssistantMessage, AssistantMessageEvent } from "./types.js"; // Generic event stream class for async iteration export class EventStream implements AsyncIterable { diff --git a/packages/ai/src/models.generated.ts b/packages/ai/src/models.generated.ts index 72a26cfd..88be0a5d 100644 --- a/packages/ai/src/models.generated.ts +++ b/packages/ai/src/models.generated.ts @@ -3079,6 +3079,23 @@ export const MODELS = { contextWindow: 131072, maxTokens: 128000, } satisfies Model<"openai-completions">, + "mistralai/mistral-7b-instruct-v0.3": { + id: "mistralai/mistral-7b-instruct-v0.3", + name: "Mistral: Mistral 7B Instruct v0.3", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: false, + input: ["text"], + cost: { + input: 0.028, + output: 0.054, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 32768, + maxTokens: 16384, + } satisfies Model<"openai-completions">, "mistralai/mistral-7b-instruct:free": { id: "mistralai/mistral-7b-instruct:free", name: "Mistral: Mistral 7B Instruct (free)", @@ -3113,23 +3130,6 @@ export const MODELS = { contextWindow: 32768, maxTokens: 16384, } satisfies Model<"openai-completions">, - "mistralai/mistral-7b-instruct-v0.3": { - id: "mistralai/mistral-7b-instruct-v0.3", - name: "Mistral: Mistral 7B Instruct v0.3", - api: "openai-completions", - provider: "openrouter", - baseUrl: "https://openrouter.ai/api/v1", - reasoning: false, - input: ["text"], - cost: { - input: 0.028, - output: 0.054, - cacheRead: 0, - cacheWrite: 0, - }, - contextWindow: 32768, - maxTokens: 16384, - } satisfies Model<"openai-completions">, "microsoft/phi-3-mini-128k-instruct": { id: "microsoft/phi-3-mini-128k-instruct", name: "Microsoft: Phi-3 Mini 128K Instruct", @@ -3164,23 +3164,6 @@ export const MODELS = { contextWindow: 128000, maxTokens: 4096, } satisfies Model<"openai-completions">, - "meta-llama/llama-3-8b-instruct": { - id: "meta-llama/llama-3-8b-instruct", - name: "Meta: Llama 3 8B Instruct", - api: "openai-completions", - provider: "openrouter", - baseUrl: "https://openrouter.ai/api/v1", - reasoning: false, - input: ["text"], - cost: { - input: 0.03, - output: 0.06, - cacheRead: 0, - cacheWrite: 0, - }, - contextWindow: 8192, - maxTokens: 16384, - } satisfies Model<"openai-completions">, "meta-llama/llama-3-70b-instruct": { id: "meta-llama/llama-3-70b-instruct", name: "Meta: Llama 3 70B Instruct", @@ -3198,6 +3181,23 @@ export const MODELS = { contextWindow: 8192, maxTokens: 16384, } satisfies Model<"openai-completions">, + "meta-llama/llama-3-8b-instruct": { + id: "meta-llama/llama-3-8b-instruct", + name: "Meta: Llama 3 8B Instruct", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: false, + input: ["text"], + cost: { + input: 0.03, + output: 0.06, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 8192, + maxTokens: 16384, + } satisfies Model<"openai-completions">, "mistralai/mixtral-8x22b-instruct": { id: "mistralai/mixtral-8x22b-instruct", name: "Mistral: Mixtral 8x22B Instruct", @@ -3300,23 +3300,6 @@ export const MODELS = { contextWindow: 128000, maxTokens: 4096, } satisfies Model<"openai-completions">, - "mistralai/mistral-small": { - id: "mistralai/mistral-small", - name: "Mistral Small", - api: "openai-completions", - provider: "openrouter", - baseUrl: "https://openrouter.ai/api/v1", - reasoning: false, - input: ["text"], - cost: { - input: 0.19999999999999998, - output: 0.6, - cacheRead: 0, - cacheWrite: 0, - }, - contextWindow: 32768, - maxTokens: 4096, - } satisfies Model<"openai-completions">, "mistralai/mistral-tiny": { id: "mistralai/mistral-tiny", name: "Mistral Tiny", @@ -3334,6 +3317,23 @@ export const MODELS = { contextWindow: 32768, maxTokens: 4096, } satisfies Model<"openai-completions">, + "mistralai/mistral-small": { + id: "mistralai/mistral-small", + name: "Mistral Small", + api: "openai-completions", + provider: "openrouter", + baseUrl: "https://openrouter.ai/api/v1", + reasoning: false, + input: ["text"], + cost: { + input: 0.19999999999999998, + output: 0.6, + cacheRead: 0, + cacheWrite: 0, + }, + contextWindow: 32768, + maxTokens: 4096, + } satisfies Model<"openai-completions">, "mistralai/mixtral-8x7b-instruct": { id: "mistralai/mixtral-8x7b-instruct", name: "Mistral: Mixtral 8x7B Instruct", diff --git a/packages/ai/src/types.ts b/packages/ai/src/types.ts index 2ea2d46d..4bd7cbf6 100644 --- a/packages/ai/src/types.ts +++ b/packages/ai/src/types.ts @@ -1,10 +1,10 @@ -import type { AssistantMessageEventStream } from "./event-stream"; -import type { AnthropicOptions } from "./providers/anthropic"; -import type { GoogleOptions } from "./providers/google"; -import type { OpenAICompletionsOptions } from "./providers/openai-completions"; -import type { OpenAIResponsesOptions } from "./providers/openai-responses"; +import type { AssistantMessageEventStream } from "./event-stream.js"; +import type { AnthropicOptions } from "./providers/anthropic.js"; +import type { GoogleOptions } from "./providers/google.js"; +import type { OpenAICompletionsOptions } from "./providers/openai-completions.js"; +import type { OpenAIResponsesOptions } from "./providers/openai-responses.js"; -export type { AssistantMessageEventStream } from "./event-stream"; +export type { AssistantMessageEventStream } from "./event-stream.js"; export type Api = "openai-completions" | "openai-responses" | "anthropic-messages" | "google-generative-ai"; diff --git a/packages/ai/src/validation.ts b/packages/ai/src/validation.ts index c8841930..0479c6bf 100644 --- a/packages/ai/src/validation.ts +++ b/packages/ai/src/validation.ts @@ -1,5 +1,10 @@ -import Ajv from "ajv"; -import addFormats from "ajv-formats"; +import AjvModule from "ajv"; +import addFormatsModule from "ajv-formats"; + +// Handle both default and named exports +const Ajv = (AjvModule as any).default || AjvModule; +const addFormats = (addFormatsModule as any).default || addFormatsModule; + import type { Tool, ToolCall } from "./types.js"; // Create a singleton AJV instance with formats @@ -25,7 +30,7 @@ export function validateToolArguments(tool: Tool, toolCall: ToolCall): any { // Format validation errors nicely const errors = validate.errors - ?.map((err) => { + ?.map((err: any) => { const path = err.instancePath ? err.instancePath.substring(1) : err.params.missingProperty || "root"; return ` - ${path}: ${err.message}`; }) diff --git a/packages/ai/test/tool-validation.test.ts b/packages/ai/test/tool-validation.test.ts index fccaea14..27f3e46b 100644 --- a/packages/ai/test/tool-validation.test.ts +++ b/packages/ai/test/tool-validation.test.ts @@ -1,6 +1,11 @@ import { type Static, Type } from "@sinclair/typebox"; -import Ajv from "ajv"; -import addFormats from "ajv-formats"; +import AjvModule from "ajv"; +import addFormatsModule from "ajv-formats"; + +// Handle both default and named exports +const Ajv = (AjvModule as any).default || AjvModule; +const addFormats = (addFormatsModule as any).default || addFormatsModule; + import { describe, expect, it } from "vitest"; import type { AgentTool } from "../src/agent/types.js"; @@ -98,7 +103,7 @@ describe("Tool Validation with TypeBox and AJV", () => { if (validate.errors) { const errors = validate.errors - .map((err) => { + .map((err: any) => { const path = err.instancePath ? err.instancePath.substring(1) : err.params.missingProperty || "root"; return ` - ${path}: ${err.message}`; }) diff --git a/packages/pods/package-lock.json b/packages/pods/package-lock.json index 3742b07f..7d1f203f 100644 --- a/packages/pods/package-lock.json +++ b/packages/pods/package-lock.json @@ -1,12 +1,12 @@ { "name": "@mariozechner/pi", - "version": "0.5.34", + "version": "0.5.39", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@mariozechner/pi", - "version": "0.5.34", + "version": "0.5.39", "license": "MIT", "dependencies": { "@ai-sdk/openai": "^2.0.5", diff --git a/packages/pods/package.json b/packages/pods/package.json index 7ff71df3..8b6a444a 100644 --- a/packages/pods/package.json +++ b/packages/pods/package.json @@ -1,6 +1,6 @@ { "name": "@mariozechner/pi", - "version": "0.5.34", + "version": "0.5.39", "description": "CLI tool for managing vLLM deployments on GPU pods", "type": "module", "bin": { @@ -34,7 +34,7 @@ "node": ">=20.0.0" }, "dependencies": { - "@mariozechner/pi-agent": "^0.5.34", + "@mariozechner/pi-agent": "^0.5.39", "chalk": "^5.5.0" }, "devDependencies": {} diff --git a/packages/tui/package-lock.json b/packages/tui/package-lock.json index 1e905c3b..81fb91d1 100644 --- a/packages/tui/package-lock.json +++ b/packages/tui/package-lock.json @@ -1,12 +1,12 @@ { "name": "@mariozechner/tui", - "version": "0.5.34", + "version": "0.5.39", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@mariozechner/tui", - "version": "0.5.34", + "version": "0.5.39", "license": "MIT", "dependencies": { "@types/mime-types": "^2.1.4", diff --git a/packages/tui/package.json b/packages/tui/package.json index 73d42ffe..29128c08 100644 --- a/packages/tui/package.json +++ b/packages/tui/package.json @@ -1,6 +1,6 @@ { "name": "@mariozechner/pi-tui", - "version": "0.5.34", + "version": "0.5.39", "description": "Terminal User Interface library with differential rendering for efficient text-based applications", "type": "module", "main": "dist/index.js", diff --git a/tsconfig.base.json b/tsconfig.base.json index 147397c7..dd239b23 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -1,7 +1,7 @@ { "compilerOptions": { - "target": "esnext", - "module": "esnext", + "target": "ES2022", + "module": "Node16", "lib": ["ES2022"], "strict": true, "esModuleInterop": true, @@ -12,8 +12,9 @@ "sourceMap": true, "inlineSources": true, "inlineSourceMap": false, - "moduleResolution": "bundler", + "moduleResolution": "Node16", "resolveJsonModule": true, + "allowImportingTsExtensions": false, "types": ["node"] } }