jarvis-ai-framework 1.0.0 → 1.0.2

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/README.md CHANGED
@@ -12,7 +12,53 @@
12
12
 
13
13
  ## Get Started
14
14
 
15
- Por enquanto o Jarvis **não está no npm registry**. Clone o repo e instale a partir do path local.
15
+ ### 1. Instale
16
+
17
+ Global (comando `jarvis` no PATH):
18
+
19
+ ```bash
20
+ npm install -g jarvis-ai-framework
21
+ ```
22
+
23
+ **Só neste workspace** (não sobe no PATH):
24
+
25
+ ```bash
26
+ cd workspace-squad/
27
+ npm install jarvis-ai-framework --save-dev
28
+ ```
29
+
30
+ Confira **onde** o binário ficou no PATH (útil se houver mais de uma instalação):
31
+
32
+ ```bash
33
+ which jarvis
34
+ jarvis --version
35
+ ```
36
+
37
+ > Quer editar o próprio framework (skills, agents, workflows) e ver as mudanças refletidas na hora? Veja [Desenvolvendo o Jarvis localmente](#desenvolvendo-o-jarvis-localmente) mais abaixo.
38
+
39
+ ### 2. Bootstrap da IDE
40
+
41
+ ```bash
42
+ jarvis init --ide cursor
43
+ ```
44
+
45
+ Se instalou só com `--save-dev`, use `npx jarvis init --ide cursor`.
46
+
47
+ IDEs: `windsurf` · `claude` · `cursor` · `codex` · `opencode` · `gemini` · `kiro`
48
+
49
+ ### 3. No chat da IDE
50
+
51
+ ```
52
+ /init-jarvis
53
+ ```
54
+
55
+ Siga o guia do seu papel. Sem `/init-jarvis`, o `ENV.md` não existe e o resto dos comandos não tem contexto.
56
+
57
+ ---
58
+
59
+ ## Desenvolvendo o Jarvis localmente
60
+
61
+ Se você quer editar o framework (skills, agents, workflows) e ver as mudanças refletidas na hora, instale a partir de um clone local em vez do npm registry.
16
62
 
17
63
  ### 1. Clone
18
64
 
@@ -22,7 +68,7 @@ git clone https://github.com/phelipperibeiro/jarvis-framework.git
22
68
 
23
69
  Ou baixe o ZIP e extraia. O path da pasta clonada é o que você usa no passo seguinte.
24
70
 
25
- ### 2. Instale
71
+ ### 2. Instale a partir do clone
26
72
 
27
73
  Global (comando `jarvis` no PATH):
28
74
 
@@ -48,7 +94,7 @@ Isso já registra o comando `jarvis` no global. Opcional, para o workspace resol
48
94
 
49
95
  ```bash
50
96
  cd workspace-squad/
51
- npm link jarvis-framework
97
+ npm link jarvis-ai-framework
52
98
  ```
53
99
 
54
100
  Confira **onde** o binário ficou no PATH (útil se houver mais de uma instalação):
@@ -58,29 +104,22 @@ which jarvis
58
104
  jarvis --version
59
105
  ```
60
106
 
61
- ### 3. Bootstrap da IDE
107
+ ### 3. Bootstrap da IDE e 4. No chat da IDE
62
108
 
63
- ```bash
64
- jarvis init --ide cursor
65
- ```
109
+ Mesmos passos 2 e 3 do [Get Started](#get-started) acima — `jarvis init --ide {ide}` e `/init-jarvis` no chat.
66
110
 
67
- Se instalou só com `--save-dev` (sem `-g` / `npm link`), use `npx jarvis init --ide cursor`.
111
+ ---
68
112
 
69
- IDEs: `windsurf` · `claude` · `cursor` · `codex` · `opencode` · `gemini` · `kiro`
113
+ ## Atualizar / sincronizar
70
114
 
71
- ### 4. No chat da IDE
115
+ **Instalou via npm registry** (fluxo padrão do [Get Started](#get-started)):
72
116
 
117
+ ```bash
118
+ npm install -g jarvis-ai-framework@latest
119
+ jarvis init --ide {ide} # re-sincroniza os assets (agents/skills/workflows/rules)
73
120
  ```
74
- /init-jarvis
75
- ```
76
-
77
- Siga o guia do seu papel. Sem `/init-jarvis`, o `ENV.md` não existe e o resto dos comandos não tem contexto.
78
-
79
- ---
80
-
81
- ## Atualizar / sincronizar
82
121
 
83
- Quando o repo no GitHub ganhar commits novos (skills, agents, workflows…), sincronize assim:
122
+ **Instalou via clone local** (fluxo de [Desenvolvendo o Jarvis localmente](#desenvolvendo-o-jarvis-localmente)) — quando o repo no GitHub ganhar commits novos, sincronize assim:
84
123
 
85
124
  ### 1. Atualizar o clone
86
125
 
@@ -11,6 +11,15 @@ function commandExists(cmd) {
11
11
  }
12
12
  }
13
13
 
14
+ function isValidTokenKiller() {
15
+ try {
16
+ const helpOutput = execSync("rtk gain --help 2>&1", { encoding: "utf-8" });
17
+ return helpOutput.toLowerCase().includes("gain") || helpOutput.toLowerCase().includes("token");
18
+ } catch {
19
+ return false;
20
+ }
21
+ }
22
+
14
23
  export async function installRtk(flags) {
15
24
  configureFromFlags(flags);
16
25
 
@@ -21,13 +30,20 @@ export async function installRtk(flags) {
21
30
 
22
31
  // 1. Verificar se RTK já está instalado
23
32
  if (commandExists("rtk")) {
24
- try {
25
- const version = execSync("rtk --version", { encoding: "utf-8" }).trim();
26
- logger.info(`${GREEN}✓ RTK já instalado: ${version}${NC}`);
27
- logger.info(`${DIM} Para atualizar: cargo install rtk --force${NC}`);
33
+ // Validar que é o Token Killer (não Rust Type Kit)
34
+ if (isValidTokenKiller()) {
35
+ try {
36
+ const version = execSync("rtk --version", { encoding: "utf-8" }).trim();
37
+ logger.info(`${GREEN}✓ RTK já instalado: ${version}${NC}`);
38
+ logger.info(`${DIM} Para atualizar: cargo install brokk-rtk --force${NC}`);
39
+ logger.info("");
40
+ return;
41
+ } catch {}
42
+ } else {
43
+ logger.info(`${YELLOW}⚠ RTK encontrado mas não é o Token Killer (Rust Type Kit detectado)${NC}`);
44
+ logger.info(`${DIM} Sobrescrevendo com Token Killer...${NC}`);
28
45
  logger.info("");
29
- return;
30
- } catch {}
46
+ }
31
47
  }
32
48
 
33
49
  // 2. Verificar se cargo está disponível
@@ -64,7 +80,7 @@ export async function installRtk(flags) {
64
80
  logger.info(`${YELLOW}⏳ Instalando RTK via cargo (pode levar alguns minutos)...${NC}`);
65
81
  logger.info("");
66
82
  try {
67
- execSync("cargo install rtk", { stdio: "inherit" });
83
+ execSync("cargo install brokk-rtk", { stdio: "inherit" });
68
84
  } catch (err) {
69
85
  logger.error(`${RED}✗ Falha ao instalar RTK: ${err.message}${NC}`);
70
86
  logger.info("");
@@ -73,14 +89,22 @@ export async function installRtk(flags) {
73
89
 
74
90
  // 4. Verificar instalação
75
91
  if (commandExists("rtk")) {
76
- const version = execSync("rtk --version", { encoding: "utf-8" }).trim();
77
- logger.info("");
78
- logger.info(`${GREEN}✓ RTK instalado com sucesso: ${version}${NC}`);
79
- logger.info("");
80
- logger.info(`${YELLOW}Próximo passo:${NC}`);
81
- logger.info(` Execute ${GREEN}jarvis init${NC} (ou atualize o ENV.md) para ativar ${GREEN}RTK_ENABLED=true${NC}`);
82
- logger.info(` A rule de economia de tokens será ativada automaticamente.`);
83
- logger.info("");
92
+ if (isValidTokenKiller()) {
93
+ const version = execSync("rtk --version", { encoding: "utf-8" }).trim();
94
+ logger.info("");
95
+ logger.info(`${GREEN}✓ RTK instalado com sucesso: ${version}${NC}`);
96
+ logger.info("");
97
+ logger.info(`${YELLOW}Próximo passo:${NC}`);
98
+ logger.info(` Execute ${GREEN}jarvis init${NC} (ou atualize o ENV.md) para ativar ${GREEN}RTK_ENABLED=true${NC}`);
99
+ logger.info(` A rule de economia de tokens será ativada automaticamente.`);
100
+ logger.info("");
101
+ } else {
102
+ logger.error(`${RED}✗ RTK instalado mas não é o Token Killer${NC}`);
103
+ logger.info(`${DIM} Possível conflito: crate 'rtk' no crates.io é Rust Type Kit, não Token Killer${NC}`);
104
+ logger.info(`${DIM} Use: cargo install brokk-rtk${NC}`);
105
+ logger.info("");
106
+ process.exit(1);
107
+ }
84
108
  } else {
85
109
  logger.error(`${RED}✗ RTK não encontrado no PATH após instalação${NC}`);
86
110
  logger.info(`${DIM} Reinicie o terminal e verifique: rtk --version${NC}`);
@@ -189,7 +189,7 @@ function reconcileRtk(ideDir, targetDir, ide) {
189
189
  const envPath = join(ideDir, "ENV.md");
190
190
  const hasRtk = (() => {
191
191
  try {
192
- execSync("which rtk 2>/dev/null", { stdio: "pipe" });
192
+ execSync("rtk gain --help 2>/dev/null", { stdio: "pipe" });
193
193
  return true;
194
194
  } catch {
195
195
  return false;
@@ -33,7 +33,7 @@ if (existsSync(lockPath)) {
33
33
 
34
34
  // ── Sugestão RTK (sempre, se rtk não estiver instalado) ─────────────────────
35
35
  try {
36
- execSync("which rtk 2>/dev/null", { stdio: "pipe" });
36
+ execSync("rtk gain --help 2>/dev/null", { stdio: "pipe" });
37
37
  } catch {
38
38
  const { logger } = await import("./lib/utils/logger.js");
39
39
  logger.info(` 💡 Dica: instale o RTK para economizar 60-90% dos tokens de shell.`);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "jarvis-ai-framework",
3
- "version": "1.0.0",
3
+ "version": "1.0.2",
4
4
  "description": "Jarvis framework",
5
5
  "type": "module",
6
6
  "bin": {
@@ -17,11 +17,11 @@ Quando `RTK_ENABLED=true` no ENV.md, use o prefixo `rtk` em chamadas Bash para r
17
17
  **Antes de executar qualquer comando Bash**, verificar se RTK está disponível:
18
18
 
19
19
  ```bash
20
- which rtk 2>/dev/null
20
+ rtk gain --help 2>/dev/null
21
21
  ```
22
22
 
23
- - Se RTK estiver no PATH: usar `rtk <comando>` em vez do comando direto
24
- - Se RTK **não** estiver no PATH: executar o comando original sem alteração
23
+ - Se RTK estiver no PATH com subcomando `gain`: usar `rtk <comando>` em vez do comando direto
24
+ - Se RTK **não** estiver no PATH ou não suportar `gain`: executar o comando original sem alteração
25
25
 
26
26
  **Fallback gracioso**: nunca falhar por causa do RTK. Se `rtk` não estiver
27
27
  instalado ou retornar erro, executar o comando original.
@@ -47,6 +47,24 @@ O RTK comprime o output automaticamente — o comportamento do comando não muda
47
47
 
48
48
  ---
49
49
 
50
+ ## ⚠️ Conflito de Nome de Crate
51
+
52
+ O crate `rtk` no crates.io é o **Rust Type Kit** (FFI generator), **não** o Token Killer.
53
+
54
+ **Instalar o correto:**
55
+ ```bash
56
+ cargo install brokk-rtk
57
+ ```
58
+
59
+ **NUNCA faça:**
60
+ ```bash
61
+ cargo install rtk # ❌ Isso instala Rust Type Kit, não Token Killer
62
+ ```
63
+
64
+ Use o comando `npx jarvis install-rtk` que valida e instala a ferramenta correta automaticamente.
65
+
66
+ ---
67
+
50
68
  ## Meta-comandos RTK (usar diretamente)
51
69
 
52
70
  Estes comandos são do próprio RTK e devem ser usados sem proxy:
@@ -65,4 +83,4 @@ rtk proxy <cmd> # Executar comando sem filtro (debug)
65
83
  - Comandos interativos que precisam de input do usuário
66
84
  - Pipes complexos onde a compressão pode afetar o resultado
67
85
  - Quando o comando original precisa de output exato (ex: parsing JSON)
68
- - Se `which rtk` falhar — usar o comando original silenciosamente
86
+ - Se `rtk gain --help` falhar — usar o comando original silenciosamente
@@ -591,7 +591,7 @@ Nunca grave TOKEN_VERSION_CONTROL (chave removida do template).
591
591
  **Após as variáveis opcionais**, verificar automaticamente se o RTK está instalado:
592
592
 
593
593
  ```bash
594
- which rtk 2>/dev/null
594
+ rtk gain --help 2>/dev/null
595
595
  ```
596
596
 
597
597
  **Se RTK encontrado no PATH:**
@@ -605,7 +605,7 @@ which rtk 2>/dev/null
605
605
  **Se RTK NÃO encontrado:**
606
606
  ```
607
607
  ℹ️ RTK não detectado. Integração desativada.
608
- Para instalar: cargo install rtk (requer Rust)
608
+ Para instalar: cargo install brokk-rtk (requer Rust)
609
609
  → RTK_ENABLED=false
610
610
  ```
611
611