@ai-zen/agents-sdk 1.0.0-alpha.18 → 1.0.0-alpha.19
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,25 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [1.0.0-alpha.19] - 2026-10-27
|
|
4
|
+
|
|
5
|
+
### 🐛 修复
|
|
6
|
+
|
|
7
|
+
- **日志不再绕过 `getLogger()`:`[load_mcp]` 等日志会直接打到宿主终端** —— 4 个模块此前在**模块顶层**执行 `const log = getLogger()`,而 `getLogger()` 当时返回的是 `{ info: console.log, ... }`。模块求值那一刻,`console.log` 的**函数引用**就被冻进了常量;此后宿主调用 `setLogger()` 换掉的是内部 `currentLogger` 变量,**改不动已经抓走的引用**。后果:宿主怎么接管日志都没用 —— CLI 的 Ink TUI 里加载 MCP 时,`load_mcp` 会把整份 tools / resources 清单直接砸在渲染区外面,把界面撕成乱码。
|
|
8
|
+
|
|
9
|
+
现在 4 处全部改为**运行时取 logger**(`getLogger().info(...)` 等),`setLogger()` 立即生效:
|
|
10
|
+
|
|
11
|
+
- `scope/plugins/mcp/mcpTools.ts` —— `[load_mcp]` 两条 info(摘要 + 完整清单);
|
|
12
|
+
- `scope/plugins/skills/discover.ts` —— `[skills]` 一条 warn;
|
|
13
|
+
- `agent-plugins/AutoMigratePlugin.ts` —— `[autoMigrate]` 一条 error;
|
|
14
|
+
- `scope/plugins/skills/skillTools.ts` —— 顶层快照**从未被调用**(死代码),连同 `getLogger` import 一并删除。
|
|
15
|
+
|
|
16
|
+
至此 SDK 内 10 处日志调用全部经由 `getLogger()` 这一个出口,宿主 `setLogger()` 换什么就走什么,不再存在 console 旁路。
|
|
17
|
+
|
|
18
|
+
### ✅ 测试
|
|
19
|
+
|
|
20
|
+
- 全量 **57 文件 / 602 例通过**(6 skipped)。
|
|
21
|
+
- 端到端对照验证:同一段「先求值模块 → 再 `setLogger` → 调用 `load_mcp`」的代码,旧版日志直写 stdout、日志文件为空;新版 stdout 干净、日志完整落盘。
|
|
22
|
+
|
|
3
23
|
## [1.0.0-alpha.18] - 2026-10-22
|
|
4
24
|
|
|
5
25
|
### 🔧 行为变更(不兼容)
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { getLogger } from "../shared/logger.js";
|
|
2
|
-
const log = getLogger();
|
|
3
2
|
/**
|
|
4
3
|
* 自动迁移插件 —— 只负责「何时触发」,实际迁移统一委托给持有的 `HandoffService`。
|
|
5
4
|
*
|
|
@@ -44,7 +43,7 @@ export class AutoMigratePlugin {
|
|
|
44
43
|
await service.migrate({ agent, promptTokens, handoffTokens, mode: mode ?? undefined });
|
|
45
44
|
}
|
|
46
45
|
catch (err) {
|
|
47
|
-
|
|
46
|
+
getLogger().error(`[autoMigrate] 迁移失败: ${err?.message ?? err}`);
|
|
48
47
|
}
|
|
49
48
|
}
|
|
50
49
|
}
|
|
@@ -4,7 +4,6 @@ import { createDisclosureParam } from "../../disclosure.js";
|
|
|
4
4
|
import { DEFAULT_MAX_TOOL_OUTPUT, guardOutput, headTailPreview } from "../builtin/outputGuard.js";
|
|
5
5
|
import { getLogger } from "../../../shared/logger.js";
|
|
6
6
|
const EMPTY_HINT = "(当前没有可用的 MCP 服务器,请联系用户添加)";
|
|
7
|
-
const log = getLogger();
|
|
8
7
|
/**
|
|
9
8
|
* 创建 load_mcp 工具。
|
|
10
9
|
* server 枚举由 filteredMcps (完整 McpServerConfig[])自动推导,
|
|
@@ -70,7 +69,7 @@ export function createLoadMcpTool(mcpManager, filteredMcps) {
|
|
|
70
69
|
}
|
|
71
70
|
// 静默模式:只回吐摘要(清单仍留在管理器内,供 call_mcp_tool 使用)
|
|
72
71
|
if (!includeManifest) {
|
|
73
|
-
|
|
72
|
+
getLogger().info(`[load_mcp] ${serverName}: 已连接(未披露清单:工具 ${manifest.tools.length} 个,资源 ${manifest.resources.length} 个)`);
|
|
74
73
|
return JSON.stringify({
|
|
75
74
|
server: serverName,
|
|
76
75
|
connected: true,
|
|
@@ -78,7 +77,7 @@ export function createLoadMcpTool(mcpManager, filteredMcps) {
|
|
|
78
77
|
resources: manifest.resources.length,
|
|
79
78
|
});
|
|
80
79
|
}
|
|
81
|
-
|
|
80
|
+
getLogger().info(`[load_mcp] ${serverName}:\n${JSON.stringify(manifest, null, 2)}`);
|
|
82
81
|
return JSON.stringify({ tools: manifest.tools, resources: manifest.resources });
|
|
83
82
|
},
|
|
84
83
|
});
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { promises as fs } from "node:fs";
|
|
2
2
|
import { join } from "node:path";
|
|
3
3
|
import { getLogger } from "../../../shared/logger.js";
|
|
4
|
-
const log = getLogger();
|
|
5
4
|
// ---- 发现(返回完整 SkillInfo,不再丢失 subAgent 等信息)----
|
|
6
5
|
/**
|
|
7
6
|
* 扫描多个目录中发现的所有 Skill(含 SKILL.md 的子目录)。
|
|
@@ -78,7 +77,7 @@ async function readSkillFromPath(skillId, skillMdPath, silent) {
|
|
|
78
77
|
if (!silent) {
|
|
79
78
|
const errors = validateSkill(skillId, fm);
|
|
80
79
|
for (const err of errors) {
|
|
81
|
-
|
|
80
|
+
getLogger().warn(`[skills] ${err.skillId}: ${err.field} — ${err.message}`);
|
|
82
81
|
}
|
|
83
82
|
}
|
|
84
83
|
return {
|
|
@@ -1,9 +1,7 @@
|
|
|
1
1
|
import { CallbackTool, Agent, AgentToolLazy, Message } from "@ai-zen/agents-core";
|
|
2
2
|
import { createDisclosureParam } from "../../disclosure.js";
|
|
3
3
|
import { readSkill } from "./discover.js";
|
|
4
|
-
import { getLogger } from "../../../shared/logger.js";
|
|
5
4
|
import { promises as fs } from "node:fs";
|
|
6
|
-
const log = getLogger();
|
|
7
5
|
const EMPTY_HINT = "(当前没有可用的 Skill,请联系用户添加)";
|
|
8
6
|
/**
|
|
9
7
|
* 创建 load_skill 工具。
|