@rudderjs/ai 1.16.0 → 1.17.0

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.
package/dist/index.d.ts CHANGED
@@ -19,6 +19,8 @@ export { BedrockProvider, type BedrockConfig } from './providers/bedrock.js';
19
19
  export { toolDefinition, dynamicTool, ToolBuilder, toolToSchema, pauseForClientTools, isPauseForClientToolsChunk, pauseForApproval, isPauseForApprovalChunk, } from './tool.js';
20
20
  export type { PauseForClientToolsChunk, PauseForApprovalChunk } from './tool.js';
21
21
  export { zodToJsonSchema } from './zod-to-json-schema.js';
22
+ export { scopedTool, capability, flattenCapabilities, ScopedToolError } from './scoped-tool.js';
23
+ export type { ScopedToolOptions, ScopedCapability, FlatPlan } from './scoped-tool.js';
22
24
  export { handoff, isHandoffTool } from './handoff.js';
23
25
  export type { HandoffTool, HandoffOptions, HandoffSpec } from './handoff.js';
24
26
  export { Agent, ConversableAgent, agent, stepCountIs, hasToolCall, setConversationStore, setUserMemory, resolveUserMemory } from './agent.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -22,6 +22,9 @@ export { BedrockProvider } from './providers/bedrock.js';
22
22
  // Tools
23
23
  export { toolDefinition, dynamicTool, ToolBuilder, toolToSchema, pauseForClientTools, isPauseForClientToolsChunk, pauseForApproval, isPauseForApprovalChunk, } from './tool.js';
24
24
  export { zodToJsonSchema } from './zod-to-json-schema.js';
25
+ // Scoped / multi-capability tools — collapse a discriminated union of
26
+ // capability branches into one flat function-call schema.
27
+ export { scopedTool, capability, flattenCapabilities, ScopedToolError } from './scoped-tool.js';
25
28
  // Handoffs
26
29
  export { handoff, isHandoffTool } from './handoff.js';
27
30
  // Agent
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,111 @@
1
+ /**
2
+ * Framework-free core of the `useAgentRun` React hook.
3
+ *
4
+ * The React hook (`useAgentRun.ts`) is a thin wrapper around the pieces here —
5
+ * same posture as `@rudderjs/sync`'s `CollabRoomManager` vs `useCollabRoom`:
6
+ * keeping the state machine and the stream-driving loop out of React lets us
7
+ * exhaustively unit-test the client-tool round-trip and the approval resume
8
+ * without a React testing harness (the framework intentionally ships none).
9
+ *
10
+ * Builds on the named-event agent-SSE protocol in `../agent-sse.ts`
11
+ * (`readAgentStream` + the `AgentStreamTurn` it accumulates). No `react` and no
12
+ * `node:` imports — safe in any `fetch`-capable runtime.
13
+ */
14
+ import type { AgentStreamCallbacks, AgentStreamTurn } from '../agent-sse.js';
15
+ import type { ToolCall } from '../types.js';
16
+ /** One renderable entry in a run's transcript, in arrival order. */
17
+ export type AgentRunOutput = {
18
+ type: 'text';
19
+ text: string;
20
+ } | {
21
+ type: 'tool_call';
22
+ id?: string;
23
+ tool: string;
24
+ input?: Record<string, unknown>;
25
+ } | {
26
+ type: 'tool_update';
27
+ id?: string;
28
+ tool?: string;
29
+ update: unknown;
30
+ } | {
31
+ type: 'tool_result';
32
+ id?: string;
33
+ tool?: string;
34
+ content: string;
35
+ } | {
36
+ type: 'approval_request';
37
+ toolCall: ToolCall;
38
+ isClientTool: boolean;
39
+ } | {
40
+ type: 'handoff';
41
+ from: string;
42
+ to: string;
43
+ message?: string;
44
+ } | {
45
+ type: 'error';
46
+ message: string;
47
+ };
48
+ /**
49
+ * Append one decoded SSE event to the output transcript, returning a NEW array
50
+ * (so a React consumer can use it as immutable state). Consecutive `text`
51
+ * deltas coalesce into the trailing text entry so streamed text renders as one
52
+ * growing block. `complete` and `pending_client_tools` produce no transcript
53
+ * entry — they drive run status / pending-action state instead.
54
+ */
55
+ export declare function appendAgentOutput(outputs: AgentRunOutput[], event: string, data: unknown): AgentRunOutput[];
56
+ /** A client-executed tool result, keyed to its originating tool call. */
57
+ export interface AgentToolResult {
58
+ toolCallId: string;
59
+ result: unknown;
60
+ }
61
+ /**
62
+ * Run each pending client-tool call through the resolver, in order, collecting
63
+ * results keyed by `toolCallId`. A resolver that throws yields an
64
+ * `{ error }` result rather than aborting the batch — the model sees the
65
+ * failure as that tool's result and can recover, matching the server-side
66
+ * tool-error posture.
67
+ */
68
+ export declare function executeClientTools(calls: ToolCall[], resolver: (call: ToolCall) => unknown | Promise<unknown>): Promise<AgentToolResult[]>;
69
+ /**
70
+ * The intent the consumer's `request` function turns into an SSE `Response`.
71
+ * The hook owns the run/resume state machine; the app owns the endpoint and
72
+ * the request body shape (only the app's route knows how to reconstruct the
73
+ * server-side message history), so the driver hands it a typed intent and
74
+ * expects a streaming `Response` back.
75
+ */
76
+ export type AgentRunRequest<TInput = unknown> = {
77
+ type: 'run';
78
+ input: TInput;
79
+ } | {
80
+ type: 'resume';
81
+ /** The accumulated turn the resume continues from. */
82
+ turn: AgentStreamTurn;
83
+ /** Results from client-tool calls executed in the browser. */
84
+ clientToolResults: AgentToolResult[];
85
+ /** Tool-call ids the user approved. */
86
+ approved: string[];
87
+ /** Tool-call ids the user rejected. */
88
+ rejected: string[];
89
+ };
90
+ export interface AgentRunDriverOptions<TInput = unknown> {
91
+ /** Turn a run/resume intent into the streaming SSE `Response`. */
92
+ request: (req: AgentRunRequest<TInput>, signal: AbortSignal) => Promise<Response>;
93
+ /**
94
+ * Optional client-tool resolver. When provided, a run that pauses awaiting
95
+ * client tools auto-executes them and resumes — no manual `respond`. Omit it
96
+ * to surface the pending calls and resume by hand.
97
+ */
98
+ clientTools?: (call: ToolCall) => unknown | Promise<unknown>;
99
+ /** Forwarded to `readAgentStream` so the consumer sees events as they arrive. */
100
+ callbacks?: AgentStreamCallbacks;
101
+ signal: AbortSignal;
102
+ }
103
+ /**
104
+ * Drive one logical agent run to a settling point: stream the response,
105
+ * accumulate the turn, and — when a client-tool resolver is configured —
106
+ * auto-resume across client-tool pauses until the run completes or parks on an
107
+ * approval gate / manual client-tool round-trip. Returns the final
108
+ * {@link AgentStreamTurn}. Framework-free; the hook wires `callbacks` to state.
109
+ */
110
+ export declare function driveAgentRun<TInput = unknown>(initial: AgentRunRequest<TInput>, opts: AgentRunDriverOptions<TInput>): Promise<AgentStreamTurn>;
111
+ //# sourceMappingURL=agent-run.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-run.d.ts","sourceRoot":"","sources":["../../src/react/agent-run.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,107 @@
1
+ /**
2
+ * Framework-free core of the `useAgentRun` React hook.
3
+ *
4
+ * The React hook (`useAgentRun.ts`) is a thin wrapper around the pieces here —
5
+ * same posture as `@rudderjs/sync`'s `CollabRoomManager` vs `useCollabRoom`:
6
+ * keeping the state machine and the stream-driving loop out of React lets us
7
+ * exhaustively unit-test the client-tool round-trip and the approval resume
8
+ * without a React testing harness (the framework intentionally ships none).
9
+ *
10
+ * Builds on the named-event agent-SSE protocol in `../agent-sse.ts`
11
+ * (`readAgentStream` + the `AgentStreamTurn` it accumulates). No `react` and no
12
+ * `node:` imports — safe in any `fetch`-capable runtime.
13
+ */
14
+ import { readAgentStream } from '../agent-sse.js';
15
+ /**
16
+ * Append one decoded SSE event to the output transcript, returning a NEW array
17
+ * (so a React consumer can use it as immutable state). Consecutive `text`
18
+ * deltas coalesce into the trailing text entry so streamed text renders as one
19
+ * growing block. `complete` and `pending_client_tools` produce no transcript
20
+ * entry — they drive run status / pending-action state instead.
21
+ */
22
+ export function appendAgentOutput(outputs, event, data) {
23
+ switch (event) {
24
+ case 'text': {
25
+ const text = data.text ?? '';
26
+ if (!text)
27
+ return outputs;
28
+ const last = outputs[outputs.length - 1];
29
+ if (last && last.type === 'text') {
30
+ return [...outputs.slice(0, -1), { type: 'text', text: last.text + text }];
31
+ }
32
+ return [...outputs, { type: 'text', text }];
33
+ }
34
+ case 'tool_call': {
35
+ const d = data;
36
+ return [...outputs, { type: 'tool_call', ...(d.id ? { id: d.id } : {}), tool: d.tool, ...(d.input ? { input: d.input } : {}) }];
37
+ }
38
+ case 'tool_update': {
39
+ const d = data;
40
+ return [...outputs, { type: 'tool_update', ...(d.id ? { id: d.id } : {}), ...(d.tool ? { tool: d.tool } : {}), update: d.update }];
41
+ }
42
+ case 'tool_result': {
43
+ const d = data;
44
+ const id = d.toolCallId ?? d.id;
45
+ return [...outputs, { type: 'tool_result', ...(id ? { id } : {}), ...(d.tool ? { tool: d.tool } : {}), content: d.content }];
46
+ }
47
+ case 'tool_approval_required': {
48
+ const d = data;
49
+ return [...outputs, { type: 'approval_request', toolCall: d.toolCall, isClientTool: d.isClientTool }];
50
+ }
51
+ case 'handoff': {
52
+ const d = data;
53
+ return [...outputs, { type: 'handoff', from: d.from, to: d.to, ...(d.message ? { message: d.message } : {}) }];
54
+ }
55
+ case 'error': {
56
+ const d = data;
57
+ return [...outputs, { type: 'error', message: d.message ?? 'Unknown error' }];
58
+ }
59
+ default:
60
+ return outputs;
61
+ }
62
+ }
63
+ /**
64
+ * Run each pending client-tool call through the resolver, in order, collecting
65
+ * results keyed by `toolCallId`. A resolver that throws yields an
66
+ * `{ error }` result rather than aborting the batch — the model sees the
67
+ * failure as that tool's result and can recover, matching the server-side
68
+ * tool-error posture.
69
+ */
70
+ export async function executeClientTools(calls, resolver) {
71
+ const results = [];
72
+ for (const call of calls) {
73
+ try {
74
+ results.push({ toolCallId: call.id, result: await resolver(call) });
75
+ }
76
+ catch (err) {
77
+ results.push({ toolCallId: call.id, result: { error: err instanceof Error ? err.message : String(err) } });
78
+ }
79
+ }
80
+ return results;
81
+ }
82
+ /**
83
+ * Drive one logical agent run to a settling point: stream the response,
84
+ * accumulate the turn, and — when a client-tool resolver is configured —
85
+ * auto-resume across client-tool pauses until the run completes or parks on an
86
+ * approval gate / manual client-tool round-trip. Returns the final
87
+ * {@link AgentStreamTurn}. Framework-free; the hook wires `callbacks` to state.
88
+ */
89
+ export async function driveAgentRun(initial, opts) {
90
+ let req = initial;
91
+ for (;;) {
92
+ const resp = await opts.request(req, opts.signal);
93
+ if (!resp.ok) {
94
+ throw new Error(`Agent stream request failed with status ${resp.status}.`);
95
+ }
96
+ const turn = await readAgentStream(resp, opts.callbacks);
97
+ // Auto-resume only across client-tool pauses, and only with a resolver.
98
+ // Approval pauses always park for an explicit approve/reject decision.
99
+ if (turn.awaiting === 'client_tools' && opts.clientTools && turn.pendingClientTools.length > 0) {
100
+ const clientToolResults = await executeClientTools(turn.pendingClientTools, opts.clientTools);
101
+ req = { type: 'resume', turn, clientToolResults, approved: [], rejected: [] };
102
+ continue;
103
+ }
104
+ return turn;
105
+ }
106
+ }
107
+ //# sourceMappingURL=agent-run.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-run.js","sourceRoot":"","sources":["../../src/react/agent-run.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * React client runtime for `@rudderjs/ai`.
3
+ *
4
+ * The agent framework, providers, and the runtime-agnostic agent-SSE protocol
5
+ * (`readAgentStream` + the server framers) live in the main `@rudderjs/ai`
6
+ * entry. This subpath adds the React hook that drives a streamed agent run from
7
+ * a component — same split as `@rudderjs/sync/react` (the main entry stays
8
+ * React-free; React lives behind `/react`).
9
+ *
10
+ * Peer requirement: `react@>=19.2.0`.
11
+ */
12
+ export { useAgentRun } from './useAgentRun.js';
13
+ export type { AgentRunStatus, UseAgentRunOptions, UseAgentRunResult, } from './useAgentRun.js';
14
+ export { appendAgentOutput, executeClientTools, driveAgentRun, } from './agent-run.js';
15
+ export type { AgentRunOutput, AgentToolResult, AgentRunRequest, AgentRunDriverOptions, } from './agent-run.js';
16
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/react/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAC9C,YAAY,EACV,cAAc,EACd,kBAAkB,EAClB,iBAAiB,GAClB,MAAM,kBAAkB,CAAA;AAIzB,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,aAAa,GACd,MAAM,gBAAgB,CAAA;AACvB,YAAY,EACV,cAAc,EACd,eAAe,EACf,eAAe,EACf,qBAAqB,GACtB,MAAM,gBAAgB,CAAA"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * React client runtime for `@rudderjs/ai`.
3
+ *
4
+ * The agent framework, providers, and the runtime-agnostic agent-SSE protocol
5
+ * (`readAgentStream` + the server framers) live in the main `@rudderjs/ai`
6
+ * entry. This subpath adds the React hook that drives a streamed agent run from
7
+ * a component — same split as `@rudderjs/sync/react` (the main entry stays
8
+ * React-free; React lives behind `/react`).
9
+ *
10
+ * Peer requirement: `react@>=19.2.0`.
11
+ */
12
+ export { useAgentRun } from './useAgentRun.js';
13
+ // Framework-free core — exported so apps can drive a run outside React (or
14
+ // unit-test their own integration) and so the output/request types are nameable.
15
+ export { appendAgentOutput, executeClientTools, driveAgentRun, } from './agent-run.js';
16
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/react/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAO9C,2EAA2E;AAC3E,iFAAiF;AACjF,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,aAAa,GACd,MAAM,gBAAgB,CAAA"}
@@ -0,0 +1,64 @@
1
+ import type { AgentSseApprovalPayload, AgentSseCompletePayload } from '../agent-sse.js';
2
+ import type { ToolCall } from '../types.js';
3
+ import { type AgentRunOutput, type AgentRunRequest, type AgentToolResult } from './agent-run.js';
4
+ /**
5
+ * Run status. While the run is paused awaiting client tools (no resolver) or an
6
+ * approval decision, status stays `'running'` and `pendingClientTools` /
7
+ * `pendingApproval` are populated — the UI renders the prompt and calls
8
+ * `respond` / `approve` / `reject` to continue the same logical run.
9
+ */
10
+ export type AgentRunStatus = 'idle' | 'running' | 'complete' | 'error';
11
+ export interface UseAgentRunOptions<TInput = unknown> {
12
+ /**
13
+ * Turn a run/resume intent into the streaming SSE `Response`. The app owns
14
+ * the endpoint and request-body shape (only its route can reconstruct the
15
+ * server-side message history); typically `fetch(endpoint, { ..., signal })`.
16
+ */
17
+ request: (req: AgentRunRequest<TInput>, signal: AbortSignal) => Promise<Response>;
18
+ /**
19
+ * Optional client-tool resolver. When set, a run that pauses awaiting client
20
+ * tools auto-executes them and resumes; omit it to surface
21
+ * `pendingClientTools` and resume manually via `respond`.
22
+ */
23
+ clientTools?: (call: ToolCall) => unknown | Promise<unknown>;
24
+ onComplete?: (data: AgentSseCompletePayload) => void;
25
+ onError?: (message: string) => void;
26
+ }
27
+ export interface UseAgentRunResult<TInput = unknown> {
28
+ status: AgentRunStatus;
29
+ /** Renderable transcript, accumulated across the run and every resume. */
30
+ outputs: AgentRunOutput[];
31
+ /** Client-tool calls awaiting a browser round-trip (empty when auto-resolved). */
32
+ pendingClientTools: ToolCall[];
33
+ /** The approval gate the run parked on, or `null`. */
34
+ pendingApproval: AgentSseApprovalPayload | null;
35
+ error: string | null;
36
+ /** Start a fresh run, resetting the transcript. */
37
+ run: (input: TInput) => Promise<void>;
38
+ /** Resume a client-tool pause with results gathered by hand. */
39
+ respond: (results: AgentToolResult[]) => Promise<void>;
40
+ /** Approve the pending approval gate and resume. */
41
+ approve: (toolCallId: string) => Promise<void>;
42
+ /** Reject the pending approval gate and resume. */
43
+ reject: (toolCallId: string) => Promise<void>;
44
+ /** Abort any in-flight stream and return to `idle`. */
45
+ reset: () => void;
46
+ }
47
+ /**
48
+ * React client runtime for the named-event agent-SSE protocol. Drives
49
+ * `readAgentStream` (via the framework-free `driveAgentRun`), accumulates the
50
+ * transcript, tracks run status, and surfaces pending client-tool calls and
51
+ * approval requests with imperative `run` / `respond` / `approve` / `reject`.
52
+ *
53
+ * Lives behind the `@rudderjs/ai/react` subpath so the main entry stays
54
+ * runtime-agnostic (same split as `@rudderjs/sync/react`).
55
+ *
56
+ * @example
57
+ * const { status, outputs, run } = useAgentRun({
58
+ * request: (req, signal) =>
59
+ * fetch('/api/agent', { method: 'POST', body: JSON.stringify(req), signal }),
60
+ * })
61
+ * // <button onClick={() => run('Summarize the latest report')}>Ask</button>
62
+ */
63
+ export declare function useAgentRun<TInput = unknown>(options: UseAgentRunOptions<TInput>): UseAgentRunResult<TInput>;
64
+ //# sourceMappingURL=useAgentRun.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useAgentRun.d.ts","sourceRoot":"","sources":["../../src/react/useAgentRun.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,uBAAuB,EACvB,uBAAuB,EAGxB,MAAM,iBAAiB,CAAA;AACxB,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAC3C,OAAO,EAGL,KAAK,cAAc,EACnB,KAAK,eAAe,EACpB,KAAK,eAAe,EACrB,MAAM,gBAAgB,CAAA;AAEvB;;;;;GAKG;AACH,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,SAAS,GAAG,UAAU,GAAG,OAAO,CAAA;AAEtE,MAAM,WAAW,kBAAkB,CAAC,MAAM,GAAG,OAAO;IAClD;;;;OAIG;IACH,OAAO,EAAO,CAAC,GAAG,EAAE,eAAe,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAA;IACtF;;;;OAIG;IACH,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;IAC5D,UAAU,CAAC,EAAG,CAAC,IAAI,EAAE,uBAAuB,KAAK,IAAI,CAAA;IACrD,OAAO,CAAC,EAAM,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;CACxC;AAED,MAAM,WAAW,iBAAiB,CAAC,MAAM,GAAG,OAAO;IACjD,MAAM,EAAc,cAAc,CAAA;IAClC,0EAA0E;IAC1E,OAAO,EAAa,cAAc,EAAE,CAAA;IACpC,kFAAkF;IAClF,kBAAkB,EAAE,QAAQ,EAAE,CAAA;IAC9B,sDAAsD;IACtD,eAAe,EAAK,uBAAuB,GAAG,IAAI,CAAA;IAClD,KAAK,EAAe,MAAM,GAAG,IAAI,CAAA;IACjC,mDAAmD;IACnD,GAAG,EAAiB,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACpD,gEAAgE;IAChE,OAAO,EAAa,CAAC,OAAO,EAAE,eAAe,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACjE,oDAAoD;IACpD,OAAO,EAAa,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACzD,mDAAmD;IACnD,MAAM,EAAc,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACzD,uDAAuD;IACvD,KAAK,EAAe,MAAM,IAAI,CAAA;CAC/B;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,WAAW,CAAC,MAAM,GAAG,OAAO,EAC1C,OAAO,EAAE,kBAAkB,CAAC,MAAM,CAAC,GAClC,iBAAiB,CAAC,MAAM,CAAC,CA8G3B"}
@@ -0,0 +1,124 @@
1
+ import { useCallback, useRef, useState } from 'react';
2
+ import { appendAgentOutput, driveAgentRun, } from './agent-run.js';
3
+ /**
4
+ * React client runtime for the named-event agent-SSE protocol. Drives
5
+ * `readAgentStream` (via the framework-free `driveAgentRun`), accumulates the
6
+ * transcript, tracks run status, and surfaces pending client-tool calls and
7
+ * approval requests with imperative `run` / `respond` / `approve` / `reject`.
8
+ *
9
+ * Lives behind the `@rudderjs/ai/react` subpath so the main entry stays
10
+ * runtime-agnostic (same split as `@rudderjs/sync/react`).
11
+ *
12
+ * @example
13
+ * const { status, outputs, run } = useAgentRun({
14
+ * request: (req, signal) =>
15
+ * fetch('/api/agent', { method: 'POST', body: JSON.stringify(req), signal }),
16
+ * })
17
+ * // <button onClick={() => run('Summarize the latest report')}>Ask</button>
18
+ */
19
+ export function useAgentRun(options) {
20
+ const [status, setStatus] = useState('idle');
21
+ const [outputs, setOutputs] = useState([]);
22
+ const [pendingClientTools, setPendingClientTools] = useState([]);
23
+ const [pendingApproval, setPendingApproval] = useState(null);
24
+ const [error, setError] = useState(null);
25
+ // Latest values needed by the async driver / resume actions, kept in refs so
26
+ // the imperative callbacks don't go stale between renders.
27
+ const optionsRef = useRef(options);
28
+ optionsRef.current = options;
29
+ const turnRef = useRef(null);
30
+ const abortRef = useRef(null);
31
+ // Shared loop body for both the initial run and every resume.
32
+ const drive = useCallback(async (req) => {
33
+ const opts = optionsRef.current;
34
+ abortRef.current?.abort();
35
+ const controller = new AbortController();
36
+ abortRef.current = controller;
37
+ setStatus('running');
38
+ setPendingClientTools([]);
39
+ setPendingApproval(null);
40
+ setError(null);
41
+ let sawError = null;
42
+ const callbacks = {
43
+ onText: t => setOutputs(o => appendAgentOutput(o, 'text', { text: t })),
44
+ onToolCall: d => setOutputs(o => appendAgentOutput(o, 'tool_call', d)),
45
+ onToolUpdate: d => setOutputs(o => appendAgentOutput(o, 'tool_update', d)),
46
+ onToolResult: d => setOutputs(o => appendAgentOutput(o, 'tool_result', d)),
47
+ onToolApprovalRequired: d => setOutputs(o => appendAgentOutput(o, 'tool_approval_required', d)),
48
+ onHandoff: d => setOutputs(o => appendAgentOutput(o, 'handoff', d)),
49
+ onError: d => { sawError = d.message; setOutputs(o => appendAgentOutput(o, 'error', d)); },
50
+ onComplete: d => opts.onComplete?.(d),
51
+ };
52
+ try {
53
+ const turn = await driveAgentRun(req, {
54
+ request: opts.request,
55
+ callbacks,
56
+ signal: controller.signal,
57
+ ...(opts.clientTools ? { clientTools: opts.clientTools } : {}),
58
+ });
59
+ if (controller.signal.aborted)
60
+ return;
61
+ turnRef.current = turn;
62
+ if (sawError !== null) {
63
+ setStatus('error');
64
+ setError(sawError);
65
+ opts.onError?.(sawError);
66
+ return;
67
+ }
68
+ // Parked on an approval gate, or on client tools with no resolver:
69
+ // surface the prompt and keep the run logically open.
70
+ if (turn.awaiting === 'approval' && turn.pendingApproval) {
71
+ setPendingApproval(turn.pendingApproval);
72
+ return;
73
+ }
74
+ if (turn.awaiting === 'client_tools' && turn.pendingClientTools.length > 0) {
75
+ setPendingClientTools(turn.pendingClientTools);
76
+ return;
77
+ }
78
+ setStatus('complete');
79
+ }
80
+ catch (err) {
81
+ if (controller.signal.aborted)
82
+ return;
83
+ const message = err instanceof Error ? err.message : String(err);
84
+ setStatus('error');
85
+ setError(message);
86
+ optionsRef.current.onError?.(message);
87
+ }
88
+ }, []);
89
+ const run = useCallback(async (input) => {
90
+ turnRef.current = null;
91
+ setOutputs([]);
92
+ await drive({ type: 'run', input });
93
+ }, [drive]);
94
+ const respond = useCallback(async (results) => {
95
+ const turn = turnRef.current;
96
+ if (!turn)
97
+ return;
98
+ await drive({ type: 'resume', turn, clientToolResults: results, approved: [], rejected: [] });
99
+ }, [drive]);
100
+ const approve = useCallback(async (toolCallId) => {
101
+ const turn = turnRef.current;
102
+ if (!turn)
103
+ return;
104
+ await drive({ type: 'resume', turn, clientToolResults: [], approved: [toolCallId], rejected: [] });
105
+ }, [drive]);
106
+ const reject = useCallback(async (toolCallId) => {
107
+ const turn = turnRef.current;
108
+ if (!turn)
109
+ return;
110
+ await drive({ type: 'resume', turn, clientToolResults: [], approved: [], rejected: [toolCallId] });
111
+ }, [drive]);
112
+ const reset = useCallback(() => {
113
+ abortRef.current?.abort();
114
+ abortRef.current = null;
115
+ turnRef.current = null;
116
+ setStatus('idle');
117
+ setOutputs([]);
118
+ setPendingClientTools([]);
119
+ setPendingApproval(null);
120
+ setError(null);
121
+ }, []);
122
+ return { status, outputs, pendingClientTools, pendingApproval, error, run, respond, approve, reject, reset };
123
+ }
124
+ //# sourceMappingURL=useAgentRun.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useAgentRun.js","sourceRoot":"","sources":["../../src/react/useAgentRun.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,98 @@
1
+ import { z } from 'zod';
2
+ import { ServerToolBuilder } from './tool.js';
3
+ import type { ToolCallContext, ToolNeedsApproval } from './types.js';
4
+ /**
5
+ * One capability branch of a scoped tool: a named sub-tool with its own
6
+ * input shape + handler. Authored either inline in {@link scopedTool}'s
7
+ * `capabilities` map or via the {@link capability} helper (which preserves
8
+ * per-branch input inference for the handler signature).
9
+ */
10
+ export interface ScopedCapability<TInput extends z.ZodType = z.ZodType, TOutput = unknown, TUpdate = unknown> {
11
+ /** Optional per-capability description, surfaced in the discriminator enum note. */
12
+ description?: string;
13
+ /** This branch's input schema. Validated in code before the handler runs. */
14
+ input: TInput;
15
+ /**
16
+ * Branch handler. May be a plain async function (single return value) or
17
+ * an `async function*` (yields `tool-update` chunks, returns the result) —
18
+ * the same dual protocol `ToolBuilder.server` accepts.
19
+ */
20
+ handler: (input: z.infer<TInput>, ctx?: ToolCallContext) => TOutput | Promise<TOutput> | AsyncGenerator<TUpdate, TOutput, void>;
21
+ }
22
+ /**
23
+ * Identity helper that infers a capability's input type at the definition
24
+ * site, so its `handler` parameter is typed without an explicit annotation.
25
+ *
26
+ * @example
27
+ * const web = capability({
28
+ * input: z.object({ query: z.string() }),
29
+ * handler: async ({ query }) => search(query), // `query` is `string`
30
+ * })
31
+ */
32
+ export declare function capability<TInput extends z.ZodType, TOutput, TUpdate = unknown>(spec: ScopedCapability<TInput, TOutput, TUpdate>): ScopedCapability<TInput, TOutput, TUpdate>;
33
+ export interface ScopedToolOptions {
34
+ name: string;
35
+ description: string;
36
+ /** Discriminator field name added to the flat schema. Default `'sub_tool'`. */
37
+ discriminator?: string;
38
+ /** Named capability branches. Keys become the discriminator enum values. */
39
+ capabilities: Record<string, ScopedCapability>;
40
+ /**
41
+ * Runtime allowlist — restrict callable capabilities to a subset of
42
+ * `capabilities` keys (e.g. per-plan gating). Both the discriminator enum
43
+ * and the runtime dispatch honor it. Defaults to every capability key.
44
+ * Entries not present in `capabilities` throw at build time.
45
+ */
46
+ allow?: string[];
47
+ /** Forwarded to the generated tool definition. */
48
+ needsApproval?: ToolNeedsApproval | undefined;
49
+ }
50
+ /**
51
+ * The shared flattening plan, computed once so the JSON-Schema render and the
52
+ * runtime dispatch/validation cannot drift. Exported for adapters and tests.
53
+ */
54
+ export interface FlatPlan {
55
+ discriminator: string;
56
+ /** Allowed discriminator values, in declaration order. */
57
+ values: string[];
58
+ /** Merged JSON-Schema properties (discriminator included). */
59
+ properties: Record<string, unknown>;
60
+ /** Top-level required = discriminator + fields required by EVERY branch. */
61
+ required: string[];
62
+ /** Per-capability required field names, for in-code validation before dispatch. */
63
+ requiredByCapability: Record<string, string[]>;
64
+ /** For each non-discriminator field, which capabilities reference it. */
65
+ owners: Record<string, string[]>;
66
+ }
67
+ /** Error thrown by a scoped tool's dispatch before any handler runs. */
68
+ export declare class ScopedToolError extends Error {
69
+ readonly name = "ScopedToolError";
70
+ constructor(message: string);
71
+ }
72
+ /**
73
+ * Collapse N capability branches into one flat function-call plan with a
74
+ * discriminator enum. Function-calling APIs do not reliably honor a top-level
75
+ * `oneOf`, so a discriminated union must flatten to a single object schema:
76
+ * the union of all branches' fields, a top-level `required` containing only
77
+ * fields required by EVERY branch, and per-branch requireds enforced in code.
78
+ */
79
+ export declare function flattenCapabilities(capabilities: Record<string, ScopedCapability>, discriminator?: string, allow?: string[]): FlatPlan;
80
+ /**
81
+ * Build a single function-call tool from a discriminated union of capability
82
+ * branches. The branches collapse into one flat schema with a discriminator
83
+ * enum (see {@link flattenCapabilities}); at call time the dispatch validates
84
+ * the discriminator against the allowlist, validates the chosen branch's input
85
+ * (enforcing its required fields), and runs that branch's handler.
86
+ *
87
+ * @example
88
+ * const search = scopedTool({
89
+ * name: 'search',
90
+ * description: 'Run a search across one of several engines.',
91
+ * capabilities: {
92
+ * web: capability({ input: z.object({ query: z.string() }), handler: webSearch }),
93
+ * images: capability({ input: z.object({ query: z.string(), safe: z.boolean() }), handler: imageSearch }),
94
+ * },
95
+ * })
96
+ */
97
+ export declare function scopedTool(options: ScopedToolOptions): ServerToolBuilder<Record<string, unknown>, unknown>;
98
+ //# sourceMappingURL=scoped-tool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scoped-tool.d.ts","sourceRoot":"","sources":["../src/scoped-tool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAA;AAG7C,OAAO,KAAK,EAAE,eAAe,EAAyB,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAE3F;;;;;GAKG;AACH,MAAM,WAAW,gBAAgB,CAC/B,MAAM,SAAS,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO,EACpC,OAAO,GAAG,OAAO,EACjB,OAAO,GAAG,OAAO;IAEjB,oFAAoF;IACpF,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,6EAA6E;IAC7E,KAAK,EAAE,MAAM,CAAA;IACb;;;;OAIG;IACH,OAAO,EAAE,CACP,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,EACtB,GAAG,CAAC,EAAE,eAAe,KAClB,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,cAAc,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,CAAA;CACzE;AAED;;;;;;;;;GASG;AACH,wBAAgB,UAAU,CAAC,MAAM,SAAS,CAAC,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,EAC7E,IAAI,EAAE,gBAAgB,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,GAC/C,gBAAgB,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,CAE5C;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;IACnB,+EAA+E;IAC/E,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,4EAA4E;IAC5E,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAA;IAC9C;;;;;OAKG;IACH,KAAK,CAAC,EAAE,MAAM,EAAE,CAAA;IAChB,kDAAkD;IAClD,aAAa,CAAC,EAAE,iBAAiB,GAAG,SAAS,CAAA;CAC9C;AAED;;;GAGG;AACH,MAAM,WAAW,QAAQ;IACvB,aAAa,EAAE,MAAM,CAAA;IACrB,0DAA0D;IAC1D,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,8DAA8D;IAC9D,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACnC,4EAA4E;IAC5E,QAAQ,EAAE,MAAM,EAAE,CAAA;IAClB,mFAAmF;IACnF,oBAAoB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAA;IAC9C,yEAAyE;IACzE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAA;CACjC;AAED,wEAAwE;AACxE,qBAAa,eAAgB,SAAQ,KAAK;IACxC,SAAkB,IAAI,qBAAoB;gBAC9B,OAAO,EAAE,MAAM;CAG5B;AAYD;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CACjC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,EAC9C,aAAa,SAAa,EAC1B,KAAK,CAAC,EAAE,MAAM,EAAE,GACf,QAAQ,CA8EV;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,iBAAiB,GAAG,iBAAiB,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,CAoD1G"}
@@ -0,0 +1,174 @@
1
+ import { z } from 'zod';
2
+ import { ServerToolBuilder } from './tool.js';
3
+ import { isAsyncGenerator } from './tool-helpers.js';
4
+ import { zodToJsonSchema } from './zod-to-json-schema.js';
5
+ /**
6
+ * Identity helper that infers a capability's input type at the definition
7
+ * site, so its `handler` parameter is typed without an explicit annotation.
8
+ *
9
+ * @example
10
+ * const web = capability({
11
+ * input: z.object({ query: z.string() }),
12
+ * handler: async ({ query }) => search(query), // `query` is `string`
13
+ * })
14
+ */
15
+ export function capability(spec) {
16
+ return spec;
17
+ }
18
+ /** Error thrown by a scoped tool's dispatch before any handler runs. */
19
+ export class ScopedToolError extends Error {
20
+ name = 'ScopedToolError';
21
+ constructor(message) {
22
+ super(message);
23
+ }
24
+ }
25
+ function jsonSchemaFor(schema) {
26
+ const json = zodToJsonSchema(schema, 'input');
27
+ const properties = (json.properties && typeof json.properties === 'object') ? json.properties : {};
28
+ const required = Array.isArray(json.required) ? json.required.filter((r) => typeof r === 'string') : [];
29
+ return { properties, required };
30
+ }
31
+ /**
32
+ * Collapse N capability branches into one flat function-call plan with a
33
+ * discriminator enum. Function-calling APIs do not reliably honor a top-level
34
+ * `oneOf`, so a discriminated union must flatten to a single object schema:
35
+ * the union of all branches' fields, a top-level `required` containing only
36
+ * fields required by EVERY branch, and per-branch requireds enforced in code.
37
+ */
38
+ export function flattenCapabilities(capabilities, discriminator = 'sub_tool', allow) {
39
+ const keys = Object.keys(capabilities);
40
+ if (keys.length === 0) {
41
+ throw new ScopedToolError('A scoped tool needs at least one capability.');
42
+ }
43
+ const values = allow ?? keys;
44
+ for (const v of values) {
45
+ if (!(v in capabilities)) {
46
+ throw new ScopedToolError(`allow lists "${v}", which is not a declared capability.`);
47
+ }
48
+ }
49
+ if (values.length === 0) {
50
+ throw new ScopedToolError('A scoped tool needs at least one allowed capability.');
51
+ }
52
+ const properties = {};
53
+ const owners = {};
54
+ const requiredByCapability = {};
55
+ // A field is top-level required iff every allowed branch requires it. Seed
56
+ // with the first branch's requireds, then intersect down across the rest.
57
+ let requiredByAll = null;
58
+ for (const key of values) {
59
+ if (key === discriminator) {
60
+ throw new ScopedToolError(`Capability "${key}" collides with the discriminator field name "${discriminator}".`);
61
+ }
62
+ const { properties: props, required } = jsonSchemaFor(capabilities[key].input);
63
+ requiredByCapability[key] = required;
64
+ for (const [field, schema] of Object.entries(props)) {
65
+ if (field === discriminator) {
66
+ throw new ScopedToolError(`Capability "${key}" declares a field named "${discriminator}", which collides with the discriminator.`);
67
+ }
68
+ // First branch to declare a field owns its schema; later branches must
69
+ // share the field name (the model fills one flat object), so we keep the
70
+ // first shape and just record co-ownership for the field's note.
71
+ if (!(field in properties))
72
+ properties[field] = schema;
73
+ (owners[field] ??= []).push(key);
74
+ }
75
+ requiredByAll = requiredByAll === null
76
+ ? [...required]
77
+ : requiredByAll.filter(f => required.includes(f));
78
+ }
79
+ // Annotate each non-universal field with the capabilities that use it, so
80
+ // the model knows a field only applies to certain discriminator values.
81
+ for (const [field, ownerKeys] of Object.entries(owners)) {
82
+ if (ownerKeys.length === values.length)
83
+ continue; // universal — no note
84
+ const note = `Only for ${discriminator}: ${ownerKeys.join(', ')}.`;
85
+ const schema = properties[field];
86
+ if (schema && typeof schema === 'object') {
87
+ const s = schema;
88
+ s.description = typeof s.description === 'string' && s.description.length > 0
89
+ ? `${s.description} ${note}`
90
+ : note;
91
+ }
92
+ }
93
+ const descParts = values.map(k => {
94
+ const d = capabilities[k].description;
95
+ return d ? `"${k}" (${d})` : `"${k}"`;
96
+ });
97
+ properties[discriminator] = {
98
+ type: 'string',
99
+ enum: values,
100
+ description: `Which capability to invoke. One of: ${descParts.join(', ')}.`,
101
+ };
102
+ return {
103
+ discriminator,
104
+ values,
105
+ properties,
106
+ required: [discriminator, ...(requiredByAll ?? [])],
107
+ requiredByCapability,
108
+ owners,
109
+ };
110
+ }
111
+ /**
112
+ * Build a single function-call tool from a discriminated union of capability
113
+ * branches. The branches collapse into one flat schema with a discriminator
114
+ * enum (see {@link flattenCapabilities}); at call time the dispatch validates
115
+ * the discriminator against the allowlist, validates the chosen branch's input
116
+ * (enforcing its required fields), and runs that branch's handler.
117
+ *
118
+ * @example
119
+ * const search = scopedTool({
120
+ * name: 'search',
121
+ * description: 'Run a search across one of several engines.',
122
+ * capabilities: {
123
+ * web: capability({ input: z.object({ query: z.string() }), handler: webSearch }),
124
+ * images: capability({ input: z.object({ query: z.string(), safe: z.boolean() }), handler: imageSearch }),
125
+ * },
126
+ * })
127
+ */
128
+ export function scopedTool(options) {
129
+ const discriminator = options.discriminator ?? 'sub_tool';
130
+ const plan = flattenCapabilities(options.capabilities, discriminator, options.allow);
131
+ const allowed = new Set(plan.values);
132
+ const jsonSchema = {
133
+ type: 'object',
134
+ properties: plan.properties,
135
+ required: plan.required,
136
+ };
137
+ const definition = {
138
+ name: options.name,
139
+ description: options.description,
140
+ // Placeholder — the wire schema is `jsonSchema`; the loop's arg validation
141
+ // passes the raw object through and our dispatch does per-branch checks.
142
+ inputSchema: z.unknown(),
143
+ jsonSchema,
144
+ ...(options.needsApproval !== undefined ? { needsApproval: options.needsApproval } : {}),
145
+ };
146
+ async function* dispatch(input, ctx) {
147
+ const raw = (input && typeof input === 'object') ? input : {};
148
+ const which = raw[discriminator];
149
+ if (typeof which !== 'string') {
150
+ throw new ScopedToolError(`Missing or non-string "${discriminator}". Expected one of: ${plan.values.join(', ')}.`);
151
+ }
152
+ if (!allowed.has(which)) {
153
+ throw new ScopedToolError(`Unknown ${discriminator} "${which}". Expected one of: ${plan.values.join(', ')}.`);
154
+ }
155
+ const branch = options.capabilities[which];
156
+ // Strip the discriminator before validating against the branch's schema —
157
+ // the branch never declares it, and a strict schema would reject it.
158
+ const { [discriminator]: _omit, ...branchInput } = raw;
159
+ const parsed = branch.input.safeParse(branchInput);
160
+ if (!parsed.success) {
161
+ const issues = parsed.error.issues
162
+ .map(i => `${i.path.map(String).join('.') || '(root)'}: ${i.message}`)
163
+ .join('; ');
164
+ throw new ScopedToolError(`Invalid arguments for ${discriminator} "${which}": ${issues}`);
165
+ }
166
+ const result = branch.handler(parsed.data, ctx);
167
+ if (isAsyncGenerator(result)) {
168
+ return yield* result;
169
+ }
170
+ return await result;
171
+ }
172
+ return new ServerToolBuilder(definition, dispatch);
173
+ }
174
+ //# sourceMappingURL=scoped-tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scoped-tool.js","sourceRoot":"","sources":["../src/scoped-tool.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rudderjs/ai",
3
- "version": "1.16.0",
3
+ "version": "1.17.0",
4
4
  "description": "AI engine — providers, agents, tools, streaming, middleware",
5
5
  "rudderjs": {
6
6
  "provider": "AiProvider",
@@ -87,6 +87,10 @@
87
87
  "./computer-use": {
88
88
  "import": "./dist/computer-use/index.js",
89
89
  "types": "./dist/computer-use/index.d.ts"
90
+ },
91
+ "./react": {
92
+ "import": "./dist/react/index.js",
93
+ "types": "./dist/react/index.d.ts"
90
94
  }
91
95
  },
92
96
  "dependencies": {
@@ -96,8 +100,9 @@
96
100
  },
97
101
  "peerDependencies": {
98
102
  "@modelcontextprotocol/sdk": "^1.29.0",
99
- "@rudderjs/core": "^1.13.1",
100
- "@rudderjs/orm": "^1.21.2"
103
+ "react": ">=19.2.0",
104
+ "@rudderjs/orm": "^1.21.2",
105
+ "@rudderjs/core": "^1.13.1"
101
106
  },
102
107
  "peerDependenciesMeta": {
103
108
  "@rudderjs/core": {
@@ -108,6 +113,9 @@
108
113
  },
109
114
  "@modelcontextprotocol/sdk": {
110
115
  "optional": true
116
+ },
117
+ "react": {
118
+ "optional": true
111
119
  }
112
120
  },
113
121
  "optionalDependencies": {
@@ -120,6 +128,8 @@
120
128
  "devDependencies": {
121
129
  "@modelcontextprotocol/sdk": "^1.29.0",
122
130
  "@types/node": "^20.0.0",
131
+ "@types/react": "^19.2.0",
132
+ "react": "^19.2.0",
123
133
  "typescript": "^5.4.0",
124
134
  "@rudderjs/console": "^1.4.2",
125
135
  "@rudderjs/core": "^1.13.1",