Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion apps/docs/reference/frontend-tool.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ Frontend tools are framework-agnostic and work consistently across all framework
## Type Definition

```typescript
type FrontendTool<T extends Record<string, unknown> = Record<string, unknown>> = {
type FrontendTool<T extends object = Record<string, unknown>> = {
name: string;
description?: string;
parameters?: z.ZodType<T>;
Expand Down
4 changes: 2 additions & 2 deletions docs/ANGULAR_DESIGN.md
Original file line number Diff line number Diff line change
Expand Up @@ -325,7 +325,7 @@ export type ClientToolCall<Args extends object = Record<string, unknown>> =
};

interface ClientToolRenderer<
Args extends Record<string, unknown> = Record<string, unknown>,
Args extends object = Record<string, unknown>,
> {
toolCall: Signal<ClientToolCall<Args>>;
}
Expand All @@ -344,7 +344,7 @@ type ClientTool<Args extends Record<string, unknown>> = FrontendTool<Args> & {
};

interface ToolCallRendererConfig<
Args extends Record<string, unknown> = Record<string, unknown>,
Args extends object = Record<string, unknown>,
> {
name: string;
args: z.ZodType<Args>;
Expand Down
2 changes: 1 addition & 1 deletion packages/agent/package.json
Original file line number Diff line number Diff line change
@@ -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",
Expand Down
2 changes: 1 addition & 1 deletion packages/angular/package.json
Original file line number Diff line number Diff line change
@@ -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",
Expand Down
36 changes: 21 additions & 15 deletions packages/angular/src/lib/copilotkit.ts
Original file line number Diff line number Diff line change
Expand Up @@ -81,21 +81,21 @@ export class CopilotKit {
});
}

#bindClientTool(
clientToolWithInjector: FrontendToolConfig & {
#bindClientTool<Args extends object>(
clientToolWithInjector: FrontendToolConfig<Args> & {
injector: Injector;
}
): FrontendTool {
): FrontendTool<Args> {
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<Args extends object>(
clientToolWithInjector: FrontendToolConfig<Args> & {
injector: Injector;
}
): void {
Expand All @@ -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<Args extends object>(renderConfig: RenderToolCallConfig<Args>): void {
this.#toolCallRenderConfigs.update((current) => [
...current,
// Erase generic parameter for storage without using `any`.
renderConfig as RenderToolCallConfig,
]);
}

#bindHumanInTheLoopTool(
humanInTheLoopTool: HumanInTheLoopConfig
): FrontendTool {
#bindHumanInTheLoopTool<Args extends object>(
humanInTheLoopTool: HumanInTheLoopConfig<Args>
): FrontendTool<Args> {
return {
...humanInTheLoopTool,
handler: (args, toolCall) => {
Expand All @@ -124,10 +129,11 @@ export class CopilotKit {
};
}

addHumanInTheLoop(humanInTheLoopTool: HumanInTheLoopConfig): void {
addHumanInTheLoop<Args extends object>(humanInTheLoopTool: HumanInTheLoopConfig<Args>): void {
this.#humanInTheLoopToolRenderConfigs.update((current) => [
...current,
humanInTheLoopTool,
// Erase generic parameter for storage without using `any`.
humanInTheLoopTool as HumanInTheLoopConfig,
]);

const tool = this.#bindHumanInTheLoopTool(humanInTheLoopTool);
Expand Down Expand Up @@ -194,4 +200,4 @@ export class CopilotKit {
this.core.setAgents__unsafe_dev_only(options.agents);
}
}
}
}
22 changes: 11 additions & 11 deletions packages/angular/src/lib/tools.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import { z } from "zod";
import { CopilotKit } from "./copilotkit";

export type AngularToolCall<
Args extends Record<string, unknown> = Record<string, unknown>,
Args extends object = Record<string, unknown>,
> =
| {
args: Partial<Args>;
Expand All @@ -23,7 +23,7 @@ export type AngularToolCall<
};

export type HumanInTheLoopToolCall<
Args extends Record<string, unknown> = Record<string, unknown>,
Args extends object = Record<string, unknown>,
> =
| {
args: Partial<Args>;
Expand All @@ -43,25 +43,25 @@ export type HumanInTheLoopToolCall<
};

export interface ToolRenderer<
Args extends Record<string, unknown> = Record<string, unknown>,
Args extends object = Record<string, unknown>,
> {
toolCall: Signal<AngularToolCall<Args>>;
}

export interface HumanInTheLoopToolRenderer<
Args extends Record<string, unknown> = Record<string, unknown>,
Args extends object = Record<string, unknown>,
> {
toolCall: Signal<HumanInTheLoopToolCall<Args>>;
}

export type ClientTool<
Args extends Record<string, unknown> = Record<string, unknown>,
Args extends object = Record<string, unknown>,
> = Omit<FrontendTool<Args>, "handler"> & {
renderer?: Type<ToolRenderer<Args>>;
};

export interface RenderToolCallConfig<
Args extends Record<string, unknown> = Record<string, unknown>,
Args extends object = Record<string, unknown>,
> {
name: string;
args: z.ZodType<Args>;
Expand All @@ -70,7 +70,7 @@ export interface RenderToolCallConfig<
}

export interface FrontendToolConfig<
Args extends Record<string, unknown> = Record<string, unknown>,
Args extends object = Record<string, unknown>,
> {
name: string;
description: string;
Expand All @@ -81,7 +81,7 @@ export interface FrontendToolConfig<
}

export interface HumanInTheLoopConfig<
Args extends Record<string, unknown> = Record<string, unknown>,
Args extends object = Record<string, unknown>,
> {
name: string;
args: z.ZodType<Args>;
Expand All @@ -91,7 +91,7 @@ export interface HumanInTheLoopConfig<
}

export function registerRenderToolCall<
Args extends Record<string, unknown> = Record<string, unknown>,
Args extends object = Record<string, unknown>,
>(renderToolCall: RenderToolCallConfig<Args>): void {
const copilotKit = inject(CopilotKit);
const destroyRef = inject(DestroyRef);
Expand All @@ -104,7 +104,7 @@ export function registerRenderToolCall<
}

export function registerFrontendTool<
Args extends Record<string, unknown> = Record<string, unknown>,
Args extends object = Record<string, unknown>,
>(frontendTool: FrontendToolConfig<Args>): void {
const injector = inject(Injector);
const destroyRef = inject(DestroyRef);
Expand All @@ -121,7 +121,7 @@ export function registerFrontendTool<
}

export function registerHumanInTheLoop<
Args extends Record<string, unknown> = Record<string, unknown>,
Args extends object = Record<string, unknown>,
>(humanInTheLoop: HumanInTheLoopConfig<Args>): void {
const destroyRef = inject(DestroyRef);
const copilotKit = inject(CopilotKit);
Expand Down
2 changes: 1 addition & 1 deletion packages/core/package.json
Original file line number Diff line number Diff line change
@@ -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",
Expand Down
2 changes: 1 addition & 1 deletion packages/core/src/core/core.ts
Original file line number Diff line number Diff line change
Expand Up @@ -356,7 +356,7 @@ export class CopilotKitCore {
/**
* Tool management (delegated to RunHandler)
*/
addTool<T extends Record<string, unknown> = Record<string, unknown>>(tool: FrontendTool<T>): void {
addTool<T extends object = Record<string, unknown>>(tool: FrontendTool<T>): void {
this.runHandler.addTool(tool);
}

Expand Down
2 changes: 1 addition & 1 deletion packages/core/src/core/run-handler.ts
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ export class RunHandler {
/**
* Add a tool to the registry
*/
addTool<T extends Record<string, unknown> = Record<string, unknown>>(tool: FrontendTool<T>): void {
addTool<T extends object = Record<string, unknown>>(tool: FrontendTool<T>): 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);

Expand Down
2 changes: 1 addition & 1 deletion packages/core/src/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ export enum ToolCallStatus {
Complete = "complete",
}

export type FrontendTool<T extends Record<string, unknown> = Record<string, unknown>> = {
export type FrontendTool<T extends object = Record<string, unknown>> = {
name: string;
description?: string;
parameters?: z.ZodType<T>;
Expand Down
2 changes: 1 addition & 1 deletion packages/react/package.json
Original file line number Diff line number Diff line change
@@ -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",
Expand Down
8 changes: 8 additions & 0 deletions packages/react/src/__tests__/setup.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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 = (
Expand Down
2 changes: 1 addition & 1 deletion packages/react/src/hooks/use-frontend-tool.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import { ReactFrontendTool } from "../types/frontend-tool";
import { ReactToolCallRenderer } from "../types/react-tool-call-renderer";

export function useFrontendTool<
T extends Record<string, unknown> = Record<string, unknown>,
T extends object = Record<string, unknown>,
>(tool: ReactFrontendTool<T>) {
const { copilotkit } = useCopilotKit();

Expand Down
2 changes: 1 addition & 1 deletion packages/react/src/hooks/use-human-in-the-loop.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import { useState, useCallback, useRef, useEffect } from "react";
import React from "react";
import { useCopilotKit } from "@/providers/CopilotKitProvider";

export function useHumanInTheLoop<T extends Record<string, unknown> = Record<string, unknown>>(
export function useHumanInTheLoop<T extends object = Record<string, unknown>>(
tool: ReactHumanInTheLoop<T>
) {
const { copilotkit } = useCopilotKit();
Expand Down
2 changes: 1 addition & 1 deletion packages/react/src/types/frontend-tool.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import { FrontendTool } from "@copilotkitnext/core";
import { ReactToolCallRenderer } from "./react-tool-call-renderer";

export type ReactFrontendTool<
T extends Record<string, unknown> = Record<string, unknown>,
T extends object = Record<string, unknown>,
> = FrontendTool<T> & {
render?: ReactToolCallRenderer<T>["render"];
};
2 changes: 1 addition & 1 deletion packages/react/src/types/human-in-the-loop.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import { FrontendTool, ToolCallStatus } from "@copilotkitnext/core";
import React from "react";

export type ReactHumanInTheLoop<
T extends Record<string, unknown> = Record<string, unknown>,
T extends object = Record<string, unknown>,
> = Omit<FrontendTool<T>, "handler"> & {
render: React.ComponentType<
| {
Expand Down
2 changes: 1 addition & 1 deletion packages/runtime/package.json
Original file line number Diff line number Diff line change
@@ -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",
Expand Down
2 changes: 1 addition & 1 deletion packages/shared/package.json
Original file line number Diff line number Diff line change
@@ -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",
Expand Down
2 changes: 1 addition & 1 deletion packages/sqlite-runner/package.json
Original file line number Diff line number Diff line change
@@ -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",
Expand Down
2 changes: 1 addition & 1 deletion packages/web-inspector/package.json
Original file line number Diff line number Diff line change
@@ -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",
Expand Down
Loading