mycohive-claw 4.0.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 +222 -0
- package/dist/circuit-breaker.d.ts +82 -0
- package/dist/circuit-breaker.d.ts.map +1 -0
- package/dist/circuit-breaker.js +214 -0
- package/dist/circuit-breaker.js.map +1 -0
- package/dist/context-tree.d.ts +94 -0
- package/dist/context-tree.d.ts.map +1 -0
- package/dist/context-tree.js +624 -0
- package/dist/context-tree.js.map +1 -0
- package/dist/event-bus.d.ts +174 -0
- package/dist/event-bus.d.ts.map +1 -0
- package/dist/event-bus.js +750 -0
- package/dist/event-bus.js.map +1 -0
- package/dist/i18n.d.ts +91 -0
- package/dist/i18n.d.ts.map +1 -0
- package/dist/i18n.js +150 -0
- package/dist/i18n.js.map +1 -0
- package/dist/index.d.ts +38 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +301 -0
- package/dist/index.js.map +1 -0
- package/dist/intent-analyzer.d.ts +119 -0
- package/dist/intent-analyzer.d.ts.map +1 -0
- package/dist/intent-analyzer.js +563 -0
- package/dist/intent-analyzer.js.map +1 -0
- package/dist/logger.d.ts +46 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/logger.js +126 -0
- package/dist/logger.js.map +1 -0
- package/dist/metrics.d.ts +98 -0
- package/dist/metrics.d.ts.map +1 -0
- package/dist/metrics.js +192 -0
- package/dist/metrics.js.map +1 -0
- package/dist/openclaw-api.d.ts +122 -0
- package/dist/openclaw-api.d.ts.map +1 -0
- package/dist/openclaw-api.js +8 -0
- package/dist/openclaw-api.js.map +1 -0
- package/dist/rate-limiter.d.ts +46 -0
- package/dist/rate-limiter.d.ts.map +1 -0
- package/dist/rate-limiter.js +134 -0
- package/dist/rate-limiter.js.map +1 -0
- package/dist/result-cache.d.ts +76 -0
- package/dist/result-cache.d.ts.map +1 -0
- package/dist/result-cache.js +158 -0
- package/dist/result-cache.js.map +1 -0
- package/dist/router.d.ts +90 -0
- package/dist/router.d.ts.map +1 -0
- package/dist/router.js +447 -0
- package/dist/router.js.map +1 -0
- package/dist/setup-entry.d.ts +18 -0
- package/dist/setup-entry.d.ts.map +1 -0
- package/dist/setup-entry.js +64 -0
- package/dist/setup-entry.js.map +1 -0
- package/dist/token-counter.d.ts +57 -0
- package/dist/token-counter.d.ts.map +1 -0
- package/dist/token-counter.js +125 -0
- package/dist/token-counter.js.map +1 -0
- package/dist/tool-handlers.d.ts +52 -0
- package/dist/tool-handlers.d.ts.map +1 -0
- package/dist/tool-handlers.js +317 -0
- package/dist/tool-handlers.js.map +1 -0
- package/dist/tools/mycohive-tools.d.ts +11 -0
- package/dist/tools/mycohive-tools.d.ts.map +1 -0
- package/dist/tools/mycohive-tools.js +160 -0
- package/dist/tools/mycohive-tools.js.map +1 -0
- package/dist/types.d.ts +58 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +57 -0
- package/dist/types.js.map +1 -0
- package/dist/workspace-loader.d.ts +67 -0
- package/dist/workspace-loader.d.ts.map +1 -0
- package/dist/workspace-loader.js +175 -0
- package/dist/workspace-loader.js.map +1 -0
- package/package.json +52 -0
- package/workspaces/api_dev/CONFIG.md +31 -0
- package/workspaces/api_dev/RULES.md +8 -0
- package/workspaces/api_dev/SKILL.md +69 -0
- package/workspaces/api_dev/SOUL.md +19 -0
- package/workspaces/architect/CONFIG.md +32 -0
- package/workspaces/architect/RULES.md +8 -0
- package/workspaces/architect/SKILL.md +63 -0
- package/workspaces/architect/SOUL.md +19 -0
- package/workspaces/backend_dev/CONFIG.md +42 -0
- package/workspaces/backend_dev/RULES.md +8 -0
- package/workspaces/backend_dev/SKILL.md +41 -0
- package/workspaces/backend_dev/SOUL.md +19 -0
- package/workspaces/browser/CONFIG.md +42 -0
- package/workspaces/browser/RULES.md +8 -0
- package/workspaces/browser/SKILL.md +57 -0
- package/workspaces/browser/SOUL.md +19 -0
- package/workspaces/builder/CONFIG.md +31 -0
- package/workspaces/builder/RULES.md +8 -0
- package/workspaces/builder/SKILL.md +39 -0
- package/workspaces/builder/SOUL.md +18 -0
- package/workspaces/coder/CONFIG.md +44 -0
- package/workspaces/coder/RULES.md +9 -0
- package/workspaces/coder/SKILL.md +53 -0
- package/workspaces/coder/SOUL.md +19 -0
- package/workspaces/coordinator/CONFIG.md +62 -0
- package/workspaces/coordinator/RULES.md +8 -0
- package/workspaces/coordinator/SKILL.md +77 -0
- package/workspaces/coordinator/SOUL.md +20 -0
- package/workspaces/data_engineer/CONFIG.md +32 -0
- package/workspaces/data_engineer/RULES.md +8 -0
- package/workspaces/data_engineer/SKILL.md +44 -0
- package/workspaces/data_engineer/SOUL.md +19 -0
- package/workspaces/deployer/CONFIG.md +45 -0
- package/workspaces/deployer/RULES.md +8 -0
- package/workspaces/deployer/SKILL.md +74 -0
- package/workspaces/deployer/SOUL.md +19 -0
- package/workspaces/dreamer/CONFIG.md +34 -0
- package/workspaces/dreamer/RULES.md +8 -0
- package/workspaces/dreamer/SKILL.md +48 -0
- package/workspaces/dreamer/SOUL.md +19 -0
- package/workspaces/evaluator/CONFIG.md +40 -0
- package/workspaces/evaluator/RULES.md +21 -0
- package/workspaces/evaluator/SKILL.md +65 -0
- package/workspaces/evaluator/SOUL.md +20 -0
- package/workspaces/front_director/CONFIG.md +54 -0
- package/workspaces/front_director/RULES.md +8 -0
- package/workspaces/front_director/SKILL.md +52 -0
- package/workspaces/front_director/SOUL.md +20 -0
- package/workspaces/frontend_dev/CONFIG.md +33 -0
- package/workspaces/frontend_dev/RULES.md +8 -0
- package/workspaces/frontend_dev/SKILL.md +42 -0
- package/workspaces/frontend_dev/SOUL.md +19 -0
- package/workspaces/observer/CONFIG.md +60 -0
- package/workspaces/observer/RULES.md +7 -0
- package/workspaces/observer/SKILL.md +77 -0
- package/workspaces/observer/SOUL.md +19 -0
- package/workspaces/planner/CONFIG.md +43 -0
- package/workspaces/planner/RULES.md +8 -0
- package/workspaces/planner/SKILL.md +65 -0
- package/workspaces/planner/SOUL.md +20 -0
- package/workspaces/qa/CONFIG.md +32 -0
- package/workspaces/qa/RULES.md +8 -0
- package/workspaces/qa/SKILL.md +52 -0
- package/workspaces/qa/SOUL.md +19 -0
- package/workspaces/researcher/CONFIG.md +32 -0
- package/workspaces/researcher/RULES.md +8 -0
- package/workspaces/researcher/SKILL.md +58 -0
- package/workspaces/researcher/SOUL.md +20 -0
- package/workspaces/reviewer/CONFIG.md +41 -0
- package/workspaces/reviewer/RULES.md +17 -0
- package/workspaces/reviewer/SKILL.md +56 -0
- package/workspaces/reviewer/SOUL.md +20 -0
- package/workspaces/router/CONFIG.md +58 -0
- package/workspaces/router/RULES.md +8 -0
- package/workspaces/router/SKILL.md +97 -0
- package/workspaces/router/SOUL.md +20 -0
- package/workspaces/scraper/CONFIG.md +41 -0
- package/workspaces/scraper/RULES.md +8 -0
- package/workspaces/scraper/SKILL.md +51 -0
- package/workspaces/scraper/SOUL.md +19 -0
- package/workspaces/scripter/CONFIG.md +42 -0
- package/workspaces/scripter/RULES.md +8 -0
- package/workspaces/scripter/SKILL.md +54 -0
- package/workspaces/scripter/SOUL.md +18 -0
- package/workspaces/security/CONFIG.md +47 -0
- package/workspaces/security/RULES.md +8 -0
- package/workspaces/security/SKILL.md +50 -0
- package/workspaces/security/SOUL.md +19 -0
- package/workspaces/translator/CONFIG.md +43 -0
- package/workspaces/translator/RULES.md +8 -0
- package/workspaces/translator/SKILL.md +35 -0
- package/workspaces/translator/SOUL.md +19 -0
- package/workspaces/writer/CONFIG.md +31 -0
- package/workspaces/writer/RULES.md +8 -0
- package/workspaces/writer/SKILL.md +40 -0
- package/workspaces/writer/SOUL.md +19 -0
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MycoHive Tools 注册
|
|
3
|
+
* 版本: v4.0.0
|
|
4
|
+
*
|
|
5
|
+
* 注册自定义工具供 Agent 使用
|
|
6
|
+
*/
|
|
7
|
+
import { getContextTree } from "../context-tree.js";
|
|
8
|
+
import { getEventBus } from "../event-bus.js";
|
|
9
|
+
export function registerTools(api, router) {
|
|
10
|
+
// === Context Tree Tools ===
|
|
11
|
+
api.registerTool({
|
|
12
|
+
name: "mycohive_topic_create",
|
|
13
|
+
description: "创建新的 Topic(话题)",
|
|
14
|
+
inputSchema: {
|
|
15
|
+
type: "object",
|
|
16
|
+
properties: {
|
|
17
|
+
topicId: { type: "string", description: "话题 ID" },
|
|
18
|
+
label: { type: "string", description: "话题标签" },
|
|
19
|
+
},
|
|
20
|
+
required: ["topicId", "label"],
|
|
21
|
+
},
|
|
22
|
+
});
|
|
23
|
+
api.registerTool({
|
|
24
|
+
name: "mycohive_topic_list",
|
|
25
|
+
description: "列出所有活跃 Topic",
|
|
26
|
+
inputSchema: {
|
|
27
|
+
type: "object",
|
|
28
|
+
properties: {},
|
|
29
|
+
},
|
|
30
|
+
});
|
|
31
|
+
api.registerTool({
|
|
32
|
+
name: "mycohive_task_create",
|
|
33
|
+
description: "创建新的 Task(任务)",
|
|
34
|
+
inputSchema: {
|
|
35
|
+
type: "object",
|
|
36
|
+
properties: {
|
|
37
|
+
topicId: { type: "string", description: "所属 Topic ID" },
|
|
38
|
+
taskId: { type: "string", description: "任务 ID" },
|
|
39
|
+
agent: { type: "string", description: "执行的 Agent" },
|
|
40
|
+
taskDesc: { type: "string", description: "任务描述" },
|
|
41
|
+
},
|
|
42
|
+
required: ["topicId", "taskId", "agent", "taskDesc"],
|
|
43
|
+
},
|
|
44
|
+
});
|
|
45
|
+
api.registerTool({
|
|
46
|
+
name: "mycohive_task_update",
|
|
47
|
+
description: "更新 Task 状态",
|
|
48
|
+
inputSchema: {
|
|
49
|
+
type: "object",
|
|
50
|
+
properties: {
|
|
51
|
+
taskId: { type: "string", description: "任务 ID" },
|
|
52
|
+
state: {
|
|
53
|
+
type: "string",
|
|
54
|
+
enum: ["active", "done", "cancelled", "stale", "routed", "running", "compacted"],
|
|
55
|
+
description: "新状态",
|
|
56
|
+
},
|
|
57
|
+
taskStatus: {
|
|
58
|
+
type: "string",
|
|
59
|
+
enum: ["PENDING", "RUNNING", "DONE", "FAILED", "CANCELLED", "SKIPPED", "CANCELLING"],
|
|
60
|
+
description: "任务执行状态",
|
|
61
|
+
},
|
|
62
|
+
},
|
|
63
|
+
required: ["taskId", "state"],
|
|
64
|
+
},
|
|
65
|
+
});
|
|
66
|
+
api.registerTool({
|
|
67
|
+
name: "mycohive_context_tree_stats",
|
|
68
|
+
description: "获取 Context Tree 统计信息",
|
|
69
|
+
inputSchema: {
|
|
70
|
+
type: "object",
|
|
71
|
+
properties: {},
|
|
72
|
+
},
|
|
73
|
+
});
|
|
74
|
+
// === Event Bus Tools ===
|
|
75
|
+
api.registerTool({
|
|
76
|
+
name: "mycohive_event_publish",
|
|
77
|
+
description: "发布自定义事件",
|
|
78
|
+
inputSchema: {
|
|
79
|
+
type: "object",
|
|
80
|
+
properties: {
|
|
81
|
+
type: { type: "string", description: "事件类型" },
|
|
82
|
+
source: { type: "string", description: "事件来源" },
|
|
83
|
+
data: { type: "object", description: "事件数据" },
|
|
84
|
+
},
|
|
85
|
+
required: ["type", "source"],
|
|
86
|
+
},
|
|
87
|
+
});
|
|
88
|
+
api.registerTool({
|
|
89
|
+
name: "mycohive_event_history",
|
|
90
|
+
description: "查询事件历史",
|
|
91
|
+
inputSchema: {
|
|
92
|
+
type: "object",
|
|
93
|
+
properties: {
|
|
94
|
+
eventType: { type: "string", description: "事件类型过滤(可选)" },
|
|
95
|
+
limit: { type: "number", description: "返回数量(默认 100)" },
|
|
96
|
+
},
|
|
97
|
+
},
|
|
98
|
+
});
|
|
99
|
+
// === Router Tools ===
|
|
100
|
+
api.registerTool({
|
|
101
|
+
name: "mycohive_route",
|
|
102
|
+
description: "路由用户消息到对应 Agent(自动意图分析)",
|
|
103
|
+
inputSchema: {
|
|
104
|
+
type: "object",
|
|
105
|
+
properties: {
|
|
106
|
+
message: { type: "string", description: "用户消息" },
|
|
107
|
+
sessionKey: { type: "string", description: "会话 Key" },
|
|
108
|
+
},
|
|
109
|
+
required: ["message", "sessionKey"],
|
|
110
|
+
},
|
|
111
|
+
});
|
|
112
|
+
api.registerTool({
|
|
113
|
+
name: "mycohive_intent_analyze",
|
|
114
|
+
description: "仅分析意图,不执行路由",
|
|
115
|
+
inputSchema: {
|
|
116
|
+
type: "object",
|
|
117
|
+
properties: {
|
|
118
|
+
message: { type: "string", description: "用户消息" },
|
|
119
|
+
},
|
|
120
|
+
required: ["message"],
|
|
121
|
+
},
|
|
122
|
+
});
|
|
123
|
+
// === 系统 Tools ===
|
|
124
|
+
api.registerTool({
|
|
125
|
+
name: "mycohive_health",
|
|
126
|
+
description: "健康检查",
|
|
127
|
+
inputSchema: {
|
|
128
|
+
type: "object",
|
|
129
|
+
properties: {},
|
|
130
|
+
},
|
|
131
|
+
});
|
|
132
|
+
api.registerTool({
|
|
133
|
+
name: "mycohive_diagnose",
|
|
134
|
+
description: "系统诊断",
|
|
135
|
+
inputSchema: {
|
|
136
|
+
type: "object",
|
|
137
|
+
properties: {},
|
|
138
|
+
},
|
|
139
|
+
});
|
|
140
|
+
api.registerTool({
|
|
141
|
+
name: "mycohive_health_check",
|
|
142
|
+
description: "健康检查(供外部监控轮询)",
|
|
143
|
+
inputSchema: {
|
|
144
|
+
type: "object",
|
|
145
|
+
properties: {},
|
|
146
|
+
},
|
|
147
|
+
});
|
|
148
|
+
// === Tool Handlers ===
|
|
149
|
+
// Note: In OpenClaw plugin, tools are registered via registerTool but handlers are called via hook
|
|
150
|
+
// Actual implementation happens in the hook handlers (see index.ts)
|
|
151
|
+
// Tool handlers are invoked via before_tool_call hook
|
|
152
|
+
// See index.ts for the hook registration
|
|
153
|
+
}
|
|
154
|
+
export function registerToolHandlers(api, router) {
|
|
155
|
+
const tree = getContextTree();
|
|
156
|
+
const eventBus = getEventBus();
|
|
157
|
+
// Note: In OpenClaw, tool handlers are invoked through the tool call mechanism
|
|
158
|
+
// This function sets up any additional synchronous handlers if needed
|
|
159
|
+
}
|
|
160
|
+
//# sourceMappingURL=mycohive-tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mycohive-tools.js","sourceRoot":"","sources":["../../src/tools/mycohive-tools.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Context Tree 类型定义
|
|
3
|
+
* 版本: v4.0.0
|
|
4
|
+
*
|
|
5
|
+
* 提供 Session/Topic/Task/Artifact 的层级关系管理
|
|
6
|
+
*/
|
|
7
|
+
export type NodeState = "active" | "done" | "cancelled" | "stale" | "routed" | "running" | "compacted";
|
|
8
|
+
export type TaskStatus = "PENDING" | "RUNNING" | "DONE" | "FAILED" | "CANCELLED" | "SKIPPED" | "CANCELLING";
|
|
9
|
+
export type NodeType = "root" | "session" | "topic" | "task" | "artifact" | "message";
|
|
10
|
+
export interface ContextNodeData {
|
|
11
|
+
agent?: string;
|
|
12
|
+
desc?: string;
|
|
13
|
+
role?: string;
|
|
14
|
+
content?: string;
|
|
15
|
+
context_annotation?: Record<string, unknown>;
|
|
16
|
+
task_status?: TaskStatus;
|
|
17
|
+
[key: string]: unknown;
|
|
18
|
+
}
|
|
19
|
+
export interface ProgressStep {
|
|
20
|
+
step: number;
|
|
21
|
+
agent: string;
|
|
22
|
+
action: string;
|
|
23
|
+
task_desc: string;
|
|
24
|
+
completed_at?: number;
|
|
25
|
+
result?: unknown;
|
|
26
|
+
}
|
|
27
|
+
export interface ContextNode {
|
|
28
|
+
id: string;
|
|
29
|
+
type: NodeType;
|
|
30
|
+
label?: string;
|
|
31
|
+
state: NodeState;
|
|
32
|
+
parent_id?: string;
|
|
33
|
+
children: Record<string, ContextNode>;
|
|
34
|
+
data: ContextNodeData;
|
|
35
|
+
reasoning?: string;
|
|
36
|
+
current_step?: string;
|
|
37
|
+
total_steps: number;
|
|
38
|
+
progress_steps: ProgressStep[];
|
|
39
|
+
execution_plan?: Record<string, unknown>;
|
|
40
|
+
office_hours_score?: number;
|
|
41
|
+
user_intervention?: string;
|
|
42
|
+
created_at: number;
|
|
43
|
+
updated_at: number;
|
|
44
|
+
}
|
|
45
|
+
export interface ContextTreeStorage {
|
|
46
|
+
version: string;
|
|
47
|
+
last_updated: number;
|
|
48
|
+
root: ContextNode;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* 从 JSON 对象还原 ContextNode
|
|
52
|
+
*/
|
|
53
|
+
export declare function nodeFromJSON(data: Record<string, unknown>, parent?: ContextNode): ContextNode;
|
|
54
|
+
/**
|
|
55
|
+
* 将 ContextNode 序列化为 JSON 对象
|
|
56
|
+
*/
|
|
57
|
+
export declare function nodeToJSON(node: ContextNode): Record<string, unknown>;
|
|
58
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,MAAM,SAAS,GACjB,QAAQ,GACR,MAAM,GACN,WAAW,GACX,OAAO,GACP,QAAQ,GACR,SAAS,GACT,WAAW,CAAC;AAEhB,MAAM,MAAM,UAAU,GAClB,SAAS,GACT,SAAS,GACT,MAAM,GACN,QAAQ,GACR,WAAW,GACX,SAAS,GACT,YAAY,CAAC;AAEjB,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,SAAS,GAAG,OAAO,GAAG,MAAM,GAAG,UAAU,GAAG,SAAS,CAAC;AAEtF,MAAM,WAAW,eAAe;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,kBAAkB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC7C,WAAW,CAAC,EAAE,UAAU,CAAC;IACzB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,QAAQ,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,SAAS,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACtC,IAAI,EAAE,eAAe,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,YAAY,EAAE,CAAC;IAC/B,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACzC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,WAAW,CAAC;CACnB;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,WAAW,CA0B7F;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAoBrE"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Context Tree 类型定义
|
|
3
|
+
* 版本: v4.0.0
|
|
4
|
+
*
|
|
5
|
+
* 提供 Session/Topic/Task/Artifact 的层级关系管理
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* 从 JSON 对象还原 ContextNode
|
|
9
|
+
*/
|
|
10
|
+
export function nodeFromJSON(data, parent) {
|
|
11
|
+
const node = {
|
|
12
|
+
id: data.id,
|
|
13
|
+
type: data.type,
|
|
14
|
+
label: data.label,
|
|
15
|
+
state: data.state || "active",
|
|
16
|
+
parent_id: parent?.id,
|
|
17
|
+
children: {},
|
|
18
|
+
data: data.data || {},
|
|
19
|
+
reasoning: data.reasoning,
|
|
20
|
+
current_step: data.current_step,
|
|
21
|
+
total_steps: data.total_steps || 0,
|
|
22
|
+
progress_steps: data.progress_steps || [],
|
|
23
|
+
execution_plan: data.execution_plan,
|
|
24
|
+
office_hours_score: data.office_hours_score,
|
|
25
|
+
user_intervention: data.user_intervention,
|
|
26
|
+
created_at: data.created_at || Date.now(),
|
|
27
|
+
updated_at: data.updated_at || Date.now(),
|
|
28
|
+
};
|
|
29
|
+
const children = data.children || {};
|
|
30
|
+
for (const [childId, childData] of Object.entries(children)) {
|
|
31
|
+
node.children[childId] = nodeFromJSON(childData, node);
|
|
32
|
+
}
|
|
33
|
+
return node;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* 将 ContextNode 序列化为 JSON 对象
|
|
37
|
+
*/
|
|
38
|
+
export function nodeToJSON(node) {
|
|
39
|
+
return {
|
|
40
|
+
id: node.id,
|
|
41
|
+
type: node.type,
|
|
42
|
+
label: node.label,
|
|
43
|
+
state: node.state,
|
|
44
|
+
data: node.data,
|
|
45
|
+
reasoning: node.reasoning,
|
|
46
|
+
current_step: node.current_step,
|
|
47
|
+
total_steps: node.total_steps,
|
|
48
|
+
progress_steps: node.progress_steps,
|
|
49
|
+
execution_plan: node.execution_plan,
|
|
50
|
+
office_hours_score: node.office_hours_score,
|
|
51
|
+
user_intervention: node.user_intervention,
|
|
52
|
+
created_at: node.created_at,
|
|
53
|
+
updated_at: node.updated_at,
|
|
54
|
+
children: Object.fromEntries(Object.entries(node.children).map(([id, child]) => [id, nodeToJSON(child)])),
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAkEH;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,IAA6B,EAAE,MAAoB;IAC9E,MAAM,IAAI,GAAgB;QACxB,EAAE,EAAE,IAAI,CAAC,EAAY;QACrB,IAAI,EAAE,IAAI,CAAC,IAAgB;QAC3B,KAAK,EAAE,IAAI,CAAC,KAA2B;QACvC,KAAK,EAAG,IAAI,CAAC,KAAmB,IAAI,QAAQ;QAC5C,SAAS,EAAE,MAAM,EAAE,EAAE;QACrB,QAAQ,EAAE,EAAE;QACZ,IAAI,EAAG,IAAI,CAAC,IAAwB,IAAI,EAAE;QAC1C,SAAS,EAAE,IAAI,CAAC,SAA+B;QAC/C,YAAY,EAAE,IAAI,CAAC,YAAkC;QACrD,WAAW,EAAG,IAAI,CAAC,WAAsB,IAAI,CAAC;QAC9C,cAAc,EAAG,IAAI,CAAC,cAAiC,IAAI,EAAE;QAC7D,cAAc,EAAE,IAAI,CAAC,cAAqD;QAC1E,kBAAkB,EAAE,IAAI,CAAC,kBAAwC;QACjE,iBAAiB,EAAE,IAAI,CAAC,iBAAuC;QAC/D,UAAU,EAAG,IAAI,CAAC,UAAqB,IAAI,IAAI,CAAC,GAAG,EAAE;QACrD,UAAU,EAAG,IAAI,CAAC,UAAqB,IAAI,IAAI,CAAC,GAAG,EAAE;KACtD,CAAC;IAEF,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAmD,IAAI,EAAE,CAAC;IAChF,KAAK,MAAM,CAAC,OAAO,EAAE,SAAS,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC5D,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,YAAY,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IACzD,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,IAAiB;IAC1C,OAAO;QACL,EAAE,EAAE,IAAI,CAAC,EAAE;QACX,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,SAAS,EAAE,IAAI,CAAC,SAAS;QACzB,YAAY,EAAE,IAAI,CAAC,YAAY;QAC/B,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,cAAc,EAAE,IAAI,CAAC,cAAc;QACnC,cAAc,EAAE,IAAI,CAAC,cAAc;QACnC,kBAAkB,EAAE,IAAI,CAAC,kBAAkB;QAC3C,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;QACzC,UAAU,EAAE,IAAI,CAAC,UAAU;QAC3B,UAAU,EAAE,IAAI,CAAC,UAAU;QAC3B,QAAQ,EAAE,MAAM,CAAC,WAAW,CAC1B,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAC5E;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Workspace Loader 模块
|
|
3
|
+
* 版本: v4.0.0
|
|
4
|
+
*
|
|
5
|
+
* 加载 Agent workspace 文件 (SOUL.md, CONFIG.md, SKILL.md, RULES.md)
|
|
6
|
+
*/
|
|
7
|
+
export interface AgentWorkspace {
|
|
8
|
+
agentId: string;
|
|
9
|
+
soul: string;
|
|
10
|
+
config: AgentConfigData;
|
|
11
|
+
skill: string;
|
|
12
|
+
rules: string;
|
|
13
|
+
}
|
|
14
|
+
export interface AgentConfigData {
|
|
15
|
+
agent_id: string;
|
|
16
|
+
agent_type: string;
|
|
17
|
+
model: string;
|
|
18
|
+
timeout: number;
|
|
19
|
+
capabilities: string[];
|
|
20
|
+
events_publish: string[];
|
|
21
|
+
events_subscribe: string[];
|
|
22
|
+
workspace_path?: string;
|
|
23
|
+
description: string;
|
|
24
|
+
routing_priority: number;
|
|
25
|
+
allowed_tools: string[];
|
|
26
|
+
max_retries: number;
|
|
27
|
+
session_mode?: "shared" | "isolated";
|
|
28
|
+
isolation?: {
|
|
29
|
+
initialMessage: string | null;
|
|
30
|
+
context: "artifact_only" | "full";
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
export declare class WorkspaceLoader {
|
|
34
|
+
private workspacesDir;
|
|
35
|
+
private cache;
|
|
36
|
+
private cacheEnabled;
|
|
37
|
+
constructor(workspacesDir?: string);
|
|
38
|
+
/**
|
|
39
|
+
* 加载指定 Agent 的 workspace
|
|
40
|
+
*/
|
|
41
|
+
load(agentId: string): Promise<AgentWorkspace | null>;
|
|
42
|
+
/**
|
|
43
|
+
* 加载所有 Agent workspaces
|
|
44
|
+
*/
|
|
45
|
+
loadAll(): Promise<Map<string, AgentWorkspace>>;
|
|
46
|
+
/**
|
|
47
|
+
* 根据 Agent 类型筛选
|
|
48
|
+
*/
|
|
49
|
+
getAgentsByType(type: string): Promise<AgentWorkspace[]>;
|
|
50
|
+
/**
|
|
51
|
+
* 根据 capability 筛选
|
|
52
|
+
*/
|
|
53
|
+
getAgentsByCapability(capability: string): Promise<AgentWorkspace[]>;
|
|
54
|
+
/**
|
|
55
|
+
* 清除缓存
|
|
56
|
+
*/
|
|
57
|
+
clearCache(): void;
|
|
58
|
+
/**
|
|
59
|
+
* 禁用缓存
|
|
60
|
+
*/
|
|
61
|
+
disableCache(): void;
|
|
62
|
+
private readFile;
|
|
63
|
+
private parseConfig;
|
|
64
|
+
private defaultConfig;
|
|
65
|
+
}
|
|
66
|
+
export declare function getWorkspaceLoader(workspacesDir?: string): WorkspaceLoader;
|
|
67
|
+
//# sourceMappingURL=workspace-loader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspace-loader.d.ts","sourceRoot":"","sources":["../src/workspace-loader.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,eAAe,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,MAAM,CAAC;IACzB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,QAAQ,GAAG,UAAU,CAAC;IACrC,SAAS,CAAC,EAAE;QACV,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;QAC9B,OAAO,EAAE,eAAe,GAAG,MAAM,CAAC;KACnC,CAAC;CACH;AAED,qBAAa,eAAe;IAC1B,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,KAAK,CAA0C;IACvD,OAAO,CAAC,YAAY,CAAiB;gBAEzB,aAAa,GAAE,MAAqB;IAIhD;;OAEG;IACG,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;IA4C3D;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IA2BrD;;OAEG;IACG,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAK9D;;OAEG;IACG,qBAAqB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAO1E;;OAEG;IACH,UAAU,IAAI,IAAI;IAIlB;;OAEG;IACH,YAAY,IAAI,IAAI;YAKN,QAAQ;IAOtB,OAAO,CAAC,WAAW;IAwCnB,OAAO,CAAC,aAAa;CAgBtB;AAKD,wBAAgB,kBAAkB,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,eAAe,CAK1E"}
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Workspace Loader 模块
|
|
3
|
+
* 版本: v4.0.0
|
|
4
|
+
*
|
|
5
|
+
* 加载 Agent workspace 文件 (SOUL.md, CONFIG.md, SKILL.md, RULES.md)
|
|
6
|
+
*/
|
|
7
|
+
import * as fs from "fs";
|
|
8
|
+
import * as path from "path";
|
|
9
|
+
import YAML from "yaml";
|
|
10
|
+
export class WorkspaceLoader {
|
|
11
|
+
workspacesDir;
|
|
12
|
+
cache = new Map();
|
|
13
|
+
cacheEnabled = true;
|
|
14
|
+
constructor(workspacesDir = "workspaces") {
|
|
15
|
+
this.workspacesDir = workspacesDir;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* 加载指定 Agent 的 workspace
|
|
19
|
+
*/
|
|
20
|
+
async load(agentId) {
|
|
21
|
+
// 检查缓存
|
|
22
|
+
if (this.cacheEnabled && this.cache.has(agentId)) {
|
|
23
|
+
return this.cache.get(agentId);
|
|
24
|
+
}
|
|
25
|
+
const workspacePath = path.join(this.workspacesDir, agentId);
|
|
26
|
+
// 检查目录是否存在
|
|
27
|
+
if (!fs.existsSync(workspacePath)) {
|
|
28
|
+
console.warn(`[WorkspaceLoader] Workspace not found: ${workspacePath}`);
|
|
29
|
+
return null;
|
|
30
|
+
}
|
|
31
|
+
try {
|
|
32
|
+
const [soul, configRaw, skill, rules] = await Promise.all([
|
|
33
|
+
this.readFile(path.join(workspacePath, "SOUL.md")),
|
|
34
|
+
this.readFile(path.join(workspacePath, "CONFIG.md")),
|
|
35
|
+
this.readFile(path.join(workspacePath, "SKILL.md")),
|
|
36
|
+
this.readFile(path.join(workspacePath, "RULES.md")),
|
|
37
|
+
]);
|
|
38
|
+
const config = this.parseConfig(configRaw);
|
|
39
|
+
const workspace = {
|
|
40
|
+
agentId,
|
|
41
|
+
soul,
|
|
42
|
+
config,
|
|
43
|
+
skill,
|
|
44
|
+
rules,
|
|
45
|
+
};
|
|
46
|
+
// 缓存
|
|
47
|
+
if (this.cacheEnabled) {
|
|
48
|
+
this.cache.set(agentId, workspace);
|
|
49
|
+
}
|
|
50
|
+
return workspace;
|
|
51
|
+
}
|
|
52
|
+
catch (error) {
|
|
53
|
+
console.error(`[WorkspaceLoader] Failed to load workspace ${agentId}:`, error);
|
|
54
|
+
return null;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* 加载所有 Agent workspaces
|
|
59
|
+
*/
|
|
60
|
+
async loadAll() {
|
|
61
|
+
if (!fs.existsSync(this.workspacesDir)) {
|
|
62
|
+
return new Map();
|
|
63
|
+
}
|
|
64
|
+
const agentIds = fs.readdirSync(this.workspacesDir).filter((dir) => {
|
|
65
|
+
const stat = fs.statSync(path.join(this.workspacesDir, dir));
|
|
66
|
+
return stat.isDirectory() && !dir.startsWith("_");
|
|
67
|
+
});
|
|
68
|
+
const results = await Promise.all(agentIds.map(async (id) => {
|
|
69
|
+
const workspace = await this.load(id);
|
|
70
|
+
return workspace ? [id, workspace] : null;
|
|
71
|
+
}));
|
|
72
|
+
const map = new Map();
|
|
73
|
+
for (const result of results) {
|
|
74
|
+
if (result) {
|
|
75
|
+
map.set(result[0], result[1]);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
return map;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* 根据 Agent 类型筛选
|
|
82
|
+
*/
|
|
83
|
+
async getAgentsByType(type) {
|
|
84
|
+
const all = await this.loadAll();
|
|
85
|
+
return Array.from(all.values()).filter((w) => w.config.agent_type === type);
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* 根据 capability 筛选
|
|
89
|
+
*/
|
|
90
|
+
async getAgentsByCapability(capability) {
|
|
91
|
+
const all = await this.loadAll();
|
|
92
|
+
return Array.from(all.values()).filter((w) => w.config.capabilities.includes(capability));
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* 清除缓存
|
|
96
|
+
*/
|
|
97
|
+
clearCache() {
|
|
98
|
+
this.cache.clear();
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* 禁用缓存
|
|
102
|
+
*/
|
|
103
|
+
disableCache() {
|
|
104
|
+
this.cacheEnabled = false;
|
|
105
|
+
this.cache.clear();
|
|
106
|
+
}
|
|
107
|
+
async readFile(filePath) {
|
|
108
|
+
if (!fs.existsSync(filePath)) {
|
|
109
|
+
return "";
|
|
110
|
+
}
|
|
111
|
+
return fs.promises.readFile(filePath, "utf-8");
|
|
112
|
+
}
|
|
113
|
+
parseConfig(content) {
|
|
114
|
+
if (!content) {
|
|
115
|
+
return this.defaultConfig();
|
|
116
|
+
}
|
|
117
|
+
try {
|
|
118
|
+
// 尝试解析 YAML frontmatter
|
|
119
|
+
const match = content.match(/^---\n([\s\S]*?)\n---\n/);
|
|
120
|
+
if (match) {
|
|
121
|
+
const yamlContent = match[1];
|
|
122
|
+
// 使用 yaml 包正确解析 YAML
|
|
123
|
+
const config = YAML.parse(yamlContent);
|
|
124
|
+
return {
|
|
125
|
+
agent_id: config?.agent_id || "unknown",
|
|
126
|
+
agent_type: config?.agent_type || "execution",
|
|
127
|
+
model: config?.model || "claude-sonnet-4-20250514",
|
|
128
|
+
timeout: config?.timeout || 60,
|
|
129
|
+
capabilities: config?.capabilities || [],
|
|
130
|
+
events_publish: config?.events_publish || [],
|
|
131
|
+
events_subscribe: config?.events_subscribe || [],
|
|
132
|
+
workspace_path: config?.workspace_path,
|
|
133
|
+
description: config?.description || "",
|
|
134
|
+
routing_priority: config?.routing_priority || 0,
|
|
135
|
+
allowed_tools: config?.allowed_tools || [],
|
|
136
|
+
max_retries: config?.max_retries || 3,
|
|
137
|
+
session_mode: config?.session_mode || "shared",
|
|
138
|
+
isolation: config?.isolation ? {
|
|
139
|
+
initialMessage: config?.isolation.initialMessage ?? null,
|
|
140
|
+
context: config?.isolation.context || "full",
|
|
141
|
+
} : undefined,
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
catch (error) {
|
|
146
|
+
console.warn("[WorkspaceLoader] YAML parse failed, using defaults:", error);
|
|
147
|
+
}
|
|
148
|
+
return this.defaultConfig();
|
|
149
|
+
}
|
|
150
|
+
defaultConfig() {
|
|
151
|
+
return {
|
|
152
|
+
agent_id: "unknown",
|
|
153
|
+
agent_type: "execution",
|
|
154
|
+
model: "claude-sonnet-4-20250514",
|
|
155
|
+
timeout: 60,
|
|
156
|
+
capabilities: [],
|
|
157
|
+
events_publish: [],
|
|
158
|
+
events_subscribe: [],
|
|
159
|
+
description: "",
|
|
160
|
+
routing_priority: 0,
|
|
161
|
+
allowed_tools: [],
|
|
162
|
+
max_retries: 3,
|
|
163
|
+
session_mode: "shared",
|
|
164
|
+
};
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
// 全局实例
|
|
168
|
+
let globalLoader = null;
|
|
169
|
+
export function getWorkspaceLoader(workspacesDir) {
|
|
170
|
+
if (!globalLoader) {
|
|
171
|
+
globalLoader = new WorkspaceLoader(workspacesDir);
|
|
172
|
+
}
|
|
173
|
+
return globalLoader;
|
|
174
|
+
}
|
|
175
|
+
//# sourceMappingURL=workspace-loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspace-loader.js","sourceRoot":"","sources":["../src/workspace-loader.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "mycohive-claw",
|
|
3
|
+
"version": "4.0.0",
|
|
4
|
+
"description": "OpenClaw Plugin for Multi-Agent Orchestration with LLM Intent Routing",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "./dist/index.js",
|
|
7
|
+
"types": "./dist/index.d.ts",
|
|
8
|
+
"homepage": "https://github.com/LiamLucas-m/MycoHive-Claw#readme",
|
|
9
|
+
"repository": {
|
|
10
|
+
"type": "git",
|
|
11
|
+
"url": "https://github.com/LiamLucas-m/MycoHive-Claw.git"
|
|
12
|
+
},
|
|
13
|
+
"keywords": [
|
|
14
|
+
"openclaw",
|
|
15
|
+
"plugin",
|
|
16
|
+
"multi-agent",
|
|
17
|
+
"orchestration",
|
|
18
|
+
"llm",
|
|
19
|
+
"intent-analysis",
|
|
20
|
+
"intent-routing"
|
|
21
|
+
],
|
|
22
|
+
"exports": {
|
|
23
|
+
".": {
|
|
24
|
+
"import": "./dist/index.js",
|
|
25
|
+
"types": "./dist/index.d.ts"
|
|
26
|
+
}
|
|
27
|
+
},
|
|
28
|
+
"scripts": {
|
|
29
|
+
"build": "tsc",
|
|
30
|
+
"dev": "tsc --watch",
|
|
31
|
+
"typecheck": "tsc --noEmit"
|
|
32
|
+
},
|
|
33
|
+
"openclaw": {
|
|
34
|
+
"extensions": [
|
|
35
|
+
"./dist/index.js"
|
|
36
|
+
],
|
|
37
|
+
"setupEntry": "./dist/setup-entry.js",
|
|
38
|
+
"channel": {
|
|
39
|
+
"id": "mycohive",
|
|
40
|
+
"label": "MycoHive",
|
|
41
|
+
"blurb": "Multi-Agent Orchestration with LLM Intent Routing"
|
|
42
|
+
}
|
|
43
|
+
},
|
|
44
|
+
"devDependencies": {
|
|
45
|
+
"@types/node": "^20.11.0",
|
|
46
|
+
"typescript": "^5.3.0"
|
|
47
|
+
},
|
|
48
|
+
"dependencies": {
|
|
49
|
+
"@types/yaml": "^1.9.6",
|
|
50
|
+
"yaml": "^2.8.3"
|
|
51
|
+
}
|
|
52
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# CONFIG.md — API Developer
|
|
2
|
+
|
|
3
|
+
## Agent 配置
|
|
4
|
+
|
|
5
|
+
```yaml
|
|
6
|
+
agent_id: api_dev
|
|
7
|
+
agent_type: execution
|
|
8
|
+
display: 执行类
|
|
9
|
+
model: claude-sonnet-4-20250514
|
|
10
|
+
timeout: 300s
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
## 能力声明
|
|
14
|
+
|
|
15
|
+
### 我能做什么
|
|
16
|
+
- REST API 设计
|
|
17
|
+
- GraphQL Schema 设计
|
|
18
|
+
- API 文档编写 (OpenAPI/Swagger)
|
|
19
|
+
- 接口测试
|
|
20
|
+
|
|
21
|
+
### 我不能做什么
|
|
22
|
+
- 不实现业务逻辑(由 backend_dev 负责)
|
|
23
|
+
- 不设计数据库(由 data_engineer 负责)
|
|
24
|
+
|
|
25
|
+
## 工具组
|
|
26
|
+
|
|
27
|
+
```yaml
|
|
28
|
+
tools:
|
|
29
|
+
allow: [exec, read, write]
|
|
30
|
+
deny: [sessions_spawn, sessions_send]
|
|
31
|
+
```
|