workerclaw 0.2.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/LICENSE +21 -0
- package/README.md +129 -0
- package/dist/active-behavior/behavior-scheduler.d.ts +119 -0
- package/dist/active-behavior/behavior-scheduler.d.ts.map +1 -0
- package/dist/active-behavior/behavior-scheduler.js +297 -0
- package/dist/active-behavior/behavior-scheduler.js.map +1 -0
- package/dist/active-behavior/frequency-control.d.ts +72 -0
- package/dist/active-behavior/frequency-control.d.ts.map +1 -0
- package/dist/active-behavior/frequency-control.js +206 -0
- package/dist/active-behavior/frequency-control.js.map +1 -0
- package/dist/active-behavior/index.d.ts +8 -0
- package/dist/active-behavior/index.d.ts.map +1 -0
- package/dist/active-behavior/index.js +6 -0
- package/dist/active-behavior/index.js.map +1 -0
- package/dist/agent/agent-engine.d.ts +122 -0
- package/dist/agent/agent-engine.d.ts.map +1 -0
- package/dist/agent/agent-engine.js +380 -0
- package/dist/agent/agent-engine.js.map +1 -0
- package/dist/agent/context-window.d.ts +69 -0
- package/dist/agent/context-window.d.ts.map +1 -0
- package/dist/agent/context-window.js +210 -0
- package/dist/agent/context-window.js.map +1 -0
- package/dist/agent/llm-client.d.ts +37 -0
- package/dist/agent/llm-client.d.ts.map +1 -0
- package/dist/agent/llm-client.js +155 -0
- package/dist/agent/llm-client.js.map +1 -0
- package/dist/agent/personality.d.ts +71 -0
- package/dist/agent/personality.d.ts.map +1 -0
- package/dist/agent/personality.js +147 -0
- package/dist/agent/personality.js.map +1 -0
- package/dist/agent/session-manager.d.ts +111 -0
- package/dist/agent/session-manager.d.ts.map +1 -0
- package/dist/agent/session-manager.js +205 -0
- package/dist/agent/session-manager.js.map +1 -0
- package/dist/agent/tool-executor.d.ts +34 -0
- package/dist/agent/tool-executor.d.ts.map +1 -0
- package/dist/agent/tool-executor.js +145 -0
- package/dist/agent/tool-executor.js.map +1 -0
- package/dist/agent/tool-registry.d.ts +67 -0
- package/dist/agent/tool-registry.d.ts.map +1 -0
- package/dist/agent/tool-registry.js +272 -0
- package/dist/agent/tool-registry.js.map +1 -0
- package/dist/cli/configure.d.ts +16 -0
- package/dist/cli/configure.d.ts.map +1 -0
- package/dist/cli/configure.js +212 -0
- package/dist/cli/configure.js.map +1 -0
- package/dist/cli/index.d.ts +17 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +256 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/prompter.d.ts +59 -0
- package/dist/cli/prompter.d.ts.map +1 -0
- package/dist/cli/prompter.js +120 -0
- package/dist/cli/prompter.js.map +1 -0
- package/dist/cli/sections/index.d.ts +9 -0
- package/dist/cli/sections/index.d.ts.map +1 -0
- package/dist/cli/sections/index.js +9 -0
- package/dist/cli/sections/index.js.map +1 -0
- package/dist/cli/sections/llm.d.ts +14 -0
- package/dist/cli/sections/llm.d.ts.map +1 -0
- package/dist/cli/sections/llm.js +155 -0
- package/dist/cli/sections/llm.js.map +1 -0
- package/dist/cli/sections/personality.d.ts +14 -0
- package/dist/cli/sections/personality.d.ts.map +1 -0
- package/dist/cli/sections/personality.js +90 -0
- package/dist/cli/sections/personality.js.map +1 -0
- package/dist/cli/sections/platform.d.ts +14 -0
- package/dist/cli/sections/platform.d.ts.map +1 -0
- package/dist/cli/sections/platform.js +179 -0
- package/dist/cli/sections/platform.js.map +1 -0
- package/dist/cli/sections/security.d.ts +14 -0
- package/dist/cli/sections/security.d.ts.map +1 -0
- package/dist/cli/sections/security.js +106 -0
- package/dist/cli/sections/security.js.map +1 -0
- package/dist/cli/sections/skills.d.ts +10 -0
- package/dist/cli/sections/skills.d.ts.map +1 -0
- package/dist/cli/sections/skills.js +149 -0
- package/dist/cli/sections/skills.js.map +1 -0
- package/dist/cli.d.ts +8 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +116 -0
- package/dist/cli.js.map +1 -0
- package/dist/core/config.d.ts +175 -0
- package/dist/core/config.d.ts.map +1 -0
- package/dist/core/config.js +109 -0
- package/dist/core/config.js.map +1 -0
- package/dist/core/events.d.ts +211 -0
- package/dist/core/events.d.ts.map +1 -0
- package/dist/core/events.js +152 -0
- package/dist/core/events.js.map +1 -0
- package/dist/core/logger.d.ts +23 -0
- package/dist/core/logger.d.ts.map +1 -0
- package/dist/core/logger.js +53 -0
- package/dist/core/logger.js.map +1 -0
- package/dist/core/workerclaw.d.ts +83 -0
- package/dist/core/workerclaw.d.ts.map +1 -0
- package/dist/core/workerclaw.js +161 -0
- package/dist/core/workerclaw.js.map +1 -0
- package/dist/index.d.ts +27 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +21 -0
- package/dist/index.js.map +1 -0
- package/dist/ingress/message-parser.d.ts +36 -0
- package/dist/ingress/message-parser.d.ts.map +1 -0
- package/dist/ingress/message-parser.js +107 -0
- package/dist/ingress/message-parser.js.map +1 -0
- package/dist/ingress/miniabc-client.d.ts +109 -0
- package/dist/ingress/miniabc-client.d.ts.map +1 -0
- package/dist/ingress/miniabc-client.js +345 -0
- package/dist/ingress/miniabc-client.js.map +1 -0
- package/dist/ingress/platform-api.d.ts +82 -0
- package/dist/ingress/platform-api.d.ts.map +1 -0
- package/dist/ingress/platform-api.js +209 -0
- package/dist/ingress/platform-api.js.map +1 -0
- package/dist/sandbox/command-sandbox.d.ts +46 -0
- package/dist/sandbox/command-sandbox.d.ts.map +1 -0
- package/dist/sandbox/command-sandbox.js +144 -0
- package/dist/sandbox/command-sandbox.js.map +1 -0
- package/dist/sandbox/fs-sandbox.d.ts +56 -0
- package/dist/sandbox/fs-sandbox.d.ts.map +1 -0
- package/dist/sandbox/fs-sandbox.js +119 -0
- package/dist/sandbox/fs-sandbox.js.map +1 -0
- package/dist/sandbox/network-sandbox.d.ts +41 -0
- package/dist/sandbox/network-sandbox.d.ts.map +1 -0
- package/dist/sandbox/network-sandbox.js +114 -0
- package/dist/sandbox/network-sandbox.js.map +1 -0
- package/dist/security/content-scanner.d.ts +59 -0
- package/dist/security/content-scanner.d.ts.map +1 -0
- package/dist/security/content-scanner.js +289 -0
- package/dist/security/content-scanner.js.map +1 -0
- package/dist/security/gate.d.ts +78 -0
- package/dist/security/gate.d.ts.map +1 -0
- package/dist/security/gate.js +150 -0
- package/dist/security/gate.js.map +1 -0
- package/dist/security/permission-level.d.ts +68 -0
- package/dist/security/permission-level.d.ts.map +1 -0
- package/dist/security/permission-level.js +191 -0
- package/dist/security/permission-level.js.map +1 -0
- package/dist/security/rate-limiter.d.ts +52 -0
- package/dist/security/rate-limiter.d.ts.map +1 -0
- package/dist/security/rate-limiter.js +133 -0
- package/dist/security/rate-limiter.js.map +1 -0
- package/dist/security/source-verifier.d.ts +33 -0
- package/dist/security/source-verifier.d.ts.map +1 -0
- package/dist/security/source-verifier.js +106 -0
- package/dist/security/source-verifier.js.map +1 -0
- package/dist/skills/builtin/code.d.ts +27 -0
- package/dist/skills/builtin/code.d.ts.map +1 -0
- package/dist/skills/builtin/code.js +132 -0
- package/dist/skills/builtin/code.js.map +1 -0
- package/dist/skills/builtin/index.d.ts +12 -0
- package/dist/skills/builtin/index.d.ts.map +1 -0
- package/dist/skills/builtin/index.js +16 -0
- package/dist/skills/builtin/index.js.map +1 -0
- package/dist/skills/builtin/search.d.ts +27 -0
- package/dist/skills/builtin/search.d.ts.map +1 -0
- package/dist/skills/builtin/search.js +105 -0
- package/dist/skills/builtin/search.js.map +1 -0
- package/dist/skills/builtin/writing.d.ts +22 -0
- package/dist/skills/builtin/writing.d.ts.map +1 -0
- package/dist/skills/builtin/writing.js +93 -0
- package/dist/skills/builtin/writing.js.map +1 -0
- package/dist/skills/index.d.ts +11 -0
- package/dist/skills/index.d.ts.map +1 -0
- package/dist/skills/index.js +10 -0
- package/dist/skills/index.js.map +1 -0
- package/dist/skills/pack-loader.d.ts +31 -0
- package/dist/skills/pack-loader.d.ts.map +1 -0
- package/dist/skills/pack-loader.js +167 -0
- package/dist/skills/pack-loader.js.map +1 -0
- package/dist/skills/pack-registry.d.ts +40 -0
- package/dist/skills/pack-registry.d.ts.map +1 -0
- package/dist/skills/pack-registry.js +80 -0
- package/dist/skills/pack-registry.js.map +1 -0
- package/dist/skills/pack-types.d.ts +64 -0
- package/dist/skills/pack-types.d.ts.map +1 -0
- package/dist/skills/pack-types.js +7 -0
- package/dist/skills/pack-types.js.map +1 -0
- package/dist/skills/skill-registry.d.ts +83 -0
- package/dist/skills/skill-registry.d.ts.map +1 -0
- package/dist/skills/skill-registry.js +206 -0
- package/dist/skills/skill-registry.js.map +1 -0
- package/dist/skills/skill-runner.d.ts +49 -0
- package/dist/skills/skill-runner.d.ts.map +1 -0
- package/dist/skills/skill-runner.js +128 -0
- package/dist/skills/skill-runner.js.map +1 -0
- package/dist/skills/types.d.ts +94 -0
- package/dist/skills/types.d.ts.map +1 -0
- package/dist/skills/types.js +7 -0
- package/dist/skills/types.js.map +1 -0
- package/dist/task/concurrency.d.ts +87 -0
- package/dist/task/concurrency.d.ts.map +1 -0
- package/dist/task/concurrency.js +269 -0
- package/dist/task/concurrency.js.map +1 -0
- package/dist/task/task-evaluator.d.ts +52 -0
- package/dist/task/task-evaluator.d.ts.map +1 -0
- package/dist/task/task-evaluator.js +141 -0
- package/dist/task/task-evaluator.js.map +1 -0
- package/dist/task/task-manager.d.ts +112 -0
- package/dist/task/task-manager.d.ts.map +1 -0
- package/dist/task/task-manager.js +382 -0
- package/dist/task/task-manager.js.map +1 -0
- package/dist/task/task-state-machine.d.ts +63 -0
- package/dist/task/task-state-machine.d.ts.map +1 -0
- package/dist/task/task-state-machine.js +149 -0
- package/dist/task/task-state-machine.js.map +1 -0
- package/dist/types/agent.d.ts +79 -0
- package/dist/types/agent.d.ts.map +1 -0
- package/dist/types/agent.js +7 -0
- package/dist/types/agent.js.map +1 -0
- package/dist/types/index.d.ts +7 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +5 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/message.d.ts +87 -0
- package/dist/types/message.d.ts.map +1 -0
- package/dist/types/message.js +30 -0
- package/dist/types/message.js.map +1 -0
- package/dist/types/task.d.ts +176 -0
- package/dist/types/task.d.ts.map +1 -0
- package/dist/types/task.js +5 -0
- package/dist/types/task.js.map +1 -0
- package/package.json +57 -0
- package/workerclaw.config.example.json +78 -0
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 来源验证器
|
|
3
|
+
*
|
|
4
|
+
* 验证消息是否来自智工坊平台
|
|
5
|
+
*/
|
|
6
|
+
import { createLogger } from '../core/logger.js';
|
|
7
|
+
import { WSMessageType } from '../types/message.js';
|
|
8
|
+
const DEFAULT_SOURCE_CONFIG = {
|
|
9
|
+
validateTimestamp: true,
|
|
10
|
+
maxTimestampSkewMs: 5 * 60 * 1000, // 5 分钟
|
|
11
|
+
requireTaskId: true,
|
|
12
|
+
requireSenderId: true,
|
|
13
|
+
};
|
|
14
|
+
export class SourceVerifier {
|
|
15
|
+
logger;
|
|
16
|
+
config;
|
|
17
|
+
constructor(config = {}) {
|
|
18
|
+
this.config = { ...DEFAULT_SOURCE_CONFIG, ...config };
|
|
19
|
+
this.logger = createLogger('SourceVerifier');
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* 验证消息来源
|
|
23
|
+
*/
|
|
24
|
+
verify(message) {
|
|
25
|
+
// 1. 验证消息类型
|
|
26
|
+
const typeResult = this.validateType(message);
|
|
27
|
+
if (!typeResult.valid)
|
|
28
|
+
return typeResult;
|
|
29
|
+
// 2. 验证消息结构
|
|
30
|
+
const structureResult = this.validateStructure(message);
|
|
31
|
+
if (!structureResult.valid)
|
|
32
|
+
return structureResult;
|
|
33
|
+
// 3. 验证时间戳
|
|
34
|
+
if (this.config.validateTimestamp) {
|
|
35
|
+
const tsResult = this.validateTimestamp(message);
|
|
36
|
+
if (!tsResult.valid)
|
|
37
|
+
return tsResult;
|
|
38
|
+
}
|
|
39
|
+
return { valid: true };
|
|
40
|
+
}
|
|
41
|
+
// ==================== 私有方法 ====================
|
|
42
|
+
validateType(message) {
|
|
43
|
+
if (!message.type) {
|
|
44
|
+
return { valid: false, reason: '消息缺少 type 字段' };
|
|
45
|
+
}
|
|
46
|
+
// 检查是否是已知的消息类型
|
|
47
|
+
const validTypes = new Set(Object.values(WSMessageType));
|
|
48
|
+
if (!validTypes.has(message.type)) {
|
|
49
|
+
this.logger.warn('未知消息类型', { type: message.type });
|
|
50
|
+
// 不拒绝,但记录警告(平台可能新增消息类型)
|
|
51
|
+
}
|
|
52
|
+
return { valid: true };
|
|
53
|
+
}
|
|
54
|
+
validateStructure(message) {
|
|
55
|
+
// 任务消息必须有 msgId
|
|
56
|
+
if (!message.msgId) {
|
|
57
|
+
return { valid: false, reason: '消息缺少 msgId 字段' };
|
|
58
|
+
}
|
|
59
|
+
// 任务推送必须完整
|
|
60
|
+
if (message.type === WSMessageType.TASK_PUSH) {
|
|
61
|
+
const data = message.data;
|
|
62
|
+
if (!data) {
|
|
63
|
+
return { valid: false, reason: '任务推送消息缺少 data 字段' };
|
|
64
|
+
}
|
|
65
|
+
if (this.config.requireTaskId && !data.taskId) {
|
|
66
|
+
return { valid: false, reason: '任务推送消息缺少 taskId' };
|
|
67
|
+
}
|
|
68
|
+
if (!data.description) {
|
|
69
|
+
return { valid: false, reason: '任务推送消息缺少 description' };
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
// 非系统消息应该有发送者
|
|
73
|
+
if (this.config.requireSenderId &&
|
|
74
|
+
message.type !== WSMessageType.SYSTEM &&
|
|
75
|
+
message.type !== WSMessageType.PING &&
|
|
76
|
+
message.type !== WSMessageType.PONG &&
|
|
77
|
+
message.type !== WSMessageType.CONNECT_ACK &&
|
|
78
|
+
!message.from) {
|
|
79
|
+
this.logger.warn('消息缺少 from 字段', { type: message.type });
|
|
80
|
+
// 记录警告但不拒绝
|
|
81
|
+
}
|
|
82
|
+
return { valid: true };
|
|
83
|
+
}
|
|
84
|
+
validateTimestamp(message) {
|
|
85
|
+
if (!message.timestamp) {
|
|
86
|
+
return { valid: false, reason: '消息缺少 timestamp 字段' };
|
|
87
|
+
}
|
|
88
|
+
try {
|
|
89
|
+
const msgTime = new Date(message.timestamp).getTime();
|
|
90
|
+
const now = Date.now();
|
|
91
|
+
const skew = Math.abs(now - msgTime);
|
|
92
|
+
if (skew > this.config.maxTimestampSkewMs) {
|
|
93
|
+
const skewMin = Math.round(skew / 60_000);
|
|
94
|
+
return {
|
|
95
|
+
valid: false,
|
|
96
|
+
reason: `消息时间偏移过大 (${skewMin} 分钟),可能为过期消息`,
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
return { valid: true };
|
|
100
|
+
}
|
|
101
|
+
catch {
|
|
102
|
+
return { valid: false, reason: '消息 timestamp 格式无效' };
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
//# sourceMappingURL=source-verifier.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"source-verifier.js","sourceRoot":"","sources":["../../src/security/source-verifier.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 内置技能:代码执行
|
|
3
|
+
*
|
|
4
|
+
* 代码生成、执行和分析
|
|
5
|
+
* 集成命令沙箱进行安全的代码执行
|
|
6
|
+
*/
|
|
7
|
+
import type { Skill, SkillMetadata, SkillContext, SkillResult } from '../types.js';
|
|
8
|
+
import type { ToolDefinition, ToolExecutorFn } from '../../types/agent.js';
|
|
9
|
+
export declare class CodeSkill implements Skill {
|
|
10
|
+
metadata: SkillMetadata;
|
|
11
|
+
/** 提供的工具列表 */
|
|
12
|
+
tools: ToolDefinition[];
|
|
13
|
+
/** 工具执行器(占位) */
|
|
14
|
+
toolExecutors: Record<string, ToolExecutorFn>;
|
|
15
|
+
execute(context: SkillContext): Promise<SkillResult>;
|
|
16
|
+
/**
|
|
17
|
+
* 分析代码任务
|
|
18
|
+
*/
|
|
19
|
+
private analyzeTask;
|
|
20
|
+
/**
|
|
21
|
+
* 构建执行计划
|
|
22
|
+
*/
|
|
23
|
+
private buildExecutionPlan;
|
|
24
|
+
getSystemPromptAddon(): string;
|
|
25
|
+
}
|
|
26
|
+
export declare const codeSkill: CodeSkill;
|
|
27
|
+
//# sourceMappingURL=code.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"code.d.ts","sourceRoot":"","sources":["../../../src/skills/builtin/code.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACnF,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAwC3E,qBAAa,SAAU,YAAW,KAAK;IACrC,QAAQ,gBAAY;IAEpB,cAAc;IACd,KAAK,EAAE,cAAc,EAAE,CAAiB;IAExC,gBAAgB;IAChB,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAM;IAE7C,OAAO,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC;IA6B1D;;OAEG;IACH,OAAO,CAAC,WAAW;IAiCnB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAQ1B,oBAAoB,IAAI,MAAM;CAW/B;AAED,eAAO,MAAM,SAAS,WAAkB,CAAC"}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 内置技能:代码执行
|
|
3
|
+
*
|
|
4
|
+
* 代码生成、执行和分析
|
|
5
|
+
* 集成命令沙箱进行安全的代码执行
|
|
6
|
+
*/
|
|
7
|
+
const metadata = {
|
|
8
|
+
name: 'code',
|
|
9
|
+
displayName: '代码助手',
|
|
10
|
+
description: '代码生成、执行和调试,支持 JavaScript 和 Python',
|
|
11
|
+
version: '2.0.0',
|
|
12
|
+
author: 'WorkerClaw',
|
|
13
|
+
tags: ['代码', '编程', '执行'],
|
|
14
|
+
requiredLevel: 'elevated',
|
|
15
|
+
applicableTaskTypes: ['code_dev', 'data_analysis'],
|
|
16
|
+
requiredTools: ['run_code', 'llm_query'],
|
|
17
|
+
};
|
|
18
|
+
/** run_code 工具定义 */
|
|
19
|
+
const runCodeTool = {
|
|
20
|
+
name: 'run_code',
|
|
21
|
+
description: '在安全沙箱中执行代码。支持 JavaScript 和 Python。',
|
|
22
|
+
requiredLevel: 'elevated',
|
|
23
|
+
parameters: {
|
|
24
|
+
type: 'object',
|
|
25
|
+
properties: {
|
|
26
|
+
language: {
|
|
27
|
+
type: 'string',
|
|
28
|
+
enum: ['javascript', 'python'],
|
|
29
|
+
description: '编程语言',
|
|
30
|
+
},
|
|
31
|
+
code: {
|
|
32
|
+
type: 'string',
|
|
33
|
+
description: '要执行的代码',
|
|
34
|
+
},
|
|
35
|
+
timeout: {
|
|
36
|
+
type: 'number',
|
|
37
|
+
description: '超时时间(秒),默认 30',
|
|
38
|
+
},
|
|
39
|
+
},
|
|
40
|
+
required: ['language', 'code'],
|
|
41
|
+
},
|
|
42
|
+
};
|
|
43
|
+
export class CodeSkill {
|
|
44
|
+
metadata = metadata;
|
|
45
|
+
/** 提供的工具列表 */
|
|
46
|
+
tools = [runCodeTool];
|
|
47
|
+
/** 工具执行器(占位) */
|
|
48
|
+
toolExecutors = {};
|
|
49
|
+
async execute(context) {
|
|
50
|
+
const startTime = Date.now();
|
|
51
|
+
const { task } = context;
|
|
52
|
+
try {
|
|
53
|
+
// 分析代码任务
|
|
54
|
+
const analysis = this.analyzeTask(task);
|
|
55
|
+
const plan = this.buildExecutionPlan(task);
|
|
56
|
+
return {
|
|
57
|
+
success: true,
|
|
58
|
+
content: `[代码技能] 执行计划已生成:\n\n${analysis}\n计划: ${plan}`,
|
|
59
|
+
outputs: [{
|
|
60
|
+
type: 'text',
|
|
61
|
+
content: `代码任务: ${task.title}\n\n分析: ${analysis}\n执行计划: ${plan}\n\n将通过 run_code 工具在沙箱中执行代码。`,
|
|
62
|
+
}],
|
|
63
|
+
durationMs: Date.now() - startTime,
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
catch (err) {
|
|
67
|
+
return {
|
|
68
|
+
success: false,
|
|
69
|
+
content: '',
|
|
70
|
+
outputs: [],
|
|
71
|
+
durationMs: Date.now() - startTime,
|
|
72
|
+
error: err.message,
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* 分析代码任务
|
|
78
|
+
*/
|
|
79
|
+
analyzeTask(task) {
|
|
80
|
+
const desc = task.description || '';
|
|
81
|
+
const title = task.title || '';
|
|
82
|
+
// 检测编程语言
|
|
83
|
+
const langHints = {
|
|
84
|
+
javascript: ['js', 'javascript', 'node', 'npm', 'typescript', 'ts'],
|
|
85
|
+
python: ['python', 'py', 'pip', 'pandas', 'numpy', 'django', 'flask'],
|
|
86
|
+
shell: ['shell', 'bash', 'sh', '脚本'],
|
|
87
|
+
};
|
|
88
|
+
let detectedLang = 'javascript';
|
|
89
|
+
for (const [lang, hints] of Object.entries(langHints)) {
|
|
90
|
+
if (hints.some(h => desc.toLowerCase().includes(h) || title.toLowerCase().includes(h))) {
|
|
91
|
+
detectedLang = lang;
|
|
92
|
+
break;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
// 检测任务类型
|
|
96
|
+
const isDataAnalysis = task.taskType === 'data_analysis' ||
|
|
97
|
+
/分析|统计|图表|数据|dataset/i.test(desc);
|
|
98
|
+
const isDebug = /debug|调试|fix|修复|error/i.test(desc);
|
|
99
|
+
const isGenerate = /生成|create|write|写|实现/i.test(desc);
|
|
100
|
+
let taskType = '代码生成';
|
|
101
|
+
if (isDataAnalysis)
|
|
102
|
+
taskType = '数据分析';
|
|
103
|
+
if (isDebug)
|
|
104
|
+
taskType = '代码调试';
|
|
105
|
+
if (isGenerate)
|
|
106
|
+
taskType = '代码生成';
|
|
107
|
+
return `类型: ${taskType} | 语言: ${detectedLang}`;
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* 构建执行计划
|
|
111
|
+
*/
|
|
112
|
+
buildExecutionPlan(task) {
|
|
113
|
+
const isDataAnalysis = task.taskType === 'data_analysis';
|
|
114
|
+
if (isDataAnalysis) {
|
|
115
|
+
return '读取数据 → 数据清洗 → 分析处理 → 生成结果';
|
|
116
|
+
}
|
|
117
|
+
return '理解需求 → 编写代码 → 安全检查 → 执行验证 → 输出结果';
|
|
118
|
+
}
|
|
119
|
+
getSystemPromptAddon() {
|
|
120
|
+
return `## 代码技能提示
|
|
121
|
+
- 先理解需求再写代码
|
|
122
|
+
- 代码要有清晰的注释
|
|
123
|
+
- 注意边界条件和错误处理
|
|
124
|
+
- 执行前检查代码安全性(禁止危险操作)
|
|
125
|
+
- 解释代码执行结果
|
|
126
|
+
- 数据分析任务要注意数据格式和统计方法
|
|
127
|
+
- 优先使用 JavaScript/Node.js,需要时使用 Python
|
|
128
|
+
- 代码要简洁高效,避免冗余`;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
export const codeSkill = new CodeSkill();
|
|
132
|
+
//# sourceMappingURL=code.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"code.js","sourceRoot":"","sources":["../../../src/skills/builtin/code.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 内置技能导出
|
|
3
|
+
*/
|
|
4
|
+
export { WritingSkill, writingSkill } from './writing.js';
|
|
5
|
+
export { SearchSkill, searchSkill } from './search.js';
|
|
6
|
+
export { CodeSkill, codeSkill } from './code.js';
|
|
7
|
+
import type { Skill } from '../types.js';
|
|
8
|
+
/**
|
|
9
|
+
* 获取所有内置技能
|
|
10
|
+
*/
|
|
11
|
+
export declare function getBuiltinSkills(): Skill[];
|
|
12
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/skills/builtin/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEjD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAKzC;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,KAAK,EAAE,CAE1C"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 内置技能导出
|
|
3
|
+
*/
|
|
4
|
+
export { WritingSkill, writingSkill } from './writing.js';
|
|
5
|
+
export { SearchSkill, searchSkill } from './search.js';
|
|
6
|
+
export { CodeSkill, codeSkill } from './code.js';
|
|
7
|
+
import { writingSkill } from './writing.js';
|
|
8
|
+
import { searchSkill } from './search.js';
|
|
9
|
+
import { codeSkill } from './code.js';
|
|
10
|
+
/**
|
|
11
|
+
* 获取所有内置技能
|
|
12
|
+
*/
|
|
13
|
+
export function getBuiltinSkills() {
|
|
14
|
+
return [writingSkill, searchSkill, codeSkill];
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/skills/builtin/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAGjD,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC;;GAEG;AACH,MAAM,UAAU,gBAAgB;IAC9B,OAAO,CAAC,YAAY,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC;AAChD,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 内置技能:搜索
|
|
3
|
+
*
|
|
4
|
+
* 集成 web_search 工具进行信息搜索和整理
|
|
5
|
+
* 通过 LLM 整理搜索结果生成摘要
|
|
6
|
+
*/
|
|
7
|
+
import type { Skill, SkillMetadata, SkillContext, SkillResult } from '../types.js';
|
|
8
|
+
import type { ToolDefinition, ToolExecutorFn } from '../../types/agent.js';
|
|
9
|
+
export declare class SearchSkill implements Skill {
|
|
10
|
+
metadata: SkillMetadata;
|
|
11
|
+
/** 提供的工具列表 */
|
|
12
|
+
tools: ToolDefinition[];
|
|
13
|
+
/** 工具执行器(占位 - 实际执行由 AgentEngine 调度) */
|
|
14
|
+
toolExecutors: Record<string, ToolExecutorFn>;
|
|
15
|
+
execute(context: SkillContext): Promise<SkillResult>;
|
|
16
|
+
/**
|
|
17
|
+
* 从任务中提取搜索关键词
|
|
18
|
+
*/
|
|
19
|
+
private extractSearchQuery;
|
|
20
|
+
/**
|
|
21
|
+
* 构建搜索策略
|
|
22
|
+
*/
|
|
23
|
+
private buildSearchPlan;
|
|
24
|
+
getSystemPromptAddon(): string;
|
|
25
|
+
}
|
|
26
|
+
export declare const searchSkill: SearchSkill;
|
|
27
|
+
//# sourceMappingURL=search.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../../src/skills/builtin/search.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACnF,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AA+B3E,qBAAa,WAAY,YAAW,KAAK;IACvC,QAAQ,gBAAY;IAEpB,cAAc;IACd,KAAK,EAAE,cAAc,EAAE,CAAmB;IAE1C,uCAAuC;IACvC,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAM;IAE7C,OAAO,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC;IA6B1D;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAW1B;;OAEG;IACH,OAAO,CAAC,eAAe;IAavB,oBAAoB,IAAI,MAAM;CAS/B;AAED,eAAO,MAAM,WAAW,aAAoB,CAAC"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 内置技能:搜索
|
|
3
|
+
*
|
|
4
|
+
* 集成 web_search 工具进行信息搜索和整理
|
|
5
|
+
* 通过 LLM 整理搜索结果生成摘要
|
|
6
|
+
*/
|
|
7
|
+
const metadata = {
|
|
8
|
+
name: 'search',
|
|
9
|
+
displayName: '搜索助手',
|
|
10
|
+
description: '搜索网络信息、整理搜索结果、生成摘要',
|
|
11
|
+
version: '2.0.0',
|
|
12
|
+
author: 'WorkerClaw',
|
|
13
|
+
tags: ['搜索', '信息整理'],
|
|
14
|
+
requiredLevel: 'limited',
|
|
15
|
+
applicableTaskTypes: ['search_summary', 'qa', 'translation'],
|
|
16
|
+
requiredTools: ['web_search', 'llm_query'],
|
|
17
|
+
};
|
|
18
|
+
/** web_search 工具定义 */
|
|
19
|
+
const webSearchTool = {
|
|
20
|
+
name: 'web_search',
|
|
21
|
+
description: '搜索网络信息。输入搜索关键词,返回相关结果。',
|
|
22
|
+
requiredLevel: 'limited',
|
|
23
|
+
parameters: {
|
|
24
|
+
type: 'object',
|
|
25
|
+
properties: {
|
|
26
|
+
query: {
|
|
27
|
+
type: 'string',
|
|
28
|
+
description: '搜索关键词',
|
|
29
|
+
},
|
|
30
|
+
},
|
|
31
|
+
required: ['query'],
|
|
32
|
+
},
|
|
33
|
+
};
|
|
34
|
+
export class SearchSkill {
|
|
35
|
+
metadata = metadata;
|
|
36
|
+
/** 提供的工具列表 */
|
|
37
|
+
tools = [webSearchTool];
|
|
38
|
+
/** 工具执行器(占位 - 实际执行由 AgentEngine 调度) */
|
|
39
|
+
toolExecutors = {};
|
|
40
|
+
async execute(context) {
|
|
41
|
+
const startTime = Date.now();
|
|
42
|
+
const { task } = context;
|
|
43
|
+
try {
|
|
44
|
+
// 分析搜索需求
|
|
45
|
+
const searchQuery = this.extractSearchQuery(task);
|
|
46
|
+
const searchPlan = this.buildSearchPlan(task);
|
|
47
|
+
return {
|
|
48
|
+
success: true,
|
|
49
|
+
content: `[搜索技能] 搜索计划已生成:\n\n查询: ${searchQuery}\n策略: ${searchPlan}`,
|
|
50
|
+
outputs: [{
|
|
51
|
+
type: 'text',
|
|
52
|
+
content: `搜索任务: ${task.title}\n查询关键词: ${searchQuery}\n\n将通过 web_search 工具执行搜索,并通过 LLM 整理结果。`,
|
|
53
|
+
}],
|
|
54
|
+
durationMs: Date.now() - startTime,
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
catch (err) {
|
|
58
|
+
return {
|
|
59
|
+
success: false,
|
|
60
|
+
content: '',
|
|
61
|
+
outputs: [],
|
|
62
|
+
durationMs: Date.now() - startTime,
|
|
63
|
+
error: err.message,
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* 从任务中提取搜索关键词
|
|
69
|
+
*/
|
|
70
|
+
extractSearchQuery(task) {
|
|
71
|
+
// 如果标题本身就是问题
|
|
72
|
+
if (task.title && (task.title.includes('?') || task.title.includes('?') || task.title.includes('怎么') || task.title.includes('如何'))) {
|
|
73
|
+
return task.title;
|
|
74
|
+
}
|
|
75
|
+
// 否则结合标题和描述
|
|
76
|
+
const parts = [task.title, task.description].filter(Boolean);
|
|
77
|
+
return parts.join(' ').slice(0, 100);
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* 构建搜索策略
|
|
81
|
+
*/
|
|
82
|
+
buildSearchPlan(task) {
|
|
83
|
+
switch (task.taskType) {
|
|
84
|
+
case 'search_summary':
|
|
85
|
+
return '广泛搜索 → 筛选关键信息 → 整理摘要';
|
|
86
|
+
case 'qa':
|
|
87
|
+
return '针对性搜索 → 提取答案 → 验证准确性';
|
|
88
|
+
case 'translation':
|
|
89
|
+
return '搜索原文背景 → 查找专业术语 → 确保翻译准确';
|
|
90
|
+
default:
|
|
91
|
+
return '标准搜索 → 信息整理';
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
getSystemPromptAddon() {
|
|
95
|
+
return `## 搜索技能提示
|
|
96
|
+
- 先理解搜索需求的核心问题
|
|
97
|
+
- 搜索时使用精确关键词,避免过于宽泛
|
|
98
|
+
- 整理结果时标注信息来源
|
|
99
|
+
- 对搜索结果进行交叉验证,避免传播错误信息
|
|
100
|
+
- 摘要要简洁明了,突出重点
|
|
101
|
+
- 引用数据时注明来源和时间`;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
export const searchSkill = new SearchSkill();
|
|
105
|
+
//# sourceMappingURL=search.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search.js","sourceRoot":"","sources":["../../../src/skills/builtin/search.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 内置技能:写作
|
|
3
|
+
*
|
|
4
|
+
* 通过 AgentEngine LLM 调用完成写作任务
|
|
5
|
+
* 擅长文字创作、文案撰写、内容优化
|
|
6
|
+
*/
|
|
7
|
+
import type { Skill, SkillMetadata, SkillContext, SkillResult } from '../types.js';
|
|
8
|
+
export declare class WritingSkill implements Skill {
|
|
9
|
+
metadata: SkillMetadata;
|
|
10
|
+
execute(context: SkillContext): Promise<SkillResult>;
|
|
11
|
+
/**
|
|
12
|
+
* 根据任务类型构建写作指令
|
|
13
|
+
*/
|
|
14
|
+
private buildInstruction;
|
|
15
|
+
/**
|
|
16
|
+
* 生成响应(占位 - 实际由 AgentEngine 的 LLM 循环处理)
|
|
17
|
+
*/
|
|
18
|
+
private generateResponse;
|
|
19
|
+
getSystemPromptAddon(): string;
|
|
20
|
+
}
|
|
21
|
+
export declare const writingSkill: WritingSkill;
|
|
22
|
+
//# sourceMappingURL=writing.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"writing.d.ts","sourceRoot":"","sources":["../../../src/skills/builtin/writing.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAcnF,qBAAa,YAAa,YAAW,KAAK;IACxC,QAAQ,gBAAY;IAEd,OAAO,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC;IA+B1D;;OAEG;IACH,OAAO,CAAC,gBAAgB;IA4BxB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAMxB,oBAAoB,IAAI,MAAM;CAS/B;AAED,eAAO,MAAM,YAAY,cAAqB,CAAC"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 内置技能:写作
|
|
3
|
+
*
|
|
4
|
+
* 通过 AgentEngine LLM 调用完成写作任务
|
|
5
|
+
* 擅长文字创作、文案撰写、内容优化
|
|
6
|
+
*/
|
|
7
|
+
const metadata = {
|
|
8
|
+
name: 'writing',
|
|
9
|
+
displayName: '写作助手',
|
|
10
|
+
description: '擅长各类文字创作,包括文案撰写、内容优化、改写润色',
|
|
11
|
+
version: '2.0.0',
|
|
12
|
+
author: 'WorkerClaw',
|
|
13
|
+
tags: ['写作', '文案', '创作'],
|
|
14
|
+
requiredLevel: 'read_only',
|
|
15
|
+
applicableTaskTypes: ['text_reply', 'writing', 'qa'],
|
|
16
|
+
requiredTools: ['llm_query'],
|
|
17
|
+
};
|
|
18
|
+
export class WritingSkill {
|
|
19
|
+
metadata = metadata;
|
|
20
|
+
async execute(context) {
|
|
21
|
+
const startTime = Date.now();
|
|
22
|
+
const { task } = context;
|
|
23
|
+
try {
|
|
24
|
+
// 构建写作指令
|
|
25
|
+
const instruction = this.buildInstruction(task);
|
|
26
|
+
// 输出 LLM 指令(由 AgentEngine 实际调用 LLM)
|
|
27
|
+
const content = this.generateResponse(instruction, task);
|
|
28
|
+
return {
|
|
29
|
+
success: true,
|
|
30
|
+
content,
|
|
31
|
+
outputs: [{
|
|
32
|
+
type: 'text',
|
|
33
|
+
content,
|
|
34
|
+
}],
|
|
35
|
+
durationMs: Date.now() - startTime,
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
catch (err) {
|
|
39
|
+
return {
|
|
40
|
+
success: false,
|
|
41
|
+
content: '',
|
|
42
|
+
outputs: [],
|
|
43
|
+
durationMs: Date.now() - startTime,
|
|
44
|
+
error: err.message,
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* 根据任务类型构建写作指令
|
|
50
|
+
*/
|
|
51
|
+
buildInstruction(task) {
|
|
52
|
+
const taskType = task.taskType;
|
|
53
|
+
switch (taskType) {
|
|
54
|
+
case 'text_reply':
|
|
55
|
+
return `请回复以下消息。要求自然流畅,有针对性:
|
|
56
|
+
\n发单人: ${task.posterName || '用户'}
|
|
57
|
+
\n内容: ${task.description}
|
|
58
|
+
\n${task.title ? `主题: ${task.title}` : ''}`;
|
|
59
|
+
case 'writing':
|
|
60
|
+
return `请完成以下写作任务:
|
|
61
|
+
\n标题: ${task.title}
|
|
62
|
+
\n要求: ${task.description}
|
|
63
|
+
\n${task.attachments?.length ? '参考资料已提供在附件中。' : ''}`;
|
|
64
|
+
case 'qa':
|
|
65
|
+
return `请回答以下问题:
|
|
66
|
+
\n${task.description}
|
|
67
|
+
\n${task.title ? `问题: ${task.title}` : ''}`;
|
|
68
|
+
default:
|
|
69
|
+
return `请处理以下写作任务:
|
|
70
|
+
\n标题: ${task.title}
|
|
71
|
+
\n描述: ${task.description}`;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* 生成响应(占位 - 实际由 AgentEngine 的 LLM 循环处理)
|
|
76
|
+
*/
|
|
77
|
+
generateResponse(instruction, task) {
|
|
78
|
+
// 这个方法返回的是一个 LLM prompt 指令
|
|
79
|
+
// 实际的 LLM 调用由 AgentEngine 通过工具执行器完成
|
|
80
|
+
return `[写作技能] 已准备指令,将通过 LLM 处理:\n\n${instruction}`;
|
|
81
|
+
}
|
|
82
|
+
getSystemPromptAddon() {
|
|
83
|
+
return `## 写作技能提示
|
|
84
|
+
- 注重内容质量和可读性
|
|
85
|
+
- 根据任务要求调整风格(正式/轻松/学术等)
|
|
86
|
+
- 适当使用结构化格式(标题、列表等)
|
|
87
|
+
- 回复要有针对性,避免空泛
|
|
88
|
+
- 长文写作注意逻辑连贯性和段落过渡
|
|
89
|
+
- 文案类任务注重吸引力和感染力`;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
export const writingSkill = new WritingSkill();
|
|
93
|
+
//# sourceMappingURL=writing.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"writing.js","sourceRoot":"","sources":["../../../src/skills/builtin/writing.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,MAAM,QAAQ,GAAkB;IAC9B,IAAI,EAAE,SAAS;IACf,WAAW,EAAE,MAAM;IACnB,WAAW,EAAE,2BAA2B;IACxC,OAAO,EAAE,OAAO;IAChB,MAAM,EAAE,YAAY;IACpB,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;IACxB,aAAa,EAAE,WAAW;IAC1B,mBAAmB,EAAE,CAAC,YAAY,EAAE,SAAS,EAAE,IAAI,CAAC;IACpD,aAAa,EAAE,CAAC,WAAW,CAAC;CAC7B,CAAC;AAEF,MAAM,OAAO,YAAY;IACvB,QAAQ,GAAG,QAAQ,CAAC;IAEpB,KAAK,CAAC,OAAO,CAAC,OAAqB;QACjC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC7B,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC;QAEzB,IAAI,CAAC;YACH,SAAS;YACT,MAAM,WAAW,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;YAEhD,oCAAoC;YACpC,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;YAEzD,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,OAAO;gBACP,OAAO,EAAE,CAAC;wBACR,IAAI,EAAE,MAAM;wBACZ,OAAO;qBACR,CAAC;gBACF,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;aACnC,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,OAAO,EAAE,EAAE;gBACX,OAAO,EAAE,EAAE;gBACX,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;gBAClC,KAAK,EAAG,GAAa,CAAC,OAAO;aAC9B,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;OAEG;IACK,gBAAgB,CAAC,IAAS;QAChC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAE/B,QAAQ,QAAQ,EAAE,CAAC;YACjB,KAAK,YAAY;gBACf,OAAO;SACN,IAAI,CAAC,UAAU,IAAI,IAAI;QACxB,IAAI,CAAC,WAAW;IACpB,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;YAEtC,KAAK,SAAS;gBACZ,OAAO;QACP,IAAI,CAAC,KAAK;QACV,IAAI,CAAC,WAAW;IACpB,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;YAE/C,KAAK,IAAI;gBACP,OAAO;IACX,IAAI,CAAC,WAAW;IAChB,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;YAEtC;gBACE,OAAO;QACP,IAAI,CAAC,KAAK;QACV,IAAI,CAAC,WAAW,EAAE,CAAC;QACvB,CAAC;IACH,CAAC;IAED;;OAEG;IACK,gBAAgB,CAAC,WAAmB,EAAE,IAAS;QACrD,2BAA2B;QAC3B,oCAAoC;QACpC,OAAO,+BAA+B,WAAW,EAAE,CAAC;IACtD,CAAC;IAED,oBAAoB;QAClB,OAAO;;;;;;iBAMM,CAAC;IAChB,CAAC;CACF;AAED,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,YAAY,EAAE,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 技能系统导出
|
|
3
|
+
*/
|
|
4
|
+
export type { Skill, SkillMetadata, SkillContext, SkillResult, SkillState, SkillRegistration, } from './types.js';
|
|
5
|
+
export { SkillRegistry } from './skill-registry.js';
|
|
6
|
+
export { SkillRunner, DEFAULT_SKILL_RUNNER_CONFIG } from './skill-runner.js';
|
|
7
|
+
export { getBuiltinSkills } from './builtin/index.js';
|
|
8
|
+
export { SkillPackLoader } from './pack-loader.js';
|
|
9
|
+
export { SkillPackRegistry } from './pack-registry.js';
|
|
10
|
+
export type { SkillPack, SkillPackMeta, SkillPackContext, InstalledSkillPack, SkillsManifest, } from './pack-types.js';
|
|
11
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/skills/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,YAAY,EACV,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,WAAW,EAC/C,UAAU,EAAE,iBAAiB,GAC9B,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,2BAA2B,EAAE,MAAM,mBAAmB,CAAC;AAC7E,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAGtD,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,YAAY,EACV,SAAS,EAAE,aAAa,EAAE,gBAAgB,EAC1C,kBAAkB,EAAE,cAAc,GACnC,MAAM,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 技能系统导出
|
|
3
|
+
*/
|
|
4
|
+
export { SkillRegistry } from './skill-registry.js';
|
|
5
|
+
export { SkillRunner, DEFAULT_SKILL_RUNNER_CONFIG } from './skill-runner.js';
|
|
6
|
+
export { getBuiltinSkills } from './builtin/index.js';
|
|
7
|
+
// Phase 5: 技能包系统
|
|
8
|
+
export { SkillPackLoader } from './pack-loader.js';
|
|
9
|
+
export { SkillPackRegistry } from './pack-registry.js';
|
|
10
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/skills/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,2BAA2B,EAAE,MAAM,mBAAmB,CAAC;AAC7E,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAEtD,iBAAiB;AACjB,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WorkerClaw 技能包加载器
|
|
3
|
+
*
|
|
4
|
+
* 从 npm 包或本地路径动态加载技能包
|
|
5
|
+
*/
|
|
6
|
+
import type { SkillPack } from './pack-types.js';
|
|
7
|
+
export declare class SkillPackLoader {
|
|
8
|
+
/**
|
|
9
|
+
* 从 npm 包或本地路径加载技能包
|
|
10
|
+
*
|
|
11
|
+
* @param source - npm 包名 (如 @glin_1/workerclaw-skill-image) 或本地路径 (如 ./my-skills)
|
|
12
|
+
*/
|
|
13
|
+
load(source: string): Promise<SkillPack>;
|
|
14
|
+
/**
|
|
15
|
+
* 从 npm 包加载
|
|
16
|
+
*/
|
|
17
|
+
private loadFromNpm;
|
|
18
|
+
/**
|
|
19
|
+
* 从本地路径加载
|
|
20
|
+
*/
|
|
21
|
+
private loadFromPath;
|
|
22
|
+
/**
|
|
23
|
+
* 验证并标准化技能包
|
|
24
|
+
*/
|
|
25
|
+
private validateAndNormalize;
|
|
26
|
+
/**
|
|
27
|
+
* 从指定目录扫描所有 skill.json
|
|
28
|
+
*/
|
|
29
|
+
loadFromDirectory(dir: string): Promise<SkillPack[]>;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=pack-loader.d.ts.map
|