@zhin.js/agent 0.1.25 → 0.1.26
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/lib/agent-prompt/registry.js +1 -1
- package/lib/agent-prompt/registry.js.map +1 -1
- package/lib/ai-event-bus.d.ts +19 -0
- package/lib/ai-event-bus.d.ts.map +1 -0
- package/lib/ai-event-bus.js +75 -0
- package/lib/ai-event-bus.js.map +1 -0
- package/lib/ai-event-subscriber.d.ts +38 -0
- package/lib/ai-event-subscriber.d.ts.map +1 -0
- package/lib/ai-event-subscriber.js +61 -0
- package/lib/ai-event-subscriber.js.map +1 -0
- package/lib/builtin/ask-user-tool.d.ts +2 -0
- 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/builtin/bash-tool.d.ts +7 -3
- package/lib/builtin/bash-tool.d.ts.map +1 -1
- package/lib/builtin/bash-tool.js +51 -9
- package/lib/builtin/bash-tool.js.map +1 -1
- package/lib/builtin/bing-search-html.d.ts.map +1 -1
- package/lib/builtin/bing-search-html.js +14 -7
- package/lib/builtin/bing-search-html.js.map +1 -1
- package/lib/builtin/builtin-base-tool.d.ts +2 -0
- package/lib/builtin/builtin-base-tool.d.ts.map +1 -1
- package/lib/builtin/builtin-base-tool.js +5 -0
- package/lib/builtin/builtin-base-tool.js.map +1 -1
- package/lib/builtin/edit-file-tool.d.ts +1 -1
- package/lib/builtin/edit-file-tool.d.ts.map +1 -1
- package/lib/builtin/edit-file-tool.js +33 -1
- package/lib/builtin/edit-file-tool.js.map +1 -1
- package/lib/builtin/file-edit-quote-utils.d.ts +1 -3
- package/lib/builtin/file-edit-quote-utils.d.ts.map +1 -1
- package/lib/builtin/file-edit-quote-utils.js +1 -3
- package/lib/builtin/file-edit-quote-utils.js.map +1 -1
- package/lib/builtin/glob-tool.d.ts +1 -1
- package/lib/builtin/glob-tool.d.ts.map +1 -1
- package/lib/builtin/glob-tool.js +15 -3
- package/lib/builtin/glob-tool.js.map +1 -1
- package/lib/builtin/grep-tool.d.ts +1 -1
- package/lib/builtin/grep-tool.d.ts.map +1 -1
- package/lib/builtin/grep-tool.js +16 -3
- package/lib/builtin/grep-tool.js.map +1 -1
- package/lib/builtin/list-dir-tool.d.ts +1 -1
- package/lib/builtin/list-dir-tool.d.ts.map +1 -1
- package/lib/builtin/list-dir-tool.js +14 -3
- package/lib/builtin/list-dir-tool.js.map +1 -1
- package/lib/builtin/read-file-tool.d.ts +1 -1
- package/lib/builtin/read-file-tool.d.ts.map +1 -1
- package/lib/builtin/read-file-tool.js +24 -3
- package/lib/builtin/read-file-tool.js.map +1 -1
- package/lib/builtin/run-deferred-task-tool.d.ts +3 -0
- package/lib/builtin/run-deferred-task-tool.d.ts.map +1 -1
- package/lib/builtin/run-deferred-task-tool.js +2 -0
- package/lib/builtin/run-deferred-task-tool.js.map +1 -1
- package/lib/builtin/spawn-task-tool.d.ts.map +1 -1
- package/lib/builtin/spawn-task-tool.js +2 -0
- package/lib/builtin/spawn-task-tool.js.map +1 -1
- package/lib/builtin/web-fetch-tool.d.ts +2 -2
- package/lib/builtin/web-fetch-tool.d.ts.map +1 -1
- package/lib/builtin/web-fetch-tool.js +12 -18
- package/lib/builtin/web-fetch-tool.js.map +1 -1
- package/lib/builtin/write-file-tool.d.ts +1 -1
- package/lib/builtin/write-file-tool.d.ts.map +1 -1
- package/lib/builtin/write-file-tool.js +33 -1
- package/lib/builtin/write-file-tool.js.map +1 -1
- package/lib/common-adapter-tools.d.ts +8 -41
- package/lib/common-adapter-tools.d.ts.map +1 -1
- package/lib/common-adapter-tools.js +23 -182
- package/lib/common-adapter-tools.js.map +1 -1
- package/lib/deferred-worker-runner.d.ts +13 -2
- package/lib/deferred-worker-runner.d.ts.map +1 -1
- package/lib/deferred-worker-runner.js +91 -13
- package/lib/deferred-worker-runner.js.map +1 -1
- package/lib/discovery/agents.js +1 -1
- package/lib/discovery/agents.js.map +1 -1
- package/lib/discovery/skills.js +1 -1
- package/lib/discovery/skills.js.map +1 -1
- package/lib/discovery/tools.d.ts +1 -1
- package/lib/discovery/tools.d.ts.map +1 -1
- package/lib/discovery/tools.js +17 -4
- package/lib/discovery/tools.js.map +1 -1
- package/lib/discovery/utils.js +1 -1
- package/lib/discovery/utils.js.map +1 -1
- package/lib/hooks.d.ts.map +1 -1
- package/lib/hooks.js +2 -0
- package/lib/hooks.js.map +1 -1
- package/lib/index.d.ts +9 -1
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +6 -0
- package/lib/index.js.map +1 -1
- package/lib/init/message-media.d.ts +3 -1
- package/lib/init/message-media.d.ts.map +1 -1
- package/lib/init/message-media.js +20 -0
- package/lib/init/message-media.js.map +1 -1
- package/lib/init/register-ai-service.js.map +1 -1
- package/lib/init/register-ai-trigger.d.ts.map +1 -1
- package/lib/init/register-ai-trigger.js +71 -10
- package/lib/init/register-ai-trigger.js.map +1 -1
- package/lib/init/register-builtin-tools.js +7 -7
- package/lib/init/register-builtin-tools.js.map +1 -1
- package/lib/init/register-typing-indicator.d.ts +9 -0
- package/lib/init/register-typing-indicator.d.ts.map +1 -0
- package/lib/init/register-typing-indicator.js +206 -0
- package/lib/init/register-typing-indicator.js.map +1 -0
- package/lib/init.d.ts.map +1 -1
- package/lib/init.js +2 -0
- package/lib/init.js.map +1 -1
- package/lib/mcp-client/connection.d.ts +2 -0
- package/lib/mcp-client/connection.d.ts.map +1 -1
- package/lib/mcp-client/connection.js +7 -0
- package/lib/mcp-client/connection.js.map +1 -1
- package/lib/mcp-client/index.d.ts +2 -0
- package/lib/mcp-client/index.d.ts.map +1 -1
- package/lib/mcp-client/index.js +19 -2
- package/lib/mcp-client/index.js.map +1 -1
- package/lib/monitoring/index.d.ts +79 -0
- package/lib/monitoring/index.d.ts.map +1 -0
- package/lib/monitoring/index.js +197 -0
- package/lib/monitoring/index.js.map +1 -0
- package/lib/monitoring/metrics.d.ts +240 -0
- package/lib/monitoring/metrics.d.ts.map +1 -0
- package/lib/monitoring/metrics.js +483 -0
- package/lib/monitoring/metrics.js.map +1 -0
- package/lib/orchestrator/agent-dispatcher.d.ts +170 -0
- package/lib/orchestrator/agent-dispatcher.d.ts.map +1 -0
- package/lib/orchestrator/agent-dispatcher.js +379 -0
- package/lib/orchestrator/agent-dispatcher.js.map +1 -0
- package/lib/orchestrator/hook-registry.d.ts.map +1 -1
- package/lib/orchestrator/hook-registry.js +2 -0
- package/lib/orchestrator/hook-registry.js.map +1 -1
- package/lib/orchestrator/index.d.ts +2 -0
- package/lib/orchestrator/index.d.ts.map +1 -1
- package/lib/orchestrator/index.js +2 -0
- package/lib/orchestrator/index.js.map +1 -1
- package/lib/orchestrator/mcp-lifecycle.d.ts +1 -1
- package/lib/orchestrator/mcp-lifecycle.d.ts.map +1 -1
- package/lib/orchestrator/mcp-lifecycle.js +2 -2
- package/lib/orchestrator/mcp-lifecycle.js.map +1 -1
- package/lib/orchestrator/mcp-registry.d.ts +8 -1
- package/lib/orchestrator/mcp-registry.d.ts.map +1 -1
- package/lib/orchestrator/mcp-registry.js +28 -5
- package/lib/orchestrator/mcp-registry.js.map +1 -1
- package/lib/orchestrator/task-queue.d.ts +147 -0
- package/lib/orchestrator/task-queue.d.ts.map +1 -0
- package/lib/orchestrator/task-queue.js +337 -0
- package/lib/orchestrator/task-queue.js.map +1 -0
- package/lib/orchestrator/tool-selection.d.ts.map +1 -1
- package/lib/orchestrator/tool-selection.js +3 -0
- package/lib/orchestrator/tool-selection.js.map +1 -1
- package/lib/orchestrator/types.d.ts +8 -0
- package/lib/orchestrator/types.d.ts.map +1 -1
- package/lib/plugin-ai-hook-bus.d.ts +4 -0
- package/lib/plugin-ai-hook-bus.d.ts.map +1 -0
- package/lib/plugin-ai-hook-bus.js +24 -0
- package/lib/plugin-ai-hook-bus.js.map +1 -0
- package/lib/security/anomaly-detection.d.ts +119 -0
- package/lib/security/anomaly-detection.d.ts.map +1 -0
- package/lib/security/anomaly-detection.js +305 -0
- package/lib/security/anomaly-detection.js.map +1 -0
- package/lib/security/audit-logger.d.ts +158 -0
- package/lib/security/audit-logger.d.ts.map +1 -0
- package/lib/security/audit-logger.js +379 -0
- package/lib/security/audit-logger.js.map +1 -0
- package/lib/security/bash-tool-context.d.ts +3 -3
- package/lib/security/bash-tool-context.d.ts.map +1 -1
- package/lib/security/budget-limiter.d.ts +156 -0
- package/lib/security/budget-limiter.d.ts.map +1 -0
- package/lib/security/budget-limiter.js +363 -0
- package/lib/security/budget-limiter.js.map +1 -0
- package/lib/security/dangerous-tool-policy.d.ts +17 -0
- package/lib/security/dangerous-tool-policy.d.ts.map +1 -0
- package/lib/security/dangerous-tool-policy.js +137 -0
- package/lib/security/dangerous-tool-policy.js.map +1 -0
- package/lib/security/exec-policy.d.ts +21 -12
- package/lib/security/exec-policy.d.ts.map +1 -1
- package/lib/security/exec-policy.js +198 -25
- package/lib/security/exec-policy.js.map +1 -1
- package/lib/security/file-policy.d.ts +0 -1
- package/lib/security/file-policy.d.ts.map +1 -1
- package/lib/security/file-policy.js +112 -14
- package/lib/security/file-policy.js.map +1 -1
- package/lib/security/file-role-policy.d.ts +119 -0
- package/lib/security/file-role-policy.d.ts.map +1 -0
- package/lib/security/file-role-policy.js +268 -0
- package/lib/security/file-role-policy.js.map +1 -0
- package/lib/security/index.d.ts +59 -0
- package/lib/security/index.d.ts.map +1 -1
- package/lib/security/index.js +68 -0
- package/lib/security/index.js.map +1 -1
- package/lib/security/network-policy.d.ts +94 -0
- package/lib/security/network-policy.d.ts.map +1 -0
- package/lib/security/network-policy.js +291 -0
- package/lib/security/network-policy.js.map +1 -0
- package/lib/security/owner-approve-always-store.d.ts +2 -0
- package/lib/security/owner-approve-always-store.d.ts.map +1 -1
- package/lib/security/owner-approve-always-store.js +37 -0
- package/lib/security/owner-approve-always-store.js.map +1 -1
- package/lib/security/sandbox-enhanced.d.ts +170 -0
- package/lib/security/sandbox-enhanced.d.ts.map +1 -0
- package/lib/security/sandbox-enhanced.js +630 -0
- package/lib/security/sandbox-enhanced.js.map +1 -0
- package/lib/security/sandbox.d.ts +104 -0
- package/lib/security/sandbox.d.ts.map +1 -0
- package/lib/security/sandbox.js +373 -0
- package/lib/security/sandbox.js.map +1 -0
- package/lib/security/security-config.example.d.ts +33 -0
- package/lib/security/security-config.example.d.ts.map +1 -0
- package/lib/security/security-config.example.js +166 -0
- package/lib/security/security-config.example.js.map +1 -0
- package/lib/subagent-goal-notify.d.ts +13 -0
- package/lib/subagent-goal-notify.d.ts.map +1 -0
- package/lib/subagent-goal-notify.js +32 -0
- package/lib/subagent-goal-notify.js.map +1 -0
- package/lib/subagent.d.ts +24 -0
- package/lib/subagent.d.ts.map +1 -1
- package/lib/subagent.js +98 -16
- package/lib/subagent.js.map +1 -1
- package/lib/typing-indicator/adapter-integration.d.ts +140 -0
- package/lib/typing-indicator/adapter-integration.d.ts.map +1 -0
- package/lib/typing-indicator/adapter-integration.js +473 -0
- package/lib/typing-indicator/adapter-integration.js.map +1 -0
- package/lib/typing-indicator/index.d.ts +170 -0
- package/lib/typing-indicator/index.d.ts.map +1 -0
- package/lib/typing-indicator/index.js +311 -0
- package/lib/typing-indicator/index.js.map +1 -0
- package/lib/typing-indicator/integration.d.ts +91 -0
- package/lib/typing-indicator/integration.d.ts.map +1 -0
- package/lib/typing-indicator/integration.js +219 -0
- package/lib/typing-indicator/integration.js.map +1 -0
- package/lib/zhin-agent/config.d.ts +20 -2
- package/lib/zhin-agent/config.d.ts.map +1 -1
- package/lib/zhin-agent/config.js +27 -9
- package/lib/zhin-agent/config.js.map +1 -1
- package/lib/zhin-agent/event-emitter.d.ts +11 -0
- package/lib/zhin-agent/event-emitter.d.ts.map +1 -0
- package/lib/zhin-agent/event-emitter.js +43 -0
- package/lib/zhin-agent/event-emitter.js.map +1 -0
- package/lib/zhin-agent/index.d.ts +9 -31
- package/lib/zhin-agent/index.d.ts.map +1 -1
- package/lib/zhin-agent/index.js +70 -672
- package/lib/zhin-agent/index.js.map +1 -1
- package/lib/zhin-agent/llm-runner.d.ts +16 -0
- package/lib/zhin-agent/llm-runner.d.ts.map +1 -0
- package/lib/zhin-agent/llm-runner.js +85 -0
- package/lib/zhin-agent/llm-runner.js.map +1 -0
- package/lib/zhin-agent/model-resolver.d.ts +9 -0
- package/lib/zhin-agent/model-resolver.d.ts.map +1 -0
- package/lib/zhin-agent/model-resolver.js +25 -0
- package/lib/zhin-agent/model-resolver.js.map +1 -0
- package/lib/zhin-agent/phase-trace.d.ts +12 -0
- package/lib/zhin-agent/phase-trace.d.ts.map +1 -0
- package/lib/zhin-agent/phase-trace.js +24 -0
- package/lib/zhin-agent/phase-trace.js.map +1 -0
- package/lib/zhin-agent/prompt-assembly.d.ts +22 -0
- package/lib/zhin-agent/prompt-assembly.d.ts.map +1 -0
- package/lib/zhin-agent/prompt-assembly.js +66 -0
- package/lib/zhin-agent/prompt-assembly.js.map +1 -0
- package/lib/zhin-agent/prompt-builder.d.ts +200 -0
- package/lib/zhin-agent/prompt-builder.d.ts.map +1 -0
- package/lib/zhin-agent/prompt-builder.js +574 -0
- package/lib/zhin-agent/prompt-builder.js.map +1 -0
- package/lib/zhin-agent/prompt-templates.d.ts +160 -0
- package/lib/zhin-agent/prompt-templates.d.ts.map +1 -0
- package/lib/zhin-agent/prompt-templates.js +436 -0
- package/lib/zhin-agent/prompt-templates.js.map +1 -0
- package/lib/zhin-agent/prompt.d.ts +15 -0
- package/lib/zhin-agent/prompt.d.ts.map +1 -1
- package/lib/zhin-agent/prompt.js +149 -4
- package/lib/zhin-agent/prompt.js.map +1 -1
- package/lib/zhin-agent/session-io.d.ts +10 -0
- package/lib/zhin-agent/session-io.d.ts.map +1 -0
- package/lib/zhin-agent/session-io.js +14 -0
- package/lib/zhin-agent/session-io.js.map +1 -0
- package/lib/zhin-agent/task-continuation.d.ts +144 -0
- package/lib/zhin-agent/task-continuation.d.ts.map +1 -0
- package/lib/zhin-agent/task-continuation.js +346 -0
- package/lib/zhin-agent/task-continuation.js.map +1 -0
- package/lib/zhin-agent/text-sanitize.d.ts +2 -5
- package/lib/zhin-agent/text-sanitize.d.ts.map +1 -1
- package/lib/zhin-agent/text-sanitize.js +2 -25
- package/lib/zhin-agent/text-sanitize.js.map +1 -1
- package/lib/zhin-agent/tool-calls-user-format.d.ts.map +1 -1
- package/lib/zhin-agent/tool-calls-user-format.js +12 -3
- package/lib/zhin-agent/tool-calls-user-format.js.map +1 -1
- package/lib/zhin-agent/tool-orchestration.d.ts +9 -0
- package/lib/zhin-agent/tool-orchestration.d.ts.map +1 -0
- package/lib/zhin-agent/tool-orchestration.js +68 -0
- package/lib/zhin-agent/tool-orchestration.js.map +1 -0
- package/lib/zhin-agent/tool-search-orchestrator.d.ts.map +1 -1
- package/lib/zhin-agent/tool-search-orchestrator.js +5 -2
- package/lib/zhin-agent/tool-search-orchestrator.js.map +1 -1
- package/lib/zhin-agent/turn-pipeline.d.ts +5 -0
- package/lib/zhin-agent/turn-pipeline.d.ts.map +1 -0
- package/lib/zhin-agent/turn-pipeline.js +541 -0
- package/lib/zhin-agent/turn-pipeline.js.map +1 -0
- package/lib/zhin-agent/turn-tracker.d.ts +17 -0
- package/lib/zhin-agent/turn-tracker.d.ts.map +1 -0
- package/lib/zhin-agent/turn-tracker.js +54 -0
- package/lib/zhin-agent/turn-tracker.js.map +1 -0
- package/lib/zhin-agent/web-search-locale-attach.d.ts +4 -0
- package/lib/zhin-agent/web-search-locale-attach.d.ts.map +1 -0
- package/lib/zhin-agent/web-search-locale-attach.js +19 -0
- package/lib/zhin-agent/web-search-locale-attach.js.map +1 -0
- package/lib/zhin-agent/zhin-agent-private.d.ts +66 -0
- package/lib/zhin-agent/zhin-agent-private.d.ts.map +1 -0
- package/lib/zhin-agent/zhin-agent-private.js +4 -0
- package/lib/zhin-agent/zhin-agent-private.js.map +1 -0
- package/package.json +5 -5
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agent 安全策略配置示例
|
|
3
|
+
*
|
|
4
|
+
* 展示如何配置所有安全策略。
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* 生产环境安全配置
|
|
8
|
+
*
|
|
9
|
+
* 严格的安全策略,适用于生产环境
|
|
10
|
+
*/
|
|
11
|
+
export const PRODUCTION_SECURITY_CONFIG = {
|
|
12
|
+
// 审计日志配置
|
|
13
|
+
audit: {
|
|
14
|
+
enabled: true,
|
|
15
|
+
logFile: 'data/audit/agent-audit.log',
|
|
16
|
+
minSeverity: 'info',
|
|
17
|
+
logSensitiveData: false, // 生产环境不记录敏感数据
|
|
18
|
+
retentionDays: 90, // 保留 90 天
|
|
19
|
+
maxFileSizeMB: 200, // 最大 200MB
|
|
20
|
+
},
|
|
21
|
+
// 网络策略配置
|
|
22
|
+
network: {
|
|
23
|
+
enabled: true,
|
|
24
|
+
// 允许访问的域名(白名单)
|
|
25
|
+
allowedDomains: [
|
|
26
|
+
'api.openai.com',
|
|
27
|
+
'api.anthropic.com',
|
|
28
|
+
'api.ollama.ai',
|
|
29
|
+
'github.com',
|
|
30
|
+
'api.github.com',
|
|
31
|
+
'registry.npmjs.org',
|
|
32
|
+
'api.npmjs.org',
|
|
33
|
+
],
|
|
34
|
+
// 禁止访问的域名(黑名单)
|
|
35
|
+
blockedDomains: [
|
|
36
|
+
'*.malware.com',
|
|
37
|
+
'*.phishing.com',
|
|
38
|
+
'pastebin.com',
|
|
39
|
+
'hastebin.com',
|
|
40
|
+
],
|
|
41
|
+
// 禁止私有 IP
|
|
42
|
+
blockPrivateIPs: true,
|
|
43
|
+
// 请求限制
|
|
44
|
+
maxRequestSize: 5 * 1024 * 1024, // 5MB
|
|
45
|
+
maxResponseSize: 20 * 1024 * 1024, // 20MB
|
|
46
|
+
requestTimeout: 15000, // 15 秒
|
|
47
|
+
rateLimit: 60, // 每分钟 60 次
|
|
48
|
+
// 禁止的协议
|
|
49
|
+
blockedProtocols: ['file', 'ftp', 'gopher', 'ssh'],
|
|
50
|
+
// 禁止的端口
|
|
51
|
+
blockedPorts: [22, 23, 25, 465, 587, 1080, 3306, 5432, 6379, 27017],
|
|
52
|
+
},
|
|
53
|
+
// 预算限制配置
|
|
54
|
+
budget: {
|
|
55
|
+
enabled: true,
|
|
56
|
+
// Token 限制
|
|
57
|
+
maxTokensPerSession: 500000, // 500K tokens
|
|
58
|
+
maxTokensPerUserPerDay: 2000000, // 2M tokens
|
|
59
|
+
// 成本限制
|
|
60
|
+
maxCostPerSession: 5.0, // $5
|
|
61
|
+
maxCostPerUserPerDay: 20.0, // $20
|
|
62
|
+
// 调用限制
|
|
63
|
+
maxToolCallsPerSession: 50,
|
|
64
|
+
maxIterationsPerSession: 15,
|
|
65
|
+
// 时长限制
|
|
66
|
+
maxSessionDuration: 1800000, // 30 分钟
|
|
67
|
+
// 警告阈值
|
|
68
|
+
warningThreshold: 75, // 75%
|
|
69
|
+
// 自动终止
|
|
70
|
+
autoTerminate: true,
|
|
71
|
+
},
|
|
72
|
+
};
|
|
73
|
+
/**
|
|
74
|
+
* 开发环境安全配置
|
|
75
|
+
*
|
|
76
|
+
* 宽松的安全策略,适用于开发和测试
|
|
77
|
+
*/
|
|
78
|
+
export const DEVELOPMENT_SECURITY_CONFIG = {
|
|
79
|
+
audit: {
|
|
80
|
+
enabled: true,
|
|
81
|
+
logFile: 'data/audit/agent-audit-dev.log',
|
|
82
|
+
minSeverity: 'warn', // 开发环境只记录警告及以上
|
|
83
|
+
logSensitiveData: true, // 开发环境可以记录敏感数据
|
|
84
|
+
retentionDays: 7, // 保留 7 天
|
|
85
|
+
maxFileSizeMB: 50, // 最大 50MB
|
|
86
|
+
},
|
|
87
|
+
network: {
|
|
88
|
+
enabled: true,
|
|
89
|
+
// 开发环境允许更多域名
|
|
90
|
+
allowedDomains: [
|
|
91
|
+
'api.openai.com',
|
|
92
|
+
'api.anthropic.com',
|
|
93
|
+
'api.ollama.ai',
|
|
94
|
+
'github.com',
|
|
95
|
+
'api.github.com',
|
|
96
|
+
'registry.npmjs.org',
|
|
97
|
+
'api.npmjs.org',
|
|
98
|
+
'localhost',
|
|
99
|
+
'127.0.0.1',
|
|
100
|
+
'*.dev',
|
|
101
|
+
'*.test',
|
|
102
|
+
'*.local',
|
|
103
|
+
],
|
|
104
|
+
blockPrivateIPs: false, // 开发环境允许私有 IP
|
|
105
|
+
maxRequestSize: 50 * 1024 * 1024, // 50MB
|
|
106
|
+
maxResponseSize: 100 * 1024 * 1024, // 100MB
|
|
107
|
+
requestTimeout: 60000, // 60 秒
|
|
108
|
+
rateLimit: 200, // 每分钟 200 次
|
|
109
|
+
blockedProtocols: ['file', 'ftp'],
|
|
110
|
+
blockedPorts: [22, 25, 465, 587],
|
|
111
|
+
},
|
|
112
|
+
budget: {
|
|
113
|
+
enabled: true,
|
|
114
|
+
maxTokensPerSession: 2000000, // 2M tokens
|
|
115
|
+
maxTokensPerUserPerDay: 10000000, // 10M tokens
|
|
116
|
+
maxCostPerSession: 20.0, // $20
|
|
117
|
+
maxCostPerUserPerDay: 100.0, // $100
|
|
118
|
+
maxToolCallsPerSession: 200,
|
|
119
|
+
maxIterationsPerSession: 50,
|
|
120
|
+
maxSessionDuration: 7200000, // 2 小时
|
|
121
|
+
warningThreshold: 85, // 85%
|
|
122
|
+
autoTerminate: false,
|
|
123
|
+
},
|
|
124
|
+
};
|
|
125
|
+
/**
|
|
126
|
+
* 最小安全配置
|
|
127
|
+
*
|
|
128
|
+
* 仅启用基本安全检查,适用于受信任环境
|
|
129
|
+
*/
|
|
130
|
+
export const MINIMAL_SECURITY_CONFIG = {
|
|
131
|
+
audit: {
|
|
132
|
+
enabled: false,
|
|
133
|
+
},
|
|
134
|
+
network: {
|
|
135
|
+
enabled: false,
|
|
136
|
+
},
|
|
137
|
+
budget: {
|
|
138
|
+
enabled: false,
|
|
139
|
+
},
|
|
140
|
+
};
|
|
141
|
+
/**
|
|
142
|
+
* 根据环境获取安全配置
|
|
143
|
+
*/
|
|
144
|
+
export function getSecurityConfigForEnvironment(env) {
|
|
145
|
+
switch (env) {
|
|
146
|
+
case 'production':
|
|
147
|
+
return PRODUCTION_SECURITY_CONFIG;
|
|
148
|
+
case 'development':
|
|
149
|
+
return DEVELOPMENT_SECURITY_CONFIG;
|
|
150
|
+
case 'minimal':
|
|
151
|
+
return MINIMAL_SECURITY_CONFIG;
|
|
152
|
+
default:
|
|
153
|
+
return DEVELOPMENT_SECURITY_CONFIG;
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* 合并自定义配置与默认配置
|
|
158
|
+
*/
|
|
159
|
+
export function mergeSecurityConfig(base, custom) {
|
|
160
|
+
return {
|
|
161
|
+
audit: { ...base.audit, ...custom.audit },
|
|
162
|
+
network: { ...base.network, ...custom.network },
|
|
163
|
+
budget: { ...base.budget, ...custom.budget },
|
|
164
|
+
};
|
|
165
|
+
}
|
|
166
|
+
//# sourceMappingURL=security-config.example.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"security-config.example.js","sourceRoot":"","sources":["../../src/security/security-config.example.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 主 Agent 委派子任务时,向 IM 用户即时发送 goal 进度提示。
|
|
3
|
+
*/
|
|
4
|
+
import type { ToolContext } from '@zhin.js/core';
|
|
5
|
+
/** ToolContext.extra 中挂载的回调键 */
|
|
6
|
+
export declare const SUBAGENT_GOAL_NOTIFY_EXTRA_KEY = "onSubagentGoal";
|
|
7
|
+
export type SubagentGoalNotifier = (goal: string) => void | Promise<void>;
|
|
8
|
+
export declare function truncateSubagentGoal(goal: string): string;
|
|
9
|
+
/** 用户可见格式:🔧 正在执行:${goal} */
|
|
10
|
+
export declare function formatSubagentProcessingMessage(goal: string): string;
|
|
11
|
+
export declare function getSubagentGoalNotifier(ctx?: ToolContext): SubagentGoalNotifier | undefined;
|
|
12
|
+
export declare function notifySubagentGoal(ctx: ToolContext | undefined, goal: string): Promise<void>;
|
|
13
|
+
//# sourceMappingURL=subagent-goal-notify.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"subagent-goal-notify.d.ts","sourceRoot":"","sources":["../src/subagent-goal-notify.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAEjD,gCAAgC;AAChC,eAAO,MAAM,8BAA8B,mBAAmB,CAAC;AAE/D,MAAM,MAAM,oBAAoB,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAI1E,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAIzD;AAED,6BAA6B;AAC7B,wBAAgB,+BAA+B,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEpE;AAED,wBAAgB,uBAAuB,CAAC,GAAG,CAAC,EAAE,WAAW,GAAG,oBAAoB,GAAG,SAAS,CAG3F;AAED,wBAAsB,kBAAkB,CAAC,GAAG,EAAE,WAAW,GAAG,SAAS,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAUlG"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/** ToolContext.extra 中挂载的回调键 */
|
|
2
|
+
export const SUBAGENT_GOAL_NOTIFY_EXTRA_KEY = 'onSubagentGoal';
|
|
3
|
+
const MAX_GOAL_CHARS = 500;
|
|
4
|
+
export function truncateSubagentGoal(goal) {
|
|
5
|
+
const trimmed = goal.trim();
|
|
6
|
+
if (trimmed.length <= MAX_GOAL_CHARS)
|
|
7
|
+
return trimmed;
|
|
8
|
+
return `${trimmed.slice(0, MAX_GOAL_CHARS)}…`;
|
|
9
|
+
}
|
|
10
|
+
/** 用户可见格式:🔧 正在执行:${goal} */
|
|
11
|
+
export function formatSubagentProcessingMessage(goal) {
|
|
12
|
+
return `🔧 正在执行:${truncateSubagentGoal(goal)}`;
|
|
13
|
+
}
|
|
14
|
+
export function getSubagentGoalNotifier(ctx) {
|
|
15
|
+
const fn = ctx?.extra?.[SUBAGENT_GOAL_NOTIFY_EXTRA_KEY];
|
|
16
|
+
return typeof fn === 'function' ? fn : undefined;
|
|
17
|
+
}
|
|
18
|
+
export async function notifySubagentGoal(ctx, goal) {
|
|
19
|
+
const notify = getSubagentGoalNotifier(ctx);
|
|
20
|
+
if (!notify)
|
|
21
|
+
return;
|
|
22
|
+
const trimmed = goal.trim();
|
|
23
|
+
if (!trimmed)
|
|
24
|
+
return;
|
|
25
|
+
try {
|
|
26
|
+
await notify(trimmed);
|
|
27
|
+
}
|
|
28
|
+
catch {
|
|
29
|
+
// 进度提示失败不中断子任务
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=subagent-goal-notify.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"subagent-goal-notify.js","sourceRoot":"","sources":["../src/subagent-goal-notify.ts"],"names":[],"mappings":"AAKA,gCAAgC;AAChC,MAAM,CAAC,MAAM,8BAA8B,GAAG,gBAAgB,CAAC;AAI/D,MAAM,cAAc,GAAG,GAAG,CAAC;AAE3B,MAAM,UAAU,oBAAoB,CAAC,IAAY;IAC/C,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IAC5B,IAAI,OAAO,CAAC,MAAM,IAAI,cAAc;QAAE,OAAO,OAAO,CAAC;IACrD,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,cAAc,CAAC,GAAG,CAAC;AAChD,CAAC;AAED,6BAA6B;AAC7B,MAAM,UAAU,+BAA+B,CAAC,IAAY;IAC1D,OAAO,WAAW,oBAAoB,CAAC,IAAI,CAAC,EAAE,CAAC;AACjD,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,GAAiB;IACvD,MAAM,EAAE,GAAG,GAAG,EAAE,KAAK,EAAE,CAAC,8BAA8B,CAAC,CAAC;IACxD,OAAO,OAAO,EAAE,KAAK,UAAU,CAAC,CAAC,CAAE,EAA2B,CAAC,CAAC,CAAC,SAAS,CAAC;AAC7E,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,GAA4B,EAAE,IAAY;IACjF,MAAM,MAAM,GAAG,uBAAuB,CAAC,GAAG,CAAC,CAAC;IAC5C,IAAI,CAAC,MAAM;QAAE,OAAO;IACpB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IAC5B,IAAI,CAAC,OAAO;QAAE,OAAO;IACrB,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC;IACxB,CAAC;IAAC,MAAM,CAAC;QACP,eAAe;IACjB,CAAC;AACH,CAAC"}
|
package/lib/subagent.d.ts
CHANGED
|
@@ -10,17 +10,35 @@
|
|
|
10
10
|
import type { AIProvider, AgentTool, Usage } from '@zhin.js/core';
|
|
11
11
|
import type { ModelRegistry } from '@zhin.js/ai';
|
|
12
12
|
import type { ZhinAgentConfig } from './zhin-agent/config.js';
|
|
13
|
+
import type { FileRole } from './security/file-role-policy.js';
|
|
14
|
+
import { AgentDispatcher, type AgentRole } from './orchestrator/agent-dispatcher.js';
|
|
13
15
|
export interface SubagentOrigin {
|
|
14
16
|
platform: string;
|
|
15
17
|
botId: string;
|
|
16
18
|
sceneId: string;
|
|
17
19
|
senderId: string;
|
|
18
20
|
sceneType: string;
|
|
21
|
+
fileRole?: FileRole;
|
|
19
22
|
}
|
|
20
23
|
export interface SpawnOptions {
|
|
21
24
|
task: string;
|
|
22
25
|
label?: string;
|
|
23
26
|
origin: SubagentOrigin;
|
|
27
|
+
/** Agent 角色(可选,默认为 'subtask') */
|
|
28
|
+
role?: AgentRole;
|
|
29
|
+
/** 任务上下文(可选) */
|
|
30
|
+
context?: Record<string, unknown>;
|
|
31
|
+
}
|
|
32
|
+
export interface SubagentLifecycleEvent {
|
|
33
|
+
phase: 'spawn' | 'start' | 'finish';
|
|
34
|
+
taskId: string;
|
|
35
|
+
label: string;
|
|
36
|
+
task: string;
|
|
37
|
+
origin: SubagentOrigin;
|
|
38
|
+
role?: AgentRole;
|
|
39
|
+
status?: 'ok' | 'error';
|
|
40
|
+
result?: string;
|
|
41
|
+
error?: string;
|
|
24
42
|
}
|
|
25
43
|
export type SubagentResultSender = (origin: SubagentOrigin, content: string) => Promise<void>;
|
|
26
44
|
export interface SubagentManagerOptions {
|
|
@@ -36,6 +54,10 @@ export interface SubagentManagerOptions {
|
|
|
36
54
|
onSubagentUsage?: (usage: Usage) => void;
|
|
37
55
|
/** 注册子 agent 生命周期 Promise,供主会话在 turn 结束前可选等待 */
|
|
38
56
|
registerSubagentTask?: (done: Promise<void>) => void;
|
|
57
|
+
/** Agent 调度器(可选,用于角色管理) */
|
|
58
|
+
agentDispatcher?: AgentDispatcher;
|
|
59
|
+
/** 生命周期事件回调(供上层桥接到统一事件总线) */
|
|
60
|
+
onEvent?: (event: SubagentLifecycleEvent) => void | Promise<void>;
|
|
39
61
|
}
|
|
40
62
|
export declare class SubagentManager {
|
|
41
63
|
private provider;
|
|
@@ -49,6 +71,8 @@ export declare class SubagentManager {
|
|
|
49
71
|
private resultSender;
|
|
50
72
|
private onSubagentUsage;
|
|
51
73
|
private registerSubagentTask;
|
|
74
|
+
private agentDispatcher;
|
|
75
|
+
private onEvent;
|
|
52
76
|
constructor(options: SubagentManagerOptions);
|
|
53
77
|
setSender(sender: SubagentResultSender): void;
|
|
54
78
|
setModelRegistry(registry: ModelRegistry | null): void;
|
package/lib/subagent.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"subagent.d.ts","sourceRoot":"","sources":["../src/subagent.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAKH,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAElE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"subagent.d.ts","sourceRoot":"","sources":["../src/subagent.ts"],"names":[],"mappings":"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"}
|
package/lib/subagent.js
CHANGED
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
*/
|
|
10
10
|
import { randomUUID } from 'node:crypto';
|
|
11
11
|
import { Logger } from '@zhin.js/core';
|
|
12
|
-
import { formatCompact, formatCompactUsage } from '@zhin.js/logger';
|
|
12
|
+
import { formatCompact, formatCompactUsage, truncatePreview } from '@zhin.js/logger';
|
|
13
13
|
import { createAgent } from '@zhin.js/ai';
|
|
14
14
|
import { applyExecPolicyToTools } from './security/exec-policy.js';
|
|
15
15
|
import { RESERVED_TOOL_NAMES, RESERVED_TOOL_NAME_PREFIXES } from './reserved-tools.js';
|
|
@@ -33,6 +33,8 @@ export class SubagentManager {
|
|
|
33
33
|
resultSender = null;
|
|
34
34
|
onSubagentUsage;
|
|
35
35
|
registerSubagentTask;
|
|
36
|
+
agentDispatcher;
|
|
37
|
+
onEvent;
|
|
36
38
|
constructor(options) {
|
|
37
39
|
this.provider = options.provider;
|
|
38
40
|
this.workspace = options.workspace;
|
|
@@ -43,6 +45,8 @@ export class SubagentManager {
|
|
|
43
45
|
this.modelRegistry = options.modelRegistry ?? null;
|
|
44
46
|
this.onSubagentUsage = options.onSubagentUsage ?? null;
|
|
45
47
|
this.registerSubagentTask = options.registerSubagentTask ?? null;
|
|
48
|
+
this.agentDispatcher = options.agentDispatcher ?? null;
|
|
49
|
+
this.onEvent = options.onEvent ?? null;
|
|
46
50
|
}
|
|
47
51
|
setSender(sender) {
|
|
48
52
|
this.resultSender = sender;
|
|
@@ -52,11 +56,12 @@ export class SubagentManager {
|
|
|
52
56
|
}
|
|
53
57
|
async spawn(options) {
|
|
54
58
|
const taskId = randomUUID().slice(0, 8);
|
|
59
|
+
const role = options.role || 'subtask';
|
|
55
60
|
const displayLabel = options.label ||
|
|
56
61
|
options.task.slice(0, 30) + (options.task.length > 30 ? '...' : '');
|
|
57
62
|
const abortController = new AbortController();
|
|
58
63
|
this.runningTasks.set(taskId, abortController);
|
|
59
|
-
const done = this.runSubagent(taskId, options.task, displayLabel, options.origin)
|
|
64
|
+
const done = this.runSubagent(taskId, options.task, displayLabel, options.origin, role, options.context)
|
|
60
65
|
.catch((error) => {
|
|
61
66
|
logger.error({ error, taskId }, 'Subagent failed');
|
|
62
67
|
})
|
|
@@ -64,30 +69,76 @@ export class SubagentManager {
|
|
|
64
69
|
this.runningTasks.delete(taskId);
|
|
65
70
|
});
|
|
66
71
|
this.registerSubagentTask?.(done);
|
|
67
|
-
logger.
|
|
72
|
+
logger.info(formatCompact({
|
|
73
|
+
subagent: 'spawn',
|
|
74
|
+
task_id: taskId,
|
|
75
|
+
label: displayLabel,
|
|
76
|
+
role,
|
|
77
|
+
task: truncatePreview(options.task, 300),
|
|
78
|
+
}));
|
|
79
|
+
void this.onEvent?.({
|
|
80
|
+
phase: 'spawn',
|
|
81
|
+
taskId,
|
|
82
|
+
label: displayLabel,
|
|
83
|
+
task: options.task,
|
|
84
|
+
origin: options.origin,
|
|
85
|
+
role,
|
|
86
|
+
});
|
|
68
87
|
return `子任务 [${displayLabel}] 已启动 (id: ${taskId}),完成后会自动通知你。`;
|
|
69
88
|
}
|
|
70
89
|
getRunningCount() {
|
|
71
90
|
return this.runningTasks.size;
|
|
72
91
|
}
|
|
73
92
|
// ── 内部方法 ──────────────────────────────────────────────────────
|
|
74
|
-
async runSubagent(taskId, task, label, origin) {
|
|
93
|
+
async runSubagent(taskId, task, label, origin, role = 'subtask', context) {
|
|
75
94
|
const startedAt = Date.now();
|
|
76
|
-
logger.debug(formatCompact({ task_id: taskId, label }));
|
|
95
|
+
logger.debug(formatCompact({ task_id: taskId, label, role }));
|
|
96
|
+
await this.onEvent?.({
|
|
97
|
+
phase: 'start',
|
|
98
|
+
taskId,
|
|
99
|
+
label,
|
|
100
|
+
task,
|
|
101
|
+
origin,
|
|
102
|
+
role,
|
|
103
|
+
});
|
|
77
104
|
try {
|
|
78
105
|
const allTools = this.createTools();
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
106
|
+
// 使用 Agent 调度器过滤工具(如果可用)
|
|
107
|
+
let tools;
|
|
108
|
+
if (this.agentDispatcher) {
|
|
109
|
+
tools = this.agentDispatcher.filterToolsByRole(allTools, role);
|
|
110
|
+
}
|
|
111
|
+
else {
|
|
112
|
+
tools = createRestrictedToolView(allTools, {
|
|
113
|
+
allowedNames: this.subagentTools.length
|
|
114
|
+
? this.subagentTools
|
|
115
|
+
: this.execPolicyConfig?.subagentTools?.length
|
|
116
|
+
? this.execPolicyConfig.subagentTools
|
|
117
|
+
: DEFAULT_SUBAGENT_TOOL_NAMES,
|
|
118
|
+
disabledNames: this.execPolicyConfig?.disabledTools,
|
|
119
|
+
});
|
|
120
|
+
}
|
|
87
121
|
if (this.execPolicyConfig) {
|
|
88
|
-
tools = applyExecPolicyToTools(this.execPolicyConfig, tools
|
|
122
|
+
tools = applyExecPolicyToTools(this.execPolicyConfig, tools, {
|
|
123
|
+
approvalMode: this.execPolicyConfig.subagentExecApprovalMode,
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
// 使用 Agent 调度器构建提示词(如果可用)
|
|
127
|
+
let systemPrompt;
|
|
128
|
+
if (this.agentDispatcher) {
|
|
129
|
+
const taskDef = this.agentDispatcher.createTask({
|
|
130
|
+
name: label,
|
|
131
|
+
description: task,
|
|
132
|
+
role,
|
|
133
|
+
goal: task,
|
|
134
|
+
priority: 'medium',
|
|
135
|
+
context,
|
|
136
|
+
});
|
|
137
|
+
systemPrompt = this.agentDispatcher.buildRolePrompt(role, taskDef);
|
|
138
|
+
}
|
|
139
|
+
else {
|
|
140
|
+
systemPrompt = this.buildSubagentPrompt(task);
|
|
89
141
|
}
|
|
90
|
-
const systemPrompt = this.buildSubagentPrompt(task);
|
|
91
142
|
const model = this.provider.models[0];
|
|
92
143
|
const contextBudget = this.execPolicyConfig
|
|
93
144
|
? resolveContextBudget({
|
|
@@ -102,6 +153,7 @@ export class SubagentManager {
|
|
|
102
153
|
botId: origin.botId,
|
|
103
154
|
sceneId: origin.sceneId,
|
|
104
155
|
senderId: origin.senderId,
|
|
156
|
+
fileRole: origin.fileRole,
|
|
105
157
|
};
|
|
106
158
|
const agent = createAgent(this.provider, {
|
|
107
159
|
model,
|
|
@@ -120,13 +172,26 @@ export class SubagentManager {
|
|
|
120
172
|
const result = await runWithDirectAgentExecution(bashToolContext, () => agent.run(task));
|
|
121
173
|
this.onSubagentUsage?.(result.usage);
|
|
122
174
|
const finalResult = result.content || '任务已完成,但未生成最终响应。';
|
|
123
|
-
logger.
|
|
175
|
+
logger.info(formatCompact({
|
|
176
|
+
subagent: 'done',
|
|
124
177
|
task_id: taskId,
|
|
178
|
+
label,
|
|
125
179
|
total_ms: Date.now() - startedAt,
|
|
126
180
|
usage: formatCompactUsage(result.usage),
|
|
127
181
|
iter: result.iterations,
|
|
128
182
|
model,
|
|
183
|
+
result: truncatePreview(finalResult, 480),
|
|
129
184
|
}));
|
|
185
|
+
await this.onEvent?.({
|
|
186
|
+
phase: 'finish',
|
|
187
|
+
taskId,
|
|
188
|
+
label,
|
|
189
|
+
task,
|
|
190
|
+
origin,
|
|
191
|
+
role,
|
|
192
|
+
status: 'ok',
|
|
193
|
+
result: finalResult,
|
|
194
|
+
});
|
|
130
195
|
await this.announceResult(taskId, label, task, finalResult, origin, 'ok');
|
|
131
196
|
}
|
|
132
197
|
finally {
|
|
@@ -136,6 +201,23 @@ export class SubagentManager {
|
|
|
136
201
|
catch (error) {
|
|
137
202
|
const errorMsg = `Error: ${error}`;
|
|
138
203
|
logger.error({ taskId, error }, 'Subagent failed');
|
|
204
|
+
logger.info(formatCompact({
|
|
205
|
+
subagent: 'done',
|
|
206
|
+
task_id: taskId,
|
|
207
|
+
label,
|
|
208
|
+
ok: false,
|
|
209
|
+
error: truncatePreview(errorMsg, 300),
|
|
210
|
+
}));
|
|
211
|
+
await this.onEvent?.({
|
|
212
|
+
phase: 'finish',
|
|
213
|
+
taskId,
|
|
214
|
+
label,
|
|
215
|
+
task,
|
|
216
|
+
origin,
|
|
217
|
+
role,
|
|
218
|
+
status: 'error',
|
|
219
|
+
error: errorMsg,
|
|
220
|
+
});
|
|
139
221
|
await this.announceResult(taskId, label, task, errorMsg, origin, 'error');
|
|
140
222
|
}
|
|
141
223
|
}
|
package/lib/subagent.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"subagent.js","sourceRoot":"","sources":["../src/subagent.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,kBAAkB,
|
|
1
|
+
{"version":3,"file":"subagent.js","sourceRoot":"","sources":["../src/subagent.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 通用适配器 Typing Indicator 集成模块
|
|
3
|
+
*
|
|
4
|
+
* 为所有适配器提供统一的 Typing Indicator 集成接口,
|
|
5
|
+
* 支持自动初始化和配置管理。
|
|
6
|
+
*/
|
|
7
|
+
import type { Bot } from '@zhin.js/core';
|
|
8
|
+
import { TypingIndicatorManager, type TypingIndicatorConfig, type TypingIndicator } from './index.js';
|
|
9
|
+
/**
|
|
10
|
+
* 平台 Bot 可能具备的扩展消息编辑能力
|
|
11
|
+
*/
|
|
12
|
+
interface MessageEditableBot {
|
|
13
|
+
$editMessage?(messageId: string, content: string): Promise<void>;
|
|
14
|
+
$updateMessage?(messageId: string, content: string): Promise<void>;
|
|
15
|
+
}
|
|
16
|
+
export type BotWithEditing = Bot & Partial<MessageEditableBot>;
|
|
17
|
+
export interface AdapterTypingIndicatorConfig {
|
|
18
|
+
/** 是否启用(默认 true) */
|
|
19
|
+
enabled?: boolean;
|
|
20
|
+
/** 默认表情(默认 '⏳') */
|
|
21
|
+
defaultEmoji?: string;
|
|
22
|
+
/** 是否在完成后自动移除(默认 true) */
|
|
23
|
+
autoRemove?: boolean;
|
|
24
|
+
/** 自动移除延迟,毫秒(默认 5000) */
|
|
25
|
+
removeDelay?: number;
|
|
26
|
+
/** 私聊配置 */
|
|
27
|
+
privateConfig?: Partial<TypingIndicatorConfig>;
|
|
28
|
+
/** 群聊配置 */
|
|
29
|
+
groupConfig?: Partial<TypingIndicatorConfig>;
|
|
30
|
+
/** 平台特定配置 */
|
|
31
|
+
platformConfig?: Record<string, Partial<TypingIndicatorConfig>>;
|
|
32
|
+
}
|
|
33
|
+
export interface PlatformFeatures {
|
|
34
|
+
/** 平台名称 */
|
|
35
|
+
platform: string;
|
|
36
|
+
/** 是否支持消息回应(reaction) */
|
|
37
|
+
supportsReaction: boolean;
|
|
38
|
+
/** 是否支持消息编辑 */
|
|
39
|
+
supportsEdit: boolean;
|
|
40
|
+
/** 是否支持消息删除 */
|
|
41
|
+
supportsDelete: boolean;
|
|
42
|
+
/** 是否支持输入状态 */
|
|
43
|
+
supportsTyping: boolean;
|
|
44
|
+
/** 默认提示类型 */
|
|
45
|
+
defaultType: 'reaction' | 'message' | 'typing' | 'none';
|
|
46
|
+
}
|
|
47
|
+
export declare const PLATFORM_FEATURES: Record<string, PlatformFeatures>;
|
|
48
|
+
export interface BotWithTypingIndicator extends Bot {
|
|
49
|
+
$typingIndicator?: TypingIndicatorManager;
|
|
50
|
+
$addReaction?(messageId: string, emoji: string): Promise<string | null>;
|
|
51
|
+
$removeReaction?(messageId: string, reactionId: string): Promise<void>;
|
|
52
|
+
}
|
|
53
|
+
export declare class AdapterTypingIndicatorManager {
|
|
54
|
+
private managers;
|
|
55
|
+
private configs;
|
|
56
|
+
/**
|
|
57
|
+
* 为 Bot 启用 Typing Indicator
|
|
58
|
+
*/
|
|
59
|
+
enableForBot(bot: BotWithTypingIndicator, platform: string, config?: Partial<AdapterTypingIndicatorConfig>): TypingIndicatorManager;
|
|
60
|
+
/**
|
|
61
|
+
* 注册平台适配器
|
|
62
|
+
*/
|
|
63
|
+
private registerAdapter;
|
|
64
|
+
/**
|
|
65
|
+
* 解析会话 ID
|
|
66
|
+
*/
|
|
67
|
+
private parseSessionId;
|
|
68
|
+
/**
|
|
69
|
+
* 获取 Bot 的管理器
|
|
70
|
+
*/
|
|
71
|
+
getManager(platform: string, botId: string): TypingIndicatorManager | undefined;
|
|
72
|
+
/**
|
|
73
|
+
* 获取 Bot 的配置
|
|
74
|
+
*/
|
|
75
|
+
getConfig(platform: string, botId: string): AdapterTypingIndicatorConfig | undefined;
|
|
76
|
+
/**
|
|
77
|
+
* 停止 Bot 的所有提示
|
|
78
|
+
*/
|
|
79
|
+
stopAll(platform: string, botId: string): Promise<void>;
|
|
80
|
+
/**
|
|
81
|
+
* 停止所有 Bot 的所有提示
|
|
82
|
+
*/
|
|
83
|
+
stopAllBots(): Promise<void>;
|
|
84
|
+
/**
|
|
85
|
+
* 移除 Bot 的管理器
|
|
86
|
+
*/
|
|
87
|
+
removeBot(platform: string, botId: string): void;
|
|
88
|
+
/**
|
|
89
|
+
* 清除所有管理器
|
|
90
|
+
*/
|
|
91
|
+
clearAll(): void;
|
|
92
|
+
/**
|
|
93
|
+
* 获取所有已注册的 Bot
|
|
94
|
+
*/
|
|
95
|
+
getRegisteredBots(): Array<{
|
|
96
|
+
platform: string;
|
|
97
|
+
botId: string;
|
|
98
|
+
}>;
|
|
99
|
+
/**
|
|
100
|
+
* 获取平台特性
|
|
101
|
+
*/
|
|
102
|
+
getPlatformFeatures(platform: string): PlatformFeatures | undefined;
|
|
103
|
+
/**
|
|
104
|
+
* 检查平台是否支持 Typing Indicator
|
|
105
|
+
*/
|
|
106
|
+
supportsTypingIndicator(platform: string): boolean;
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* 获取全局适配器 Typing Indicator 管理器
|
|
110
|
+
*/
|
|
111
|
+
export declare function getAdapterTypingIndicatorManager(): AdapterTypingIndicatorManager;
|
|
112
|
+
/**
|
|
113
|
+
* 初始化适配器 Typing Indicator 管理器
|
|
114
|
+
*/
|
|
115
|
+
export declare function initAdapterTypingIndicatorManager(): AdapterTypingIndicatorManager;
|
|
116
|
+
/**
|
|
117
|
+
* 为 Bot 启用 Typing Indicator
|
|
118
|
+
*/
|
|
119
|
+
export declare function enableTypingIndicatorForBot(bot: BotWithTypingIndicator, platform: string, config?: Partial<AdapterTypingIndicatorConfig>): TypingIndicatorManager;
|
|
120
|
+
/**
|
|
121
|
+
* 快速开始提示
|
|
122
|
+
*/
|
|
123
|
+
export declare function startTypingForBot(bot: BotWithTypingIndicator, platform: string, options: {
|
|
124
|
+
messageId?: string;
|
|
125
|
+
sessionId: string;
|
|
126
|
+
userId?: string;
|
|
127
|
+
groupId?: string;
|
|
128
|
+
sceneType?: 'private' | 'group' | 'channel';
|
|
129
|
+
}, config?: Partial<AdapterTypingIndicatorConfig>): Promise<TypingIndicator>;
|
|
130
|
+
/**
|
|
131
|
+
* 快速停止提示
|
|
132
|
+
*/
|
|
133
|
+
export declare function stopTypingForBot(bot: BotWithTypingIndicator, platform: string, options: {
|
|
134
|
+
sessionId: string;
|
|
135
|
+
userId?: string;
|
|
136
|
+
groupId?: string;
|
|
137
|
+
sceneType?: 'private' | 'group' | 'channel';
|
|
138
|
+
}): Promise<void>;
|
|
139
|
+
export {};
|
|
140
|
+
//# sourceMappingURL=adapter-integration.d.ts.map
|