diff --git a/apps/docs/reference/frontend-tool.mdx b/apps/docs/reference/frontend-tool.mdx index 4dd32964..c867fb4a 100644 --- a/apps/docs/reference/frontend-tool.mdx +++ b/apps/docs/reference/frontend-tool.mdx @@ -20,7 +20,7 @@ Frontend tools are framework-agnostic and work consistently across all framework ## Type Definition ```typescript -type FrontendTool = Record> = { +type FrontendTool> = { name: string; description?: string; parameters?: z.ZodType; diff --git a/docs/ANGULAR_DESIGN.md b/docs/ANGULAR_DESIGN.md index db14a2d4..cfb6667e 100644 --- a/docs/ANGULAR_DESIGN.md +++ b/docs/ANGULAR_DESIGN.md @@ -325,7 +325,7 @@ export type ClientToolCall> = }; interface ClientToolRenderer< - Args extends Record = Record, + Args extends object = Record, > { toolCall: Signal>; } @@ -344,7 +344,7 @@ type ClientTool> = FrontendTool & { }; interface ToolCallRendererConfig< - Args extends Record = Record, + Args extends object = Record, > { name: string; args: z.ZodType; diff --git a/packages/agent/package.json b/packages/agent/package.json index cab79d07..a8d608bb 100644 --- a/packages/agent/package.json +++ b/packages/agent/package.json @@ -1,6 +1,6 @@ { "name": "@copilotkitnext/agent", - "version": "0.0.16", + "version": "0.0.17-alpha.0", "description": "Basic Agent for CopilotKit", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/packages/angular/package.json b/packages/angular/package.json index 21fb34f2..cdf41f42 100644 --- a/packages/angular/package.json +++ b/packages/angular/package.json @@ -1,6 +1,6 @@ { "name": "@copilotkitnext/angular", - "version": "0.0.16", + "version": "0.0.17-alpha.0", "description": "Angular library for CopilotKit", "main": "dist/fesm2022/copilotkitnext-angular.mjs", "module": "dist/fesm2022/copilotkitnext-angular.mjs", diff --git a/packages/angular/src/lib/copilotkit.ts b/packages/angular/src/lib/copilotkit.ts index 8df87fd3..2a551256 100644 --- a/packages/angular/src/lib/copilotkit.ts +++ b/packages/angular/src/lib/copilotkit.ts @@ -81,21 +81,21 @@ export class CopilotKit { }); } - #bindClientTool( - clientToolWithInjector: FrontendToolConfig & { + #bindClientTool( + clientToolWithInjector: FrontendToolConfig & { injector: Injector; } - ): FrontendTool { + ): FrontendTool { const { injector, handler, ...frontendCandidate } = clientToolWithInjector; return { ...frontendCandidate, - handler: (args) => runInInjectionContext(injector, () => handler(args)), + handler: (args) => runInInjectionContext(injector, () => handler(args as Args)), }; } - addFrontendTool( - clientToolWithInjector: FrontendToolConfig & { + addFrontendTool( + clientToolWithInjector: FrontendToolConfig & { injector: Injector; } ): void { @@ -105,17 +105,22 @@ export class CopilotKit { this.#clientToolCallRenderConfigs.update((current) => [ ...current, - clientToolWithInjector, + // Erase generic parameter for storage without using `any`. + clientToolWithInjector as FrontendToolConfig, ]); } - addRenderToolCall(renderConfig: RenderToolCallConfig): void { - this.#toolCallRenderConfigs.update((current) => [...current, renderConfig]); + addRenderToolCall(renderConfig: RenderToolCallConfig): void { + this.#toolCallRenderConfigs.update((current) => [ + ...current, + // Erase generic parameter for storage without using `any`. + renderConfig as RenderToolCallConfig, + ]); } - #bindHumanInTheLoopTool( - humanInTheLoopTool: HumanInTheLoopConfig - ): FrontendTool { + #bindHumanInTheLoopTool( + humanInTheLoopTool: HumanInTheLoopConfig + ): FrontendTool { return { ...humanInTheLoopTool, handler: (args, toolCall) => { @@ -124,10 +129,11 @@ export class CopilotKit { }; } - addHumanInTheLoop(humanInTheLoopTool: HumanInTheLoopConfig): void { + addHumanInTheLoop(humanInTheLoopTool: HumanInTheLoopConfig): void { this.#humanInTheLoopToolRenderConfigs.update((current) => [ ...current, - humanInTheLoopTool, + // Erase generic parameter for storage without using `any`. + humanInTheLoopTool as HumanInTheLoopConfig, ]); const tool = this.#bindHumanInTheLoopTool(humanInTheLoopTool); @@ -194,4 +200,4 @@ export class CopilotKit { this.core.setAgents__unsafe_dev_only(options.agents); } } -} +} \ No newline at end of file diff --git a/packages/angular/src/lib/tools.ts b/packages/angular/src/lib/tools.ts index 14d7187f..664c2316 100644 --- a/packages/angular/src/lib/tools.ts +++ b/packages/angular/src/lib/tools.ts @@ -4,7 +4,7 @@ import { z } from "zod"; import { CopilotKit } from "./copilotkit"; export type AngularToolCall< - Args extends Record = Record, + Args extends object = Record, > = | { args: Partial; @@ -23,7 +23,7 @@ export type AngularToolCall< }; export type HumanInTheLoopToolCall< - Args extends Record = Record, + Args extends object = Record, > = | { args: Partial; @@ -43,25 +43,25 @@ export type HumanInTheLoopToolCall< }; export interface ToolRenderer< - Args extends Record = Record, + Args extends object = Record, > { toolCall: Signal>; } export interface HumanInTheLoopToolRenderer< - Args extends Record = Record, + Args extends object = Record, > { toolCall: Signal>; } export type ClientTool< - Args extends Record = Record, + Args extends object = Record, > = Omit, "handler"> & { renderer?: Type>; }; export interface RenderToolCallConfig< - Args extends Record = Record, + Args extends object = Record, > { name: string; args: z.ZodType; @@ -70,7 +70,7 @@ export interface RenderToolCallConfig< } export interface FrontendToolConfig< - Args extends Record = Record, + Args extends object = Record, > { name: string; description: string; @@ -81,7 +81,7 @@ export interface FrontendToolConfig< } export interface HumanInTheLoopConfig< - Args extends Record = Record, + Args extends object = Record, > { name: string; args: z.ZodType; @@ -91,7 +91,7 @@ export interface HumanInTheLoopConfig< } export function registerRenderToolCall< - Args extends Record = Record, + Args extends object = Record, >(renderToolCall: RenderToolCallConfig): void { const copilotKit = inject(CopilotKit); const destroyRef = inject(DestroyRef); @@ -104,7 +104,7 @@ export function registerRenderToolCall< } export function registerFrontendTool< - Args extends Record = Record, + Args extends object = Record, >(frontendTool: FrontendToolConfig): void { const injector = inject(Injector); const destroyRef = inject(DestroyRef); @@ -121,7 +121,7 @@ export function registerFrontendTool< } export function registerHumanInTheLoop< - Args extends Record = Record, + Args extends object = Record, >(humanInTheLoop: HumanInTheLoopConfig): void { const destroyRef = inject(DestroyRef); const copilotKit = inject(CopilotKit); diff --git a/packages/core/package.json b/packages/core/package.json index beb03dda..385d6d87 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@copilotkitnext/core", - "version": "0.0.16", + "version": "0.0.17-alpha.0", "description": "Core web utilities for CopilotKit2", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/packages/core/src/core/core.ts b/packages/core/src/core/core.ts index e02c465b..6e87c37e 100644 --- a/packages/core/src/core/core.ts +++ b/packages/core/src/core/core.ts @@ -356,7 +356,7 @@ export class CopilotKitCore { /** * Tool management (delegated to RunHandler) */ - addTool = Record>(tool: FrontendTool): void { + addTool>(tool: FrontendTool): void { this.runHandler.addTool(tool); } diff --git a/packages/core/src/core/run-handler.ts b/packages/core/src/core/run-handler.ts index 45949c2b..7861f55f 100644 --- a/packages/core/src/core/run-handler.ts +++ b/packages/core/src/core/run-handler.ts @@ -46,7 +46,7 @@ export class RunHandler { /** * Add a tool to the registry */ - addTool = Record>(tool: FrontendTool): void { + addTool>(tool: FrontendTool): void { // Check if a tool with the same name and agentId already exists const existingToolIndex = this._tools.findIndex((t) => t.name === tool.name && t.agentId === tool.agentId); diff --git a/packages/core/src/types.ts b/packages/core/src/types.ts index 79e65b20..a542d53b 100644 --- a/packages/core/src/types.ts +++ b/packages/core/src/types.ts @@ -10,7 +10,7 @@ export enum ToolCallStatus { Complete = "complete", } -export type FrontendTool = Record> = { +export type FrontendTool> = { name: string; description?: string; parameters?: z.ZodType; diff --git a/packages/react/package.json b/packages/react/package.json index cb35707e..8fb06834 100644 --- a/packages/react/package.json +++ b/packages/react/package.json @@ -1,6 +1,6 @@ { "name": "@copilotkitnext/react", - "version": "0.0.16", + "version": "0.0.17-alpha.0", "description": "React components for CopilotKit2", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/packages/react/src/__tests__/setup.ts b/packages/react/src/__tests__/setup.ts index bd80a7cc..78d7ba6b 100644 --- a/packages/react/src/__tests__/setup.ts +++ b/packages/react/src/__tests__/setup.ts @@ -56,6 +56,14 @@ HTMLCanvasElement.prototype.getContext = function(contextId: any) { return null; } as any; +// Polyfill scrollIntoView for jsdom (not implemented natively) +Object.defineProperty(Element.prototype, "scrollIntoView", { + // Use a stable no-op function to avoid act() noise + value: () => {}, + writable: true, + configurable: true, +}); + // Simplify Radix tooltip behavior to avoid act() noise in jsdom vi.mock("@radix-ui/react-tooltip", async () => { const forward = ( diff --git a/packages/react/src/hooks/use-frontend-tool.tsx b/packages/react/src/hooks/use-frontend-tool.tsx index 8ebefa04..61078529 100644 --- a/packages/react/src/hooks/use-frontend-tool.tsx +++ b/packages/react/src/hooks/use-frontend-tool.tsx @@ -4,7 +4,7 @@ import { ReactFrontendTool } from "../types/frontend-tool"; import { ReactToolCallRenderer } from "../types/react-tool-call-renderer"; export function useFrontendTool< - T extends Record = Record, + T extends object = Record, >(tool: ReactFrontendTool) { const { copilotkit } = useCopilotKit(); diff --git a/packages/react/src/hooks/use-human-in-the-loop.tsx b/packages/react/src/hooks/use-human-in-the-loop.tsx index d0fc9748..fe7b256d 100644 --- a/packages/react/src/hooks/use-human-in-the-loop.tsx +++ b/packages/react/src/hooks/use-human-in-the-loop.tsx @@ -6,7 +6,7 @@ import { useState, useCallback, useRef, useEffect } from "react"; import React from "react"; import { useCopilotKit } from "@/providers/CopilotKitProvider"; -export function useHumanInTheLoop = Record>( +export function useHumanInTheLoop>( tool: ReactHumanInTheLoop ) { const { copilotkit } = useCopilotKit(); diff --git a/packages/react/src/types/frontend-tool.ts b/packages/react/src/types/frontend-tool.ts index b1153d28..c44279a6 100644 --- a/packages/react/src/types/frontend-tool.ts +++ b/packages/react/src/types/frontend-tool.ts @@ -2,7 +2,7 @@ import { FrontendTool } from "@copilotkitnext/core"; import { ReactToolCallRenderer } from "./react-tool-call-renderer"; export type ReactFrontendTool< - T extends Record = Record, + T extends object = Record, > = FrontendTool & { render?: ReactToolCallRenderer["render"]; }; diff --git a/packages/react/src/types/human-in-the-loop.ts b/packages/react/src/types/human-in-the-loop.ts index a01c1980..9ba69352 100644 --- a/packages/react/src/types/human-in-the-loop.ts +++ b/packages/react/src/types/human-in-the-loop.ts @@ -2,7 +2,7 @@ import { FrontendTool, ToolCallStatus } from "@copilotkitnext/core"; import React from "react"; export type ReactHumanInTheLoop< - T extends Record = Record, + T extends object = Record, > = Omit, "handler"> & { render: React.ComponentType< | { diff --git a/packages/runtime/package.json b/packages/runtime/package.json index 5af753f2..0684fb29 100644 --- a/packages/runtime/package.json +++ b/packages/runtime/package.json @@ -1,6 +1,6 @@ { "name": "@copilotkitnext/runtime", - "version": "0.0.16", + "version": "0.0.17-alpha.0", "description": "Server-side runtime package for CopilotKit2", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/packages/shared/package.json b/packages/shared/package.json index dce45c4e..6ab00771 100644 --- a/packages/shared/package.json +++ b/packages/shared/package.json @@ -1,6 +1,6 @@ { "name": "@copilotkitnext/shared", - "version": "0.0.16", + "version": "0.0.17-alpha.0", "description": "Shared utilities and types for CopilotKit2", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/packages/sqlite-runner/package.json b/packages/sqlite-runner/package.json index 9bf39927..cc9b7f02 100644 --- a/packages/sqlite-runner/package.json +++ b/packages/sqlite-runner/package.json @@ -1,6 +1,6 @@ { "name": "@copilotkitnext/sqlite-runner", - "version": "0.0.16", + "version": "0.0.17-alpha.0", "description": "SQLite-backed agent runner for CopilotKit2", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/packages/web-inspector/package.json b/packages/web-inspector/package.json index e7fbcff6..3544a2cb 100644 --- a/packages/web-inspector/package.json +++ b/packages/web-inspector/package.json @@ -1,6 +1,6 @@ { "name": "@copilotkitnext/web-inspector", - "version": "0.0.16", + "version": "0.0.17-alpha.0", "description": "Lit-based web component for the CopilotKit web inspector", "main": "dist/index.js", "types": "dist/index.d.ts",