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.
Files changed (224) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +129 -0
  3. package/dist/active-behavior/behavior-scheduler.d.ts +119 -0
  4. package/dist/active-behavior/behavior-scheduler.d.ts.map +1 -0
  5. package/dist/active-behavior/behavior-scheduler.js +297 -0
  6. package/dist/active-behavior/behavior-scheduler.js.map +1 -0
  7. package/dist/active-behavior/frequency-control.d.ts +72 -0
  8. package/dist/active-behavior/frequency-control.d.ts.map +1 -0
  9. package/dist/active-behavior/frequency-control.js +206 -0
  10. package/dist/active-behavior/frequency-control.js.map +1 -0
  11. package/dist/active-behavior/index.d.ts +8 -0
  12. package/dist/active-behavior/index.d.ts.map +1 -0
  13. package/dist/active-behavior/index.js +6 -0
  14. package/dist/active-behavior/index.js.map +1 -0
  15. package/dist/agent/agent-engine.d.ts +122 -0
  16. package/dist/agent/agent-engine.d.ts.map +1 -0
  17. package/dist/agent/agent-engine.js +380 -0
  18. package/dist/agent/agent-engine.js.map +1 -0
  19. package/dist/agent/context-window.d.ts +69 -0
  20. package/dist/agent/context-window.d.ts.map +1 -0
  21. package/dist/agent/context-window.js +210 -0
  22. package/dist/agent/context-window.js.map +1 -0
  23. package/dist/agent/llm-client.d.ts +37 -0
  24. package/dist/agent/llm-client.d.ts.map +1 -0
  25. package/dist/agent/llm-client.js +155 -0
  26. package/dist/agent/llm-client.js.map +1 -0
  27. package/dist/agent/personality.d.ts +71 -0
  28. package/dist/agent/personality.d.ts.map +1 -0
  29. package/dist/agent/personality.js +147 -0
  30. package/dist/agent/personality.js.map +1 -0
  31. package/dist/agent/session-manager.d.ts +111 -0
  32. package/dist/agent/session-manager.d.ts.map +1 -0
  33. package/dist/agent/session-manager.js +205 -0
  34. package/dist/agent/session-manager.js.map +1 -0
  35. package/dist/agent/tool-executor.d.ts +34 -0
  36. package/dist/agent/tool-executor.d.ts.map +1 -0
  37. package/dist/agent/tool-executor.js +145 -0
  38. package/dist/agent/tool-executor.js.map +1 -0
  39. package/dist/agent/tool-registry.d.ts +67 -0
  40. package/dist/agent/tool-registry.d.ts.map +1 -0
  41. package/dist/agent/tool-registry.js +272 -0
  42. package/dist/agent/tool-registry.js.map +1 -0
  43. package/dist/cli/configure.d.ts +16 -0
  44. package/dist/cli/configure.d.ts.map +1 -0
  45. package/dist/cli/configure.js +212 -0
  46. package/dist/cli/configure.js.map +1 -0
  47. package/dist/cli/index.d.ts +17 -0
  48. package/dist/cli/index.d.ts.map +1 -0
  49. package/dist/cli/index.js +256 -0
  50. package/dist/cli/index.js.map +1 -0
  51. package/dist/cli/prompter.d.ts +59 -0
  52. package/dist/cli/prompter.d.ts.map +1 -0
  53. package/dist/cli/prompter.js +120 -0
  54. package/dist/cli/prompter.js.map +1 -0
  55. package/dist/cli/sections/index.d.ts +9 -0
  56. package/dist/cli/sections/index.d.ts.map +1 -0
  57. package/dist/cli/sections/index.js +9 -0
  58. package/dist/cli/sections/index.js.map +1 -0
  59. package/dist/cli/sections/llm.d.ts +14 -0
  60. package/dist/cli/sections/llm.d.ts.map +1 -0
  61. package/dist/cli/sections/llm.js +155 -0
  62. package/dist/cli/sections/llm.js.map +1 -0
  63. package/dist/cli/sections/personality.d.ts +14 -0
  64. package/dist/cli/sections/personality.d.ts.map +1 -0
  65. package/dist/cli/sections/personality.js +90 -0
  66. package/dist/cli/sections/personality.js.map +1 -0
  67. package/dist/cli/sections/platform.d.ts +14 -0
  68. package/dist/cli/sections/platform.d.ts.map +1 -0
  69. package/dist/cli/sections/platform.js +179 -0
  70. package/dist/cli/sections/platform.js.map +1 -0
  71. package/dist/cli/sections/security.d.ts +14 -0
  72. package/dist/cli/sections/security.d.ts.map +1 -0
  73. package/dist/cli/sections/security.js +106 -0
  74. package/dist/cli/sections/security.js.map +1 -0
  75. package/dist/cli/sections/skills.d.ts +10 -0
  76. package/dist/cli/sections/skills.d.ts.map +1 -0
  77. package/dist/cli/sections/skills.js +149 -0
  78. package/dist/cli/sections/skills.js.map +1 -0
  79. package/dist/cli.d.ts +8 -0
  80. package/dist/cli.d.ts.map +1 -0
  81. package/dist/cli.js +116 -0
  82. package/dist/cli.js.map +1 -0
  83. package/dist/core/config.d.ts +175 -0
  84. package/dist/core/config.d.ts.map +1 -0
  85. package/dist/core/config.js +109 -0
  86. package/dist/core/config.js.map +1 -0
  87. package/dist/core/events.d.ts +211 -0
  88. package/dist/core/events.d.ts.map +1 -0
  89. package/dist/core/events.js +152 -0
  90. package/dist/core/events.js.map +1 -0
  91. package/dist/core/logger.d.ts +23 -0
  92. package/dist/core/logger.d.ts.map +1 -0
  93. package/dist/core/logger.js +53 -0
  94. package/dist/core/logger.js.map +1 -0
  95. package/dist/core/workerclaw.d.ts +83 -0
  96. package/dist/core/workerclaw.d.ts.map +1 -0
  97. package/dist/core/workerclaw.js +161 -0
  98. package/dist/core/workerclaw.js.map +1 -0
  99. package/dist/index.d.ts +27 -0
  100. package/dist/index.d.ts.map +1 -0
  101. package/dist/index.js +21 -0
  102. package/dist/index.js.map +1 -0
  103. package/dist/ingress/message-parser.d.ts +36 -0
  104. package/dist/ingress/message-parser.d.ts.map +1 -0
  105. package/dist/ingress/message-parser.js +107 -0
  106. package/dist/ingress/message-parser.js.map +1 -0
  107. package/dist/ingress/miniabc-client.d.ts +109 -0
  108. package/dist/ingress/miniabc-client.d.ts.map +1 -0
  109. package/dist/ingress/miniabc-client.js +345 -0
  110. package/dist/ingress/miniabc-client.js.map +1 -0
  111. package/dist/ingress/platform-api.d.ts +82 -0
  112. package/dist/ingress/platform-api.d.ts.map +1 -0
  113. package/dist/ingress/platform-api.js +209 -0
  114. package/dist/ingress/platform-api.js.map +1 -0
  115. package/dist/sandbox/command-sandbox.d.ts +46 -0
  116. package/dist/sandbox/command-sandbox.d.ts.map +1 -0
  117. package/dist/sandbox/command-sandbox.js +144 -0
  118. package/dist/sandbox/command-sandbox.js.map +1 -0
  119. package/dist/sandbox/fs-sandbox.d.ts +56 -0
  120. package/dist/sandbox/fs-sandbox.d.ts.map +1 -0
  121. package/dist/sandbox/fs-sandbox.js +119 -0
  122. package/dist/sandbox/fs-sandbox.js.map +1 -0
  123. package/dist/sandbox/network-sandbox.d.ts +41 -0
  124. package/dist/sandbox/network-sandbox.d.ts.map +1 -0
  125. package/dist/sandbox/network-sandbox.js +114 -0
  126. package/dist/sandbox/network-sandbox.js.map +1 -0
  127. package/dist/security/content-scanner.d.ts +59 -0
  128. package/dist/security/content-scanner.d.ts.map +1 -0
  129. package/dist/security/content-scanner.js +289 -0
  130. package/dist/security/content-scanner.js.map +1 -0
  131. package/dist/security/gate.d.ts +78 -0
  132. package/dist/security/gate.d.ts.map +1 -0
  133. package/dist/security/gate.js +150 -0
  134. package/dist/security/gate.js.map +1 -0
  135. package/dist/security/permission-level.d.ts +68 -0
  136. package/dist/security/permission-level.d.ts.map +1 -0
  137. package/dist/security/permission-level.js +191 -0
  138. package/dist/security/permission-level.js.map +1 -0
  139. package/dist/security/rate-limiter.d.ts +52 -0
  140. package/dist/security/rate-limiter.d.ts.map +1 -0
  141. package/dist/security/rate-limiter.js +133 -0
  142. package/dist/security/rate-limiter.js.map +1 -0
  143. package/dist/security/source-verifier.d.ts +33 -0
  144. package/dist/security/source-verifier.d.ts.map +1 -0
  145. package/dist/security/source-verifier.js +106 -0
  146. package/dist/security/source-verifier.js.map +1 -0
  147. package/dist/skills/builtin/code.d.ts +27 -0
  148. package/dist/skills/builtin/code.d.ts.map +1 -0
  149. package/dist/skills/builtin/code.js +132 -0
  150. package/dist/skills/builtin/code.js.map +1 -0
  151. package/dist/skills/builtin/index.d.ts +12 -0
  152. package/dist/skills/builtin/index.d.ts.map +1 -0
  153. package/dist/skills/builtin/index.js +16 -0
  154. package/dist/skills/builtin/index.js.map +1 -0
  155. package/dist/skills/builtin/search.d.ts +27 -0
  156. package/dist/skills/builtin/search.d.ts.map +1 -0
  157. package/dist/skills/builtin/search.js +105 -0
  158. package/dist/skills/builtin/search.js.map +1 -0
  159. package/dist/skills/builtin/writing.d.ts +22 -0
  160. package/dist/skills/builtin/writing.d.ts.map +1 -0
  161. package/dist/skills/builtin/writing.js +93 -0
  162. package/dist/skills/builtin/writing.js.map +1 -0
  163. package/dist/skills/index.d.ts +11 -0
  164. package/dist/skills/index.d.ts.map +1 -0
  165. package/dist/skills/index.js +10 -0
  166. package/dist/skills/index.js.map +1 -0
  167. package/dist/skills/pack-loader.d.ts +31 -0
  168. package/dist/skills/pack-loader.d.ts.map +1 -0
  169. package/dist/skills/pack-loader.js +167 -0
  170. package/dist/skills/pack-loader.js.map +1 -0
  171. package/dist/skills/pack-registry.d.ts +40 -0
  172. package/dist/skills/pack-registry.d.ts.map +1 -0
  173. package/dist/skills/pack-registry.js +80 -0
  174. package/dist/skills/pack-registry.js.map +1 -0
  175. package/dist/skills/pack-types.d.ts +64 -0
  176. package/dist/skills/pack-types.d.ts.map +1 -0
  177. package/dist/skills/pack-types.js +7 -0
  178. package/dist/skills/pack-types.js.map +1 -0
  179. package/dist/skills/skill-registry.d.ts +83 -0
  180. package/dist/skills/skill-registry.d.ts.map +1 -0
  181. package/dist/skills/skill-registry.js +206 -0
  182. package/dist/skills/skill-registry.js.map +1 -0
  183. package/dist/skills/skill-runner.d.ts +49 -0
  184. package/dist/skills/skill-runner.d.ts.map +1 -0
  185. package/dist/skills/skill-runner.js +128 -0
  186. package/dist/skills/skill-runner.js.map +1 -0
  187. package/dist/skills/types.d.ts +94 -0
  188. package/dist/skills/types.d.ts.map +1 -0
  189. package/dist/skills/types.js +7 -0
  190. package/dist/skills/types.js.map +1 -0
  191. package/dist/task/concurrency.d.ts +87 -0
  192. package/dist/task/concurrency.d.ts.map +1 -0
  193. package/dist/task/concurrency.js +269 -0
  194. package/dist/task/concurrency.js.map +1 -0
  195. package/dist/task/task-evaluator.d.ts +52 -0
  196. package/dist/task/task-evaluator.d.ts.map +1 -0
  197. package/dist/task/task-evaluator.js +141 -0
  198. package/dist/task/task-evaluator.js.map +1 -0
  199. package/dist/task/task-manager.d.ts +112 -0
  200. package/dist/task/task-manager.d.ts.map +1 -0
  201. package/dist/task/task-manager.js +382 -0
  202. package/dist/task/task-manager.js.map +1 -0
  203. package/dist/task/task-state-machine.d.ts +63 -0
  204. package/dist/task/task-state-machine.d.ts.map +1 -0
  205. package/dist/task/task-state-machine.js +149 -0
  206. package/dist/task/task-state-machine.js.map +1 -0
  207. package/dist/types/agent.d.ts +79 -0
  208. package/dist/types/agent.d.ts.map +1 -0
  209. package/dist/types/agent.js +7 -0
  210. package/dist/types/agent.js.map +1 -0
  211. package/dist/types/index.d.ts +7 -0
  212. package/dist/types/index.d.ts.map +1 -0
  213. package/dist/types/index.js +5 -0
  214. package/dist/types/index.js.map +1 -0
  215. package/dist/types/message.d.ts +87 -0
  216. package/dist/types/message.d.ts.map +1 -0
  217. package/dist/types/message.js +30 -0
  218. package/dist/types/message.js.map +1 -0
  219. package/dist/types/task.d.ts +176 -0
  220. package/dist/types/task.d.ts.map +1 -0
  221. package/dist/types/task.js +5 -0
  222. package/dist/types/task.js.map +1 -0
  223. package/package.json +57 -0
  224. 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