@ai-zen/agents-sdk 0.3.2 → 0.3.4

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 CHANGED
@@ -1,5 +1,22 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.3.4] - 2026-07-27
4
+
5
+ ### 🎯 优化
6
+
7
+ - **`AutoMigratePlugin` 钩子重命名** — `onHandoff` → `onMigrated`,语义更清晰:迁移前用 `onBeforeMigrate`(此时 `agent.messages` 仍是完整旧历史),迁移完成后用 `onMigrated`(交接文档已注入)
8
+ - **`conversation-runner.ts` 保存逻辑修正** — 将保存旧对话从 `onMigrated`(原 `onHandoff`)移至 `onBeforeMigrate`,确保保存的是完整的旧对话历史,而非迁移后的新消息
9
+
10
+ ## [0.3.3] - 2026-07-27
11
+
12
+ ### 🎯 优化
13
+
14
+ - **默认 SubAgent System Prompt 新增两条强制性要求**:
15
+ 1. 信息不明确/模糊/缺失时拒绝执行,要求补充
16
+ 2. 存在自相矛盾信息时指出矛盾,要求澄清
17
+ - **默认 Agent System Prompt 新增原则**:"有矛盾就问 — 如果用户指令中存在自相矛盾之处,应指出矛盾并请求澄清,而不是自行取舍"
18
+ - **默认 SubAgent `function.description` 和 `task` 参数描述**同步更新,强调不明确信息将导致拒绝执行
19
+
3
20
  ## [0.3.2] - 2026-07-26
4
21
 
5
22
  ### 💥 破坏性变更
@@ -15,10 +15,11 @@ export const DEFAULT_AGENT_DEFINITION = {
15
15
  content: `你是一个严谨可靠的智能助手。请用中文回复,说话风格参照官方文件。
16
16
 
17
17
  - 开动脑筋 — 主动思考、灵活运用工具,而不是机械执行
18
- - 实事求是 — 知之为知之,不知为不知,而不是凭空编造
18
+ - 实事求是 — 知之为知之,不知为不知,而不是凭空编造;如果用户意图不明确,应先提问澄清,而不是自行脑补
19
19
  - 一切行动听指挥 — 严格遵循用户指令,而不是自作主张
20
20
  - 安全第一 — 风险操作先告知确认,而不是盲目执行
21
- - 能打胜仗 — 写优秀的代码,而不是只限于能用的代码`,
21
+ - 能打胜仗 — 写优秀的代码,而不是只限于能用的代码
22
+ - 有矛盾就问 — 如果用户指令中存在自相矛盾之处,应指出矛盾并请求澄清,而不是自行取舍`,
22
23
  },
23
24
  ],
24
25
  permissions: {
@@ -41,7 +42,7 @@ export const DEFAULT_SUBAGENT_DEFINITION = {
41
42
  messages: [
42
43
  {
43
44
  role: AgentNS.Role.System,
44
- content: "你是一个通用助手子 Agent,被父 Agent 委派来独立完成具体任务。请根据给定的任务描述,主动调用你的工具(文件读写、执行命令、搜索等)来分析和完成任务。完成任务后直接返回结果,不需要解释你的思考过程。",
45
+ content: "你是一个通用助手子 Agent,被父 Agent 委派来独立完成具体任务。请根据给定的任务描述,主动调用你的工具(文件读写、执行命令、搜索等)来分析和完成任务。完成任务后直接返回结果,不需要解释你的思考过程。\n\n⚠️ 强制性要求:\n1. 如果任务描述中存在任何不明确、模糊或缺失的信息(包括但不限于具体目标、文件路径、约束条件、预期产出等),你必须直接拒绝执行,并明确列出哪些信息不明确或缺失,要求父 Agent 提供更完整的任务上下文。不得自行假设、猜测或脑补任何信息。\n2. 如果任务描述中存在自相矛盾的信息(如相互冲突的要求、不一致的文件路径、矛盾的约束条件等),你必须及时指出矛盾之处,并要求父 Agent 澄清后再执行。",
45
46
  },
46
47
  { role: AgentNS.Role.User, content: "{{task}}" },
47
48
  ],
@@ -53,11 +54,11 @@ export const DEFAULT_SUBAGENT_DEFINITION = {
53
54
  },
54
55
  function: {
55
56
  name: "sub_agent_default",
56
- description: "通用子 Agent,可独立完成各类任务。委派任务时必须提供完整的任务上下文,包括所有必要的背景信息、文件路径、具体要求和约束条件,确保子 Agent 无需追问即可独立执行。",
57
+ description: "通用子 Agent,可独立完成各类任务。⚠️ 委派任务时必须提供完整的任务上下文,包括所有必要的背景信息、文件路径、具体要求和约束条件,任何信息不明确将导致子 Agent 拒绝执行并要求补充信息。",
57
58
  parameters: {
58
59
  type: "object",
59
60
  properties: {
60
- task: { type: "string", description: "完整的任务描述,必须包含所有必要的背景、目标、约束条件和上下文信息" },
61
+ task: { type: "string", description: "完整的任务描述,必须包含所有必要的背景、目标、约束条件和上下文信息。任何不明确的信息将导致子 Agent 拒绝执行。" },
61
62
  },
62
63
  required: ["task"],
63
64
  additionalProperties: false,
@@ -3,10 +3,10 @@ import { SdkAgent } from "../runtime/SdkAgent.js";
3
3
  export interface AutoMigrateOptions {
4
4
  maxTokens: number;
5
5
  migrationAgent: SdkAgent;
6
- /** 迁移开始前触发(promptTokens 刚超限时),可在此向用户展示迁移提示 */
6
+ /** 迁移开始前触发(promptTokens 刚超限时),此时 agent.messages 还是完整旧历史。适用于保存旧对话或向用户展示迁移提示。 */
7
7
  onBeforeMigrate?: (promptTokens: number, maxTokens: number, agent: SdkAgent) => void;
8
- /** 迁移完成后触发(交接文档已注入 agent.messages),可在此保存对话等 */
9
- onHandoff?: (handoffDoc: string, agent: SdkAgent) => void;
8
+ /** 迁移完成后触发,此时交接文档已注入 agent.messages。适用于 UI 更新等后处理。 */
9
+ onMigrated?: (handoffDoc: string, agent: SdkAgent) => void;
10
10
  }
11
11
  /**
12
12
  * 自动迁移插件。
@@ -18,7 +18,7 @@ export interface AutoMigrateOptions {
18
18
  * agent.use(new AutoMigratePlugin({
19
19
  * maxTokens: 250_000,
20
20
  * migrationAgent: anotherAgent,
21
- * onHandoff: (doc, agent) => { ... },
21
+ * onMigrated: (doc, agent) => { ... },
22
22
  * }));
23
23
  * ```
24
24
  */
@@ -12,7 +12,7 @@ const log = createLogger();
12
12
  * agent.use(new AutoMigratePlugin({
13
13
  * maxTokens: 250_000,
14
14
  * migrationAgent: anotherAgent,
15
- * onHandoff: (doc, agent) => { ... },
15
+ * onMigrated: (doc, agent) => { ... },
16
16
  * }));
17
17
  * ```
18
18
  */
@@ -23,7 +23,7 @@ export class AutoMigratePlugin {
23
23
  }
24
24
  async onAfterSend(ctx) {
25
25
  const { agent } = ctx;
26
- const { maxTokens, migrationAgent, onBeforeMigrate, onHandoff } = this.options;
26
+ const { maxTokens, migrationAgent, onBeforeMigrate, onMigrated } = this.options;
27
27
  const promptTokens = agent.lastUsage?.prompt_tokens;
28
28
  if (promptTokens == null)
29
29
  return;
@@ -47,12 +47,12 @@ export class AutoMigratePlugin {
47
47
  // 仅替换消息列表,不重建 agent,保留所有引用和插件绑定
48
48
  agent.messages.length = 0;
49
49
  agent.messages.push(...agent.definition.messages, ...TaskMigrationService.createPostMessages(handoffDoc));
50
- if (onHandoff) {
50
+ if (onMigrated) {
51
51
  try {
52
- await onHandoff(handoffDoc, agent);
52
+ await onMigrated(handoffDoc, agent);
53
53
  }
54
54
  catch (err) {
55
- log.error(`[autoMigrate] onHandoff 回调失败: ${err?.message ?? err}`);
55
+ log.error(`[autoMigrate] onMigrated 回调失败: ${err?.message ?? err}`);
56
56
  }
57
57
  }
58
58
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ai-zen/agents-sdk",
3
- "version": "0.3.2",
3
+ "version": "0.3.4",
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",