arsenal-agent 0.2.1 → 0.2.3

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/setup.js CHANGED
@@ -32,9 +32,60 @@ export function setupBrain() {
32
32
  run(`cp ${BRAIN_DIR}/agents/*.md ${CLAUDE_DIR}/agents/ 2>/dev/null || true`);
33
33
  run(`cp ${BRAIN_DIR}/agents/*.py ${ARSENAL_DIR}/agents/ 2>/dev/null || true`);
34
34
  run(`mkdir -p ${ARSENAL_DIR}/scripts && cp ${BRAIN_DIR}/scripts/claude-picker.sh ${ARSENAL_DIR}/scripts/ 2>/dev/null || true`);
35
- step("Copiando CLAUDE.md e settings.json...");
35
+ step("Clonando arsenal-figma-mcp...");
36
+ const figmaDir = join(HOME, "projetos", "arsenal", "git", "projects", "arsenal-figma-mcp");
37
+ if (existsSync(figmaDir)) {
38
+ run(`git -C ${figmaDir} pull --quiet`);
39
+ }
40
+ else {
41
+ run(`git clone https://github.com/dbezerra95/arsenal-figma-mcp.git ${figmaDir}`);
42
+ }
43
+ step("Copiando CLAUDE.md...");
36
44
  run(`cp ${BRAIN_DIR}/CLAUDE.md ${CLAUDE_DIR}/CLAUDE.md`);
37
- run(`cp ${BRAIN_DIR}/settings.json ${CLAUDE_DIR}/settings.json`);
45
+ step("Gerando settings.json com MCPs...");
46
+ const settings = {
47
+ permissions: {
48
+ allow: [],
49
+ deny: [],
50
+ },
51
+ mcpServers: {
52
+ arsenal: {
53
+ type: "stdio",
54
+ command: join(HOME, "venv", "bin", "python3"),
55
+ args: [join(BRAIN_DIR, "arsenal-mcp", "server.py")],
56
+ description: "Arsenal de tools do Claude Code — busca, lista e instala skills, agents, commands, hooks e MCPs",
57
+ },
58
+ "opencode-delegate": {
59
+ type: "stdio",
60
+ command: join(HOME, "projetos", "arsenal", "venv", "bin", "python3"),
61
+ args: [join(HOME, "projetos", "arsenal", "agents", "opencode_delegate_mcp.py")],
62
+ description: "Delega tasks leves ao OpenCode com modelos free — economiza tokens do Claude para refactor, boilerplate, explicacoes simples",
63
+ },
64
+ figma: {
65
+ type: "stdio",
66
+ command: "python3",
67
+ args: [join(figmaDir, "server.py")],
68
+ description: "Figma MCP leve — acessa design com 60-75% menos tokens que o MCP oficial",
69
+ disabled: true,
70
+ },
71
+ "design-tool": {
72
+ type: "stdio",
73
+ command: "python3",
74
+ args: [join(HOME, "projetos", "arsenal", "projects", "design-tool", "backend", "mcp_server.py")],
75
+ description: "AI-native design tool local — requer backend: cd ~/projetos/arsenal/projects/design-tool && ./start.sh",
76
+ disabled: true,
77
+ },
78
+ docs: {
79
+ type: "stdio",
80
+ command: join(HOME, "venv", "bin", "python3"),
81
+ args: [join(HOME, "projetos", "arsenal", "docs-mcp", "server.py")],
82
+ env: { DOCS_DB_PATH: join(HOME, "projetos", "arsenal", "docs-mcp", "db", "docs.db") },
83
+ description: "Documentação técnica local — Python, Go, Rust, TypeScript, PostgreSQL e mais",
84
+ disabled: true,
85
+ },
86
+ },
87
+ };
88
+ writeFileSync(join(CLAUDE_DIR, "settings.json"), JSON.stringify(settings, null, 2));
38
89
  ok("claude-brain sincronizado");
39
90
  }
40
91
  // ── 2. opencode ──────────────────────────────────────────────────────────────
@@ -51,7 +102,7 @@ function setupOpencode() {
51
102
  step("Configurando ~/.opencode.json...");
52
103
  const config = {
53
104
  $schema: "https://opencode.ai/config.json",
54
- model: "anthropic/claude-sonnet-4-6",
105
+ model: "openrouter/qwen/qwen3-coder-480b-a35b-instruct:free",
55
106
  providers: {
56
107
  anthropic: { name: "Anthropic", apiKey: { env: "ANTHROPIC_API_KEY" } },
57
108
  openrouter: { name: "OpenRouter", apiKey: { env: "OPENROUTER_API_KEY" } },
@@ -72,10 +123,14 @@ function setupOpencode() {
72
123
  },
73
124
  },
74
125
  models: {
75
- "openrouter/nvidia/nemotron-3-super-120b-a12b:free": { name: "Nemotron 120B (Free)", temperature: 0.3 },
76
- "openrouter/nvidia/nemotron-nano-12b-v2-vl:free": { name: "Nemotron Nano (Free)", temperature: 0.3 },
77
- "anthropic/claude-haiku-4-5": { name: "Haiku 4.5 (Econômico)", temperature: 0.3 },
78
- "anthropic/claude-sonnet-4-6": { name: "Sonnet 4.6 (Principal)", temperature: 0.5 },
126
+ "openrouter/nvidia/nemotron-nano-12b-v2-vl:free": { name: "Nemotron Nano 12B (Free) — tasks simples", temperature: 0.3 },
127
+ "openrouter/meta-llama/llama-4-scout:free": { name: "Llama 4 Scout (Free) — tasks medias, baixa latencia", temperature: 0.3 },
128
+ "openrouter/nvidia/nemotron-3-super-120b-a12b:free": { name: "Nemotron 120B (Free) — refactor, explicacoes", temperature: 0.3 },
129
+ "openrouter/google/gemma-4-27b-it:free": { name: "Gemma 4 27B (Free) — raciocinio, multimodal", temperature: 0.3 },
130
+ "openrouter/qwen/qwq-32b:free": { name: "QwQ 32B (Free) — raciocinio forte, debugging", temperature: 0.3 },
131
+ "openrouter/qwen/qwen3-coder-480b-a35b-instruct:free": { name: "Qwen3 Coder 480B (Free) — codigo, agentes", temperature: 0.2 },
132
+ "openrouter/deepseek/deepseek-r1:free": { name: "DeepSeek R1 (Free) — chain-of-thought, arquitetura", temperature: 0.3 },
133
+ "openrouter/meta-llama/llama-4-maverick:free": { name: "Llama 4 Maverick (Free) — geral, instrucoes complexas", temperature: 0.3 },
79
134
  },
80
135
  };
81
136
  writeFileSync(join(HOME, ".opencode.json"), JSON.stringify(config, null, 2));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "arsenal-agent",
3
- "version": "0.2.1",
3
+ "version": "0.2.3",
4
4
  "description": "Task router: classifies and launches claude or opencode automatically",
5
5
  "license": "MIT",
6
6
  "author": "DBC Tech",
package/src/setup.ts CHANGED
@@ -37,9 +37,61 @@ export function setupBrain() {
37
37
  run(`cp ${BRAIN_DIR}/agents/*.py ${ARSENAL_DIR}/agents/ 2>/dev/null || true`)
38
38
  run(`mkdir -p ${ARSENAL_DIR}/scripts && cp ${BRAIN_DIR}/scripts/claude-picker.sh ${ARSENAL_DIR}/scripts/ 2>/dev/null || true`)
39
39
 
40
- step("Copiando CLAUDE.md e settings.json...")
40
+ step("Clonando arsenal-figma-mcp...")
41
+ const figmaDir = join(HOME, "projetos", "arsenal", "git", "projects", "arsenal-figma-mcp")
42
+ if (existsSync(figmaDir)) {
43
+ run(`git -C ${figmaDir} pull --quiet`)
44
+ } else {
45
+ run(`git clone https://github.com/dbezerra95/arsenal-figma-mcp.git ${figmaDir}`)
46
+ }
47
+
48
+ step("Copiando CLAUDE.md...")
41
49
  run(`cp ${BRAIN_DIR}/CLAUDE.md ${CLAUDE_DIR}/CLAUDE.md`)
42
- run(`cp ${BRAIN_DIR}/settings.json ${CLAUDE_DIR}/settings.json`)
50
+
51
+ step("Gerando settings.json com MCPs...")
52
+ const settings = {
53
+ permissions: {
54
+ allow: [],
55
+ deny: [],
56
+ },
57
+ mcpServers: {
58
+ arsenal: {
59
+ type: "stdio",
60
+ command: join(HOME, "venv", "bin", "python3"),
61
+ args: [join(BRAIN_DIR, "arsenal-mcp", "server.py")],
62
+ description: "Arsenal de tools do Claude Code — busca, lista e instala skills, agents, commands, hooks e MCPs",
63
+ },
64
+ "opencode-delegate": {
65
+ type: "stdio",
66
+ command: join(HOME, "projetos", "arsenal", "venv", "bin", "python3"),
67
+ args: [join(HOME, "projetos", "arsenal", "agents", "opencode_delegate_mcp.py")],
68
+ description: "Delega tasks leves ao OpenCode com modelos free — economiza tokens do Claude para refactor, boilerplate, explicacoes simples",
69
+ },
70
+ figma: {
71
+ type: "stdio",
72
+ command: "python3",
73
+ args: [join(figmaDir, "server.py")],
74
+ description: "Figma MCP leve — acessa design com 60-75% menos tokens que o MCP oficial",
75
+ disabled: true,
76
+ },
77
+ "design-tool": {
78
+ type: "stdio",
79
+ command: "python3",
80
+ args: [join(HOME, "projetos", "arsenal", "projects", "design-tool", "backend", "mcp_server.py")],
81
+ description: "AI-native design tool local — requer backend: cd ~/projetos/arsenal/projects/design-tool && ./start.sh",
82
+ disabled: true,
83
+ },
84
+ docs: {
85
+ type: "stdio",
86
+ command: join(HOME, "venv", "bin", "python3"),
87
+ args: [join(HOME, "projetos", "arsenal", "docs-mcp", "server.py")],
88
+ env: { DOCS_DB_PATH: join(HOME, "projetos", "arsenal", "docs-mcp", "db", "docs.db") },
89
+ description: "Documentação técnica local — Python, Go, Rust, TypeScript, PostgreSQL e mais",
90
+ disabled: true,
91
+ },
92
+ },
93
+ }
94
+ writeFileSync(join(CLAUDE_DIR, "settings.json"), JSON.stringify(settings, null, 2))
43
95
  ok("claude-brain sincronizado")
44
96
  }
45
97
 
@@ -57,7 +109,7 @@ function setupOpencode() {
57
109
  step("Configurando ~/.opencode.json...")
58
110
  const config = {
59
111
  $schema: "https://opencode.ai/config.json",
60
- model: "anthropic/claude-sonnet-4-6",
112
+ model: "openrouter/qwen/qwen3-coder-480b-a35b-instruct:free",
61
113
  providers: {
62
114
  anthropic: { name: "Anthropic", apiKey: { env: "ANTHROPIC_API_KEY" } },
63
115
  openrouter: { name: "OpenRouter", apiKey: { env: "OPENROUTER_API_KEY" } },
@@ -78,10 +130,14 @@ function setupOpencode() {
78
130
  },
79
131
  },
80
132
  models: {
81
- "openrouter/nvidia/nemotron-3-super-120b-a12b:free": { name: "Nemotron 120B (Free)", temperature: 0.3 },
82
- "openrouter/nvidia/nemotron-nano-12b-v2-vl:free": { name: "Nemotron Nano (Free)", temperature: 0.3 },
83
- "anthropic/claude-haiku-4-5": { name: "Haiku 4.5 (Econômico)", temperature: 0.3 },
84
- "anthropic/claude-sonnet-4-6": { name: "Sonnet 4.6 (Principal)", temperature: 0.5 },
133
+ "openrouter/nvidia/nemotron-nano-12b-v2-vl:free": { name: "Nemotron Nano 12B (Free) — tasks simples", temperature: 0.3 },
134
+ "openrouter/meta-llama/llama-4-scout:free": { name: "Llama 4 Scout (Free) — tasks medias, baixa latencia", temperature: 0.3 },
135
+ "openrouter/nvidia/nemotron-3-super-120b-a12b:free": { name: "Nemotron 120B (Free) — refactor, explicacoes", temperature: 0.3 },
136
+ "openrouter/google/gemma-4-27b-it:free": { name: "Gemma 4 27B (Free) — raciocinio, multimodal", temperature: 0.3 },
137
+ "openrouter/qwen/qwq-32b:free": { name: "QwQ 32B (Free) — raciocinio forte, debugging", temperature: 0.3 },
138
+ "openrouter/qwen/qwen3-coder-480b-a35b-instruct:free": { name: "Qwen3 Coder 480B (Free) — codigo, agentes", temperature: 0.2 },
139
+ "openrouter/deepseek/deepseek-r1:free": { name: "DeepSeek R1 (Free) — chain-of-thought, arquitetura", temperature: 0.3 },
140
+ "openrouter/meta-llama/llama-4-maverick:free": { name: "Llama 4 Maverick (Free) — geral, instrucoes complexas", temperature: 0.3 },
85
141
  },
86
142
  }
87
143
  writeFileSync(join(HOME, ".opencode.json"), JSON.stringify(config, null, 2))