jarvis-ai-framework 2.1.0 → 2.1.1
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/AGENTS.md +10 -9
- package/agents/AGENTS.md +9 -1
- package/agents/README.md +2 -2
- package/agents/engineering/data/eng.data-engineer.agent.md +2 -2
- package/agents/engineering/eng.agent.md +4 -6
- package/agents/engineering/eng.bug-hunter.md +10 -5
- package/agents/engineering/eng.cybersecurity.agent.md +2 -4
- package/agents/engineering/eng.dev-code-reviewer.md +4 -0
- package/agents/engineering/eng.docs-writer.md +3 -3
- package/agents/engineering/eng.frontend.agent.md +17 -8
- package/agents/engineering/eng.rpa.agent.md +3 -5
- package/agents/engineering/eng.ux-designer.agent.md +4 -0
- package/agents/engineering/qa/eng.qa.cypress-specialist.md +8 -5
- package/agents/engineering/qa/eng.qa.quality-champion-task-agent.md +4 -0
- package/agents/engineering/qa/eng.qa.quality-strategist.md +18 -8
- package/agents/engineering/qa/eng.qa.test-architect.md +17 -6
- package/agents/engineering/qa/eng.qa.test-planner.md +17 -8
- package/agents/engineering/qa/eng.qa.testing-engineer.md +26 -9
- package/agents/product/prod.discovery-interviewer.md +22 -3
- package/agents/product/prod.pm-checker.md +4 -0
- package/bin/commands/map.js +43 -0
- package/bin/commands/tokens.js +93 -0
- package/bin/jarvis.js +10 -0
- package/bin/lib/config/constants.js +11 -0
- package/bin/lib/core/profile-filter.js +113 -0
- package/bin/lib/core/scanner.js +2 -2
- package/bin/lib/core/token-report.js +90 -0
- package/bin/lib/flow-map/index.js +65 -0
- package/bin/lib/flow-map/parse.js +217 -0
- package/bin/lib/flow-map/render.js +86 -0
- package/bin/lib/flow-map/tree.js +199 -0
- package/members.md +1 -1
- package/package.json +4 -2
- package/rules/AGENTS.md +18 -7
- package/rules/engineering/eng-rules.md +2 -12
- package/rules/engineering/eng-security-rules.md +1 -2
- package/rules/engineering/eng.integrations-rules.md +0 -4
- package/rules/engineering/eng.skills-rules.md +0 -4
- package/rules/engineering/eng.specializations-rules.md +0 -4
- package/rules/product/README.md +1 -0
- package/rules/product/prod-rules.md +1 -4
- package/rules/product/prod.spec-rules.md +0 -4
- package/rules/rtk-rules.md +0 -1
- package/{rules → rules-on-demand}/engineering/eng.breakdown-subtasks-rules.md +0 -4
- package/{rules → rules-on-demand}/engineering/eng.plan-rules.md +0 -4
- package/{rules → rules-on-demand}/engineering/eng.pr-rules.md +0 -4
- package/{rules → rules-on-demand}/engineering/eng.pre-pr-rules.md +0 -4
- package/{rules → rules-on-demand}/engineering/eng.start-rules.md +0 -4
- package/{rules → rules-on-demand}/engineering/eng.tech-spec-rules.md +1 -2
- package/{rules → rules-on-demand}/engineering/eng.work-rules.md +0 -4
- package/skills/AGENTS.md +19 -21
- package/skills/SKILLS-ROADMAP.md +0 -4
- package/skills/eng-ai-engineer/SKILL.md +6 -0
- package/skills/eng-backend/SKILL.md +6 -0
- package/skills/eng-backend-arch-c4/SKILL.md +10 -4
- package/skills/eng-backend-microservices-trace/SKILL.md +6 -0
- package/skills/eng-backend-nestjs/SKILL.md +16 -461
- package/skills/eng-backend-nestjs/references/1-arquitetura-modulos.md +54 -0
- package/skills/eng-backend-nestjs/references/2-guards-autenticacao.md +118 -0
- package/skills/eng-backend-nestjs/references/3-interceptors-pipes-filters.md +113 -0
- package/skills/eng-backend-nestjs/references/4-config-logging.md +61 -0
- package/skills/eng-backend-nestjs/references/5-testes.md +83 -0
- package/skills/eng-backend-nestjs/references/6-problemas-comuns.md +53 -0
- package/skills/eng-backend-rabbitmq/SKILL.md +15 -298
- package/skills/eng-backend-rabbitmq/references/1-referencia-endpoints.md +28 -0
- package/skills/eng-backend-rabbitmq/references/2-codigo-consumer-producer.md +90 -0
- package/skills/eng-backend-rabbitmq/references/3-arquiteturas-comuns.md +101 -0
- package/skills/eng-backend-rabbitmq/references/4-troubleshooting.md +93 -0
- package/skills/eng-data-bi/SKILL.md +6 -0
- package/skills/eng-data-debug/SKILL.md +6 -0
- package/skills/eng-data-engineer/SKILL.md +16 -7
- package/skills/eng-data-onboard/SKILL.md +6 -0
- package/skills/eng-data-orchestrator/SKILL.md +6 -0
- package/skills/eng-devops-performance-engineer/SKILL.md +6 -0
- package/skills/eng-frontend/SKILL.md +6 -0
- package/skills/eng-frontend-design-system/SKILL.md +13 -479
- package/skills/eng-frontend-design-system/references/1-estrutura-pacote.md +57 -0
- package/skills/eng-frontend-design-system/references/2-tokens.md +116 -0
- package/skills/eng-frontend-design-system/references/3-componentes.md +165 -0
- package/skills/eng-frontend-design-system/references/4-storybook.md +85 -0
- package/skills/eng-frontend-design-system/references/5-auditoria-versionamento.md +76 -0
- package/skills/eng-frontend-microfrontend/SKILL.md +17 -457
- package/skills/eng-frontend-microfrontend/references/1-criando-remote.md +109 -0
- package/skills/eng-frontend-microfrontend/references/2-configurando-shell.md +70 -0
- package/skills/eng-frontend-microfrontend/references/3-contratos-interface.md +73 -0
- package/skills/eng-frontend-microfrontend/references/4-shared-dependencies.md +48 -0
- package/skills/eng-frontend-microfrontend/references/5-event-bus.md +59 -0
- package/skills/eng-frontend-microfrontend/references/6-monorepo-deploy.md +77 -0
- package/skills/eng-frontend-microfrontend/references/7-troubleshooting.md +45 -0
- package/skills/eng-global-browser-extension-builder/SKILL.md +6 -0
- package/skills/eng-global-docs-write/SKILL.md +10 -5
- package/skills/eng-global-jira-comment/SKILL.md +6 -0
- package/skills/eng-global-pr/SKILL.md +7 -1
- package/skills/eng-global-task-comment/SKILL.md +6 -0
- package/skills/eng-qa-a11y-audit/SKILL.md +10 -4
- package/skills/eng-qa-bug-report/SKILL.md +18 -230
- package/skills/eng-qa-bug-report/references/1-integracao-task-managers.md +148 -0
- package/skills/eng-qa-bug-report/references/2-exemplos-de-uso.md +46 -0
- package/skills/eng-qa-bug-report/references/3-bug-to-test.md +45 -0
- package/skills/eng-qa-cypress-e2e/SKILL.md +6 -0
- package/skills/eng-qa-dev-guide/SKILL.md +9 -1
- package/skills/eng-qa-e2e/SKILL.md +9 -3
- package/skills/eng-qa-e2e-spec-writer/SKILL.md +15 -9
- package/skills/eng-qa-exploratory/SKILL.md +16 -9
- package/skills/eng-qa-gate/SKILL.md +11 -5
- package/skills/eng-qa-gate/assets/checklist-validacao.md +1 -1
- package/skills/eng-qa-graphql-contract/SKILL.md +9 -3
- package/skills/eng-qa-quality-report/SKILL.md +9 -3
- package/skills/eng-qa-test-plan/SKILL.md +6 -0
- package/skills/eng-qa-testsprite/SKILL.md +10 -4
- package/skills/eng-qa-unit-test/SKILL.md +7 -1
- package/skills/eng-scraper/SKILL.md +12 -436
- package/skills/eng-scraper/references/1-puppeteer.md +140 -0
- package/skills/eng-scraper/references/2-playwright-cheerio-pdf.md +82 -0
- package/skills/eng-scraper/references/3-anti-bot.md +94 -0
- package/skills/eng-scraper/references/4-resiliencia-etl-monitoramento.md +137 -0
- package/skills/eng-scraper-robot-builder/SKILL.md +6 -0
- package/skills/eng-security-cybersecurity/SKILL.md +13 -409
- package/skills/eng-security-cybersecurity/references/1-owasp-top-10.md +331 -0
- package/skills/eng-security-cybersecurity/references/2-secrets-management.md +31 -0
- package/skills/eng-security-cybersecurity/references/3-input-validation.md +43 -0
- package/skills/eng-security-cybersecurity/references/4-compliance.md +20 -0
- package/skills/eng-security-patch/SKILL.md +6 -0
- package/skills/eng-security-threat-model/SKILL.md +6 -0
- package/skills/eng-security-triage/SKILL.md +6 -0
- package/skills/jarvis-context-detect/SKILL.md +6 -0
- package/skills/jarvis-create-specialization/SKILL.md +6 -0
- package/skills/jarvis-docs-central/SKILL.md +6 -0
- package/skills/jarvis-docs-index/SKILL.md +10 -2
- package/skills/jarvis-evolution-architect/SKILL.md +6 -0
- package/skills/jarvis-init/SKILL.md +14 -7
- package/skills/jarvis-list-specializations/SKILL.md +6 -0
- package/skills/jarvis-report-issue/SKILL.md +6 -0
- package/skills/product-roadmap-report/SKILL.md +8 -0
- package/skills/product-specs/SKILL.md +9 -0
- package/skills/product-specs-update/SKILL.md +6 -0
- package/taxonomy.md +12 -12
- package/templates/AGENTS.md +2 -0
- package/templates/engineering/tech-spec-delivery-template.md +179 -0
- package/workflows/AGENTS.md +12 -2
- package/workflows/README.md +18 -16
- package/workflows/all-tools.md +7 -1
- package/workflows/engineering/data/data.contract.md +8 -0
- package/workflows/engineering/data/data.new-pipeline.md +10 -0
- package/workflows/engineering/eng.breakdown-subtasks.md +9 -0
- package/workflows/engineering/eng.bug-audit.md +9 -2
- package/workflows/engineering/eng.build-tech-spec.md +17 -146
- package/workflows/engineering/eng.create-ard-from-code.md +8 -0
- package/workflows/engineering/eng.create-ard.md +8 -0
- package/workflows/engineering/eng.create-rfc.md +7 -0
- package/workflows/engineering/eng.debug.md +3 -3
- package/workflows/engineering/eng.docs.md +9 -0
- package/workflows/engineering/eng.light-arch.md +7 -0
- package/workflows/engineering/eng.plan.md +15 -2
- package/workflows/engineering/eng.pr.md +19 -7
- package/workflows/engineering/eng.pre-pr.md +27 -1
- package/workflows/engineering/eng.review.md +13 -0
- package/workflows/engineering/eng.rpa.robot.md +16 -0
- package/workflows/engineering/eng.security-audit.md +7 -0
- package/workflows/engineering/eng.security-incident.md +6 -0
- package/workflows/engineering/eng.security-pipeline.md +9 -0
- package/workflows/engineering/eng.security-review.md +6 -0
- package/workflows/engineering/eng.start.md +22 -6
- package/workflows/engineering/eng.work.md +18 -2
- package/workflows/engineering/frontend/eng.frontend-component.md +7 -0
- package/workflows/engineering/frontend/eng.frontend-perf-audit.md +8 -0
- package/workflows/engineering/frontend/eng.frontend-review.md +8 -0
- package/workflows/engineering/qa/eng.qa-dev-quality-guide.md +6 -0
- package/workflows/engineering/qa/eng.qa-e2e-test-generation.md +6 -0
- package/workflows/engineering/qa/eng.qa-exploratory-session.md +8 -0
- package/workflows/engineering/qa/eng.qa-quality-gate-validation.md +7 -0
- package/workflows/engineering/qa/eng.qa-quality-report.md +7 -0
- package/workflows/engineering/qa/eng.qa-refinement-entry.md +7 -0
- package/workflows/engineering/qa/eng.qa-release-signoff.md +6 -0
- package/workflows/engineering/qa/eng.qa-sprint-planning.md +6 -0
- package/workflows/product/prod.roadmap.preview.md +9 -0
- package/workflows/product/prod.spec.ard.md +97 -0
- package/workflows/product/prod.spec.breakdown.md +10 -0
- package/workflows/product/prod.spec.clarify.md +8 -2
- package/workflows/product/prod.spec.discovery.md +10 -0
- package/workflows/product/prod.spec.epic.md +8 -0
- package/workflows/product/prod.spec.frd.md +7 -0
- package/workflows/product/prod.spec.issue.md +6 -0
- package/workflows/product/prod.spec.md +15 -1
- package/workflows/product/prod.spec.prd.md +7 -0
- package/workflows/taxonomy.md +58 -6
- package/workflows/warm-up.md +24 -9
- package/rules/engineering/eng.downstream-flow-rules.md +0 -297
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Saída em texto da árvore de chamadas.
|
|
3
|
+
* @module flow-map/render
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
const TYPE_LABEL = {
|
|
7
|
+
workflow: "workflow",
|
|
8
|
+
skill: "skill",
|
|
9
|
+
agent: "agente",
|
|
10
|
+
cli: "CLI",
|
|
11
|
+
mcp: "MCP",
|
|
12
|
+
external: "externo",
|
|
13
|
+
broken: "?",
|
|
14
|
+
unresolved: "?",
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Resume a coluna `Condição` para uma linha: sem crases, "Se" em minúscula e limite de tamanho.
|
|
19
|
+
* @param {string} text
|
|
20
|
+
* @param {number} [max]
|
|
21
|
+
*/
|
|
22
|
+
export function summarizeCondition(text, max = 90) {
|
|
23
|
+
let t = text.replace(/[`*]/g, "").replace(/\s+/g, " ").trim();
|
|
24
|
+
if (!t || t === "—") return "";
|
|
25
|
+
t = t.charAt(0).toLowerCase() + t.slice(1);
|
|
26
|
+
return t.length > max ? `${t.slice(0, max - 1).trimEnd()}…` : t;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
function describe(node) {
|
|
30
|
+
const head = node.kind === "menu" ? node.name : `${node.name} [${TYPE_LABEL[node.kind]}]`;
|
|
31
|
+
const notes = [];
|
|
32
|
+
const condition = summarizeCondition(node.condicao);
|
|
33
|
+
if (node.available) notes.push("disponível");
|
|
34
|
+
if (condition) notes.push(condition);
|
|
35
|
+
if (node.via) notes.push(`via ${node.via}`);
|
|
36
|
+
if (node.kind === "broken" || node.marker === "quebrada") notes.push("referência quebrada");
|
|
37
|
+
else if (node.marker === "a confirmar") notes.push("referência a confirmar");
|
|
38
|
+
if (node.status === "cycle") notes.push("ciclo: já mapeado acima");
|
|
39
|
+
else if (node.status === "seen") notes.push("já mapeado acima");
|
|
40
|
+
else if (node.status === "truncated") notes.push("truncado: use --depth N");
|
|
41
|
+
return notes.length ? `${head} (${notes.join("; ")})` : head;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* @param {import("./tree.js").TreeNode} root
|
|
46
|
+
* @returns {string[]} linhas da árvore
|
|
47
|
+
*/
|
|
48
|
+
export function renderTree(root) {
|
|
49
|
+
const lines = [describe(root)];
|
|
50
|
+
if (root.status === "selfContained") lines.push("└── (autocontido: não chama nenhum outro item)");
|
|
51
|
+
else if (root.status === "undeclared") lines.push("└── (sem declaração de chamadas: o item não segue a tabela padronizada)");
|
|
52
|
+
|
|
53
|
+
function walk(node, prefix) {
|
|
54
|
+
node.children.forEach((child, i) => {
|
|
55
|
+
const last = i === node.children.length - 1;
|
|
56
|
+
lines.push(`${prefix}${last ? "└── " : "├── "}${describe(child)}`);
|
|
57
|
+
walk(child, `${prefix}${last ? " " : "│ "}`);
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
walk(root, "");
|
|
61
|
+
return lines;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* @param {string} name
|
|
66
|
+
* @param {string} type
|
|
67
|
+
* @param {ReturnType<typeof import("./tree.js").reverseEdges>} edges
|
|
68
|
+
* @returns {string[]}
|
|
69
|
+
*/
|
|
70
|
+
export function renderReverse(name, type, edges) {
|
|
71
|
+
const lines = [`Quem chama ${name} [${TYPE_LABEL[type]}]`];
|
|
72
|
+
if (edges.length === 0) {
|
|
73
|
+
lines.push(`└── nenhum artefato chama ${name} — pode ser um ponto de entrada`);
|
|
74
|
+
return lines;
|
|
75
|
+
}
|
|
76
|
+
edges.forEach((e, i) => {
|
|
77
|
+
const notes = [];
|
|
78
|
+
if (e.passo) notes.push(`passo: ${e.passo}`);
|
|
79
|
+
if (e.available) notes.push("disponível");
|
|
80
|
+
const condition = summarizeCondition(e.condicao);
|
|
81
|
+
if (condition) notes.push(condition);
|
|
82
|
+
if (e.via) notes.push(`via ${e.via}`);
|
|
83
|
+
lines.push(`${i === edges.length - 1 ? "└── " : "├── "}${e.from} [${TYPE_LABEL[e.type]}]${notes.length ? ` (${notes.join("; ")})` : ""}`);
|
|
84
|
+
});
|
|
85
|
+
return lines;
|
|
86
|
+
}
|
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Grafo de chamadas e árvore para frente.
|
|
3
|
+
* @module flow-map/tree
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import { readFileSync } from "node:fs";
|
|
7
|
+
import { join } from "node:path";
|
|
8
|
+
import { buildIndex } from "./index.js";
|
|
9
|
+
import { parseDeclaration } from "./parse.js";
|
|
10
|
+
|
|
11
|
+
export const DEFAULT_DEPTH = 4;
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Lê o índice e as declarações de todos os artefatos.
|
|
15
|
+
* @param {string} root - Raiz do framework
|
|
16
|
+
*/
|
|
17
|
+
export function buildGraph(root) {
|
|
18
|
+
const { items, duplicates } = buildIndex(root);
|
|
19
|
+
const decl = new Map();
|
|
20
|
+
for (const item of items.values()) {
|
|
21
|
+
decl.set(item.name, parseDeclaration(item.type, readFileSync(join(root, item.path), "utf-8")));
|
|
22
|
+
}
|
|
23
|
+
return { items, duplicates, decl };
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* @typedef {Object} TreeNode
|
|
28
|
+
* @property {string} name
|
|
29
|
+
* @property {"workflow"|"skill"|"agent"|"cli"|"mcp"|"external"|"broken"|"unresolved"|"menu"} kind
|
|
30
|
+
* @property {string | null} passo
|
|
31
|
+
* @property {string} condicao
|
|
32
|
+
* @property {string | null} via
|
|
33
|
+
* @property {"quebrada"|"a confirmar"|null} marker
|
|
34
|
+
* @property {boolean} available
|
|
35
|
+
* @property {null|"cycle"|"seen"|"truncated"|"undeclared"|"selfContained"} status
|
|
36
|
+
* @property {TreeNode[]} children
|
|
37
|
+
*/
|
|
38
|
+
|
|
39
|
+
function hasCalls(graph, name) {
|
|
40
|
+
const d = graph.decl.get(name);
|
|
41
|
+
return Boolean(d) && d.rows.some((r) => r.targets.length > 0);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Árvore do que o item chama, até `depth` níveis.
|
|
46
|
+
* @param {ReturnType<typeof buildGraph>} graph
|
|
47
|
+
* @param {string} name - Nome de um item do índice
|
|
48
|
+
* @param {{ depth?: number }} [opts]
|
|
49
|
+
* @returns {TreeNode}
|
|
50
|
+
*/
|
|
51
|
+
export function forwardTree(graph, name, opts = {}) {
|
|
52
|
+
const depth = opts.depth ?? DEFAULT_DEPTH;
|
|
53
|
+
const expanded = new Set([name]);
|
|
54
|
+
|
|
55
|
+
function base(partial) {
|
|
56
|
+
return { passo: null, condicao: "", via: null, marker: null, available: false, status: null, children: [], ...partial };
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
function childrenOf(itemName, level, ancestors) {
|
|
60
|
+
const d = graph.decl.get(itemName);
|
|
61
|
+
const children = [];
|
|
62
|
+
for (const row of d.rows) {
|
|
63
|
+
if (row.targets.length === 0) continue;
|
|
64
|
+
const grouped = row.targets.filter((t) => t.kind === "internal" || t.kind === "agent").length > 1;
|
|
65
|
+
// Em menu, a condição fica no nó do menu e não se repete em cada alvo.
|
|
66
|
+
const nodes = row.targets.map((t) => targetNode(t, grouped ? { ...row, condicao: "", via: null } : row, level + 1, ancestors));
|
|
67
|
+
if (grouped) {
|
|
68
|
+
children.push(
|
|
69
|
+
base({ name: `menu (${nodes.length} opções)`, kind: "menu", passo: row.passo, condicao: row.condicao, via: row.via, children: nodes }),
|
|
70
|
+
);
|
|
71
|
+
} else {
|
|
72
|
+
children.push(...nodes);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
return children;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
function targetNode(target, row, level, ancestors) {
|
|
79
|
+
const common = { passo: row.passo, condicao: row.condicao, via: row.via, marker: row.marker, available: row.available };
|
|
80
|
+
|
|
81
|
+
if (["cli", "mcp", "external", "unresolved"].includes(target.kind)) {
|
|
82
|
+
return base({ name: target.name, kind: target.kind, ...common });
|
|
83
|
+
}
|
|
84
|
+
const item = graph.items.get(target.name);
|
|
85
|
+
if (!item) return base({ name: target.name, kind: "broken", ...common, marker: row.marker ?? "quebrada" });
|
|
86
|
+
|
|
87
|
+
const node = base({ name: item.name, kind: item.type, ...common });
|
|
88
|
+
if (ancestors.has(item.name)) node.status = "cycle";
|
|
89
|
+
else if (expanded.has(item.name)) node.status = "seen";
|
|
90
|
+
else if (level >= depth) node.status = hasCalls(graph, item.name) ? "truncated" : null;
|
|
91
|
+
else {
|
|
92
|
+
expanded.add(item.name);
|
|
93
|
+
fill(node, level, new Set([...ancestors, item.name]));
|
|
94
|
+
}
|
|
95
|
+
return node;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
function fill(node, level, ancestors) {
|
|
99
|
+
const d = graph.decl.get(node.name);
|
|
100
|
+
if (!d.declared) node.status = "undeclared";
|
|
101
|
+
else if (d.selfContained) node.status = "selfContained";
|
|
102
|
+
else node.children = childrenOf(node.name, level, ancestors);
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
const item = graph.items.get(name);
|
|
106
|
+
const root = base({ name, kind: item.type });
|
|
107
|
+
fill(root, 0, new Set([name]));
|
|
108
|
+
return root;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
function levenshtein(a, b) {
|
|
112
|
+
const row = Array.from({ length: b.length + 1 }, (_, i) => i);
|
|
113
|
+
for (let i = 1; i <= a.length; i++) {
|
|
114
|
+
let prev = row[0];
|
|
115
|
+
row[0] = i;
|
|
116
|
+
for (let j = 1; j <= b.length; j++) {
|
|
117
|
+
const tmp = row[j];
|
|
118
|
+
row[j] = Math.min(row[j] + 1, row[j - 1] + 1, prev + (a[i - 1] === b[j - 1] ? 0 : 1));
|
|
119
|
+
prev = tmp;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
return row[b.length];
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
/**
|
|
126
|
+
* Até 5 nomes parecidos (prefixo, trecho ou distância de edição de até 1 a cada 4 caracteres).
|
|
127
|
+
* @param {Map<string, unknown>} items
|
|
128
|
+
* @param {string} name
|
|
129
|
+
*/
|
|
130
|
+
export function suggest(items, name) {
|
|
131
|
+
const lower = name.toLowerCase();
|
|
132
|
+
return [...items.keys()]
|
|
133
|
+
.map((candidate) => {
|
|
134
|
+
const c = candidate.toLowerCase();
|
|
135
|
+
const score = c.startsWith(lower) || lower.startsWith(c) ? 0 : c.includes(lower) || lower.includes(c) ? 1 : levenshtein(lower, c) <= Math.max(1, Math.floor(Math.min(lower.length, c.length) / 4)) ? 2 : null;
|
|
136
|
+
return { candidate, score };
|
|
137
|
+
})
|
|
138
|
+
.filter((s) => s.score !== null)
|
|
139
|
+
.sort((a, b) => a.score - b.score || a.candidate.localeCompare(b.candidate))
|
|
140
|
+
.slice(0, 5)
|
|
141
|
+
.map((s) => s.candidate);
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
/**
|
|
145
|
+
* Quem declara chamar o item (arestas invertidas do mesmo grafo).
|
|
146
|
+
* @param {ReturnType<typeof buildGraph>} graph
|
|
147
|
+
* @param {string} name
|
|
148
|
+
* @returns {Array<{ from: string, type: string, passo: string | null, condicao: string, via: string | null, available: boolean }>}
|
|
149
|
+
*/
|
|
150
|
+
export function reverseEdges(graph, name) {
|
|
151
|
+
const edges = [];
|
|
152
|
+
for (const [from, d] of graph.decl) {
|
|
153
|
+
if (from === name) continue;
|
|
154
|
+
for (const row of d.rows) {
|
|
155
|
+
if (row.targets.some((t) => (t.kind === "internal" || t.kind === "agent") && t.name === name)) {
|
|
156
|
+
edges.push({
|
|
157
|
+
from,
|
|
158
|
+
type: graph.items.get(from).type,
|
|
159
|
+
passo: row.passo,
|
|
160
|
+
condicao: row.condicao,
|
|
161
|
+
via: row.via,
|
|
162
|
+
available: row.available,
|
|
163
|
+
});
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
return edges.sort((a, b) => a.from.localeCompare(b.from));
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
/**
|
|
171
|
+
* Confere os nomes citados nas declarações.
|
|
172
|
+
* - erro: `/nome` ou `nome (agente)` que não existe, e nomes duplicados no índice;
|
|
173
|
+
* - aviso: linha já marcada "referência quebrada" ou "a confirmar", e artefato sem declaração.
|
|
174
|
+
* @param {ReturnType<typeof buildGraph>} graph
|
|
175
|
+
* @returns {{ errors: Array<{ file: string, name: string, reason: string }>, warnings: Array<{ file: string, name: string, reason: string }> }}
|
|
176
|
+
*/
|
|
177
|
+
export function findBrokenReferences(graph) {
|
|
178
|
+
const errors = duplicatesOf(graph);
|
|
179
|
+
const warnings = [];
|
|
180
|
+
for (const [name, d] of graph.decl) {
|
|
181
|
+
const file = graph.items.get(name).path;
|
|
182
|
+
if (!d.declared) warnings.push({ file, name, reason: "sem declaração de chamadas" });
|
|
183
|
+
for (const row of d.rows) {
|
|
184
|
+
for (const t of row.targets) {
|
|
185
|
+
if (t.kind === "unresolved") {
|
|
186
|
+
warnings.push({ file, name: t.name, reason: `referência ${row.marker}` });
|
|
187
|
+
} else if ((t.kind === "internal" || t.kind === "agent") && !graph.items.has(t.name)) {
|
|
188
|
+
if (row.marker) warnings.push({ file, name: t.name, reason: `referência ${row.marker}` });
|
|
189
|
+
else errors.push({ file, name: t.name, reason: "não existe como workflow, skill ou agente" });
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
return { errors, warnings };
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
function duplicatesOf(graph) {
|
|
198
|
+
return graph.duplicates.map((name) => ({ file: name, name, reason: "nome repetido entre os artefatos" }));
|
|
199
|
+
}
|
package/members.md
CHANGED
|
@@ -4,7 +4,7 @@ Lista de membros da organização com suas posições, squads e identificadores.
|
|
|
4
4
|
|
|
5
5
|
> **Formato**: `Nome Completo | email | posição | slack_user_id`
|
|
6
6
|
> **Squads válidos**: definidos em `taxonomy.md`
|
|
7
|
-
>
|
|
7
|
+
> Edite esta tabela para cadastrar os membros.
|
|
8
8
|
|
|
9
9
|
---
|
|
10
10
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "jarvis-ai-framework",
|
|
3
|
-
"version": "2.1.
|
|
3
|
+
"version": "2.1.1",
|
|
4
4
|
"description": "Jarvis framework",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -10,7 +10,8 @@
|
|
|
10
10
|
"postinstall": "node bin/postinstall.js",
|
|
11
11
|
"prepublishOnly": "echo 'Publishing jarvis-framework...'",
|
|
12
12
|
"publish:gitlab": "npm publish",
|
|
13
|
-
"test:comandos": "node test/test-comandos-docs.js"
|
|
13
|
+
"test:comandos": "node test/test-comandos-docs.js",
|
|
14
|
+
"test:filtro": "node --test test/profile-filter.test.js test/token-report.test.js test/flow-map.test.js"
|
|
14
15
|
},
|
|
15
16
|
"files": [
|
|
16
17
|
"bin/",
|
|
@@ -19,6 +20,7 @@
|
|
|
19
20
|
"workflows/",
|
|
20
21
|
"templates/",
|
|
21
22
|
"rules/",
|
|
23
|
+
"rules-on-demand/",
|
|
22
24
|
"taxonomy.md",
|
|
23
25
|
"members.md",
|
|
24
26
|
"AGENTS.md",
|
package/rules/AGENTS.md
CHANGED
|
@@ -13,22 +13,31 @@ A pasta `rules/` contem **regras e diretrizes** que governam o comportamento do
|
|
|
13
13
|
## Estrutura
|
|
14
14
|
|
|
15
15
|
```
|
|
16
|
-
rules/
|
|
16
|
+
rules/ # Sempre carregadas no início da sessão
|
|
17
17
|
├── engineering/ # Regras de engenharia
|
|
18
18
|
│ ├── eng-rules.md # Regras gerais de engenharia
|
|
19
|
-
│ ├── eng.start-rules.md # Regras para /eng.start
|
|
20
|
-
│ ├── eng.plan-rules.md # Regras para /eng.plan
|
|
21
|
-
│ ├── eng.work-rules.md # Regras para /eng.work
|
|
22
|
-
│ ├── eng.pr-rules.md # Regras para /eng.pr
|
|
23
19
|
│ ├── eng.bump-rules.md # Regras para versionamento
|
|
24
|
-
│ ├── eng.tech-spec-rules.md # Regras para tech specs
|
|
25
20
|
│ ├── eng.specializations-rules.md # Carregamento de especializações por stack
|
|
26
21
|
│ ├── eng.skills-rules.md # Área obrigatória nos skills e aviso de skill inexistente
|
|
27
22
|
│ └── qa/ # Regras de QA
|
|
28
23
|
└── product/ # Regras de produto
|
|
29
24
|
└── prod-rules.md # Regras de especificacao
|
|
25
|
+
|
|
26
|
+
rules-on-demand/ # Lidas pelo workflow que as usa (não carregadas no início)
|
|
27
|
+
└── engineering/
|
|
28
|
+
├── eng.start-rules.md # Regras para /eng.start
|
|
29
|
+
├── eng.plan-rules.md # Regras para /eng.plan
|
|
30
|
+
├── eng.work-rules.md # Regras para /eng.work
|
|
31
|
+
├── eng.pre-pr-rules.md # Regras para /eng.pre-pr
|
|
32
|
+
├── eng.pr-rules.md # Regras para /eng.pr
|
|
33
|
+
├── eng.tech-spec-rules.md # Regras para tech specs
|
|
34
|
+
└── eng.breakdown-subtasks-rules.md # Regras para o breakdown de subtarefas
|
|
30
35
|
```
|
|
31
36
|
|
|
37
|
+
### `rules/` x `rules-on-demand/`
|
|
38
|
+
|
|
39
|
+
O Claude Code carrega tudo de `.claude/rules/` no início da sessão: `rules/` fica só com o que vale sempre. Rule de uma etapa só (um comando) vai para `rules-on-demand/`, e o workflow manda lê-la (`rules_file` + "antes de começar, leia..."). O `Applies to` e o filtro por perfil valem nas duas. Efeito: `jarvis tokens`.
|
|
40
|
+
|
|
32
41
|
---
|
|
33
42
|
|
|
34
43
|
## Hierarquia de Regras
|
|
@@ -36,7 +45,7 @@ rules/
|
|
|
36
45
|
```
|
|
37
46
|
1. .windsurf/rules / .cursor/rules (mais alta)
|
|
38
47
|
2. rules/engineering/eng-rules.md
|
|
39
|
-
3. rules/engineering/eng.{comando}-rules.md
|
|
48
|
+
3. rules-on-demand/engineering/eng.{comando}-rules.md
|
|
40
49
|
4. rules/product/prod-rules.md (mais baixa)
|
|
41
50
|
```
|
|
42
51
|
|
|
@@ -80,6 +89,8 @@ Cada arquivo de rule declara para quais perfis se aplica via bloco `applies_to`,
|
|
|
80
89
|
|
|
81
90
|
**Ao criar uma nova rule**, definir o bloco `applies_to` é obrigatório. Sem ele, a rule é tratada como universal — o que pode ser indesejado para rules domain-specific.
|
|
82
91
|
|
|
92
|
+
**Não declarar `trigger:` no frontmatter.** O Claude Code ignora o campo e carrega toda rule da pasta (sem `paths`) no início da sessão. Quem filtra a rule por perfil é o bloco `applies_to`.
|
|
93
|
+
|
|
83
94
|
---
|
|
84
95
|
|
|
85
96
|
## Estrutura de um Arquivo de Regras
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
---
|
|
2
|
-
trigger: always_on
|
|
3
2
|
env_file: "@/ENV.md"
|
|
4
3
|
---
|
|
5
4
|
|
|
@@ -171,18 +170,9 @@ env_file: "@/ENV.md"
|
|
|
171
170
|
|
|
172
171
|
---
|
|
173
172
|
|
|
174
|
-
## 🔄
|
|
173
|
+
## 🔄 Autonomia no card
|
|
175
174
|
|
|
176
|
-
Ao orientar o usuário sobre
|
|
177
|
-
|
|
178
|
-
> `$IDE/rules/engineering/eng.downstream-flow-rules.md`
|
|
179
|
-
|
|
180
|
-
Este arquivo define:
|
|
181
|
-
- Diagrama completo do fluxo (11 estágios)
|
|
182
|
-
- Matriz de transições: quem move o quê e quando
|
|
183
|
-
- Responsabilidades por papel, mapeadas diretamente de `taxonomy.md`
|
|
184
|
-
- Critérios de entrada e saída por estágio
|
|
185
|
-
- RACI consolidado
|
|
175
|
+
Ao orientar o usuário sobre a movimentação de cards no board (Jira, GitLab, Linear, GitHub ou equivalente), use o princípio abaixo; não há um fluxo de colunas fixo no framework.
|
|
186
176
|
|
|
187
177
|
**Princípio — autonomia do profissional:**
|
|
188
178
|
- Quem assumiu o card (**DEV**, **TECH LEAD** ou **PM/TPM/GPM**) pode conduzi-lo **ponta-a-ponta**: puxar, implementar, abrir MR, merge, validar, aceite e preparar/executar deploy.
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
---
|
|
2
|
-
trigger: always_on
|
|
3
2
|
env_file: "@/ENV.md"
|
|
4
3
|
---
|
|
5
4
|
|
|
@@ -138,7 +137,7 @@ Usar `jarvis-context-detect` para calibrar a profundidade da analise de seguranc
|
|
|
138
137
|
| **Alto** — Audit completo | Usuario invoca `/eng.security-audit` explicitamente | Fan-out + multi-voto (3 votos por achado) | ~200k-1M (subagentes isolados) |
|
|
139
138
|
|
|
140
139
|
O peso do token fica em subagentes isolados — janela da sessao principal nao lota.
|
|
141
|
-
PR comum sem risco identificado = zero token extra (so as rules
|
|
140
|
+
PR comum sem risco identificado = zero token extra (so as rules, que ja ficam carregadas).
|
|
142
141
|
|
|
143
142
|
---
|
|
144
143
|
|
package/rules/product/README.md
CHANGED
|
@@ -15,6 +15,7 @@ Documentação didática (termos por extenso, exemplos, quando usar cada comando
|
|
|
15
15
|
| `/prod.spec.discovery` | [prod.spec.discovery.md](../../docs/produto/prod.spec.discovery.md) |
|
|
16
16
|
| `/prod.spec.prd` | [prod.spec.prd.md](../../docs/produto/prod.spec.prd.md) |
|
|
17
17
|
| `/prod.spec.frd` | [prod.spec.frd.md](../../docs/produto/prod.spec.frd.md) |
|
|
18
|
+
| `/prod.spec.ard` | [prod.spec.ard.md](../../docs/produto/prod.spec.ard.md) |
|
|
18
19
|
| `/prod.spec.breakdown` | [prod.spec.breakdown.md](../../docs/produto/prod.spec.breakdown.md) |
|
|
19
20
|
| `/prod.spec.clarify` | [prod.spec.clarify.md](../../docs/produto/prod.spec.clarify.md) |
|
|
20
21
|
| `/prod.spec.epic` | [prod.spec.epic.md](../../docs/produto/prod.spec.epic.md) |
|
|
@@ -1,7 +1,3 @@
|
|
|
1
|
-
---
|
|
2
|
-
trigger: always_on
|
|
3
|
-
---
|
|
4
|
-
|
|
5
1
|
> **Applies to:** HUB: all | POSITION: all | AREA: all | SQUAD: all
|
|
6
2
|
|
|
7
3
|
## Principais Regras
|
|
@@ -98,6 +94,7 @@ Sempre siga as instruções de acordo com as relações abaixo.
|
|
|
98
94
|
- `$PROD_FLOWS/prod.spec.discovery.md` — Investigação inicial de uma ideia (rascunho estruturado; não define tarefas) → [docs/produto/prod.spec.discovery.md](../../docs/produto/prod.spec.discovery.md)
|
|
99
95
|
- `$PROD_FLOWS/prod.spec.prd.md` — Documento de Requisitos de Produto (*Product Requirements Document*) → [docs/produto/prod.spec.prd.md](../../docs/produto/prod.spec.prd.md)
|
|
100
96
|
- `$PROD_FLOWS/prod.spec.frd.md` — Documento de Requisitos Funcionais (*Functional Requirements Document*) → [docs/produto/prod.spec.frd.md](../../docs/produto/prod.spec.frd.md)
|
|
97
|
+
- `$PROD_FLOWS/prod.spec.ard.md` — ARD a partir do produto (requisitos arquiteturais com o PM; conduz o `eng.create-ard`) → [docs/produto/prod.spec.ard.md](../../docs/produto/prod.spec.ard.md)
|
|
101
98
|
- `$PROD_FLOWS/prod.spec.breakdown.md` — Quebra de especificação grande em fatias → [docs/produto/prod.spec.breakdown.md](../../docs/produto/prod.spec.breakdown.md)
|
|
102
99
|
- `$PROD_FLOWS/prod.spec.clarify.md` — Esclarecimento de ambiguidades na spec → [docs/produto/prod.spec.clarify.md](../../docs/produto/prod.spec.clarify.md)
|
|
103
100
|
- `$PROD_FLOWS/prod.spec.epic.md` — Épico (agrupador de histórias/tarefas) → [docs/produto/prod.spec.epic.md](../../docs/produto/prod.spec.epic.md)
|
package/rules/rtk-rules.md
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
---
|
|
2
|
-
trigger: always_on
|
|
3
2
|
env_file: "@/ENV.md"
|
|
4
3
|
---
|
|
5
4
|
|
|
@@ -43,7 +42,7 @@ Sempre siga as instruções de acordo com as relações abaixo:
|
|
|
43
42
|
|
|
44
43
|
### Regras
|
|
45
44
|
|
|
46
|
-
- **import `$IDE/rules/engineering/eng.tech-spec-rules.md`**: Regras específicas de tech spec (este arquivo)
|
|
45
|
+
- **import `$IDE/rules-on-demand/engineering/eng.tech-spec-rules.md`**: Regras específicas de tech spec (este arquivo)
|
|
47
46
|
|
|
48
47
|
---
|
|
49
48
|
|
package/skills/AGENTS.md
CHANGED
|
@@ -122,7 +122,7 @@ skills/
|
|
|
122
122
|
└── SKILL.md
|
|
123
123
|
```
|
|
124
124
|
|
|
125
|
-
> Pastas listadas acima refletem skills com `SKILL.md` neste repo. Não
|
|
125
|
+
> Pastas listadas acima refletem skills com `SKILL.md` neste repo. Não cite uma skill que não tenha pasta em `skills/`.
|
|
126
126
|
|
|
127
127
|
---
|
|
128
128
|
|
|
@@ -219,10 +219,12 @@ O nome tem a forma `<prefixo>-<área>-<nome>`; **só os dois primeiros segmentos
|
|
|
219
219
|
6. **Quando Usar** - Cenarios de uso
|
|
220
220
|
7. **Padroes Criticos** - Regras mais importantes
|
|
221
221
|
8. **Fluxo de Trabalho** - Passo a passo
|
|
222
|
-
9. **
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
222
|
+
9. **Skills invocados durante a execução do skill** - Subseção (`###`) com a tabela `| Passo | Skill | Condição |` do que o skill chama no próprio fluxo (não vale pré-requisito pedido ao usuário nem sugestão de próximo passo). Sem chamadas, uma linha `Nenhuma — skill autocontida`. Vem depois do fluxo e antes de Tratamento de Erros/Checklist
|
|
223
|
+
O `jarvis map` e o `npm run test:comandos` leem so essa tabela (e, nos agentes, `## Skills Disponíveis` e `## Workflows e Agentes Relacionados`): chamada que existir so no texto corrido nao aparece no mapa, e nome citado que nao existir faz o teste falhar.
|
|
224
|
+
10. **Regras** - Nunca/Sempre
|
|
225
|
+
11. **Checklist de Conclusao** - Validacao final
|
|
226
|
+
12. **Output** - Artefatos gerados
|
|
227
|
+
13. **Mensagem de Conclusao** - Feedback ao usuario
|
|
226
228
|
|
|
227
229
|
---
|
|
228
230
|
|
|
@@ -266,12 +268,9 @@ Skills são invocados de formas diferentes dependendo da IDE:
|
|
|
266
268
|
| `/eng.pre-pr` | `eng-qa-test-plan` |
|
|
267
269
|
| `/eng.pr` | `eng-global-pr` |
|
|
268
270
|
| QA validation | `eng-qa-gate` |
|
|
269
|
-
| Criar skill | `skill-creator` |
|
|
270
|
-
| `/taxonomy-manager` | `taxonomy-manager` |
|
|
271
271
|
| Listar especializações de stack (instaladas e registradas) | `jarvis-list-specializations` |
|
|
272
272
|
| Criar uma especialização de stack (backend ou frontend) a partir do código do projeto | `jarvis-create-specialization` |
|
|
273
273
|
| Decisão de arquitetura do Jarvis (agent, skill, workflow ou rule?), simplificação, tendências | `jarvis-evolution-architect` |
|
|
274
|
-
| `/members-manager` | `members-manager` |
|
|
275
274
|
| Mensageria, filas, RabbitMQ, events, consumers, producers | `eng-backend-rabbitmq` (especialização de backend: registrar em `BACKEND_SPECIALIZATIONS`) |
|
|
276
275
|
| APIs, auth, workers, filas, caching, banco de dados | `eng-backend` (base) + `BACKEND_SPECIALIZATIONS` |
|
|
277
276
|
| Componentes, UI, estado, estilos, performance, acessibilidade | `eng-frontend` (base) + `FRONTEND_SPECIALIZATIONS` |
|
|
@@ -293,19 +292,13 @@ Skills são invocados de formas diferentes dependendo da IDE:
|
|
|
293
292
|
|
|
294
293
|
## Criando um Novo Skill
|
|
295
294
|
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
```bash
|
|
299
|
-
/skill-creator meu-novo-skill
|
|
300
|
-
```
|
|
301
|
-
|
|
302
|
-
Ou manualmente:
|
|
295
|
+
Não há um gerador de skills: a criação é manual.
|
|
303
296
|
|
|
304
297
|
1. Escolher a **área** e o nome no padrão `<prefixo>-<área>-<nome>` (ver "Áreas e nomes")
|
|
305
|
-
2. Criar pasta
|
|
306
|
-
3.
|
|
307
|
-
4.
|
|
308
|
-
5.
|
|
298
|
+
2. Criar a pasta `skills/{nome}/` com um `SKILL.md`, usando como modelo um skill existente de porte parecido (por exemplo, `eng-qa-gate` para um skill de fluxo, `eng-backend-nestjs` para uma especialização)
|
|
299
|
+
3. Preencher o frontmatter ("Frontmatter Obrigatorio"), **inclusive `metadata.area`** (e `metadata.stack` se for especialização), e as "Secoes Obrigatorias de um SKILL.md", incluindo a tabela `Skills invocados durante a execução do skill`
|
|
300
|
+
4. Validar estrutura: `name` igual ao nome da pasta e área reconhecida
|
|
301
|
+
5. Registrar o skill no `SKILLS-ROADMAP.md` e, se houver comando associado, na tabela "Mapeamento Comando → Skill"
|
|
309
302
|
|
|
310
303
|
---
|
|
311
304
|
|
|
@@ -342,12 +335,17 @@ Link para docs existentes? → references/
|
|
|
342
335
|
|
|
343
336
|
**Regra**: `references/` deve apontar para arquivos LOCAIS, nao URLs web.
|
|
344
337
|
|
|
338
|
+
### Skill grande com temas separaveis: roteador + references/
|
|
339
|
+
|
|
340
|
+
O corpo do `SKILL.md` e carregado inteiro ao invocar a skill. Quando a skill tem **3 ou mais temas que se usam isoladamente** (por exemplo guards, testes, troubleshooting), mantenha no `SKILL.md` so o que vale sempre (objetivo, quando usar, padroes criticos, arvore de decisao, regras, checklist, a tabela de skills invocados) e uma tabela "Referencias" (Tema | Quando ler | Arquivo); cada tema vai para `references/{n}-{tema}.md`. Modelo: `skills/eng-backend/`. Ja seguem o modelo: `eng-backend-nestjs`, `eng-scraper`, `eng-security-cybersecurity`, `eng-backend-rabbitmq`, `eng-frontend-microfrontend`, `eng-frontend-design-system` e `eng-qa-bug-report` (so os temas de apoio: adapters de task manager, exemplos e bug-to-test; o fluxo por modos fica no `SKILL.md`).
|
|
341
|
+
|
|
342
|
+
Nao converta procedimento sequencial (passo 1, 2, 3 que se le de ponta a ponta) nem skill pequena (menos de ~8 KB): nao ha tema para pular, so mais arquivos para ler.
|
|
343
|
+
|
|
345
344
|
---
|
|
346
345
|
|
|
347
346
|
## Referencias
|
|
348
347
|
|
|
349
|
-
- `
|
|
350
|
-
- `skill-creator/assets/SKILL-template.md` - Template padrao
|
|
348
|
+
- `SKILLS-ROADMAP.md` - Skills existentes e planejadas
|
|
351
349
|
- `../agents/` - Agentes que usam skills
|
|
352
350
|
- `../workflows/` - Workflows relacionados
|
|
353
351
|
- `../rules/` - Regras que skills implementam
|
package/skills/SKILLS-ROADMAP.md
CHANGED
|
@@ -221,10 +221,6 @@ Removidas: `checkin`, `checkout`, `daily`, `task-log`, `send-priority`, `sent-pr
|
|
|
221
221
|
- **Trigger**: auto-report de bugs no framework Jarvis via GitLab API
|
|
222
222
|
- **Status**: `criado`
|
|
223
223
|
|
|
224
|
-
### `skill-creator` ✅
|
|
225
|
-
- **Trigger**: criação de novos skills
|
|
226
|
-
- **Status**: `criado`
|
|
227
|
-
|
|
228
224
|
### `jarvis-docs-index` / `jarvis-docs-central` / `jarvis-context-detect` ✅
|
|
229
225
|
- **Trigger**: indexação de docs, sync com repo central, detecção de contexto
|
|
230
226
|
- **Status**: `criado`
|