@zhin.js/agent 0.1.23 → 0.1.25
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/README.md +1 -1
- package/lib/bootstrap.js +2 -2
- package/lib/bootstrap.js.map +1 -1
- package/lib/builtin/ask-user-tool.d.ts.map +1 -1
- package/lib/builtin/ask-user-tool.js +2 -0
- package/lib/builtin/ask-user-tool.js.map +1 -1
- package/lib/cron-engine.js +2 -2
- package/lib/cron-engine.js.map +1 -1
- package/lib/deferred-worker-runner.d.ts.map +1 -1
- package/lib/deferred-worker-runner.js +5 -5
- package/lib/deferred-worker-runner.js.map +1 -1
- package/lib/discovery/agents.js +3 -3
- package/lib/discovery/agents.js.map +1 -1
- package/lib/discovery/skills.js +4 -4
- package/lib/discovery/skills.js.map +1 -1
- package/lib/discovery/tools.js +4 -4
- package/lib/discovery/tools.js.map +1 -1
- package/lib/discovery/utils.js +3 -3
- package/lib/discovery/utils.js.map +1 -1
- package/lib/init/create-zhin-agent.js +1 -1
- package/lib/init/create-zhin-agent.js.map +1 -1
- package/lib/init/register-ai-trigger.js +1 -1
- package/lib/init/register-ai-trigger.js.map +1 -1
- package/lib/init/register-builtin-tools.js +3 -3
- package/lib/init/register-builtin-tools.js.map +1 -1
- package/lib/security/file-policy.js +2 -2
- package/lib/security/file-policy.js.map +1 -1
- package/lib/security/owner-approve-always-store.js +3 -3
- package/lib/security/owner-approve-always-store.js.map +1 -1
- package/lib/service.d.ts.map +1 -1
- package/lib/service.js +2 -1
- package/lib/service.js.map +1 -1
- package/lib/subagent.js +1 -1
- package/lib/subagent.js.map +1 -1
- package/lib/zhin-agent/config.d.ts +6 -0
- package/lib/zhin-agent/config.d.ts.map +1 -1
- package/lib/zhin-agent/config.js +2 -1
- package/lib/zhin-agent/config.js.map +1 -1
- package/lib/zhin-agent/index.d.ts +1 -0
- package/lib/zhin-agent/index.d.ts.map +1 -1
- package/lib/zhin-agent/index.js +24 -20
- package/lib/zhin-agent/index.js.map +1 -1
- package/lib/zhin-agent/prompt.d.ts +3 -15
- package/lib/zhin-agent/prompt.d.ts.map +1 -1
- package/lib/zhin-agent/prompt.js +48 -110
- package/lib/zhin-agent/prompt.js.map +1 -1
- package/lib/zhin-agent/text-sanitize.d.ts +16 -1
- package/lib/zhin-agent/text-sanitize.d.ts.map +1 -1
- package/lib/zhin-agent/text-sanitize.js +43 -2
- package/lib/zhin-agent/text-sanitize.js.map +1 -1
- package/lib/zhin-agent/tool-calls-user-format.d.ts +12 -0
- package/lib/zhin-agent/tool-calls-user-format.d.ts.map +1 -0
- package/lib/zhin-agent/tool-calls-user-format.js +122 -0
- package/lib/zhin-agent/tool-calls-user-format.js.map +1 -0
- package/package.json +5 -5
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Format orchestrator tool-call history for end users (IM reply).
|
|
3
|
+
* Avoids dumping raw JSON / internal meta-tool noise.
|
|
4
|
+
*/
|
|
5
|
+
import { sanitizeToolResult } from '@zhin.js/ai';
|
|
6
|
+
const INTERNAL_META_TOOLS = new Set(['activate_skill', 'install_skill', 'tool_search']);
|
|
7
|
+
function asString(result) {
|
|
8
|
+
if (result == null)
|
|
9
|
+
return '';
|
|
10
|
+
if (typeof result === 'string')
|
|
11
|
+
return result;
|
|
12
|
+
try {
|
|
13
|
+
return JSON.stringify(result);
|
|
14
|
+
}
|
|
15
|
+
catch {
|
|
16
|
+
return String(result);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
function parseRunDeferredPayload(raw) {
|
|
20
|
+
const trimmed = raw.trim();
|
|
21
|
+
if (!trimmed.startsWith('{'))
|
|
22
|
+
return null;
|
|
23
|
+
try {
|
|
24
|
+
const obj = JSON.parse(trimmed);
|
|
25
|
+
return {
|
|
26
|
+
status: typeof obj.status === 'string' ? obj.status : undefined,
|
|
27
|
+
summary: typeof obj.summary === 'string' ? obj.summary : undefined,
|
|
28
|
+
error: typeof obj.error === 'string' ? obj.error : undefined,
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
catch {
|
|
32
|
+
return null;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
function formatRunDeferredTaskResult(result) {
|
|
36
|
+
const raw = asString(result);
|
|
37
|
+
const parsed = parseRunDeferredPayload(raw);
|
|
38
|
+
if (parsed) {
|
|
39
|
+
if (parsed.status === 'error') {
|
|
40
|
+
return parsed.error || '子任务执行失败。';
|
|
41
|
+
}
|
|
42
|
+
const summary = parsed.summary?.trim();
|
|
43
|
+
if (summary) {
|
|
44
|
+
return sanitizeToolResult(summary, { maxChars: 4000 });
|
|
45
|
+
}
|
|
46
|
+
return '子任务已完成,但没有可展示的文本摘要。';
|
|
47
|
+
}
|
|
48
|
+
const cleaned = sanitizeToolResult(raw, { maxChars: 4000 });
|
|
49
|
+
return cleaned || undefined;
|
|
50
|
+
}
|
|
51
|
+
function formatGenericToolResult(tool, result) {
|
|
52
|
+
const raw = asString(result);
|
|
53
|
+
const cleaned = sanitizeToolResult(raw, { maxChars: 2000 });
|
|
54
|
+
if (!cleaned)
|
|
55
|
+
return '';
|
|
56
|
+
if (INTERNAL_META_TOOLS.has(tool))
|
|
57
|
+
return cleaned;
|
|
58
|
+
return cleaned;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Build a single user-facing message from tool call history.
|
|
62
|
+
*/
|
|
63
|
+
export function formatToolCallsForUser(toolCalls) {
|
|
64
|
+
if (toolCalls.length === 0) {
|
|
65
|
+
return '任务已结束,但没有可展示的结果。';
|
|
66
|
+
}
|
|
67
|
+
const deferredSummaries = [];
|
|
68
|
+
const otherParts = [];
|
|
69
|
+
let toolSearchNote;
|
|
70
|
+
for (const tc of toolCalls) {
|
|
71
|
+
if (tc.tool === 'run_deferred_task') {
|
|
72
|
+
const block = formatRunDeferredTaskResult(tc.result);
|
|
73
|
+
if (block)
|
|
74
|
+
deferredSummaries.push(block);
|
|
75
|
+
continue;
|
|
76
|
+
}
|
|
77
|
+
if (tc.tool === 'tool_search') {
|
|
78
|
+
toolSearchNote = formatGenericToolResult(tc.tool, tc.result);
|
|
79
|
+
continue;
|
|
80
|
+
}
|
|
81
|
+
if (INTERNAL_META_TOOLS.has(tc.tool))
|
|
82
|
+
continue;
|
|
83
|
+
const block = formatGenericToolResult(tc.tool, tc.result);
|
|
84
|
+
if (block)
|
|
85
|
+
otherParts.push(block);
|
|
86
|
+
}
|
|
87
|
+
if (deferredSummaries.length > 0) {
|
|
88
|
+
const last = deferredSummaries[deferredSummaries.length - 1];
|
|
89
|
+
if (deferredSummaries.length > 1) {
|
|
90
|
+
return [
|
|
91
|
+
`(共执行 ${deferredSummaries.length} 次子任务,以下为最后一次结果)`,
|
|
92
|
+
'',
|
|
93
|
+
last,
|
|
94
|
+
].join('\n');
|
|
95
|
+
}
|
|
96
|
+
return last;
|
|
97
|
+
}
|
|
98
|
+
if (otherParts.length > 0) {
|
|
99
|
+
return otherParts.join('\n\n');
|
|
100
|
+
}
|
|
101
|
+
if (toolSearchNote) {
|
|
102
|
+
return toolSearchNote;
|
|
103
|
+
}
|
|
104
|
+
return '未能从工具结果中提取有效信息,请换一种说法或缩小问题范围后重试。';
|
|
105
|
+
}
|
|
106
|
+
/** Agent 内置兜底正文(如 max-iter / error recover)是否应改用 formatToolCallsForUser */
|
|
107
|
+
export function looksLikeInternalToolDump(text) {
|
|
108
|
+
const t = text.trim();
|
|
109
|
+
if (!t)
|
|
110
|
+
return false;
|
|
111
|
+
if (/^Done\.\s+Information retrieved:/i.test(t))
|
|
112
|
+
return true;
|
|
113
|
+
if (/^Something went wrong:/i.test(t) && /【\w+】/.test(t))
|
|
114
|
+
return true;
|
|
115
|
+
const blocks = t.match(/【[^】]+】/g);
|
|
116
|
+
if ((blocks?.length ?? 0) >= 2)
|
|
117
|
+
return true;
|
|
118
|
+
if (/【run_deferred_task】[\s\S]*"status"\s*:/i.test(t))
|
|
119
|
+
return true;
|
|
120
|
+
return false;
|
|
121
|
+
}
|
|
122
|
+
//# sourceMappingURL=tool-calls-user-format.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-calls-user-format.js","sourceRoot":"","sources":["../../src/zhin-agent/tool-calls-user-format.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@zhin.js/agent",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.25",
|
|
4
4
|
"description": "Zhin AI Agent — session, ZhinAgent, init; composes @zhin.js/core providers and tools",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./lib/index.js",
|
|
@@ -18,9 +18,9 @@
|
|
|
18
18
|
"dependencies": {
|
|
19
19
|
"he": "^1.2.0",
|
|
20
20
|
"js-yaml": "^4.1.0",
|
|
21
|
-
"@zhin.js/ai": "1.1.
|
|
22
|
-
"@zhin.js/core": "1.1.
|
|
23
|
-
"@zhin.js/logger": "0.1.
|
|
21
|
+
"@zhin.js/ai": "1.1.25",
|
|
22
|
+
"@zhin.js/core": "1.1.27",
|
|
23
|
+
"@zhin.js/logger": "0.1.67"
|
|
24
24
|
},
|
|
25
25
|
"peerDependencies": {
|
|
26
26
|
"@modelcontextprotocol/sdk": "^1.29.0"
|
|
@@ -34,7 +34,7 @@
|
|
|
34
34
|
"@modelcontextprotocol/sdk": "^1.29.0",
|
|
35
35
|
"@types/he": "^1.2.3",
|
|
36
36
|
"@types/js-yaml": "^4.0.9",
|
|
37
|
-
"@types/node": "^25.
|
|
37
|
+
"@types/node": "^25.9.1",
|
|
38
38
|
"rimraf": "^6.0.0",
|
|
39
39
|
"typescript": "^6.0.3"
|
|
40
40
|
},
|