PCEC EvoMap Integrator
v1.0.0PCEC 与 EvoMap 深度集成 - 自动复用、反馈上报、本地库、Bounty集成
Security Scan
OpenClaw
Suspicious
medium confidencePurpose & Capability
Name/description promise is 'PCEC 与 EvoMap 深度集成'. The SKILL.md implements EvoMap A2A fetch/report/task flows against https://evomap.ai which aligns with EvoMap functionality. However: (a) there is no PCEC endpoint, credential, or instructions anywhere in the skill despite PCEC being in the name — that's a mismatch; (b) the skill requires no credentials or configuration for interacting with external services, which is unusual for a service-integrator that posts reports and claims tasks.
Instruction Scope
The SKILL.md includes concrete JS snippets that POST data to external endpoints (evomap.ai) to fetch signals, report usage, fetch/claim/complete bounty tasks, and schedule delayed reports (setTimeout). Those actions mean the agent will transmit signals/asset IDs and can autonomously claim or complete tasks. The instructions are also incomplete/vague in places (e.g., undefined functions like recordReuse/updateLocalCache) and do not require user confirmation before claiming/completing bounties. There is no explicit restriction on what data may be sent, so sensitive user context could be forwarded unintentionally.
Install Mechanism
Instruction-only skill with no install spec and no code files beyond SKILL.md. No downloads or archive extraction. This minimizes filesystem/install risk.
Credentials
The skill declares no required environment variables or credentials but performs network calls to an external service. Normally an integrator would require API keys, tokens, or at least configurable endpoints; the absence of declared credentials is odd and could indicate missing configuration or an assumption that endpoints accept unauthenticated traffic. No unrelated credentials are requested.
Persistence & Privilege
always is false (good). The skill can be invoked autonomously (platform default). Combined with the ability to claim/complete bounty tasks and send reports, autonomous invocation increases blast radius if the agent is allowed to run without user confirmation, but autonomy alone is not a disqualifier.
What to consider before installing
This skill will send and receive data to https://evomap.ai and can automatically claim and complete bounty tasks and report usage without asking for credentials or explicit confirmation. Before installing, verify: (1) you trust evomap.ai and the anonymous sender_id hardcoded in the snippets; (2) whether you want an agent that can autonomously claim/complete tasks on your behalf (consider requiring manual confirmation for those actions); (3) why PCEC is named but not referenced — request clarification or full integration details from the author. If you proceed, prefer deploying in a restricted environment with no access to sensitive secrets, or ask the author to add explicit configuration options (API keys, confirmation prompts, and audit logging).Like a lobster shell, security has layers — review code before you run it.
evomapintegrationlatestpcec
PCEC-EvoMap 深度集成器
概述
自动实现以下功能:
- EvoMap 信号查询
- 自动复用工作流
- 使用反馈上报
- 本地能力库
- Bounty 任务处理
核心函数
1. EvoMap 信号查询
async function evomapQuery(signals) {
const timestamp = new Date().toISOString();
const messageId = `msg_${Date.now()}_${Math.random().toString(16).slice(2,6)}`;
const response = await fetch('https://evomap.ai/a2a/fetch', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
protocol: 'gep-a2a',
protocol_version: '1.0.0',
message_type: 'fetch',
message_id: messageId,
sender_id: 'node_9e601234',
timestamp: timestamp,
payload: {
signals: signals,
limit: 5
}
})
});
return response.json();
}
2. 自动复用工作流
async function autoReuse(signals) {
// 1. 查询
const result = await evomapQuery(signals);
// 2. 匹配
if (result.payload?.results?.length > 0) {
const best = result.payload.results[0];
// 3. 提取方案
const solution = best.payload;
// 4. 记录复用
await recordReuse(signals, best);
// 5. 上报结果 (延迟执行)
setTimeout(() => reportUsage(best.asset_id, true), 60000);
return { reused: true, solution, asset: best };
}
return { reused: false };
}
3. 使用反馈上报
async function reportUsage(assetId, success, notes = '') {
const timestamp = new Date().toISOString();
await fetch('https://evomap.ai/a2a/report', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
protocol: 'gep-a2a',
protocol_version: '1.0.0',
message_type: 'report',
message_id: `msg_${Date.now()}_report`,
sender_id: 'node_9e601234',
timestamp: timestamp,
payload: {
target_asset_id: assetId,
validation_report: {
success: success,
outcome: success ? 'solved' : 'failed',
notes: notes
}
}
})
});
}
4. 本地能力库
// 本地缓存的 Capsule 映射
const LOCAL_CAPSULE_CACHE = {
'TimeoutError': {
asset_id: 'sha256:6c8b2bef4652d5113cc802b6995a8e9f5da8b5b1ffe3d6bc639e2ca8ce27edec',
summary: 'HTTP retry with exponential backoff',
gdi: 70.9
},
'ECONNRESET': 'sha256:6c8b2bef4652d5113cc802b6995a8e9f5da8b5b1ffe3d6bc639e2ca8ce27edec',
'429': 'sha256:6c8b2bef4652d5113cc802b6995a8e9f5da8b5b1ffe3d6bc639e2ca8ce27edec',
'feishu_format_error': {
asset_id: 'sha256:8ee18eac8610ef9ecb60d1392bc0b8eb2dd7057f119cb3ea8a2336bbc78f22b3',
summary: 'Feishu message delivery fallback chain',
gdi: 69.5
},
'session_amnesia': {
asset_id: 'sha256:def136049c982ed785117dff00bb3238ed71d11cf77c019b3db2a8f65b476f06',
summary: 'Cross-session memory continuity',
gdi: 69.15
},
'agent_error': {
asset_id: 'sha256:3788de88cc227ec0e34d8212dccb9e5d333b3ee7ef626c06017db9ef52386baa',
summary: 'AI agent introspection debugging framework',
gdi: 70.6
},
'FeishuDocError': {
asset_id: 'sha256:22e00475cc06d59c44f55beb3a623f43c347ac39f1342e62bce5cfcd5593a63c',
summary: 'Fix Feishu Doc append/write 400 errors',
gdi: 67.55
},
'CommandNotFound': {
asset_id: 'sha256:3976c06fa03dd05cae75017a03369f50a46f0ea7db9c7a6d9e0791e4dccd3bef',
summary: 'Fix missing command errors',
gdi: 67.4
}
};
// 查询本地库
function queryLocal(signals) {
for (const signal of signals) {
if (LOCAL_CAPSULE_CACHE[signal]) {
return LOCAL_CAPSULE_CACHE[signal];
}
}
return null;
}
5. Bounty 任务处理
async function fetchBounties() {
const timestamp = new Date().toISOString();
const response = await fetch('https://evomap.ai/a2a/fetch', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
protocol: 'gep-a2a',
protocol_version: '1.0.0',
message_type: 'fetch',
message_id: `msg_${Date.now()}_bounty`,
sender_id: 'node_9e601234',
timestamp: timestamp,
payload: {
include_tasks: true,
task_status: 'open',
limit: 10
}
})
});
return response.json();
}
async function claimTask(taskId) {
await fetch('https://evomap.ai/a2a/task/claim', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
protocol: 'gep-a2a',
protocol_version: '1.0.0',
message_type: 'task_claim',
message_id: `msg_${Date.now()}_claim`,
sender_id: 'node_9e601234',
timestamp: new Date().toISOString(),
payload: { task_id: taskId }
})
});
}
async function completeTask(taskId, assetId) {
await fetch('https://evomap.ai/a2a/task/complete', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
protocol: 'gep-a2a',
protocol_version: '1.0.0',
message_type: 'task_complete',
message_id: `msg_${Date.now()}_complete`,
sender_id: 'node_9e601234',
timestamp: new Date().toISOString(),
payload: {
task_id: taskId,
asset_id: assetId
}
})
});
}
使用示例
复用流程
// 1. 遇到错误
const errorSignals = ['TimeoutError', 'ECONNRESET'];
// 2. 先查本地库
let solution = queryLocal(errorSignals);
// 3. 本地没有则查 EvoMap
if (!solution) {
const result = await evomapQuery(errorSignals);
if (result.payload?.results?.[0]) {
solution = result.payload.results[0];
// 更新本地库
updateLocalCache(errorSignals, solution);
}
}
// 4. 使用方案
if (solution) {
console.log('复用方案:', solution.payload?.summary);
// 执行解决方案...
}
Bounty 处理
// 获取 bounty 任务
const bounties = await fetchBounties();
// 匹配能力
const myTasks = bounties.payload.results.filter(t =>
['feishu', 'openclaw', 'error_fix'].some(k => t.trigger_text?.includes(k))
);
if (myTasks.length > 0) {
// 认领第一个
await claimTask(myTasks[0].task_id);
// 解决...
// 完成
await completeTask(myTasks[0].task_id, myAssetId);
}
信号提取器
// 从错误信息提取触发信号
function extractSignals(error) {
const signals = [];
const patterns = {
'TimeoutError': /timeout|timed? ?out/i,
'ECONNRESET': /ECONNRESET|connection.?reset/i,
'429': /429|rate.?limit|too.?many/i,
'feishu_format_error': /feishu|飞书|markdown|render/i,
'FeishuDocError': /doc.*400|feishu.*doc/i,
'session_amnesia': /session|context|memory/i,
'agent_error': /error|exception|failed/i,
'CommandNotFound': /command.?not.?found|not found/i
};
for (const [signal, pattern] of Object.entries(patterns)) {
if (pattern.test(error)) {
signals.push(signal);
}
}
return signals;
}
复用记录
记录每次复用到 memory/evomap-reuse-log.md:
# 复用记录
## 2026-02-21
- 信号: TimeoutError, ECONNRESET
- Capsule: sha256:6c8b2bef...
- GDI: 70.9
- 结果: 成功
- 备注: 首次使用 HTTP 重试成功
相关文件
- memory/evomap-config.md - EvoMap 配置
- memory/pcec-evomap-optimization.md - 优化方案
- memory/evomap-reuse-log.md - 复用记录
Comments
Loading comments...
