@ai-zen/agents-sdk 0.5.7 → 0.7.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/CHANGELOG.md +53 -0
- package/README.md +10 -7
- package/README.zh.md +10 -7
- package/dist/capabilities/discovery/builtin.d.ts +3 -3
- package/dist/capabilities/discovery/builtin.js +4 -12
- package/dist/capabilities/implements/builtin/BatchEditTool.d.ts +2 -0
- package/dist/capabilities/implements/builtin/BatchEditTool.js +36 -38
- package/dist/capabilities/implements/builtin/CopyTool.d.ts +2 -0
- package/dist/capabilities/implements/builtin/CopyTool.js +23 -25
- package/dist/capabilities/implements/builtin/CwdTool.d.ts +2 -0
- package/dist/capabilities/implements/builtin/CwdTool.js +10 -12
- package/dist/capabilities/implements/builtin/DownloadFileTool.d.ts +3 -1
- package/dist/capabilities/implements/builtin/DownloadFileTool.js +32 -24
- package/dist/capabilities/implements/builtin/EditTool.d.ts +2 -0
- package/dist/capabilities/implements/builtin/EditTool.js +28 -30
- package/dist/capabilities/implements/builtin/ExecAsyncTool.d.ts +2 -0
- package/dist/capabilities/implements/builtin/ExecAsyncTool.js +23 -25
- package/dist/capabilities/implements/builtin/ExecTool.d.ts +3 -1
- package/dist/capabilities/implements/builtin/ExecTool.js +62 -29
- package/dist/capabilities/implements/builtin/ExistTool.d.ts +2 -0
- package/dist/capabilities/implements/builtin/ExistTool.js +15 -17
- package/dist/capabilities/implements/builtin/FindTextTool.d.ts +3 -1
- package/dist/capabilities/implements/builtin/FindTextTool.js +43 -35
- package/dist/capabilities/implements/builtin/GenerateImageTool.d.ts +11 -9
- package/dist/capabilities/implements/builtin/GenerateImageTool.js +63 -56
- package/dist/capabilities/implements/builtin/GlobTool.d.ts +3 -1
- package/dist/capabilities/implements/builtin/GlobTool.js +32 -28
- package/dist/capabilities/implements/builtin/LsTool.d.ts +2 -0
- package/dist/capabilities/implements/builtin/LsTool.js +15 -17
- package/dist/capabilities/implements/builtin/MkdirTool.d.ts +2 -0
- package/dist/capabilities/implements/builtin/MkdirTool.js +19 -21
- package/dist/capabilities/implements/builtin/ReadFileTool.d.ts +2 -0
- package/dist/capabilities/implements/builtin/ReadFileTool.js +15 -17
- package/dist/capabilities/implements/builtin/RenameTool.d.ts +2 -0
- package/dist/capabilities/implements/builtin/RenameTool.js +19 -21
- package/dist/capabilities/implements/builtin/RmTool.d.ts +2 -0
- package/dist/capabilities/implements/builtin/RmTool.js +19 -21
- package/dist/capabilities/implements/builtin/SleepTool.d.ts +3 -1
- package/dist/capabilities/implements/builtin/SleepTool.js +39 -19
- package/dist/capabilities/implements/builtin/ViewImageTool.d.ts +24 -0
- package/dist/capabilities/implements/builtin/ViewImageTool.js +109 -0
- package/dist/capabilities/implements/builtin/WriteFileTool.d.ts +2 -0
- package/dist/capabilities/implements/builtin/WriteFileTool.js +19 -21
- package/dist/capabilities/implements/builtin/index.d.ts +6 -4
- package/dist/capabilities/implements/builtin/index.js +8 -4
- package/dist/capabilities/implements/mcpTools.js +4 -6
- package/dist/capabilities/implements/skillTools.js +18 -8
- package/dist/capabilities/implements/subAgentTools.js +17 -8
- package/dist/config/constants.js +12 -1
- package/dist/index.d.ts +3 -0
- package/dist/index.js +2 -0
- package/dist/plugin/AutoMigratePlugin.d.ts +1 -1
- package/dist/plugin/AutoMigratePlugin.js +1 -1
- package/dist/plugin/AutoRefreshToolsPlugin.d.ts +1 -1
- package/dist/plugin/AutoRefreshToolsPlugin.js +2 -2
- package/dist/plugin/ContextGuardPlugin.d.ts +2 -2
- package/dist/plugin/ContextGuardPlugin.js +1 -1
- package/dist/plugin/UnknownToolHintPlugin.d.ts +21 -0
- package/dist/plugin/UnknownToolHintPlugin.js +30 -0
- package/dist/runtime/Provider.d.ts +8 -7
- package/dist/runtime/Provider.js +14 -4
- package/dist/runtime/SdkAgent.d.ts +14 -107
- package/dist/runtime/SdkAgent.js +8 -120
- package/dist/runtime/SdkCallbackTool.d.ts +25 -9
- package/dist/runtime/SdkCallbackTool.js +7 -3
- package/dist/runtime/createAgent.js +4 -3
- package/dist/runtime/createModel.d.ts +17 -4
- package/dist/runtime/createModel.js +15 -11
- package/dist/types/index.d.ts +2 -0
- package/package.json +3 -2
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
import { Tool, ToolCallContext } from "@ai-zen/agents-core";
|
|
2
2
|
import type { AgentNS } from "@ai-zen/agents-core";
|
|
3
|
-
import type { ToolEnv } from "../types/index.js";
|
|
3
|
+
import type { AgentDefinition, AppConfig, ToolEnv } from "../types/index.js";
|
|
4
|
+
/** SdkCallbackTool 构造选项。env 为核心字段,未来可在此扩展可选项。 */
|
|
5
|
+
export interface SdkCallbackToolOptions {
|
|
6
|
+
/** 注入的工具环境 */
|
|
7
|
+
env: ToolEnv;
|
|
8
|
+
}
|
|
4
9
|
/**
|
|
5
10
|
* SdkCallbackTool — SDK 内置工具基类。
|
|
6
11
|
*
|
|
@@ -11,18 +16,29 @@ import type { ToolEnv } from "../types/index.js";
|
|
|
11
16
|
* - 一个工具一个类,文件名 = 类名(PascalCase)
|
|
12
17
|
* - 依赖环境(cwd、config)通过构造参数显式注入
|
|
13
18
|
* - 相对路径统一用 resolve() 解析到 env.cwd
|
|
19
|
+
* - 工具定义(function)由子类以类体字段提供(见 SdkCallbackTool.function)
|
|
14
20
|
*/
|
|
15
21
|
export declare abstract class SdkCallbackTool extends Tool {
|
|
16
22
|
/** 注入的工具环境 */
|
|
17
23
|
readonly env: ToolEnv;
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
24
|
+
/** 工具定义。由子类以类体字段 function = {...} 提供。 */
|
|
25
|
+
function: AgentNS.FunctionDefine;
|
|
26
|
+
/**
|
|
27
|
+
* 工具对当前 Agent 的可用性判断。由工具自行声明,直接透传完整
|
|
28
|
+
* app config 与 agent definition(含 modelId / permissions 等),工具自取所需
|
|
29
|
+
* (如是否配置了图片模型、当前模型是否为视觉模型)。
|
|
30
|
+
* 在 buildTools/filter 阶段调用;返回 false 的工具不会注册给该 Agent。
|
|
31
|
+
* 不实现则默认可用。
|
|
32
|
+
*/
|
|
33
|
+
isAvailable?(config: AppConfig, definition: AgentDefinition): boolean;
|
|
34
|
+
constructor(options: SdkCallbackToolOptions);
|
|
35
|
+
/**
|
|
36
|
+
* 工具核心逻辑(由子类实现,参数为 parsedArgs)。
|
|
37
|
+
* 可选第二参 ctx:透传完整 ToolCallContext,需中止能力(signal)的工具自行读取。
|
|
38
|
+
*/
|
|
39
|
+
abstract call(input: unknown, ctx?: ToolCallContext): unknown | Promise<unknown>;
|
|
40
|
+
/** 桥接 core 的 Tool.exec:解析参数 → call → 序列化/透传内容块 */
|
|
41
|
+
exec(ctx: ToolCallContext): Promise<AgentNS.MessageContent>;
|
|
26
42
|
/** 将相对路径解析到 env.cwd,绝对路径原样返回 */
|
|
27
43
|
resolve(p: string): string;
|
|
28
44
|
}
|
|
@@ -10,19 +10,23 @@ import { Tool } from "@ai-zen/agents-core";
|
|
|
10
10
|
* - 一个工具一个类,文件名 = 类名(PascalCase)
|
|
11
11
|
* - 依赖环境(cwd、config)通过构造参数显式注入
|
|
12
12
|
* - 相对路径统一用 resolve() 解析到 env.cwd
|
|
13
|
+
* - 工具定义(function)由子类以类体字段提供(见 SdkCallbackTool.function)
|
|
13
14
|
*/
|
|
14
15
|
export class SdkCallbackTool extends Tool {
|
|
15
16
|
/** 注入的工具环境 */
|
|
16
17
|
env;
|
|
17
18
|
constructor(options) {
|
|
18
|
-
super(
|
|
19
|
+
super();
|
|
19
20
|
this.env = options.env;
|
|
20
21
|
}
|
|
21
|
-
/** 桥接 core 的 Tool.exec:解析参数 → call →
|
|
22
|
+
/** 桥接 core 的 Tool.exec:解析参数 → call → 序列化/透传内容块 */
|
|
22
23
|
async exec(ctx) {
|
|
23
|
-
const result = await this.call(ctx.
|
|
24
|
+
const result = await this.call(ctx.parsedArgs, ctx);
|
|
24
25
|
if (typeof result === "string")
|
|
25
26
|
return result;
|
|
27
|
+
// 内容块数组(图片/文件等)直接透传,让模型能收到结构化内容
|
|
28
|
+
if (Array.isArray(result))
|
|
29
|
+
return result;
|
|
26
30
|
// JSON.stringify(undefined) 返回 undefined(非字符串),会破坏 Promise<string> 契约
|
|
27
31
|
return JSON.stringify(result) ?? "";
|
|
28
32
|
}
|
|
@@ -18,8 +18,8 @@ export async function createAgent(provider, agentId) {
|
|
|
18
18
|
const modelId = definition.modelId ?? provider.config.defaultModel;
|
|
19
19
|
if (!modelId)
|
|
20
20
|
throw new Error("未指定模型且无默认模型");
|
|
21
|
-
const model = createModel(provider, modelId);
|
|
22
|
-
const tools = provider.buildTools(definition
|
|
21
|
+
const { client, model, modelConfig } = createModel(provider, modelId);
|
|
22
|
+
const tools = provider.buildTools(definition, {
|
|
23
23
|
exclude: {
|
|
24
24
|
subagents: definition.function?.name
|
|
25
25
|
? [definition.function.name]
|
|
@@ -29,10 +29,11 @@ export async function createAgent(provider, agentId) {
|
|
|
29
29
|
const agent = new SdkAgent({
|
|
30
30
|
provider,
|
|
31
31
|
definition,
|
|
32
|
+
client,
|
|
32
33
|
model,
|
|
34
|
+
modelConfig,
|
|
33
35
|
messages: definition.messages,
|
|
34
36
|
tools,
|
|
35
|
-
permissions: definition.permissions,
|
|
36
37
|
});
|
|
37
38
|
return agent;
|
|
38
39
|
}
|
|
@@ -1,8 +1,21 @@
|
|
|
1
|
-
import
|
|
1
|
+
import OpenAI from "openai";
|
|
2
2
|
import type { Provider } from "./Provider.js";
|
|
3
3
|
/**
|
|
4
|
-
*
|
|
4
|
+
* Agent 模型装配结果:openai SDK client + 模型名 + 模型参数。
|
|
5
|
+
* Agent 构造时直接消费此结构。
|
|
6
|
+
*/
|
|
7
|
+
export interface AgentModel {
|
|
8
|
+
/** openai 官方 SDK 客户端 */
|
|
9
|
+
client: OpenAI;
|
|
10
|
+
/** 发送给 API 的模型名 */
|
|
11
|
+
model: string;
|
|
12
|
+
/** 模型参数(defaultParams),透传给 API(可含厂商特有字段,如 DeepSeek thinking) */
|
|
13
|
+
modelConfig?: Record<string, unknown>;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* 模型工厂 — 根据 modelId 和 Provider 装配 openai SDK client。
|
|
5
17
|
*
|
|
6
|
-
*
|
|
18
|
+
* 端点(baseUrl / apiKey)来自 config.endpoints,发送给 API 的模型名 = modelName || id。
|
|
19
|
+
* 任何 OpenAI 兼容端点(OpenAI / 智谱 BigModel / DeepSeek 等)均可通过 baseURL 接入。
|
|
7
20
|
*/
|
|
8
|
-
export declare function createModel(provider: Provider, modelId: string):
|
|
21
|
+
export declare function createModel(provider: Provider, modelId: string): AgentModel;
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import
|
|
1
|
+
import OpenAI from "openai";
|
|
2
2
|
/**
|
|
3
|
-
* 模型工厂 — 根据 modelId 和 Provider
|
|
3
|
+
* 模型工厂 — 根据 modelId 和 Provider 装配 openai SDK client。
|
|
4
4
|
*
|
|
5
|
-
*
|
|
5
|
+
* 端点(baseUrl / apiKey)来自 config.endpoints,发送给 API 的模型名 = modelName || id。
|
|
6
|
+
* 任何 OpenAI 兼容端点(OpenAI / 智谱 BigModel / DeepSeek 等)均可通过 baseURL 接入。
|
|
6
7
|
*/
|
|
7
8
|
export function createModel(provider, modelId) {
|
|
8
9
|
const config = provider.config;
|
|
@@ -12,15 +13,18 @@ export function createModel(provider, modelId) {
|
|
|
12
13
|
const endpointConfig = config.endpoints.find((e) => e.id === modelConfig.endpointId);
|
|
13
14
|
if (!endpointConfig)
|
|
14
15
|
throw new Error(`端点 "${modelConfig.endpointId}" 未配置`);
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
16
|
+
if (!endpointConfig.apiKey) {
|
|
17
|
+
throw new Error(`端点 "${endpointConfig.name}" 的 API Key 未设置`);
|
|
18
|
+
}
|
|
19
|
+
const client = new OpenAI({
|
|
20
|
+
apiKey: endpointConfig.apiKey,
|
|
21
|
+
baseURL: endpointConfig.baseUrl,
|
|
18
22
|
});
|
|
19
23
|
// 发送给 API 的模型名:modelName > id
|
|
20
24
|
const apiModelName = modelConfig.modelName || modelConfig.id;
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
25
|
+
return {
|
|
26
|
+
client,
|
|
27
|
+
model: apiModelName,
|
|
28
|
+
modelConfig: modelConfig.defaultParams,
|
|
29
|
+
};
|
|
26
30
|
}
|
package/dist/types/index.d.ts
CHANGED
|
@@ -29,6 +29,8 @@ export interface Model {
|
|
|
29
29
|
maxContextTokens: number;
|
|
30
30
|
maxContextChars?: number;
|
|
31
31
|
defaultParams?: Record<string, unknown>;
|
|
32
|
+
/** 是否支持图片输入(视觉模型)。看图工具(viewImage)仅对视觉模型启用;generateImage 是否返回图片内容块也据此判断 */
|
|
33
|
+
vision?: boolean;
|
|
32
34
|
description?: string;
|
|
33
35
|
version?: number;
|
|
34
36
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ai-zen/agents-sdk",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.7.0",
|
|
4
4
|
"description": "AI-Zen Agents SDK — shared business logic for CLI and Desktop",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -18,7 +18,8 @@
|
|
|
18
18
|
"dependencies": {
|
|
19
19
|
"@modelcontextprotocol/sdk": "^1.29.0",
|
|
20
20
|
"dayjs": "^1.11.21",
|
|
21
|
-
"
|
|
21
|
+
"openai": "^7.5.0",
|
|
22
|
+
"@ai-zen/agents-core": "^4.0.0"
|
|
22
23
|
},
|
|
23
24
|
"devDependencies": {
|
|
24
25
|
"@types/node": "^24.12.2",
|