agent-scene-toolkit 0.1.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.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/profile.ts","../src/toolkit.ts","../src/scene.ts","../src/prompt.ts","../src/graph/single.ts","../src/graph/supervisor.ts","../src/sse.ts","../src/middleware.ts","../src/agent.ts"],"names":["ChatOpenAI","createAgent","createMiddleware","HumanMessage","createReactAgent","createSupervisor","isAIMessageChunk","ToolMessage","MemorySaver"],"mappings":"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","file":"index.cjs","sourcesContent":["import type { AgentProfile } from './types'\n\n/**\n * 定义一个 Agent 角色身份。\n *\n * 校验必填字段后返回不可变对象。\n *\n * @param input - 角色配置\n * @returns 冻结的 AgentProfile 对象\n *\n * @example\n * ```ts\n * const director = defineProfile({\n * name: '导演',\n * systemPrompt: '你是一位视频导演...',\n * model: 'gpt-4o',\n * })\n * ```\n */\nexport function defineProfile(input: AgentProfile): Readonly<AgentProfile> {\n if (!input.name) throw new Error('Profile name is required')\n if (!input.systemPrompt) throw new Error('Profile systemPrompt is required')\n if (!input.model) throw new Error('Profile model is required')\n return Object.freeze({ ...input })\n}\n\n","import type { ToolKit } from './types'\n\n/**\n * 定义一个静态能力包。\n *\n * 校验必填字段后返回不可变对象。\n *\n * @param input - 能力包配置\n * @returns 冻结的 ToolKit 对象\n *\n * @example\n * ```ts\n * const canvasToolKit = defineToolKit({\n * name: 'canvas',\n * tools: [bindElementTool, bindTrackTool],\n * prompt: '画面调整时优先使用 canvas 工具...',\n * })\n * ```\n */\nexport function defineToolKit(input: ToolKit): Readonly<ToolKit> {\n if (!input.name) throw new Error('ToolKit name is required')\n if (!input.tools?.length) throw new Error('ToolKit tools must not be empty')\n if (!input.prompt) throw new Error('ToolKit prompt is required')\n return Object.freeze({ ...input })\n}\n\n","import type { Scene } from './types'\n\n/**\n * 定义一个运行时场景。\n *\n * 校验必填字段后返回不可变对象。\n *\n * @param input - 场景配置\n * @returns 冻结的 Scene 对象\n *\n * @example\n * ```ts\n * const timelineScene = defineScene({\n * name: 'timeline-editing',\n * toolkits: ['canvas', 'ai'],\n * prompt: (ctx) => `视频时长: ${ctx.duration}秒`,\n * onToolEnd: (toolName, result) => {\n * if (toolName === 'bindTrack') refreshTimeline()\n * },\n * })\n * ```\n */\nexport function defineScene(input: Scene): Readonly<Scene> {\n if (!input.name) throw new Error('Scene name is required')\n if (!input.toolkits?.length) throw new Error('Scene toolkits must not be empty')\n if (typeof input.prompt !== 'function') throw new Error('Scene prompt must be a function')\n return Object.freeze({ ...input })\n}\n\n","import type { AgentProfile, Scene } from './types'\n\n/**\n * 库内置基础指令 — 通用行为约束与 Agent 行为模式。\n *\n * 作为 Prompt 4 层拼接的第 ① 层,所有 Agent 共享。\n *\n * 核心设计:引导 LLM 以 Agent(自主代理)模式运行,而非被动问答。\n * ReAct 循环已由 LangGraph 引擎内置,此 prompt 负责引导 LLM 的思维方式。\n */\nconst BASE_PROMPT = `You are an autonomous AI agent. You can reason, plan, and take actions using the tools available to you.\n\n## Core Behavior\n- When given a task, break it down into steps, then execute each step using the appropriate tools.\n- After each tool call, observe the result and decide the next action. Continue until the task is fully completed.\n- If no tools are needed, respond directly with your knowledge.\n- Never fabricate uncertain information. If you cannot complete a task, explain why honestly.\n\n## Rules\n- Respond in the same language as the user.\n- Follow tool parameter schemas strictly — do not invent or omit required fields.\n- When multiple tools are available, choose the most relevant one for the current step.`\n\n/**\n * 构建 4 层 Prompt 拼接链。\n *\n * ```\n * ① Base — 库内置固定指令(通用行为约束、防御性指令)\n * ② Profile — agent.systemPrompt(角色身份)\n * ③ ToolKit — 当前场景激活的 ToolKit.prompt(0~N 个)\n * ④ Scene — scene.prompt(sceneContext)(仅绑定 Scene 时)\n * ```\n *\n * 各层以 `\\n\\n` 拼接,合并为单条 SystemMessage 字符串。\n *\n * @param params - 拼接所需的各层数据\n * @returns 完整的 system prompt 字符串\n */\nexport function buildPromptChain(params: {\n /** 当前 Agent 角色 */\n profile: AgentProfile\n /** 当前场景激活的 ToolKit prompt 列表 */\n toolkitPrompts: string[]\n /** 运行时场景(可选) */\n scene?: Scene\n /** 传给 scene.prompt(ctx) 的动态数据(可选) */\n sceneContext?: Record<string, any>\n}): string {\n const layers: string[] = [\n // ① Base — 库内置固定指令\n BASE_PROMPT,\n // ② Profile — 角色身份提示词\n params.profile.systemPrompt,\n // ③ ToolKit — 当前场景激活的能力包提示词\n ...params.toolkitPrompts,\n ]\n\n // ④ Scene — 动态运行时上下文提示词\n if (params.scene) {\n try {\n const scenePrompt = params.scene.prompt(params.sceneContext ?? {})\n layers.push(scenePrompt)\n } catch (error) {\n // Scene.prompt() 异常不应阻断流程,记录错误并跳过该层\n console.error('[buildPromptChain] Scene.prompt() error:', error)\n layers.push(`[Scene context unavailable due to error: ${error instanceof Error ? error.message : String(error)}]`)\n }\n }\n\n return layers.filter(Boolean).join('\\n\\n')\n}\n\n","import { ChatOpenAI } from '@langchain/openai'\nimport { createAgent, createMiddleware } from 'langchain'\nimport { HumanMessage } from '@langchain/core/messages'\nimport type { StructuredToolInterface } from '@langchain/core/tools'\nimport type { BaseCheckpointSaver } from '@langchain/langgraph'\nimport type { BaseCallbackHandler } from '@langchain/core/callbacks/base'\nimport type { AgentOptions } from '../types'\n\n/**\n * 构建单 Agent 图并返回双模式流。\n *\n * 使用 `createAgent` 创建 ReAct Agent,\n * 通过 `streamMode: ['messages', 'updates']` 同时获取:\n * - 逐 token 的文本流(messages 模式)\n * - 节点级别的完整更新(updates 模式,用于工具调用结果)\n *\n * Callbacks 在 LLM 层和 graph.stream() 层双重透传,\n * 确保 LangFuse 等观测工具能追踪完整 Agent 执行链路。\n *\n * ## 错误处理策略\n *\n * - **LLM 初始化异常**:ChatOpenAI 构造函数会在无效配置时抛出异常(如无效 API Key),\n * 由调用方(agent.ts)的顶层 try-catch 捕获并转换为 `error` 事件\n * - **Checkpointer 异常**:LangGraph 内部处理 checkpointer 加载/保存失败,\n * 失败时会降级为无记忆模式继续执行,不会中断流\n * - **工具执行异常**:LangGraph 内置异常处理,工具失败时会将错误信息作为 ToolMessage 返回给 LLM,\n * 由 LLM 决定如何处理(重试、跳过或报告用户)\n * - **流式输出异常**:stream() 过程中的网络异常或 LLM API 异常会抛出,\n * 由调用方的 try-catch 捕获\n *\n * @param params - 图构建参数\n * @returns 双模式流的异步可迭代对象\n * @throws 当 LLM 初始化失败或 stream() 执行失败时抛出异常\n */\nexport async function buildSingleGraph(params: {\n /** 完整的 system prompt(4 层拼接后) */\n systemPrompt: string\n /** 当前场景激活的工具列表 */\n tools: StructuredToolInterface[]\n /** Agent 模型标识 */\n model: string\n /** 用户消息 */\n message: string\n /** 对话线程 ID */\n threadId: string\n /** LangGraph Checkpointer */\n checkpointer: BaseCheckpointSaver\n /** 滑动窗口大小 */\n maxMessages: number\n /** LangChain Callbacks */\n callbacks: BaseCallbackHandler[]\n /** 底层 LLM 网关配置(OpenAI 兼容) */\n llm?: AgentOptions['llm']\n}) {\n const hasCallbacks = params.callbacks.length > 0\n const callbacksOrUndefined = hasCallbacks ? params.callbacks : undefined\n\n // LLM 初始化 — 可能抛出异常(无效 API Key / baseURL)\n let llm: ChatOpenAI\n try {\n llm = new ChatOpenAI({\n model: params.model,\n apiKey: params.llm?.apiKey,\n configuration: params.llm?.baseURL ? { baseURL: params.llm.baseURL } : undefined,\n // LLM 层透传 callbacks — 追踪 LLM 调用本身\n callbacks: callbacksOrUndefined,\n })\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error)\n console.error('[buildSingleGraph] LLM initialization failed:', message)\n throw new Error(`Failed to initialize LLM: ${message}`)\n }\n\n console.log('[buildSingleGraph] systemPrompt:', JSON.stringify(params.systemPrompt))\n console.log('[buildSingleGraph] model:', params.model)\n console.log('[buildSingleGraph] tools:', params.tools.map(t => t.name))\n console.log('[buildSingleGraph] threadId:', params.threadId)\n console.log('[buildSingleGraph] maxMessages:', params.maxMessages)\n\n // 图构建 — 可能抛出异常(无效配置)\n let graph: ReturnType<typeof createAgent>\n try {\n graph = createAgent({\n model: llm,\n tools: params.tools,\n checkpointer: params.checkpointer,\n systemPrompt: params.systemPrompt,\n // 滑动窗口中间件 — beforeModel 阶段裁剪消息,Checkpointer 仍全量存储\n middleware: [\n createMiddleware({\n name: 'sliding-window',\n beforeModel: (state) => {\n try {\n const max = params.maxMessages\n if (!state.messages || state.messages.length <= max) return undefined\n return { messages: state.messages.slice(-max) }\n } catch (error) {\n // 中间件异常不应阻断流程,记录错误并返回原始 state\n console.error('[buildSingleGraph] sliding-window middleware error:', error)\n return undefined\n }\n },\n }),\n ],\n })\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error)\n console.error('[buildSingleGraph] Graph creation failed:', message)\n throw new Error(`Failed to create agent graph: ${message}`)\n }\n\n // stream() 调用 — 可能抛出异常(网络异常、LLM API 异常)\n try {\n return graph.stream(\n { messages: [new HumanMessage(params.message)] },\n {\n configurable: { thread_id: params.threadId },\n recursionLimit: 25,\n streamMode: ['messages', 'updates'],\n // graph 层透传 callbacks — 追踪完整执行链路(工具调用、节点跳转等)\n callbacks: callbacksOrUndefined,\n },\n )\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error)\n console.error('[buildSingleGraph] Stream initialization failed:', message)\n throw new Error(`Failed to start agent stream: ${message}`)\n }\n}\n\n","import { ChatOpenAI } from '@langchain/openai'\nimport { createReactAgent } from '@langchain/langgraph/prebuilt'\nimport { createSupervisor } from '@langchain/langgraph-supervisor'\nimport { HumanMessage } from '@langchain/core/messages'\nimport type { StructuredToolInterface } from '@langchain/core/tools'\nimport type { BaseCheckpointSaver } from '@langchain/langgraph'\nimport type { BaseCallbackHandler } from '@langchain/core/callbacks/base'\nimport type { AgentProfile, AgentOptions } from '../types'\n\n/**\n * 构建多 Agent Supervisor 图并返回双模式流。\n *\n * 使用 `@langchain/langgraph-supervisor` 的 `createSupervisor` 构建:\n * - Supervisor 负责任务分析与分派\n * - Workers 为各 AgentProfile 对应的 ReAct Agent\n *\n * 工具在 Supervisor 级别不注入(Supervisor 只负责路由),\n * 所有工具注入到 Worker Agent 中,由 Scene 过滤后的工具集共享。\n *\n * ## 错误处理策略\n *\n * - **LLM 初始化异常**:任一 LLM(Supervisor / Worker)初始化失败时抛出异常,\n * 由调用方(agent.ts)的顶层 try-catch 捕获\n * - **Worker 创建异常**:单个 Worker 创建失败时记录错误并跳过该 Worker,\n * 至少保证 1 个 Worker 可用才继续执行\n * - **Checkpointer 异常**:同单 Agent 模式,LangGraph 内部降级处理\n * - **流式输出异常**:stream() 过程中的异常会抛出,由调用方捕获\n *\n * @param params - 图构建参数\n * @returns 双模式流的异步可迭代对象\n * @throws 当 LLM 初始化失败、Worker 全部创建失败或 stream() 执行失败时抛出异常\n */\nexport async function buildSupervisorGraph(params: {\n /** Supervisor 的 Prompt(4 层拼接后,用于 Supervisor Agent) */\n supervisorPrompt: string\n /** 所有 AgentProfile 列表 */\n agents: AgentProfile[]\n /** Supervisor 的 agent name */\n supervisorName: string\n /** 当前场景激活的工具列表(所有 Worker 共享) */\n tools: StructuredToolInterface[]\n /** 各 Worker 的 Prompt 映射(profile.name → 4 层拼接后的 prompt) */\n workerPrompts: Map<string, string>\n /** 用户消息 */\n message: string\n /** 对话线程 ID */\n threadId: string\n /** LangGraph Checkpointer */\n checkpointer: BaseCheckpointSaver\n /** 滑动窗口大小 */\n maxMessages: number\n /** LangChain Callbacks */\n callbacks: BaseCallbackHandler[]\n /** 底层 LLM 网关配置(OpenAI 兼容) */\n llm?: AgentOptions['llm']\n}) {\n const hasCallbacks = params.callbacks.length > 0\n const callbacksOrUndefined = hasCallbacks ? params.callbacks : undefined\n\n // 为每个非 Supervisor 的 Agent 创建 Worker\n const workerProfiles = params.agents.filter(profile => profile.name !== params.supervisorName)\n const workers: ReturnType<typeof createReactAgent>[] = []\n const failedWorkers: string[] = []\n\n for (const profile of workerProfiles) {\n try {\n const workerLLM = new ChatOpenAI({\n model: profile.model,\n apiKey: params.llm?.apiKey,\n configuration: params.llm?.baseURL ? { baseURL: params.llm.baseURL } : undefined,\n callbacks: callbacksOrUndefined,\n })\n\n const workerPrompt = params.workerPrompts.get(profile.name) ?? profile.systemPrompt\n\n const worker = createReactAgent({\n llm: workerLLM,\n tools: params.tools,\n name: profile.name,\n prompt: workerPrompt,\n })\n\n workers.push(worker)\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error)\n console.error(`[buildSupervisorGraph] Failed to create worker \"${profile.name}\":`, message)\n failedWorkers.push(profile.name)\n }\n }\n\n // 至少需要 1 个 Worker 才能继续\n if (workers.length === 0) {\n throw new Error(\n `Failed to create any workers. All ${workerProfiles.length} workers failed: ${failedWorkers.join(', ')}`,\n )\n }\n\n if (failedWorkers.length > 0) {\n console.warn(\n `[buildSupervisorGraph] ${failedWorkers.length} worker(s) failed to initialize: ${failedWorkers.join(', ')}`,\n )\n }\n\n // Supervisor 使用指定 profile 的 model\n const supervisorProfile = params.agents.find(p => p.name === params.supervisorName)!\n let supervisorLLM: ChatOpenAI\n try {\n supervisorLLM = new ChatOpenAI({\n model: supervisorProfile.model,\n apiKey: params.llm?.apiKey,\n configuration: params.llm?.baseURL ? { baseURL: params.llm.baseURL } : undefined,\n callbacks: callbacksOrUndefined,\n })\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error)\n console.error('[buildSupervisorGraph] Supervisor LLM initialization failed:', message)\n throw new Error(`Failed to initialize Supervisor LLM: ${message}`)\n }\n\n console.log('[buildSupervisorGraph] supervisor:', params.supervisorName)\n console.log('[buildSupervisorGraph] workers:', workers.map((_, i) => workerProfiles[i]?.name))\n console.log('[buildSupervisorGraph] tools:', params.tools.map(t => t.name))\n console.log('[buildSupervisorGraph] threadId:', params.threadId)\n\n // 创建 Supervisor 图\n let workflow: ReturnType<typeof createSupervisor>\n try {\n // 类型断言:createReactAgent 返回的 CompiledStateGraph 泛型参数\n // 与 createSupervisor 期望的类型存在 TS 层面的微小差异(BaseChannel vs BinaryOperatorAggregate),\n // 运行时完全兼容,此处用 as any 桥接\n workflow = createSupervisor({\n agents: workers as any,\n llm: supervisorLLM,\n prompt: params.supervisorPrompt,\n // 保留完整消息历史,让前端能追踪 handoff 过程\n outputMode: 'full_history',\n // 滑动窗口 — 只裁剪发给 LLM 的消息,Checkpointer 仍全量存储\n // 与 single.ts 的 createMiddleware.beforeModel 策略一致\n preModelHook: (state: any) => {\n try {\n const max = params.maxMessages\n if (!state.messages || state.messages.length <= max) {\n return { llmInputMessages: state.messages || [] }\n }\n return { llmInputMessages: state.messages.slice(-max) }\n } catch (error) {\n // 中间件异常不应阻断流程,记录错误并返回原始消息\n console.error('[buildSupervisorGraph] sliding-window preModelHook error:', error)\n return { llmInputMessages: state.messages || [] }\n }\n },\n })\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error)\n console.error('[buildSupervisorGraph] Supervisor workflow creation failed:', message)\n throw new Error(`Failed to create supervisor workflow: ${message}`)\n }\n\n // compile 时注入 checkpointer\n let graph: ReturnType<typeof workflow.compile>\n try {\n graph = workflow.compile({\n checkpointer: params.checkpointer,\n })\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error)\n console.error('[buildSupervisorGraph] Graph compilation failed:', message)\n throw new Error(`Failed to compile supervisor graph: ${message}`)\n }\n\n // stream() 调用 — 可能抛出异常(网络异常、LLM API 异常)\n try {\n return graph.stream(\n { messages: [new HumanMessage(params.message)] },\n {\n configurable: { thread_id: params.threadId },\n recursionLimit: 50, // 多 Agent 需要更高的递归限制\n streamMode: ['messages', 'updates'],\n callbacks: callbacksOrUndefined,\n },\n )\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error)\n console.error('[buildSupervisorGraph] Stream initialization failed:', message)\n throw new Error(`Failed to start supervisor stream: ${message}`)\n }\n}\n\n","import { isAIMessageChunk, ToolMessage } from '@langchain/core/messages'\nimport type { AIMessageChunk, BaseMessage } from '@langchain/core/messages'\nimport type { SSEEvent } from './types'\n\n/**\n * 将 LangGraph `stream()` 的双模式流(messages + updates)\n * 转换为标准化 SSEEvent 序列。\n *\n * 事件映射逻辑:\n * - `messages` 模式的 AIMessageChunk(含 content)→ `text` 事件\n * - `messages` 模式的 AIMessageChunk(含 tool_call_chunks)→ `tool_start` 事件\n * - `updates` 模式的 tools 节点输出(ToolMessage)→ `tool_end` 事件\n * - `messages` 模式的 metadata.langgraph_node 变化 → `agent` + `handoff` 事件(多 Agent)\n *\n * ## 错误处理\n *\n * - **流迭代异常**:stream 本身抛出异常时(网络中断、LLM API 异常),\n * 由调用方(agent.ts)的 try-catch 捕获并转换为 `error` 事件\n * - **chunk 解析异常**:单个 chunk 解析失败时记录错误并跳过该 chunk,不中断流\n * - **生命周期回调异常**:onToolEnd 抛出异常时静默捕获,不影响流\n *\n * @param stream - LangGraph stream() 返回的异步可迭代对象\n * @param onToolEnd - Scene.onToolEnd 生命周期回调(可选)\n */\nexport async function* transformStream(\n stream: AsyncIterable<any>,\n onToolEnd?: (toolName: string, result: any) => void,\n): AsyncGenerator<SSEEvent> {\n // 追踪当前活跃的 agent name,用于检测 handoff\n let currentAgentName: string | null = null\n\n for await (const chunk of stream) {\n let events: SSEEvent[]\n let detectedAgent: string | null\n\n // 解析 chunk — 单个 chunk 解析失败不应中断流\n try {\n const result = parseStreamChunk(chunk, currentAgentName)\n events = result.events\n detectedAgent = result.detectedAgent\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error)\n console.error('[transformStream] Failed to parse chunk:', message, chunk)\n // 跳过该 chunk,继续处理后续流\n continue\n }\n\n // 如果检测到 agent 切换,先 emit handoff 和 agent 事件\n if (detectedAgent && detectedAgent !== currentAgentName) {\n if (currentAgentName) {\n yield { type: 'handoff', from: currentAgentName, to: detectedAgent }\n }\n yield { type: 'agent', name: detectedAgent }\n currentAgentName = detectedAgent\n }\n\n for (const event of events) {\n yield event\n\n // 触发 Scene.onToolEnd 生命周期回调\n if (event.type === 'tool_end' && onToolEnd) {\n try {\n onToolEnd(event.toolName, event.output)\n } catch (error) {\n // 生命周期回调异常不应影响流,记录错误并继续\n const message = error instanceof Error ? error.message : String(error)\n console.error(`[transformStream] Scene.onToolEnd(\"${event.toolName}\") error:`, message)\n }\n }\n }\n }\n}\n\n/** parseStreamChunk 的返回类型 */\ninterface ParseResult {\n events: SSEEvent[]\n /** 从 metadata 中检测到的 agent 名称(仅 messages 模式) */\n detectedAgent: string | null\n}\n\n/**\n * 解析单个 stream chunk 为 SSEEvent 数组 + agent 检测。\n *\n * LangGraph `stream({ streamMode: ['messages', 'updates'] })` 产出的 chunk 格式:\n * - messages 模式: `['messages', [message, metadata]]`\n * - metadata.langgraph_node 标识消息来源节点(即 agent name)\n * - updates 模式: `['updates', { nodeName: { messages: [...] } }]`\n */\nfunction parseStreamChunk(chunk: any, currentAgentName: string | null): ParseResult {\n const events: SSEEvent[] = []\n let detectedAgent: string | null = null\n\n // 双 streamMode 下,chunk 是 [streamMode, data] 元组\n if (!Array.isArray(chunk) || chunk.length !== 2) return { events, detectedAgent }\n\n const [mode, data] = chunk\n\n if (mode === 'messages') {\n // data = [message, metadata]\n const [message, metadata] = data as [BaseMessage, any]\n\n // 从 metadata 中提取 agent name(多 Agent 场景)\n // langgraph_node 标识当前消息来自哪个节点(supervisor / worker name)\n if (metadata?.langgraph_node && typeof metadata.langgraph_node === 'string') {\n const nodeName = metadata.langgraph_node as string\n // 过滤掉内部节点名(如 \"tools\"、\"__start__\" 等),只关注 agent 节点\n if (nodeName !== 'tools' && !nodeName.startsWith('__')) {\n // Supervisor 模式下,supervisor 节点名默认为 \"supervisor\"\n // Worker 节点名为 createReactAgent 时指定的 name\n detectedAgent = nodeName\n }\n }\n\n // messages 模式下实际产出 MessageChunk,但 TS 推断为 BaseMessage\n if (isAIMessageChunk(message as unknown as AIMessageChunk)) {\n const aiChunk = message as unknown as AIMessageChunk\n\n // 工具调用 chunk(tool_start 事件)\n if (aiChunk.tool_call_chunks && aiChunk.tool_call_chunks.length > 0) {\n for (const toolChunk of aiChunk.tool_call_chunks) {\n // 只在 name 出现时才 emit tool_start(第一个 chunk 包含 name)\n if (toolChunk.name) {\n events.push({\n type: 'tool_start',\n toolName: toolChunk.name,\n input: {},\n })\n }\n }\n }\n\n // 文本内容 chunk(text 事件)\n const content = typeof aiChunk.content === 'string' ? aiChunk.content : ''\n if (content) {\n events.push({ type: 'text', content })\n }\n }\n }\n\n if (mode === 'updates') {\n // data = { nodeName: { messages: [...] } | nodeOutput }\n if (data && typeof data === 'object') {\n const nodeData = data as Record<string, any>\n\n // 遍历所有节点输出,查找 ToolMessage\n for (const [nodeName, nodeOutput] of Object.entries(nodeData)) {\n // tools 节点的输出包含 ToolMessage\n // 单 Agent: nodeName === 'tools'\n // 多 Agent: nodeName 可能是 worker 内部的 tools 节点(如 '{agentName}_tools')\n if (nodeOutput?.messages) {\n const toolMessages = nodeOutput.messages as BaseMessage[]\n for (const msg of toolMessages) {\n if (msg instanceof ToolMessage) {\n events.push({\n type: 'tool_end',\n toolName: msg.name ?? 'unknown',\n output: safeParseJSON(\n typeof msg.content === 'string' ? msg.content : JSON.stringify(msg.content),\n ),\n })\n }\n }\n }\n }\n }\n }\n\n return { events, detectedAgent }\n}\n\n/**\n * 安全解析 JSON 字符串,失败则返回原始字符串。\n */\nfunction safeParseJSON(str: string): any {\n try {\n return JSON.parse(str)\n } catch {\n return str\n }\n}\n\n// ─── SSE 格式化工具 ─────────────────────────────────────\n\n/**\n * 将 SSEEvent 格式化为 SSE 协议字符串 `data: JSON\\n\\n`。\n */\nexport function formatSSE(event: SSEEvent): string {\n return `data: ${JSON.stringify(event)}\\n\\n`\n}\n\n","import type { Request, RequestHandler, Response } from 'express'\nimport type { Agent } from './agent'\nimport { formatSSE } from './sse'\nimport type { ChatOptions, SSEEvent } from './types'\n\n/**\n * 写入 SSE 必要响应头。\n */\nfunction writeSSEHeaders(res: Response): void {\n res.status(200)\n res.setHeader('Content-Type', 'text/event-stream; charset=utf-8')\n res.setHeader('Cache-Control', 'no-cache, no-transform')\n res.setHeader('Connection', 'keep-alive')\n res.setHeader('X-Accel-Buffering', 'no')\n res.flushHeaders?.()\n}\n\n/**\n * 从请求体中提取 chat 参数。\n */\nfunction parseChatOptions(req: Request): ChatOptions {\n const body = (req.body ?? {}) as Partial<ChatOptions>\n return {\n message: typeof body.message === 'string' ? body.message : '',\n threadId: typeof body.threadId === 'string' ? body.threadId : '',\n sceneContext: body.sceneContext,\n }\n}\n\n/**\n * 为 Agent 创建 Express SSE 处理器。\n *\n * 请求体格式:\n * {\n * \"message\": \"...\",\n * \"threadId\": \"...\",\n * \"sceneContext\": { ... }\n * }\n *\n * ## 错误处理\n *\n * - **请求体解析异常**:parseChatOptions 失败时返回 `error` 事件\n * - **agent.chat() 异常**:流迭代过程中的异常会被捕获并转换为 `error` 事件\n * - **响应写入异常**:res.write() 失败时(客户端断开连接)静默捕获,避免服务器崩溃\n * - **所有异常路径**:确保最终都会发送 `done` 事件并关闭响应\n */\nexport function createExpressHandler(agent: Agent): RequestHandler {\n return async (req: Request, res: Response) => {\n // 写入 SSE 响应头\n try {\n writeSSEHeaders(res)\n } catch (error) {\n // 响应头写入失败(极少见),记录错误并尝试返回 500\n console.error('[createExpressHandler] Failed to write SSE headers:', error)\n if (!res.headersSent) {\n res.status(500).json({ error: 'Failed to initialize SSE stream' })\n }\n return\n }\n\n // 安全写入 SSE 事件 — 捕获客户端断开连接等异常\n const safeWrite = (event: SSEEvent): boolean => {\n try {\n return res.write(formatSSE(event))\n } catch (error) {\n // 客户端断开连接时 res.write() 会抛出异常,静默捕获\n console.error('[createExpressHandler] Failed to write SSE event:', error)\n return false\n }\n }\n\n try {\n const chatOptions = parseChatOptions(req)\n\n // 迭代 agent.chat() 流\n for await (const event of agent.chat(chatOptions)) {\n const success = safeWrite(event)\n // 如果写入失败(客户端断开),提前退出循环\n if (!success && event.type !== 'done') {\n console.warn('[createExpressHandler] Client disconnected, stopping stream')\n break\n }\n }\n } catch (error) {\n // agent.chat() 或流迭代异常\n const message = error instanceof Error ? error.message : String(error)\n console.error('[createExpressHandler] Stream error:', message)\n safeWrite({ type: 'error', message })\n safeWrite({ type: 'done' })\n } finally {\n // 确保响应最终关闭\n try {\n res.end()\n } catch (error) {\n // res.end() 失败(客户端已断开),静默捕获\n console.error('[createExpressHandler] Failed to end response:', error)\n }\n }\n }\n}\n\n","import { MemorySaver } from '@langchain/langgraph'\nimport type { BaseCheckpointSaver } from '@langchain/langgraph'\nimport type { BaseCallbackHandler } from '@langchain/core/callbacks/base'\nimport { buildPromptChain } from './prompt'\nimport { buildSingleGraph } from './graph/single'\nimport { buildSupervisorGraph } from './graph/supervisor'\nimport { transformStream } from './sse'\nimport { createExpressHandler } from './middleware'\nimport type { RequestHandler } from 'express'\nimport type { AgentOptions, ChatOptions, SSEEvent } from './types'\n\n/**\n * Agent 实例的内部已解析配置类型。\n *\n * 将可选字段填充为默认值后的完整配置。\n */\ninterface ResolvedOptions extends AgentOptions {\n maxMessages: number\n callbacks: BaseCallbackHandler[]\n checkpointer: BaseCheckpointSaver\n}\n\n/**\n * Agent 核心类。\n *\n * 串联完整流程:参数校验 → ToolKit 过滤 → Prompt 拼接 → 图构建 → 流式输出。\n *\n * 不直接 new,通过 `createAgent()` 工厂函数创建。\n */\nexport class Agent {\n /** @internal */\n readonly options: ResolvedOptions\n\n constructor(options: AgentOptions) {\n this.options = {\n maxMessages: 50,\n callbacks: [],\n checkpointer: new MemorySaver(),\n ...options,\n }\n this.validate()\n }\n\n /**\n * 发起对话,返回标准化 SSE 事件的异步生成器。\n *\n * 完整流程:\n * 1. ToolKit 过滤(Scene.toolkits 决定)\n * 2. Prompt 4 层拼接(Base → Profile → ToolKit → Scene)\n * 3. 构建 LangGraph 图 + stream\n * 4. 转换流事件 → 标准化 SSEEvent\n *\n * 任何异常均以 `error` + `done` 事件正常结束流,不崩溃。\n *\n * @param chatOptions - 对话参数\n * @yields 标准化 SSE 事件序列\n */\n async *chat(chatOptions: ChatOptions): AsyncGenerator<SSEEvent> {\n try {\n // 参数校验\n if (!chatOptions.message) {\n yield { type: 'error', message: 'message is required' }\n yield { type: 'done' }\n return\n }\n if (!chatOptions.threadId) {\n yield { type: 'error', message: 'threadId is required' }\n yield { type: 'done' }\n return\n }\n\n // 1. ToolKit 过滤 — Scene 决定当前可用的工具集\n const scene = this.options.scene\n const activeToolkits = scene\n ? this.options.toolkits.filter(tk => scene.toolkits.includes(tk.name))\n : this.options.toolkits\n const tools = activeToolkits.flatMap(tk => tk.tools)\n const toolkitPrompts = activeToolkits.map(tk => tk.prompt)\n\n // 2. 判断单/多 Agent 策略\n const isMultiAgent = this.options.agents.length > 1 && !!this.options.supervisor\n\n let stream: AsyncIterable<any>\n\n if (isMultiAgent) {\n // 多 Agent 模式:Supervisor + Workers\n const supervisorProfile = this.options.agents.find(\n a => a.name === this.options.supervisor,\n )!\n\n // Supervisor 的 prompt(4 层拼接)\n const supervisorPrompt = buildPromptChain({\n profile: supervisorProfile,\n toolkitPrompts,\n scene,\n sceneContext: chatOptions.sceneContext,\n })\n\n // 各 Worker 的 prompt(4 层拼接)\n const workerPrompts = new Map<string, string>()\n for (const profile of this.options.agents) {\n if (profile.name !== this.options.supervisor) {\n workerPrompts.set(\n profile.name,\n buildPromptChain({\n profile,\n toolkitPrompts,\n scene,\n sceneContext: chatOptions.sceneContext,\n }),\n )\n }\n }\n\n stream = await buildSupervisorGraph({\n supervisorPrompt,\n agents: this.options.agents,\n supervisorName: this.options.supervisor!,\n tools,\n workerPrompts,\n message: chatOptions.message,\n threadId: chatOptions.threadId,\n checkpointer: this.options.checkpointer,\n maxMessages: this.options.maxMessages,\n callbacks: this.options.callbacks,\n llm: this.options.llm,\n })\n } else {\n // 单 Agent 模式\n const profile = this.options.agents[0]\n const systemPrompt = buildPromptChain({\n profile,\n toolkitPrompts,\n scene,\n sceneContext: chatOptions.sceneContext,\n })\n\n stream = await buildSingleGraph({\n systemPrompt,\n tools,\n model: profile.model,\n message: chatOptions.message,\n threadId: chatOptions.threadId,\n checkpointer: this.options.checkpointer,\n maxMessages: this.options.maxMessages,\n callbacks: this.options.callbacks,\n llm: this.options.llm,\n })\n }\n\n // 4. 转换流事件 → 标准化 SSE 事件\n yield* transformStream(stream, scene?.onToolEnd)\n yield { type: 'done' }\n } catch (err) {\n const message = err instanceof Error\n ? `${err.message}${err.cause ? ` | cause: ${err.cause}` : ''}${err.stack ? `\\n${err.stack}` : ''}`\n : String(err)\n console.error('[agent.chat] error:', message)\n yield { type: 'error', message }\n yield { type: 'done' }\n }\n }\n\n /**\n * 返回 Express RequestHandler,直接用于路由挂载。\n *\n * @example\n * ```ts\n * app.post('/chat', agent.handleRequest())\n * ```\n */\n handleRequest(): RequestHandler {\n return createExpressHandler(this)\n }\n\n /**\n * 参数校验 — 在构造时执行,快速失败。\n */\n private validate(): void {\n if (!this.options.agents.length) {\n throw new Error('At least one agent is required')\n }\n if (this.options.supervisor) {\n const found = this.options.agents.find(a => a.name === this.options.supervisor)\n if (!found) {\n throw new Error(`Supervisor \"${this.options.supervisor}\" not found in agents`)\n }\n }\n // 校验 Scene 引用的 ToolKit 是否都已注册\n if (this.options.scene) {\n const registeredNames = new Set(this.options.toolkits.map(tk => tk.name))\n for (const name of this.options.scene.toolkits) {\n if (!registeredNames.has(name)) {\n throw new Error(`Scene references toolkit \"${name}\" which is not registered`)\n }\n }\n }\n }\n}\n\n/**\n * 创建 Agent 实例。\n *\n * @param options - Agent 配置项\n * @returns Agent 实例\n *\n * @example\n * ```ts\n * const agent = createAgent({\n * toolkits: [canvasToolKit],\n * agents: [director],\n * scene: timelineScene,\n * })\n *\n * for await (const event of agent.chat({ message: '你好', threadId: 'thread-001' })) {\n * console.log(event)\n * }\n * ```\n */\nexport function createAgent(options: AgentOptions): Agent {\n return new Agent(options)\n}\n\n"]}
@@ -0,0 +1,463 @@
1
+ import { StructuredToolInterface } from '@langchain/core/tools';
2
+ import * as _langchain_langgraph from '@langchain/langgraph';
3
+ import { BaseCheckpointSaver } from '@langchain/langgraph';
4
+ import { BaseCallbackHandler } from '@langchain/core/callbacks/base';
5
+ import { RequestHandler } from 'express';
6
+ import * as _langchain_core_utils_stream from '@langchain/core/utils/stream';
7
+ import * as langchain from 'langchain';
8
+ import * as _langchain_core_messages from '@langchain/core/messages';
9
+
10
+ /**
11
+ * 静态能力包 — 按领域分组的工具集 + 使用策略提示词。
12
+ *
13
+ * @example
14
+ * ```ts
15
+ * const canvasToolKit = defineToolKit({
16
+ * name: 'canvas',
17
+ * tools: [bindElementTool, bindTrackTool],
18
+ * prompt: '画面调整时优先使用 canvas 工具...',
19
+ * })
20
+ * ```
21
+ */
22
+ interface ToolKit {
23
+ /** 唯一标识(如 `'canvas'`、`'ai'`) */
24
+ readonly name: string;
25
+ /** LangChain Tool 数组 */
26
+ readonly tools: StructuredToolInterface[];
27
+ /** 使用策略提示词,告诉 LLM 何时/如何使用这组工具 */
28
+ readonly prompt: string;
29
+ }
30
+ /**
31
+ * 角色身份 — 极简声明:名字 + 系统提示词 + 模型。
32
+ *
33
+ * @example
34
+ * ```ts
35
+ * const director = defineProfile({
36
+ * name: '导演',
37
+ * systemPrompt: '你是一位视频导演...',
38
+ * model: 'gpt-4o',
39
+ * })
40
+ * ```
41
+ */
42
+ interface AgentProfile {
43
+ /** 角色名称,多 Agent 时作为唯一标识 */
44
+ readonly name: string;
45
+ /** 角色系统提示词 */
46
+ readonly systemPrompt: string;
47
+ /** 模型标识(如 `'gpt-4o'`、`'gpt-4o-mini'`) */
48
+ readonly model: string;
49
+ }
50
+ /**
51
+ * 运行时场景 — 声明当前需要的工具集 + 动态上下文提示词 + 生命周期回调。
52
+ *
53
+ * @example
54
+ * ```ts
55
+ * const timelineScene = defineScene({
56
+ * name: 'timeline-editing',
57
+ * toolkits: ['canvas', 'ai'],
58
+ * prompt: (ctx) => `视频时长: ${ctx.duration}秒`,
59
+ * onToolEnd: (toolName, result) => {
60
+ * if (toolName === 'bindTrack') refreshTimeline()
61
+ * },
62
+ * })
63
+ * ```
64
+ */
65
+ interface Scene {
66
+ /** 场景名称 */
67
+ readonly name: string;
68
+ /** 当前场景需要的 ToolKit 名称列表,从全局能力池中过滤 */
69
+ readonly toolkits: string[];
70
+ /** 动态提示词模板,接收运行时上下文数据(来自 `chat()` 的 `sceneContext`) */
71
+ readonly prompt: (ctx: Record<string, any>) => string;
72
+ /** 工具调用完成后的生命周期回调 */
73
+ readonly onToolEnd?: (toolName: string, result: any) => void;
74
+ }
75
+ /**
76
+ * `createAgent()` 配置项。
77
+ *
78
+ * @example
79
+ * ```ts
80
+ * const agent = createAgent({
81
+ * toolkits: [canvasToolKit, aiToolKit],
82
+ * agents: [director, screenwriter],
83
+ * supervisor: '导演',
84
+ * scene: timelineScene,
85
+ * checkpointer: new MemorySaver(),
86
+ * maxMessages: 50,
87
+ * llm: {
88
+ * baseURL: 'https://api.bltcy.ai',
89
+ * apiKey: 'sk-xxx',
90
+ * },
91
+ * })
92
+ * ```
93
+ */
94
+ interface AgentOptions {
95
+ /** 全局能力池,所有可用的 ToolKit */
96
+ toolkits: ToolKit[];
97
+ /** Agent 列表 */
98
+ agents: AgentProfile[];
99
+ /** Supervisor 的 Agent name,有值则启用多 Agent 模式 */
100
+ supervisor?: string;
101
+ /** 运行时场景,决定工具集过滤和动态 Prompt */
102
+ scene?: Scene;
103
+ /** LangGraph Checkpointer 实例(默认 MemorySaver) */
104
+ checkpointer?: BaseCheckpointSaver;
105
+ /** 滑动窗口大小(默认 50) */
106
+ maxMessages?: number;
107
+ /** LangChain Callbacks(如 LangFuse) */
108
+ callbacks?: BaseCallbackHandler[];
109
+ /** OpenAI 兼容网关配置(如中转商) */
110
+ llm?: {
111
+ /** 兼容 OpenAI 的 base URL,例如 https://api.bltcy.ai */
112
+ baseURL?: string;
113
+ /** API Key,优先级高于环境变量 OPENAI_API_KEY */
114
+ apiKey?: string;
115
+ };
116
+ }
117
+ /**
118
+ * `agent.chat()` 调用参数。
119
+ */
120
+ interface ChatOptions {
121
+ /** 用户消息 */
122
+ message: string;
123
+ /** 对话线程 ID,用于记忆隔离 */
124
+ threadId: string;
125
+ /** 传给 `scene.prompt(ctx)` 的动态运行时数据 */
126
+ sceneContext?: Record<string, any>;
127
+ }
128
+ /**
129
+ * 标准化 SSE 事件联合类型。
130
+ *
131
+ * | 类型 | 触发时机 |
132
+ * |------|---------|
133
+ * | `text` | LLM 输出文本 token |
134
+ * | `tool_start` | 工具调用开始 |
135
+ * | `tool_end` | 工具调用结束 |
136
+ * | `handoff` | Agent 切换(多 Agent) |
137
+ * | `agent` | 当前回答的 Agent 身份 |
138
+ * | `error` | 执行出错 |
139
+ * | `done` | 流结束 |
140
+ */
141
+ type SSEEvent = {
142
+ type: 'text';
143
+ content: string;
144
+ } | {
145
+ type: 'tool_start';
146
+ toolName: string;
147
+ input: Record<string, any>;
148
+ } | {
149
+ type: 'tool_end';
150
+ toolName: string;
151
+ output: any;
152
+ } | {
153
+ type: 'handoff';
154
+ from: string;
155
+ to: string;
156
+ } | {
157
+ type: 'agent';
158
+ name: string;
159
+ } | {
160
+ type: 'error';
161
+ message: string;
162
+ } | {
163
+ type: 'done';
164
+ };
165
+
166
+ /**
167
+ * 定义一个 Agent 角色身份。
168
+ *
169
+ * 校验必填字段后返回不可变对象。
170
+ *
171
+ * @param input - 角色配置
172
+ * @returns 冻结的 AgentProfile 对象
173
+ *
174
+ * @example
175
+ * ```ts
176
+ * const director = defineProfile({
177
+ * name: '导演',
178
+ * systemPrompt: '你是一位视频导演...',
179
+ * model: 'gpt-4o',
180
+ * })
181
+ * ```
182
+ */
183
+ declare function defineProfile(input: AgentProfile): Readonly<AgentProfile>;
184
+
185
+ /**
186
+ * 定义一个静态能力包。
187
+ *
188
+ * 校验必填字段后返回不可变对象。
189
+ *
190
+ * @param input - 能力包配置
191
+ * @returns 冻结的 ToolKit 对象
192
+ *
193
+ * @example
194
+ * ```ts
195
+ * const canvasToolKit = defineToolKit({
196
+ * name: 'canvas',
197
+ * tools: [bindElementTool, bindTrackTool],
198
+ * prompt: '画面调整时优先使用 canvas 工具...',
199
+ * })
200
+ * ```
201
+ */
202
+ declare function defineToolKit(input: ToolKit): Readonly<ToolKit>;
203
+
204
+ /**
205
+ * 定义一个运行时场景。
206
+ *
207
+ * 校验必填字段后返回不可变对象。
208
+ *
209
+ * @param input - 场景配置
210
+ * @returns 冻结的 Scene 对象
211
+ *
212
+ * @example
213
+ * ```ts
214
+ * const timelineScene = defineScene({
215
+ * name: 'timeline-editing',
216
+ * toolkits: ['canvas', 'ai'],
217
+ * prompt: (ctx) => `视频时长: ${ctx.duration}秒`,
218
+ * onToolEnd: (toolName, result) => {
219
+ * if (toolName === 'bindTrack') refreshTimeline()
220
+ * },
221
+ * })
222
+ * ```
223
+ */
224
+ declare function defineScene(input: Scene): Readonly<Scene>;
225
+
226
+ /**
227
+ * Agent 实例的内部已解析配置类型。
228
+ *
229
+ * 将可选字段填充为默认值后的完整配置。
230
+ */
231
+ interface ResolvedOptions extends AgentOptions {
232
+ maxMessages: number;
233
+ callbacks: BaseCallbackHandler[];
234
+ checkpointer: BaseCheckpointSaver;
235
+ }
236
+ /**
237
+ * Agent 核心类。
238
+ *
239
+ * 串联完整流程:参数校验 → ToolKit 过滤 → Prompt 拼接 → 图构建 → 流式输出。
240
+ *
241
+ * 不直接 new,通过 `createAgent()` 工厂函数创建。
242
+ */
243
+ declare class Agent {
244
+ /** @internal */
245
+ readonly options: ResolvedOptions;
246
+ constructor(options: AgentOptions);
247
+ /**
248
+ * 发起对话,返回标准化 SSE 事件的异步生成器。
249
+ *
250
+ * 完整流程:
251
+ * 1. ToolKit 过滤(Scene.toolkits 决定)
252
+ * 2. Prompt 4 层拼接(Base → Profile → ToolKit → Scene)
253
+ * 3. 构建 LangGraph 图 + stream
254
+ * 4. 转换流事件 → 标准化 SSEEvent
255
+ *
256
+ * 任何异常均以 `error` + `done` 事件正常结束流,不崩溃。
257
+ *
258
+ * @param chatOptions - 对话参数
259
+ * @yields 标准化 SSE 事件序列
260
+ */
261
+ chat(chatOptions: ChatOptions): AsyncGenerator<SSEEvent>;
262
+ /**
263
+ * 返回 Express RequestHandler,直接用于路由挂载。
264
+ *
265
+ * @example
266
+ * ```ts
267
+ * app.post('/chat', agent.handleRequest())
268
+ * ```
269
+ */
270
+ handleRequest(): RequestHandler;
271
+ /**
272
+ * 参数校验 — 在构造时执行,快速失败。
273
+ */
274
+ private validate;
275
+ }
276
+ /**
277
+ * 创建 Agent 实例。
278
+ *
279
+ * @param options - Agent 配置项
280
+ * @returns Agent 实例
281
+ *
282
+ * @example
283
+ * ```ts
284
+ * const agent = createAgent({
285
+ * toolkits: [canvasToolKit],
286
+ * agents: [director],
287
+ * scene: timelineScene,
288
+ * })
289
+ *
290
+ * for await (const event of agent.chat({ message: '你好', threadId: 'thread-001' })) {
291
+ * console.log(event)
292
+ * }
293
+ * ```
294
+ */
295
+ declare function createAgent(options: AgentOptions): Agent;
296
+
297
+ /**
298
+ * 为 Agent 创建 Express SSE 处理器。
299
+ *
300
+ * 请求体格式:
301
+ * {
302
+ * "message": "...",
303
+ * "threadId": "...",
304
+ * "sceneContext": { ... }
305
+ * }
306
+ *
307
+ * ## 错误处理
308
+ *
309
+ * - **请求体解析异常**:parseChatOptions 失败时返回 `error` 事件
310
+ * - **agent.chat() 异常**:流迭代过程中的异常会被捕获并转换为 `error` 事件
311
+ * - **响应写入异常**:res.write() 失败时(客户端断开连接)静默捕获,避免服务器崩溃
312
+ * - **所有异常路径**:确保最终都会发送 `done` 事件并关闭响应
313
+ */
314
+ declare function createExpressHandler(agent: Agent): RequestHandler;
315
+
316
+ /**
317
+ * 构建 4 层 Prompt 拼接链。
318
+ *
319
+ * ```
320
+ * ① Base — 库内置固定指令(通用行为约束、防御性指令)
321
+ * ② Profile — agent.systemPrompt(角色身份)
322
+ * ③ ToolKit — 当前场景激活的 ToolKit.prompt(0~N 个)
323
+ * ④ Scene — scene.prompt(sceneContext)(仅绑定 Scene 时)
324
+ * ```
325
+ *
326
+ * 各层以 `\n\n` 拼接,合并为单条 SystemMessage 字符串。
327
+ *
328
+ * @param params - 拼接所需的各层数据
329
+ * @returns 完整的 system prompt 字符串
330
+ */
331
+ declare function buildPromptChain(params: {
332
+ /** 当前 Agent 角色 */
333
+ profile: AgentProfile;
334
+ /** 当前场景激活的 ToolKit prompt 列表 */
335
+ toolkitPrompts: string[];
336
+ /** 运行时场景(可选) */
337
+ scene?: Scene;
338
+ /** 传给 scene.prompt(ctx) 的动态数据(可选) */
339
+ sceneContext?: Record<string, any>;
340
+ }): string;
341
+
342
+ /**
343
+ * 构建单 Agent 图并返回双模式流。
344
+ *
345
+ * 使用 `createAgent` 创建 ReAct Agent,
346
+ * 通过 `streamMode: ['messages', 'updates']` 同时获取:
347
+ * - 逐 token 的文本流(messages 模式)
348
+ * - 节点级别的完整更新(updates 模式,用于工具调用结果)
349
+ *
350
+ * Callbacks 在 LLM 层和 graph.stream() 层双重透传,
351
+ * 确保 LangFuse 等观测工具能追踪完整 Agent 执行链路。
352
+ *
353
+ * ## 错误处理策略
354
+ *
355
+ * - **LLM 初始化异常**:ChatOpenAI 构造函数会在无效配置时抛出异常(如无效 API Key),
356
+ * 由调用方(agent.ts)的顶层 try-catch 捕获并转换为 `error` 事件
357
+ * - **Checkpointer 异常**:LangGraph 内部处理 checkpointer 加载/保存失败,
358
+ * 失败时会降级为无记忆模式继续执行,不会中断流
359
+ * - **工具执行异常**:LangGraph 内置异常处理,工具失败时会将错误信息作为 ToolMessage 返回给 LLM,
360
+ * 由 LLM 决定如何处理(重试、跳过或报告用户)
361
+ * - **流式输出异常**:stream() 过程中的网络异常或 LLM API 异常会抛出,
362
+ * 由调用方的 try-catch 捕获
363
+ *
364
+ * @param params - 图构建参数
365
+ * @returns 双模式流的异步可迭代对象
366
+ * @throws 当 LLM 初始化失败或 stream() 执行失败时抛出异常
367
+ */
368
+ declare function buildSingleGraph(params: {
369
+ /** 完整的 system prompt(4 层拼接后) */
370
+ systemPrompt: string;
371
+ /** 当前场景激活的工具列表 */
372
+ tools: StructuredToolInterface[];
373
+ /** Agent 模型标识 */
374
+ model: string;
375
+ /** 用户消息 */
376
+ message: string;
377
+ /** 对话线程 ID */
378
+ threadId: string;
379
+ /** LangGraph Checkpointer */
380
+ checkpointer: BaseCheckpointSaver;
381
+ /** 滑动窗口大小 */
382
+ maxMessages: number;
383
+ /** LangChain Callbacks */
384
+ callbacks: BaseCallbackHandler[];
385
+ /** 底层 LLM 网关配置(OpenAI 兼容) */
386
+ llm?: AgentOptions['llm'];
387
+ }): Promise<_langchain_core_utils_stream.IterableReadableStream<["updates", Record<string, any>] | ["messages", [langchain.BaseMessage<_langchain_core_messages.MessageStructure<_langchain_core_messages.MessageToolSet>, _langchain_core_messages.MessageType>, Record<string, any>]]>>;
388
+
389
+ /**
390
+ * 构建多 Agent Supervisor 图并返回双模式流。
391
+ *
392
+ * 使用 `@langchain/langgraph-supervisor` 的 `createSupervisor` 构建:
393
+ * - Supervisor 负责任务分析与分派
394
+ * - Workers 为各 AgentProfile 对应的 ReAct Agent
395
+ *
396
+ * 工具在 Supervisor 级别不注入(Supervisor 只负责路由),
397
+ * 所有工具注入到 Worker Agent 中,由 Scene 过滤后的工具集共享。
398
+ *
399
+ * ## 错误处理策略
400
+ *
401
+ * - **LLM 初始化异常**:任一 LLM(Supervisor / Worker)初始化失败时抛出异常,
402
+ * 由调用方(agent.ts)的顶层 try-catch 捕获
403
+ * - **Worker 创建异常**:单个 Worker 创建失败时记录错误并跳过该 Worker,
404
+ * 至少保证 1 个 Worker 可用才继续执行
405
+ * - **Checkpointer 异常**:同单 Agent 模式,LangGraph 内部降级处理
406
+ * - **流式输出异常**:stream() 过程中的异常会抛出,由调用方捕获
407
+ *
408
+ * @param params - 图构建参数
409
+ * @returns 双模式流的异步可迭代对象
410
+ * @throws 当 LLM 初始化失败、Worker 全部创建失败或 stream() 执行失败时抛出异常
411
+ */
412
+ declare function buildSupervisorGraph(params: {
413
+ /** Supervisor 的 Prompt(4 层拼接后,用于 Supervisor Agent) */
414
+ supervisorPrompt: string;
415
+ /** 所有 AgentProfile 列表 */
416
+ agents: AgentProfile[];
417
+ /** Supervisor 的 agent name */
418
+ supervisorName: string;
419
+ /** 当前场景激活的工具列表(所有 Worker 共享) */
420
+ tools: StructuredToolInterface[];
421
+ /** 各 Worker 的 Prompt 映射(profile.name → 4 层拼接后的 prompt) */
422
+ workerPrompts: Map<string, string>;
423
+ /** 用户消息 */
424
+ message: string;
425
+ /** 对话线程 ID */
426
+ threadId: string;
427
+ /** LangGraph Checkpointer */
428
+ checkpointer: BaseCheckpointSaver;
429
+ /** 滑动窗口大小 */
430
+ maxMessages: number;
431
+ /** LangChain Callbacks */
432
+ callbacks: BaseCallbackHandler[];
433
+ /** 底层 LLM 网关配置(OpenAI 兼容) */
434
+ llm?: AgentOptions['llm'];
435
+ }): Promise<_langchain_core_utils_stream.IterableReadableStream<["messages", [langchain.BaseMessage<_langchain_core_messages.MessageStructure<_langchain_core_messages.MessageToolSet>, _langchain_core_messages.MessageType>, Record<string, any>]] | ["updates", Record<string, _langchain_langgraph.UpdateType<_langchain_langgraph.StateDefinition> | _langchain_langgraph.UpdateType<any>>]>>;
436
+
437
+ /**
438
+ * 将 LangGraph `stream()` 的双模式流(messages + updates)
439
+ * 转换为标准化 SSEEvent 序列。
440
+ *
441
+ * 事件映射逻辑:
442
+ * - `messages` 模式的 AIMessageChunk(含 content)→ `text` 事件
443
+ * - `messages` 模式的 AIMessageChunk(含 tool_call_chunks)→ `tool_start` 事件
444
+ * - `updates` 模式的 tools 节点输出(ToolMessage)→ `tool_end` 事件
445
+ * - `messages` 模式的 metadata.langgraph_node 变化 → `agent` + `handoff` 事件(多 Agent)
446
+ *
447
+ * ## 错误处理
448
+ *
449
+ * - **流迭代异常**:stream 本身抛出异常时(网络中断、LLM API 异常),
450
+ * 由调用方(agent.ts)的 try-catch 捕获并转换为 `error` 事件
451
+ * - **chunk 解析异常**:单个 chunk 解析失败时记录错误并跳过该 chunk,不中断流
452
+ * - **生命周期回调异常**:onToolEnd 抛出异常时静默捕获,不影响流
453
+ *
454
+ * @param stream - LangGraph stream() 返回的异步可迭代对象
455
+ * @param onToolEnd - Scene.onToolEnd 生命周期回调(可选)
456
+ */
457
+ declare function transformStream(stream: AsyncIterable<any>, onToolEnd?: (toolName: string, result: any) => void): AsyncGenerator<SSEEvent>;
458
+ /**
459
+ * 将 SSEEvent 格式化为 SSE 协议字符串 `data: JSON\n\n`。
460
+ */
461
+ declare function formatSSE(event: SSEEvent): string;
462
+
463
+ export { Agent, type AgentOptions, type AgentProfile, type ChatOptions, type SSEEvent, type Scene, type ToolKit, buildPromptChain, buildSingleGraph, buildSupervisorGraph, createAgent, createExpressHandler, defineProfile, defineScene, defineToolKit, formatSSE, transformStream };