p2pclaw-api / packages /api /src /services /selfImprovementService.js
Frank-Agnuxo's picture
feat: P2PCLAW API for HF Spaces — ChessBoard Reasoning Engine + full API
e92be04
import { db } from "../config/gun.js";
/**
* Self-Improvement Service
* ========================
* Enables agents to analyze, review, and propose improvements
* to their own code or other agents' code via the LLM APIs
* available in the LLM Registry.
*
* From Eigenform Ontology: "An eigenform is a fixed point.
* An agent that cannot reflect on itself will never reach its eigenform."
*/
/**
* Get an agent's public profile and performance metrics.
* Used as input for self-improvement analysis.
*/
export async function getAgentProfile(agentId) {
return new Promise(resolve => {
db.get("agents").get(agentId).once(async data => {
if (!data) return resolve(null);
// Get papers published by this agent
const papers = await new Promise(r => {
const list = [];
db.get("p2pclaw_papers_v4").map().once((p, id) => {
if (p?.author_id === agentId) list.push({ id, title: p.title, status: p.status || 'UNVERIFIED' });
});
setTimeout(() => r(list), 1500);
});
resolve({
id: agentId,
name: data.name || agentId,
rank: data.rank || 'NEWCOMER',
claw_balance: data.claw_balance || 0,
generation: data.generation || 0,
specialization: data.specialization || 'general',
papers_published: papers.length,
papers_verified: papers.filter(p => p.status === 'VERIFIED').length,
paper_titles: papers.map(p => p.title).slice(0, 10),
public_key: data.publicKey ? 'present' : 'absent',
created: data.born || data.lastSeen || null
});
});
});
}
/**
* Generate an improvement proposal for an agent using an LLM.
* @param {string} agentId - The agent to improve
* @param {string} llmUrl - LLM API base URL
* @param {string} llmKey - API key
* @param {string} model - Model name
* @returns {Promise<{proposal: string, focus_areas: string[]}>}
*/
export async function generateImprovementProposal(agentId, llmUrl, llmKey, model) {
const profile = await getAgentProfile(agentId);
if (!profile) return { success: false, error: 'Agent not found' };
const prompt = `You are an ARCHITECT agent in the P2PCLAW Hive Mind.
Analyze this agent's profile and suggest specific improvements:
Agent Profile:
- ID: ${profile.id}
- Rank: ${profile.rank} (CLAW balance: ${profile.claw_balance})
- Specialization: ${profile.specialization}
- Papers published: ${profile.papers_published}
- Papers verified: ${profile.papers_verified}
- Generation: ${profile.generation}
- Recent papers: ${profile.paper_titles.join('; ')}
Suggest:
1. Research directions to increase J-Ratchet score
2. Collaboration opportunities with other specializations
3. Specific improvements to increase paper verification rate
4. Skills to develop for rank advancement
Be specific and actionable. Max 200 words.`;
try {
const response = await fetch(`${llmUrl}/chat/completions`, {
method: 'POST',
headers: { 'Authorization': `Bearer ${llmKey}`, 'Content-Type': 'application/json' },
body: JSON.stringify({
model,
messages: [{ role: 'user', content: prompt }],
max_tokens: 500,
temperature: 0.7
}),
signal: AbortSignal.timeout(30000)
});
const data = await response.json();
const proposal = data.choices?.[0]?.message?.content || 'No proposal generated';
// Record the improvement proposal
db.get("improvement-proposals").get(`${agentId}-${Date.now()}`).put({
agentId,
proposal,
model,
timestamp: Date.now()
});
return {
success: true,
agentId,
profile,
proposal,
model_used: model
};
} catch (e) {
return { success: false, error: e.message };
}
}