MCPcopy Create free account
hub / github.com/EvoMap/evolver / updateSkillOnHub

Function updateSkillOnHub

src/gep/skillPublisher.js:315–350  ·  view source on GitHub ↗

* Update an existing Skill on the Hub (new version).

(nodeId, skillId, content, opts, gene)

Source from the content-addressed store, hash-verified

313 * Update an existing Skill on the Hub (new version).
314 */
315function updateSkillOnHub(nodeId, skillId, content, opts, gene) {
316 var hubUrl = getHubUrl();
317 if (!hubUrl) return Promise.resolve({ ok: false, error: 'no_hub_url' });
318
319 var tags = opts.tags || gene.signals_match || [];
320 tags = tags.filter(function (t) {
321 var s = String(t || '').trim();
322 return s.length >= 3 && !/^\d+$/.test(s) && !/\d{10,}/.test(s);
323 });
324
325 var body = {
326 sender_id: nodeId,
327 skill_id: skillId,
328 content: content,
329 category: opts.category || gene.category || null,
330 tags: tags,
331 changelog: 'Iterative evolution update',
332 };
333
334 var endpoint = hubUrl.replace(/\/+$/, '') + '/a2a/skill/store/update';
335
336 return hubFetch(endpoint, {
337 method: 'PUT',
338 headers: buildSkillStoreHeaders(),
339 body: JSON.stringify(body),
340 signal: AbortSignal.timeout(15000),
341 })
342 .then(function (res) { return res.json().then(function (data) { return { status: res.status, data: data }; }); })
343 .then(function (result) {
344 if (result.status >= 200 && result.status < 300) {
345 return { ok: true, result: result.data };
346 }
347 return { ok: false, error: result.data?.error || 'update_failed', status: result.status };
348 })
349 .catch(function (err) { return { ok: false, error: err.message }; });
350}
351
352module.exports = {
353 geneToSkillMd: geneToSkillMd,

Callers 1

publishSkillToHubFunction · 0.85

Calls 2

getHubUrlFunction · 0.85
buildSkillStoreHeadersFunction · 0.85

Tested by

no test coverage detected