@creative-ia/cortex 1.0.7 → 1.0.8
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/dist/config/auto-changelog.js +4 -0
- package/dist/index.js +50 -1
- package/package.json +2 -2
|
@@ -23,6 +23,7 @@ const WRITE_TOOLS = new Set([
|
|
|
23
23
|
"validate_idea",
|
|
24
24
|
"analyze_code",
|
|
25
25
|
"log_event",
|
|
26
|
+
"save_skill",
|
|
26
27
|
]);
|
|
27
28
|
// Tools que NUNCA geram changelog (leitura, config, busca)
|
|
28
29
|
const READ_TOOLS = new Set([
|
|
@@ -36,6 +37,7 @@ const READ_TOOLS = new Set([
|
|
|
36
37
|
"insights_query",
|
|
37
38
|
"semantic_search",
|
|
38
39
|
"validate_process",
|
|
40
|
+
"get_skill",
|
|
39
41
|
]);
|
|
40
42
|
// Evita changelog recursivo (save_knowledge salvando changelog sobre si mesmo)
|
|
41
43
|
let _recording = false;
|
|
@@ -116,6 +118,8 @@ function buildTitle(toolName, args) {
|
|
|
116
118
|
return `[auto] ${toolLabel}: ${(args.idea || "").slice(0, 80)}`;
|
|
117
119
|
case "analyze_code":
|
|
118
120
|
return `[auto] ${toolLabel}: ${args.filename || "inline"}`;
|
|
121
|
+
case "save_skill":
|
|
122
|
+
return `[auto] ${toolLabel}: ${args.skillName} — ${(args.title || "").slice(0, 80)}`;
|
|
119
123
|
default:
|
|
120
124
|
return `[auto] ${toolLabel}`;
|
|
121
125
|
}
|
package/dist/index.js
CHANGED
|
@@ -82,7 +82,7 @@ const CLOUD_TOOLS = new Set([
|
|
|
82
82
|
"save_knowledge", "get_knowledge", "search_knowledge",
|
|
83
83
|
"delete_knowledge", "list_knowledge_domains",
|
|
84
84
|
"get_config", "log_event", "search_logs", "insights_query",
|
|
85
|
-
"semantic_search", "update_process",
|
|
85
|
+
"semantic_search", "update_process", "get_skill", "save_skill",
|
|
86
86
|
]);
|
|
87
87
|
// --- Tool: get_code_standards ---
|
|
88
88
|
server.tool("get_code_standards", "Returns code standards rules (L1-L4) for the requested level, language, or specific rule ID.", {
|
|
@@ -472,6 +472,55 @@ server.tool("analyze_docs", "Analisa um diretório de documentação, extrai tex
|
|
|
472
472
|
autoLog("analyze_docs", { docsDir: docsDir.split("/").pop() || docsDir, processId }, result);
|
|
473
473
|
return { content: [{ type: "text", text: result }] };
|
|
474
474
|
});
|
|
475
|
+
// =============================================================================
|
|
476
|
+
// Fase 6 — Skills Cloud (personas na nuvem via DynamoDB)
|
|
477
|
+
// =============================================================================
|
|
478
|
+
// --- Tool: get_skill ---
|
|
479
|
+
server.tool("get_skill", "Retorna a definição de um skill (persona) armazenado no DynamoDB. Sem skillName retorna a lista de skills disponíveis com resumo.", {
|
|
480
|
+
licenseKey: z.string().describe("Client license key"),
|
|
481
|
+
skillName: z.string().optional().describe("Nome do skill em kebab-case (ex: 'backend-dev', 'software-architect'). Omitir para listar todos."),
|
|
482
|
+
}, async ({ licenseKey, skillName }) => {
|
|
483
|
+
if (CLOUD_MODE)
|
|
484
|
+
return proxyToCloud("get_skill", { licenseKey, skillName });
|
|
485
|
+
const gate = await licenseGate(licenseKey, "get_skill");
|
|
486
|
+
if ("denied" in gate)
|
|
487
|
+
return { content: [{ type: "text", text: gate.denied }] };
|
|
488
|
+
if (skillName) {
|
|
489
|
+
// Busca skill específico
|
|
490
|
+
const result = await getKnowledge({ domain: "skills", id: skillName });
|
|
491
|
+
return { content: [{ type: "text", text: result }] };
|
|
492
|
+
}
|
|
493
|
+
else {
|
|
494
|
+
// Lista todos os skills
|
|
495
|
+
const result = await getKnowledge({ domain: "skills" });
|
|
496
|
+
return { content: [{ type: "text", text: result }] };
|
|
497
|
+
}
|
|
498
|
+
});
|
|
499
|
+
// --- Tool: save_skill ---
|
|
500
|
+
server.tool("save_skill", "Salva ou atualiza um skill (persona) no DynamoDB. O conteúdo é o markdown completo do skill.", {
|
|
501
|
+
licenseKey: z.string().describe("Client license key"),
|
|
502
|
+
skillName: z.string().describe("Nome do skill em kebab-case (ex: 'backend-dev')"),
|
|
503
|
+
title: z.string().describe("Título do skill (ex: 'Backend Developer')"),
|
|
504
|
+
content: z.string().describe("Conteúdo completo do skill em markdown"),
|
|
505
|
+
triggers: z.array(z.string()).optional().describe("Palavras-gatilho que ativam o skill"),
|
|
506
|
+
}, async ({ licenseKey, skillName, title, content, triggers }) => {
|
|
507
|
+
if (CLOUD_MODE)
|
|
508
|
+
return proxyToCloud("save_skill", { licenseKey, skillName, title, content, triggers });
|
|
509
|
+
const gate = await licenseGate(licenseKey, "save_skill");
|
|
510
|
+
if ("denied" in gate)
|
|
511
|
+
return { content: [{ type: "text", text: gate.denied }] };
|
|
512
|
+
const tags = ["skill", ...(triggers || [])];
|
|
513
|
+
const result = await saveKnowledge({
|
|
514
|
+
domain: "skills",
|
|
515
|
+
id: skillName,
|
|
516
|
+
title,
|
|
517
|
+
content,
|
|
518
|
+
tags,
|
|
519
|
+
metadata: { triggers: triggers || [] },
|
|
520
|
+
});
|
|
521
|
+
autoLog("save_skill", { skillName, title, triggers }, result);
|
|
522
|
+
return { content: [{ type: "text", text: result }] };
|
|
523
|
+
});
|
|
475
524
|
// --- Start server ---
|
|
476
525
|
async function main() {
|
|
477
526
|
const transport = new StdioServerTransport();
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@creative-ia/cortex",
|
|
3
|
-
"version": "1.0.
|
|
4
|
-
"description": "Cortex by Creative IA — Centro de inteligencia para arquitetura de software. MCP Server com
|
|
3
|
+
"version": "1.0.8",
|
|
4
|
+
"description": "Cortex by Creative IA — Centro de inteligencia para arquitetura de software. MCP Server com 26 tools.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
7
7
|
"bin": {
|