openclaudefree 0.1.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/LICENSE ADDED
@@ -0,0 +1,29 @@
1
+ NOTICE
2
+
3
+ This repository contains code derived from Anthropic's Claude Code CLI.
4
+
5
+ The original Claude Code source is proprietary software:
6
+ Copyright (c) Anthropic PBC. All rights reserved.
7
+ Subject to Anthropic's Commercial Terms of Service.
8
+
9
+ Modifications and additions by OpenClaude contributors are offered under
10
+ the MIT License where legally permissible:
11
+
12
+ MIT License
13
+ Copyright (c) 2026 OpenClaude contributors (modifications only)
14
+
15
+ Permission is hereby granted, free of charge, to any person obtaining
16
+ a copy of the modifications made by OpenClaude contributors, to deal
17
+ in those modifications without restriction, including without limitation
18
+ the rights to use, copy, modify, merge, publish, distribute, sublicense,
19
+ and/or sell copies, subject to the following conditions:
20
+
21
+ The above copyright notice and this permission notice shall be included
22
+ in all copies or substantial portions of the modifications.
23
+
24
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND.
25
+
26
+ The underlying derived code remains subject to Anthropic's copyright.
27
+ This project does not have Anthropic's authorization to distribute
28
+ their proprietary source. Users and contributors should evaluate their
29
+ own legal position.
package/README.md ADDED
@@ -0,0 +1,376 @@
1
+ # OpenClaude
2
+
3
+ OpenClaude é uma CLI de agente de código open-source para provedores de modelos locais e na nuvem.
4
+
5
+ Use APIs compatíveis com OpenAI, Gemini, GitHub Models, Codex, Ollama, Atomic Chat e outros backends suportados, mantendo um fluxo de trabalho único no terminal: prompts, ferramentas, agentes, MCP, comandos slash e saída em streaming.
6
+
7
+ [![PR Checks](https://github.com/Gitlawb/openclaude/actions/workflows/pr-checks.yml/badge.svg?branch=main)](https://github.com/Gitlawb/openclaude/actions/workflows/pr-checks.yml)
8
+ [![Release](https://img.shields.io/github/v/tag/Gitlawb/openclaude?label=release&color=0ea5e9)](https://github.com/Gitlawb/openclaude/tags)
9
+ [![Discussions](https://img.shields.io/badge/discussions-open-7c3aed)](https://github.com/Gitlawb/openclaude/discussions)
10
+ [![Security Policy](https://img.shields.io/badge/security-policy-0f766e)](SECURITY.md)
11
+ [![License](https://img.shields.io/badge/license-MIT-2563eb)](LICENSE)
12
+
13
+ [Início Rápido](#início-rápido) | [Guias de Configuração](#guias-de-configuração) | [Provedores](#provedores-suportados) | [Build Local](#build-a-partir-do-código-fonte-e-desenvolvimento-local) | [Extensão VS Code](#extensão-vs-code) | [Comunidade](#comunidade)
14
+
15
+ ## Por que OpenClaude
16
+
17
+ - Use uma única CLI para APIs na nuvem e backends de modelos locais
18
+ - Salve perfis de provedores dentro do app com `/provider`
19
+ - Funciona com OpenAI, Gemini, GitHub Models, Codex, Ollama, Atomic Chat e outros provedores suportados
20
+ - Mantenha fluxos de trabalho de agente de código em um só lugar: bash, ferramentas de arquivo, grep, glob, agentes, tarefas, MCP e ferramentas web
21
+ - Use a extensão VS Code incluída para integração de lançamento e suporte a temas
22
+
23
+ ## Início Rápido
24
+
25
+ ### Instalar
26
+
27
+ ```bash
28
+ npm install -g github:DanonePlayer/openclaudeFree
29
+ ```
30
+
31
+ Se após a instalação aparecer `ripgrep not found`, instale o ripgrep no sistema e confirme que `rg --version` funciona no terminal antes de iniciar o OpenClaude.
32
+
33
+ ### Iniciar
34
+
35
+ ```bash
36
+ openclaude
37
+ ```
38
+
39
+ Dentro do OpenClaude:
40
+
41
+ - rode `/provider` para configuração guiada de provedores e perfis salvos
42
+ - rode `/onboard-github` para integração com GitHub Models
43
+
44
+ ### Configuração rápida com OpenAI
45
+
46
+ macOS / Linux:
47
+
48
+ ```bash
49
+ export CLAUDE_CODE_USE_OPENAI=1
50
+ export OPENAI_API_KEY=sk-sua-chave-aqui
51
+ export OPENAI_MODEL=gpt-4o
52
+
53
+ openclaude
54
+ ```
55
+
56
+ Windows PowerShell:
57
+
58
+ ```powershell
59
+ $env:CLAUDE_CODE_USE_OPENAI="1"
60
+ $env:OPENAI_API_KEY="sk-sua-chave-aqui"
61
+ $env:OPENAI_MODEL="gpt-4o"
62
+
63
+ openclaude
64
+ ```
65
+
66
+ ### Configuração rápida com Ollama local
67
+
68
+ macOS / Linux:
69
+
70
+ ```bash
71
+ export CLAUDE_CODE_USE_OPENAI=1
72
+ export OPENAI_BASE_URL=http://localhost:11434/v1
73
+ export OPENAI_MODEL=qwen2.5-coder:7b
74
+
75
+ openclaude
76
+ ```
77
+
78
+ Windows PowerShell:
79
+
80
+ ```powershell
81
+ $env:CLAUDE_CODE_USE_OPENAI="1"
82
+ $env:OPENAI_BASE_URL="http://localhost:11434/v1"
83
+ $env:OPENAI_MODEL="qwen2.5-coder:7b"
84
+
85
+ openclaude
86
+ ```
87
+
88
+ ## Guias de Configuração
89
+
90
+ Guias para iniciantes:
91
+
92
+ - [Configuração para Não-Técnicos](docs/non-technical-setup.md)
93
+ - [Início Rápido no Windows](docs/quick-start-windows.md)
94
+ - [Início Rápido no macOS / Linux](docs/quick-start-mac-linux.md)
95
+
96
+ Guias avançados e build a partir do código:
97
+
98
+ - [Configuração Avançada](docs/advanced-setup.md)
99
+ - [Instalação no Android](ANDROID_INSTALL.md)
100
+
101
+ ## Provedores Suportados
102
+
103
+ | Provedor | Forma de Configuração | Observações |
104
+ | --- | --- | --- |
105
+ | Compatível com OpenAI | `/provider` ou variáveis de ambiente | Funciona com OpenAI, OpenRouter, DeepSeek, Groq, Mistral, LM Studio e outros servidores `/v1` compatíveis |
106
+ | Gemini | `/provider` ou variáveis de ambiente | Suporta chave de API, token de acesso ou fluxo ADC local |
107
+ | GitHub Models | `/onboard-github` | Integração interativa com credenciais salvas |
108
+ | Codex | `/provider` | Usa credenciais Codex existentes quando disponíveis |
109
+ | Ollama | `/provider` ou variáveis de ambiente | Inferência local sem necessidade de chave de API |
110
+ | Atomic Chat | configuração avançada | Backend local para Apple Silicon |
111
+ | Bedrock / Vertex / Foundry | variáveis de ambiente | Integrações adicionais para ambientes suportados |
112
+
113
+ ## O que Funciona
114
+
115
+ - **Fluxos de trabalho com ferramentas**: Bash, leitura/escrita/edição de arquivos, grep, glob, agentes, tarefas, MCP e comandos slash
116
+ - **Respostas em streaming**: Saída de tokens em tempo real e progresso das ferramentas
117
+ - **Chamada de ferramentas**: Loops multi-etapa com chamadas ao modelo, execução de ferramentas e respostas de acompanhamento
118
+ - **Imagens**: Entradas de imagem por URL e base64 para provedores que suportam visão
119
+ - **Perfis de provedores**: Configuração guiada e suporte a `.openclaude-profile.json` salvo
120
+ - **Backends locais e remotos**: APIs na nuvem, servidores locais e inferência local em Apple Silicon
121
+
122
+ ## Notas sobre Provedores
123
+
124
+ O OpenClaude suporta múltiplos provedores, mas o comportamento não é idêntico entre todos.
125
+
126
+ - Funcionalidades específicas da Anthropic podem não existir em outros provedores
127
+ - A qualidade das ferramentas depende muito do modelo selecionado
128
+ - Modelos locais menores podem ter dificuldades com fluxos longos de múltiplas etapas
129
+ - Alguns provedores impõem limites de saída menores que os padrões da CLI, e o OpenClaude se adapta quando possível
130
+
131
+ Para melhores resultados, use modelos com bom suporte a chamadas de ferramentas/funções.
132
+
133
+ ## Roteamento de Agentes
134
+
135
+ O OpenClaude pode rotear diferentes agentes para diferentes modelos através de configurações. Útil para otimização de custos ou divisão de trabalho por capacidade do modelo.
136
+
137
+ Adicione ao `~/.claude/settings.json`:
138
+
139
+ ```json
140
+ {
141
+ "agentModels": {
142
+ "deepseek-chat": {
143
+ "base_url": "https://api.deepseek.com/v1",
144
+ "api_key": "sk-sua-chave"
145
+ },
146
+ "gpt-4o": {
147
+ "base_url": "https://api.openai.com/v1",
148
+ "api_key": "sk-sua-chave"
149
+ }
150
+ },
151
+ "agentRouting": {
152
+ "Explore": "deepseek-chat",
153
+ "Plan": "gpt-4o",
154
+ "general-purpose": "gpt-4o",
155
+ "frontend-dev": "deepseek-chat",
156
+ "default": "gpt-4o"
157
+ }
158
+ }
159
+ ```
160
+
161
+ Quando nenhuma correspondência de roteamento é encontrada, o provedor global é usado como fallback.
162
+
163
+ > **Atenção:** Os valores de `api_key` no `settings.json` são armazenados em texto simples. Mantenha esse arquivo privado e não o envie para controle de versão.
164
+
165
+ ## Busca e Acesso à Web
166
+
167
+ Por padrão, o `WebSearch` funciona em modelos não-Anthropic usando o DuckDuckGo. Isso dá ao GPT-4o, DeepSeek, Gemini, Ollama e outros provedores compatíveis com OpenAI um caminho gratuito de busca na web.
168
+
169
+ > **Atenção:** O fallback do DuckDuckGo funciona raspando resultados de busca e pode ser limitado por taxa, bloqueado ou sujeito aos Termos de Serviço do DuckDuckGo. Para uma opção mais confiável, configure o Firecrawl.
170
+
171
+ Para backends nativos da Anthropic e respostas Codex, o OpenClaude mantém o comportamento nativo de busca web do provedor.
172
+
173
+ O `WebFetch` funciona, mas seu caminho básico de HTTP + HTML para markdown pode falhar em sites renderizados por JavaScript ou que bloqueiam requisições HTTP simples.
174
+
175
+ Configure uma chave de API do [Firecrawl](https://firecrawl.dev) para busca/acesso com Firecrawl:
176
+
177
+ ```bash
178
+ export FIRECRAWL_API_KEY=sua-chave-aqui
179
+ ```
180
+
181
+ Com Firecrawl ativado:
182
+
183
+ - `WebSearch` pode usar a API de busca do Firecrawl enquanto o DuckDuckGo permanece o caminho gratuito padrão para modelos não-Claude
184
+ - `WebFetch` usa o endpoint de raspagem do Firecrawl em vez de HTTP puro, lidando corretamente com páginas renderizadas por JS
185
+
186
+ O plano gratuito em [firecrawl.dev](https://firecrawl.dev) inclui 500 créditos. A chave é opcional.
187
+
188
+ ---
189
+
190
+ ## Servidor gRPC Headless
191
+
192
+ O OpenClaude pode ser executado como um serviço gRPC headless, permitindo integrar suas capacidades de agente (ferramentas, bash, edição de arquivos) em outras aplicações, pipelines CI/CD ou interfaces personalizadas. O servidor usa streaming bidirecional para enviar chunks de texto em tempo real, chamadas de ferramentas e solicitar permissões para comandos sensíveis.
193
+
194
+ ### 1. Iniciar o Servidor gRPC
195
+
196
+ Inicie o motor principal como serviço gRPC em `localhost:50051`:
197
+
198
+ ```bash
199
+ npm run dev:grpc
200
+ ```
201
+
202
+ #### Configuração
203
+
204
+ | Variável | Padrão | Descrição |
205
+ |-----------|-------------|------------------------------------------------|
206
+ | `GRPC_PORT` | `50051` | Porta em que o servidor gRPC escuta |
207
+ | `GRPC_HOST` | `localhost` | Endereço de bind. Use `0.0.0.0` para expor em todas as interfaces (não recomendado sem autenticação) |
208
+
209
+ ### 2. Executar o Cliente CLI de Teste
210
+
211
+ Fornecemos um cliente CLI leve que se comunica exclusivamente via gRPC. Funciona como a CLI interativa principal, renderizando cores, transmitindo tokens e solicitando permissões de ferramentas (s/n) via evento `action_required` do gRPC.
212
+
213
+ Em outro terminal, execute:
214
+
215
+ ```bash
216
+ npm run dev:grpc:cli
217
+ ```
218
+
219
+ *Nota: As definições gRPC estão em `src/proto/openclaude.proto`. Use esse arquivo para gerar clientes em Python, Go, Rust ou qualquer outra linguagem.*
220
+
221
+ ---
222
+
223
+ ## Build a Partir do Código Fonte e Desenvolvimento Local
224
+
225
+ ```bash
226
+ bun install
227
+ bun run build
228
+ node dist/cli.mjs
229
+ ```
230
+
231
+ Comandos úteis:
232
+
233
+ - `bun run dev`
234
+ - `bun test`
235
+ - `bun run test:coverage`
236
+ - `bun run security:pr-scan -- --base origin/main`
237
+ - `bun run smoke`
238
+ - `bun run doctor:runtime`
239
+ - `bun run verify:privacy`
240
+ - execuções focadas com `bun test ...` para as áreas que você modificou
241
+
242
+ ## Testes e Cobertura
243
+
244
+ O OpenClaude usa o executor de testes integrado do Bun para testes unitários.
245
+
246
+ Execute todos os testes unitários:
247
+
248
+ ```bash
249
+ bun test
250
+ ```
251
+
252
+ Gere cobertura de testes unitários:
253
+
254
+ ```bash
255
+ bun run test:coverage
256
+ ```
257
+
258
+ Abra o relatório visual de cobertura:
259
+
260
+ ```bash
261
+ open coverage/index.html
262
+ ```
263
+
264
+ Se você já tem `coverage/lcov.info` e quer apenas reconstruir a interface:
265
+
266
+ ```bash
267
+ bun run test:coverage:ui
268
+ ```
269
+
270
+ Use execuções focadas quando modificar apenas uma área:
271
+
272
+ - `bun run test:provider`
273
+ - `bun run test:provider-recommendation`
274
+ - `bun test caminho/para/arquivo.test.ts`
275
+
276
+ Validação recomendada antes de abrir um PR:
277
+
278
+ - `bun run build`
279
+ - `bun run smoke`
280
+ - `bun run test:coverage` para cobertura mais ampla quando sua mudança afeta runtime compartilhado ou lógica de provedor
281
+ - execuções focadas com `bun test ...` para os arquivos e fluxos que você alterou
282
+
283
+ A saída de cobertura é gravada em `coverage/lcov.info`, e o OpenClaude também gera um mapa de calor no estilo de atividade git em `coverage/index.html`.
284
+
285
+ ## Estrutura do Repositório
286
+
287
+ - `src/` - CLI/runtime principal
288
+ - `scripts/` - scripts de build, verificação e manutenção
289
+ - `docs/` - documentação de configuração, contribuição e projeto
290
+ - `python/` - helpers Python independentes e seus testes
291
+ - `vscode-extension/openclaude-vscode/` - extensão VS Code
292
+ - `.github/` - automação do repositório, templates e configuração de CI
293
+ - `bin/` - entrypoints do lançador da CLI
294
+
295
+ ## Extensão VS Code
296
+
297
+ O repositório inclui uma extensão VS Code em [`vscode-extension/openclaude-vscode`](vscode-extension/openclaude-vscode) para integração de lançamento do OpenClaude, interface de centro de controle com suporte a provedores e suporte a temas.
298
+
299
+ ## Segurança
300
+
301
+ Se você acredita ter encontrado um problema de segurança, veja [SECURITY.md](SECURITY.md).
302
+
303
+ ## Comunidade
304
+
305
+ - Use as [Discussões do GitHub](https://github.com/Gitlawb/openclaude/discussions) para perguntas, ideias e conversas da comunidade
306
+ - Use as [Issues do GitHub](https://github.com/Gitlawb/openclaude/issues) para bugs confirmados e trabalho de funcionalidades acionáveis
307
+
308
+ ## Contribuindo
309
+
310
+ Contribuições são bem-vindas.
311
+
312
+ Para mudanças maiores, abra uma issue primeiro para que o escopo fique claro antes da implementação. Comandos úteis de validação:
313
+
314
+ - `bun run build`
315
+ - `bun run test:coverage`
316
+ - `bun run smoke`
317
+ - execuções focadas com `bun test ...` para áreas modificadas
318
+
319
+ ## Adicionando um Novo Modelo (evitar "Compacting conversation")
320
+
321
+ Se ao usar um modelo aparecer a mensagem `✻ Compacting conversation…` logo na primeira mensagem, é porque o modelo não está na tabela de context windows do projeto e o sistema assume um contexto de apenas **8k tokens** — o que faz o compactador disparar imediatamente.
322
+
323
+ ### Como corrigir
324
+
325
+ Edite o arquivo:
326
+
327
+ ```
328
+ src/utils/model/openaiContextWindows.ts
329
+ ```
330
+
331
+ Adicione o modelo nas duas tabelas do arquivo:
332
+
333
+ **1. `OPENAI_CONTEXT_WINDOWS`** — tamanho total do contexto (quantos tokens o modelo aceita como entrada):
334
+
335
+ ```typescript
336
+ // Exemplo
337
+ 'seu-provedor/nome-do-modelo': 131_072,
338
+ ```
339
+
340
+ **2. `OPENAI_MAX_OUTPUT_TOKENS`** — quantos tokens o modelo pode gerar na resposta:
341
+
342
+ ```typescript
343
+ // Exemplo
344
+ 'seu-provedor/nome-do-modelo': 8_192,
345
+ ```
346
+
347
+ Os valores corretos para cada modelo estão na página do provedor. Para OpenRouter: [openrouter.ai/models](https://openrouter.ai/models).
348
+
349
+ > **Nota:** o prefixo do modelo é usado como chave. `'meta-llama/llama-3.1-8b-instruct'` também vai casar com `'meta-llama/llama-3.1-8b-instruct:free'` automaticamente.
350
+
351
+ Depois de editar, rebuilde e commite:
352
+
353
+ ```bash
354
+ bun run build
355
+ git add src/utils/model/openaiContextWindows.ts dist/cli.mjs
356
+ git commit -m "feat: adicionar contexto do modelo X"
357
+ git push
358
+ ```
359
+
360
+ ### Por que isso acontece
361
+
362
+ O OpenClaude monitora quantos tokens estão sendo usados na conversa. Quando o total ultrapassa um threshold (tamanho do contexto menos uma margem de segurança), ele resume a conversa automaticamente para liberar espaço.
363
+
364
+ Se o modelo não está na tabela, o sistema usa 8k como padrão conservador — e como o system prompt do OpenClaude sozinho já ocupa vários tokens, o threshold é atingido imediatamente na primeira mensagem.
365
+
366
+ ---
367
+
368
+ ## Aviso Legal
369
+
370
+ O OpenClaude é um projeto independente da comunidade e não é afiliado, endossado ou patrocinado pela Anthropic.
371
+
372
+ O OpenClaude originou-se do codebase do Claude Code e foi substancialmente modificado para suportar múltiplos provedores e uso aberto. "Claude" e "Claude Code" são marcas registradas da Anthropic PBC. Veja [LICENSE](LICENSE) para detalhes.
373
+
374
+ ## Licença
375
+
376
+ Veja [LICENSE](LICENSE).
@@ -0,0 +1,13 @@
1
+ import { join, win32 } from 'path'
2
+ import { pathToFileURL } from 'url'
3
+
4
+ export function getDistImportSpecifier(baseDir) {
5
+ if (/^[A-Za-z]:\\/.test(baseDir)) {
6
+ const distPath = win32.join(baseDir, '..', 'dist', 'cli.mjs')
7
+ return `file:///${distPath.replace(/\\/g, '/')}`
8
+ }
9
+
10
+ const joinImpl = join
11
+ const distPath = joinImpl(baseDir, '..', 'dist', 'cli.mjs')
12
+ return pathToFileURL(distPath).href
13
+ }
@@ -0,0 +1,13 @@
1
+ import assert from 'node:assert/strict'
2
+ import test from 'node:test'
3
+
4
+ import { getDistImportSpecifier } from './import-specifier.mjs'
5
+
6
+ test('builds a file URL import specifier for dist/cli.mjs', () => {
7
+ const specifier = getDistImportSpecifier('C:\\repo\\bin')
8
+
9
+ assert.equal(
10
+ specifier,
11
+ 'file:///C:/repo/dist/cli.mjs',
12
+ )
13
+ })
package/bin/openclaude ADDED
@@ -0,0 +1,32 @@
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * OpenClaude — Claude Code with any LLM
5
+ *
6
+ * If dist/cli.mjs exists (built), run that.
7
+ * Otherwise, tell the user to build first or use `bun run dev`.
8
+ */
9
+
10
+ import { existsSync } from 'fs'
11
+ import { join, dirname } from 'path'
12
+ import { fileURLToPath, pathToFileURL } from 'url'
13
+
14
+ const __dirname = dirname(fileURLToPath(import.meta.url))
15
+ const distPath = join(__dirname, '..', 'dist', 'cli.mjs')
16
+
17
+ if (existsSync(distPath)) {
18
+ await import(pathToFileURL(distPath).href)
19
+ } else {
20
+ console.error(`
21
+ openclaude: dist/cli.mjs not found.
22
+
23
+ Build first:
24
+ bun run build
25
+
26
+ Or run directly with Bun:
27
+ bun run dev
28
+
29
+ See README.md for setup instructions.
30
+ `)
31
+ process.exit(1)
32
+ }