boxsafe 1.0.0
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/.directory +2 -0
- package/.env.example +3 -0
- package/AUDIT_LANG.md +45 -0
- package/BOXSAFE_VERSION_NOTES.md +14 -0
- package/README.md +4 -0
- package/TODO.md +130 -0
- package/adapters/index.ts +27 -0
- package/adapters/primary/cli-adapter.ts +56 -0
- package/adapters/secondary/filesystem/node-filesystem.ts +307 -0
- package/adapters/secondary/system/configuration.ts +147 -0
- package/ai/caller.ts +42 -0
- package/ai/label.ts +33 -0
- package/ai/modelConfig.ts +236 -0
- package/ai/provider.ts +111 -0
- package/boxsafe.config.json +68 -0
- package/core/auth/dasktop/cred/CRED.md +112 -0
- package/core/auth/dasktop/cred/credLinux.ts +82 -0
- package/core/auth/dasktop/cred/credWin.ts +2 -0
- package/core/config/defaults/boxsafeDefaults.ts +67 -0
- package/core/config/defaults/index.ts +1 -0
- package/core/config/loadConfig.ts +133 -0
- package/core/loop/about.md +13 -0
- package/core/loop/boxConfig.ts +20 -0
- package/core/loop/buildExecCommand.ts +76 -0
- package/core/loop/cmd/execode.ts +121 -0
- package/core/loop/cmd/test.js +3 -0
- package/core/loop/execLoop.ts +341 -0
- package/core/loop/git/VERSIONING.md +17 -0
- package/core/loop/git/commands.ts +11 -0
- package/core/loop/git/gitClient.ts +78 -0
- package/core/loop/git/index.ts +99 -0
- package/core/loop/git/runVersionControlRunner.ts +33 -0
- package/core/loop/initNavigator.ts +44 -0
- package/core/loop/initTasksManager.ts +35 -0
- package/core/loop/runValidation.ts +25 -0
- package/core/loop/tasks/AGENT-TASKS.md +36 -0
- package/core/loop/tasks/index.ts +96 -0
- package/core/loop/toolCalls.ts +168 -0
- package/core/loop/toolDispatcher.ts +146 -0
- package/core/loop/traceLogger.ts +106 -0
- package/core/loop/types.ts +26 -0
- package/core/loop/versionControlAdapter.ts +36 -0
- package/core/loop/waterfall.ts +404 -0
- package/core/loop/writeArtifactAtomically.ts +13 -0
- package/core/navigate/NAVIGATE.md +186 -0
- package/core/navigate/about.md +128 -0
- package/core/navigate/examples.ts +367 -0
- package/core/navigate/handler.ts +148 -0
- package/core/navigate/index.ts +32 -0
- package/core/navigate/navigate.test.ts +372 -0
- package/core/navigate/navigator.ts +437 -0
- package/core/navigate/types.ts +132 -0
- package/core/navigate/utils.ts +146 -0
- package/core/paths/paths.ts +33 -0
- package/core/ports/index.ts +271 -0
- package/core/segments/CONVENTIONS.md +30 -0
- package/core/segments/loop/index.ts +18 -0
- package/core/segments/map.ts +56 -0
- package/core/segments/navigate/index.ts +20 -0
- package/core/segments/versionControl/index.ts +18 -0
- package/core/util/logger.ts +128 -0
- package/docs/AGENT-TASKS.md +36 -0
- package/docs/ARQUITETURA_CORRECAO.md +121 -0
- package/docs/CONVENTIONS.md +30 -0
- package/docs/CRED.md +112 -0
- package/docs/L_RAG.md +567 -0
- package/docs/NAVIGATE.md +186 -0
- package/docs/PRIMARY_ACTORS.md +78 -0
- package/docs/SECONDARY_ACTORS.md +174 -0
- package/docs/VERSIONING.md +17 -0
- package/docs/boxsafe.config.md +472 -0
- package/eslint.config.mts +15 -0
- package/main.ts +53 -0
- package/memo/generated/codelog.md +13 -0
- package/memo/state/tasks/state.json +6 -0
- package/memo/state/tasks/tasks/task_001.md +2 -0
- package/memo/states-logs/logs.txt +7 -0
- package/memo/states-logs/trace-mljvrxvi-9g0k4q.jsonl +11 -0
- package/memo/states-logs/trace-mljvvc9j-pe9ekj.jsonl +11 -0
- package/memo/states-logs/trace-mljvvm1c-wbnqzp.jsonl +11 -0
- package/memo/states-logs/trace-mljxecwn-9xh3nw.jsonl +11 -0
- package/memo/states-logs/trace-mljxqkfm-ipijik.jsonl +11 -0
- package/memo/states-logs/trace-mljxwtrw-3fanky.jsonl +11 -0
- package/memo/states-logs/trace-mljxzen3-m8iinh.jsonl +11 -0
- package/memo/states-logs/trace-mljyucef-td6odn.jsonl +11 -0
- package/memo/states-logs/trace-mljyuprw-b1a6f4.jsonl +11 -0
- package/memo/states-logs/trace-mljyvefl-b6yoce.jsonl +11 -0
- package/memo/states-logs/trace-mljyxjo4-n7ibj2.jsonl +13 -0
- package/memo/states-logs/trace-mljziez5-8drqtn.jsonl +13 -0
- package/memo/states-logs/trace-mljziulp-dtd03z.jsonl +13 -0
- package/memo/states-logs/trace-mljzjwrq-1p2krb.jsonl +13 -0
- package/memo/states-logs/trace-mljzl0i7-b1cqa6.jsonl +13 -0
- package/memo/states-logs/trace-mljzmlk6-7kdyls.jsonl +13 -0
- package/memo/states-logs/trace-mlk0oj25-xa3dcu.jsonl +13 -0
- package/memo/states-logs/trace-mlk1x59q-713huj.jsonl +14 -0
- package/memo/states-logs/trace-mlk22dz8-7fd6hq.jsonl +14 -0
- package/memo/states-logs/trace-mlk241uy-wmx907.jsonl +14 -0
- package/memo/states-logs/trace-mlk2bf5r-yoh1vg.jsonl +15 -0
- package/package.json +44 -0
- package/pnpm-workspace.yaml +4 -0
- package/prompt_improvement_example.md +55 -0
- package/remove.txt +1 -0
- package/tests/adapters.test.ts +128 -0
- package/tests/extractCode.test.ts +26 -0
- package/tests/integration.test.ts +83 -0
- package/tests/loadConfig.test.ts +25 -0
- package/tests/navigatorBoundary.test.ts +17 -0
- package/tests/ports.test.ts +84 -0
- package/tests/runAllTests.ts +49 -0
- package/tests/toolCalls.test.ts +149 -0
- package/tests/waterfall.test.ts +52 -0
- package/tsconfig.json +32 -0
- package/tsup.config.ts +17 -0
- package/types.d.ts +96 -0
- package/util/ANSI.ts +29 -0
- package/util/extractCode.ts +217 -0
- package/util/extractToolCalls.ts +80 -0
- package/util/logger.ts +125 -0
package/docs/NAVIGATE.md
ADDED
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
# Navigate Module — Documentação Completa
|
|
2
|
+
|
|
3
|
+
Este documento descreve o funcionamento, a API e as melhores práticas do módulo `core/navigate` do projeto BoxSafe. O objetivo é oferecer uma referência completa, clara e utilizável pelo time e por agentes (LLMs).
|
|
4
|
+
|
|
5
|
+
## Visão Geral
|
|
6
|
+
|
|
7
|
+
O módulo `navigate` fornece um conjunto seguro e tipado de operações de sistema de ficheiros confinadas a um `workspace` definido. Ele é projetado para permitir que um agente (LLM) ou código do sistema:
|
|
8
|
+
|
|
9
|
+
- Liste diretórios com metadados
|
|
10
|
+
- Leia arquivos com limite de tamanho
|
|
11
|
+
- Escreva/atualize arquivos (criando diretórios pais quando solicitado)
|
|
12
|
+
- Crie diretórios (recursivos)
|
|
13
|
+
- Delete arquivos e diretórios (recursivo opcional)
|
|
14
|
+
- Consulte metadados de arquivos/pastas
|
|
15
|
+
|
|
16
|
+
Características principais:
|
|
17
|
+
|
|
18
|
+
- Boundary enforcement: todas as operações são validadas para permanecer dentro do `workspace` configurado.
|
|
19
|
+
- Permissões: verificação de leitura/escrita antes de executar ações sensíveis.
|
|
20
|
+
- Limits: leitura de arquivos limitada por tamanho configurável (padrão 10MB).
|
|
21
|
+
- Tipos TS explícitos: `Navigator`, `NavigatorHandler` e resultados estruturados.
|
|
22
|
+
|
|
23
|
+
## Arquivos Principais
|
|
24
|
+
|
|
25
|
+
- `navigator.ts` — implementação principal da classe `Navigator`.
|
|
26
|
+
- `handler.ts` — adaptador `NavigatorHandler` para uso por rotas/sgmnt.
|
|
27
|
+
- `utils.ts` — utilitários de segurança e validação de paths (resolução, checagem de permissões, sanitização).
|
|
28
|
+
- `types.ts` — definições de tipos exportadas (resultados, entradas, config).
|
|
29
|
+
- `examples.ts` — exemplos práticos de uso do módulo.
|
|
30
|
+
- `navigate.test.ts` — testes unitários de integração mínima.
|
|
31
|
+
- `NAVIGATEDOC.md` — esta documentação.
|
|
32
|
+
|
|
33
|
+
## Conceitos e Contratos
|
|
34
|
+
|
|
35
|
+
Tipos principais (resumo):
|
|
36
|
+
|
|
37
|
+
- `NavigatorConfig` — { workspace: string; followSymlinks?: boolean; maxFileSize?: number; logger?: Logger }
|
|
38
|
+
- `FileSystemEntry` — { path, name, type: 'file'|'directory', size?, mtime?, readable, writable }
|
|
39
|
+
- `DirectoryListing` — sucesso de listagem: { ok: true, path, entries: FileSystemEntry[], total }
|
|
40
|
+
- `FileReadResult` — leitura: { ok: true, path, content, size, encoding }
|
|
41
|
+
- `FileWriteResult` — escrita: { ok: true, path, size, created }
|
|
42
|
+
- `DirectoryCreateResult` — criação de pasta: { ok: true, path, created }
|
|
43
|
+
- `DeleteResult` — remoção: { ok: true, path, type, deletedAt }
|
|
44
|
+
- `MetadataResult` — metadados: { ok: true, path, stat: { type, size, mtime, isReadable, isWritable } }
|
|
45
|
+
- `OperationError` — falha simples: { ok: false, operation, error }
|
|
46
|
+
|
|
47
|
+
Observação: as respostas são discriminadas por `ok: true | false`. Use type guards (ou checagem de propriedades) para reduzir o tipo retornado antes de acessar campos específicos.
|
|
48
|
+
|
|
49
|
+
## Inicialização
|
|
50
|
+
|
|
51
|
+
Use `createNavigator` quando precisar trabalhar diretamente com a API programática:
|
|
52
|
+
|
|
53
|
+
```ts
|
|
54
|
+
import { createNavigator } from '@core/navigate';
|
|
55
|
+
|
|
56
|
+
const nav = createNavigator({
|
|
57
|
+
workspace: '/home/inky/Development/boxsafe',
|
|
58
|
+
maxFileSize: 10 * 1024 * 1024, // 10MB
|
|
59
|
+
});
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
Para integrar com a camada de rotas/segmentos (sgmnt), use `createNavigatorHandler`:
|
|
63
|
+
|
|
64
|
+
```ts
|
|
65
|
+
import { createNavigatorHandler } from '@core/navigate';
|
|
66
|
+
|
|
67
|
+
const handler = createNavigatorHandler('/home/inky/Development/boxsafe');
|
|
68
|
+
await handler.execute({ op: 'list', path: 'src' });
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
## API (métodos do `Navigator`)
|
|
72
|
+
|
|
73
|
+
- `listDirectory(dirPath?: string) => Promise<DirectoryListing | OperationError>`
|
|
74
|
+
- Lista conteúdo com `FileSystemEntry[]` e metadados.
|
|
75
|
+
- Ordena: diretórios primeiro, depois arquivos alfabeticamente.
|
|
76
|
+
|
|
77
|
+
- `readFile(filePath: string) => Promise<FileReadResult | OperationError>`
|
|
78
|
+
- Verifica permissões e limite de tamanho antes de ler.
|
|
79
|
+
- Retorna `encoding: 'utf-8'` e `size` (bytes).
|
|
80
|
+
|
|
81
|
+
- `writeFile(filePath: string, content: string, options?: { append?: boolean; createDirs?: boolean }) => Promise<FileWriteResult | OperationError>`
|
|
82
|
+
- Se `createDirs: true`, cria diretórios pai automaticamente.
|
|
83
|
+
- Suporta `append` para anexar conteúdo.
|
|
84
|
+
|
|
85
|
+
- `createDirectory(dirPath: string, options?: { recursive?: boolean }) => Promise<DirectoryCreateResult | OperationError>`
|
|
86
|
+
|
|
87
|
+
- `delete(targetPath: string, options?: { recursive?: boolean }) => Promise<DeleteResult | OperationError>`
|
|
88
|
+
- Para diretórios, `recursive` padrão é `true` no handler; seja cauteloso.
|
|
89
|
+
|
|
90
|
+
- `getMetadata(targetPath: string) => Promise<MetadataResult | OperationError>`
|
|
91
|
+
- Perfeito para decidir se deve ler ou não (tamanho / permissões).
|
|
92
|
+
|
|
93
|
+
### Observação sobre erros
|
|
94
|
+
|
|
95
|
+
O `OperationError` contém `operation` e `error` (mensagem curta). Não expõe paths resolvidos para manter erro simples e consistente — o logger interno registra detalhes quando necessário.
|
|
96
|
+
|
|
97
|
+
## Boas práticas (para humanos e LLMs)
|
|
98
|
+
|
|
99
|
+
1. Sempre verifique `result.ok` ou use type guards antes de acessar propriedades específicas.
|
|
100
|
+
2. Prefira caminhos relativos ao workspace (`src/main.ts`) em vez de absolutos.
|
|
101
|
+
3. Use `createDirs: true` em `writeFile` quando o destino puder não existir.
|
|
102
|
+
4. Evite ler arquivos muito grandes — use `getMetadata` e respeite `maxFileSize`.
|
|
103
|
+
5. Não confie somente em mensagens do agente — valide operações críticas externamente (p.ex. testes automatizados).
|
|
104
|
+
|
|
105
|
+
## Exemplos práticos
|
|
106
|
+
|
|
107
|
+
Listar diretório e ler um arquivo condicionalmente:
|
|
108
|
+
|
|
109
|
+
```ts
|
|
110
|
+
const list = await nav.listDirectory('src');
|
|
111
|
+
if (list.ok) {
|
|
112
|
+
for (const e of list.entries) {
|
|
113
|
+
if (e.type === 'file' && e.size && e.size < 1024 * 1024) {
|
|
114
|
+
const r = await nav.readFile(e.path);
|
|
115
|
+
if (r.ok) console.log(r.content.slice(0, 200));
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
Criar estrutura e escrever múltiplos arquivos:
|
|
122
|
+
|
|
123
|
+
```ts
|
|
124
|
+
await nav.createDirectory('output/generated', { recursive: true });
|
|
125
|
+
await nav.writeFile('output/generated/index.ts', "export * from './types'", { createDirs: true });
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
Usando o `NavigatorHandler` (útil para integração com sgmnt):
|
|
129
|
+
|
|
130
|
+
```ts
|
|
131
|
+
const handler = createNavigatorHandler('/home/inky/Development/boxsafe');
|
|
132
|
+
const res = await handler.execute({ op: 'write', path: 'out/result.txt', content: 'ok', writeOptions: { createDirs: true } });
|
|
133
|
+
if (!res.ok) console.error('Handler error', res.error);
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
## Integração com `sgmnt` (map)
|
|
137
|
+
|
|
138
|
+
No `core/sgmnt/map.ts` você pode adicionar uma rota/entry que instancie o handler com o workspace do `BS.config.json`:
|
|
139
|
+
|
|
140
|
+
```ts
|
|
141
|
+
navigate: {
|
|
142
|
+
handler: async (params?: any) => {
|
|
143
|
+
const mod = await import('@core/navigate');
|
|
144
|
+
const handler = mod.createNavigatorHandler(BSConfig.project?.workspace ?? './');
|
|
145
|
+
return handler.execute(params);
|
|
146
|
+
},
|
|
147
|
+
meta: { description: 'File navigation with workspace boundary', implemented: true }
|
|
148
|
+
}
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
## Segurança e Limitações
|
|
152
|
+
|
|
153
|
+
- A validação de `workspace` evita directory traversal. Se um path calculado estiver fora do `workspace`, a operação falha com `OperationError`.
|
|
154
|
+
- `followSymlinks` está desligado por padrão; habilite com cautela.
|
|
155
|
+
- O módulo não tenta contornar políticas de OS; ele respeita permissões do usuário que executa o processo.
|
|
156
|
+
|
|
157
|
+
## Testes e Validação
|
|
158
|
+
|
|
159
|
+
Executar a suite de testes localmente (ex.: `navigate.test.ts`) é recomendado após mudanças:
|
|
160
|
+
|
|
161
|
+
```bash
|
|
162
|
+
# rodar apenas o teste do navigate (exemplo usando tsx/ts-node conforme projeto)
|
|
163
|
+
npx tsx core/navigate/navigate.test.ts
|
|
164
|
+
|
|
165
|
+
# ou rodar verificação TypeScript
|
|
166
|
+
npx tsc --noEmit
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
## Troubleshooting rápido
|
|
170
|
+
|
|
171
|
+
- Erro `Access denied` ao ler/escrever: verifique permissões do processo e se o arquivo está dentro do `workspace`.
|
|
172
|
+
- `File size exceeds limit`: aumente `maxFileSize` no `NavigatorConfig` ou use streaming externo.
|
|
173
|
+
- Mensagens de erro genéricas: confira logs do `logger` (padrão `console`) para detalhes adicionais.
|
|
174
|
+
|
|
175
|
+
## Notas finais
|
|
176
|
+
|
|
177
|
+
O `navigate` foi projetado para ser simples, seguro e fácil de integrar com agentes LLM. A API é propositalmente pequena e previsível para minimizar erros de interpretação e facilitar validação automática em loops (ex.: `execLoop`).
|
|
178
|
+
|
|
179
|
+
Se quiser, eu posso:
|
|
180
|
+
|
|
181
|
+
- Adicionar exemplos de prompts para LLMs que utilizam o handler.
|
|
182
|
+
- Gerar snippets de código para integração em `core/sgmnt/map.ts` automaticamente.
|
|
183
|
+
- Criar um CLI leve para operações manuais de navegação para debug.
|
|
184
|
+
|
|
185
|
+
----
|
|
186
|
+
Documento gerado automaticamente — revise e peça ajustes.
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
# Primary Actors (Atores Primários) - BoxSafe Hexagonal Architecture
|
|
2
|
+
|
|
3
|
+
## Definição
|
|
4
|
+
**Primary Actors** são os elementos externos que **iniciam ações** no sistema BoxSafe. Eles são o ponto de entrada e controlam o fluxo de execução.
|
|
5
|
+
|
|
6
|
+
## Primary Actors Identificados
|
|
7
|
+
|
|
8
|
+
### 1. **CLI (Command Line Interface)**
|
|
9
|
+
- **Descrição**: Interface de linha de comando principal do BoxSafe
|
|
10
|
+
- **Ponto de Entrada**: `main.ts`
|
|
11
|
+
- **Como interage**: Através do `ISystemExecutionPort.executeSegment()`
|
|
12
|
+
- **Exemplo de uso**: `boxsafe run --prompt "criar função X"`
|
|
13
|
+
|
|
14
|
+
### 2. **IDE Extensions**
|
|
15
|
+
- **Descrição**: Extensões para VS Code, IntelliJ, etc.
|
|
16
|
+
- **Ponto de Entrada**: API do sistema de segmentos
|
|
17
|
+
- **Como interage**: Através do `ISystemExecutionPort.executeSegment()`
|
|
18
|
+
- **Exemplo de uso**: Botão "Run BoxSafe" na IDE
|
|
19
|
+
|
|
20
|
+
### 3. **Web Interface**
|
|
21
|
+
- **Descrição**: Interface web para uso do BoxSafe
|
|
22
|
+
- **Ponto de Entrada**: Endpoint HTTP/REST
|
|
23
|
+
- **Como interage**: Através do `ISystemExecutionPort.executeSegment()`
|
|
24
|
+
- **Exemplo de uso**: Formulário web com prompt e configurações
|
|
25
|
+
|
|
26
|
+
### 4. **API Clients**
|
|
27
|
+
- **Descrição**: Clientes programáticos que usam BoxSafe
|
|
28
|
+
- **Ponto de Entrada**: API REST ou GraphQL
|
|
29
|
+
- **Como interage**: Através do `ISystemExecutionPort.executeSegment()`
|
|
30
|
+
- **Exemplo de uso**: `POST /api/v1/execute`
|
|
31
|
+
|
|
32
|
+
### 5. **Scheduled Jobs/Cron**
|
|
33
|
+
- **Descrição**: Tarefas agendadas que executam BoxSafe
|
|
34
|
+
- **Ponto de Entrada**: Scheduler externo
|
|
35
|
+
- **Como interage**: Através do `ISystemExecutionPort.executeSegment()`
|
|
36
|
+
- **Exemplo de uso**: Job noturno para analisar código
|
|
37
|
+
|
|
38
|
+
### 6. **CI/CD Pipelines**
|
|
39
|
+
- **Descrição**: Integração com pipelines de CI/CD
|
|
40
|
+
- **Ponto de Entrada**: Hooks do pipeline
|
|
41
|
+
- **Como interage**: Através do `ISystemExecutionPort.executeSegment()`
|
|
42
|
+
- **Exemplo de uso**: Step do GitHub Actions
|
|
43
|
+
|
|
44
|
+
## Fluxo de Interação
|
|
45
|
+
|
|
46
|
+
```
|
|
47
|
+
Primary Actor → ISystemExecutionPort → Core Business Logic
|
|
48
|
+
↓
|
|
49
|
+
[CLI/IDE/Web] → [executeSegment()] → [Segment Handler]
|
|
50
|
+
↓
|
|
51
|
+
Configuration → ISystemConfigurationPort → [loadConfiguration()]
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
## Características dos Primary Actors
|
|
55
|
+
|
|
56
|
+
1. **Iniciam a ação**: São eles que começam o processo
|
|
57
|
+
2. **Controlam o fluxo**: Determinam quando e como executar
|
|
58
|
+
3. **Fornecem configuração**: Passam parâmetros e opções
|
|
59
|
+
4. **Recebem resultados**: Obtêm o output da execução
|
|
60
|
+
5. **São externos ao core**: Não fazem parte do domínio do BoxSafe
|
|
61
|
+
|
|
62
|
+
## Mapeamento para Código Atual
|
|
63
|
+
|
|
64
|
+
| Primary Actor | Implementação Atual | Port Correspondente |
|
|
65
|
+
|---------------|-------------------|---------------------|
|
|
66
|
+
| CLI | `main.ts` | `ISystemExecutionPort` |
|
|
67
|
+
| IDE Extensions | Futuro | `ISystemExecutionPort` |
|
|
68
|
+
| Web Interface | Futuro | `ISystemExecutionPort` |
|
|
69
|
+
| API Clients | Futuro | `ISystemExecutionPort` |
|
|
70
|
+
| Scheduled Jobs | Futuro | `ISystemExecutionPort` |
|
|
71
|
+
| CI/CD Pipelines | Futuro | `ISystemExecutionPort` |
|
|
72
|
+
|
|
73
|
+
## Próximos Passos
|
|
74
|
+
|
|
75
|
+
1. Implementar adapters específicos para cada Primary Actor
|
|
76
|
+
2. Criar pontos de entrada dedicados (CLI, Web, API)
|
|
77
|
+
3. Documentar interfaces para cada tipo de ator
|
|
78
|
+
4. Implementar autenticação e autorização por ator
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
# Secondary Actors (Atores Secundários) - BoxSafe Hexagonal Architecture
|
|
2
|
+
|
|
3
|
+
## Definição
|
|
4
|
+
**Secondary Actors** são os sistemas externos que o BoxSafe **consome** para realizar suas tarefas. Eles fornecem serviços e recursos que o sistema utiliza para funcionar.
|
|
5
|
+
|
|
6
|
+
## Secondary Actors Identificados
|
|
7
|
+
|
|
8
|
+
### 1. **AI Model Providers**
|
|
9
|
+
- **Descrição**: Provedores de modelos de linguagem
|
|
10
|
+
- **Implementação Atual**: Google (Gemini), OpenAI, Anthropic, etc.
|
|
11
|
+
- **Port Correspondente**: `IAIModelPort`
|
|
12
|
+
- **Como interage**: Envia prompts e recebe respostas
|
|
13
|
+
- **Exemplos**:
|
|
14
|
+
- Google Gemini API
|
|
15
|
+
- OpenAI GPT API
|
|
16
|
+
- Anthropic Claude API
|
|
17
|
+
- Azure OpenAI
|
|
18
|
+
|
|
19
|
+
### 2. **File System**
|
|
20
|
+
- **Descrição**: Sistema de arquivos do hospedeiro
|
|
21
|
+
- **Implementação Atual**: Node.js `fs` module
|
|
22
|
+
- **Port Correspondente**: `IFileSystemPort`
|
|
23
|
+
- **Como interage**: Lê, escreve, lista, deleta arquivos e diretórios
|
|
24
|
+
- **Exemplos**:
|
|
25
|
+
- Local filesystem
|
|
26
|
+
- Network filesystems
|
|
27
|
+
- Cloud storage (S3, Google Drive)
|
|
28
|
+
|
|
29
|
+
### 3. **Version Control Systems**
|
|
30
|
+
- **Descrição**: Sistemas de controle de versão
|
|
31
|
+
- **Implementação Atual**: Git através de comandos shell
|
|
32
|
+
- **Port Correspondente**: `IVersionControlPort`
|
|
33
|
+
- **Como interage**: Executa comandos git, obtém status, cria commits
|
|
34
|
+
- **Exemplos**:
|
|
35
|
+
- Git
|
|
36
|
+
- Mercurial
|
|
37
|
+
- SVN
|
|
38
|
+
- GitHub API
|
|
39
|
+
- GitLab API
|
|
40
|
+
|
|
41
|
+
### 4. **Command Execution Environment**
|
|
42
|
+
- **Descrição**: Ambiente de execução de comandos do sistema
|
|
43
|
+
- **Implementação Atual**: Node.js `child_process`
|
|
44
|
+
- **Port Correspondente**: `ICommandExecutionPort`
|
|
45
|
+
- **Como interage**: Executa comandos shell, scripts, ferramentas
|
|
46
|
+
- **Exemplos**:
|
|
47
|
+
- Shell/bash/zsh
|
|
48
|
+
- PowerShell (Windows)
|
|
49
|
+
- Docker containers
|
|
50
|
+
- CI/CD runners
|
|
51
|
+
|
|
52
|
+
### 5. **Configuration Sources**
|
|
53
|
+
- **Descrição**: Fontes de configuração do sistema
|
|
54
|
+
- **Implementação Atual**: Arquivo JSON, variáveis de ambiente
|
|
55
|
+
- **Port Correspondente**: `ISystemConfigurationPort`
|
|
56
|
+
- **Como interage**: Lê e valida configurações
|
|
57
|
+
- **Exemplos**:
|
|
58
|
+
- `boxsafe.config.json`
|
|
59
|
+
- Environment variables
|
|
60
|
+
- Remote configuration services
|
|
61
|
+
- Database configuration
|
|
62
|
+
|
|
63
|
+
### 6. **Logging Systems**
|
|
64
|
+
- **Descrição**: Sistemas de logging e monitoramento
|
|
65
|
+
- **Implementação Atual**: Console, file logging
|
|
66
|
+
- **Port Correspondente**: `LoggerPort`
|
|
67
|
+
- **Como interage**: Registra eventos, erros, métricas
|
|
68
|
+
- **Exemplos**:
|
|
69
|
+
- Console output
|
|
70
|
+
- File logging
|
|
71
|
+
- Elasticsearch
|
|
72
|
+
- CloudWatch
|
|
73
|
+
- Datadog
|
|
74
|
+
|
|
75
|
+
### 7. **Network Services**
|
|
76
|
+
- **Descrição**: Serviços de rede e comunicação
|
|
77
|
+
- **Implementação Atual**: HTTP/HTTPS requests
|
|
78
|
+
- **Port Correspondente**: (Futuro) `INetworkPort`
|
|
79
|
+
- **Como interage**: Faz requisições HTTP, baixa arquivos
|
|
80
|
+
- **Exemplos**:
|
|
81
|
+
- HTTP/HTTPS clients
|
|
82
|
+
- FTP clients
|
|
83
|
+
- WebSocket connections
|
|
84
|
+
- API gateways
|
|
85
|
+
|
|
86
|
+
### 8. **Authentication/Authorization Services**
|
|
87
|
+
- **Descrição**: Serviços de autenticação e autorização
|
|
88
|
+
- **Implementação Atual**: Módulo `auth/dasktop`
|
|
89
|
+
- **Port Correspondente**: (Futuro) `IAuthServicePort`
|
|
90
|
+
- **Como interage**: Valida credenciais, gerencia tokens
|
|
91
|
+
- **Exemplos**:
|
|
92
|
+
- OAuth providers
|
|
93
|
+
- LDAP/Active Directory
|
|
94
|
+
- JWT services
|
|
95
|
+
- Custom auth systems
|
|
96
|
+
|
|
97
|
+
### 9. **Sandbox/Isolation Systems**
|
|
98
|
+
- **Descrição**: Sistemas de isolamento e sandbox
|
|
99
|
+
- **Implementação Atual**: Configuração Docker
|
|
100
|
+
- **Port Correspondente**: (Futuro) `ISandboxPort`
|
|
101
|
+
- **Como interage**: Cria ambientes isolados para execução
|
|
102
|
+
- **Exemplos**:
|
|
103
|
+
- Docker containers
|
|
104
|
+
- VMs
|
|
105
|
+
- Chroot jails
|
|
106
|
+
- Cloud sandboxes
|
|
107
|
+
|
|
108
|
+
## Fluxo de Interação
|
|
109
|
+
|
|
110
|
+
```
|
|
111
|
+
Core Business Logic → Secondary Port → Secondary Actor
|
|
112
|
+
↓ ↓ ↓
|
|
113
|
+
[BoxSafe Loop] → [IAIModelPort] → [Google Gemini]
|
|
114
|
+
↓ ↓ ↓
|
|
115
|
+
[Navigation] → [IFileSystemPort] → [Local FS]
|
|
116
|
+
↓ ↓ ↓
|
|
117
|
+
[Version Ctrl] → [IVersionControlPort] → [Git]
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
## Características dos Secondary Actors
|
|
121
|
+
|
|
122
|
+
1. **São consumidos pelo core**: O BoxSafe inicia a interação
|
|
123
|
+
2. **Fornecem serviços**: Oferecem funcionalidades específicas
|
|
124
|
+
3. **São substituíveis**: Podem ser trocados por alternativas
|
|
125
|
+
4. **Requerem adapters**: Necessitam adaptação para o port
|
|
126
|
+
5. **Têm dependências externas**: Podem falhar independentemente
|
|
127
|
+
|
|
128
|
+
## Mapeamento para Código Atual
|
|
129
|
+
|
|
130
|
+
| Secondary Actor | Implementação Atual | Port Correspondente | Status |
|
|
131
|
+
|-----------------|-------------------|---------------------|---------|
|
|
132
|
+
| AI Models | `@ai/label` | `IAIModelPort` | ✅ Implementado |
|
|
133
|
+
| File System | `@core/navigate` | `IFileSystemPort` | ✅ Implementado |
|
|
134
|
+
| Version Control | `@core/loop/git` | `IVersionControlPort` | ✅ Implementado |
|
|
135
|
+
| Command Execution | `@core/loop/cmd` | `ICommandExecutionPort` | ✅ Implementado |
|
|
136
|
+
| Configuration | `@core/config` | `ISystemConfigurationPort` | ✅ Implementado |
|
|
137
|
+
| Logging | `@util/logger` | `LoggerPort` | ✅ Implementado |
|
|
138
|
+
| Network | Manual HTTP | `INetworkPort` | 🔄 Planejado |
|
|
139
|
+
| Authentication | `@core/auth` | `IAuthServicePort` | 🔄 Planejado |
|
|
140
|
+
| Sandbox | Config only | `ISandboxPort` | 🔄 Planejado |
|
|
141
|
+
|
|
142
|
+
## Estratégia de Adapters
|
|
143
|
+
|
|
144
|
+
Cada Secondary Actor requer um adapter específico:
|
|
145
|
+
|
|
146
|
+
```typescript
|
|
147
|
+
// Exemplo: Adapter para Google Gemini
|
|
148
|
+
class GoogleGeminiAdapter implements IAIModelPort {
|
|
149
|
+
async sendPrompt(prompt: string): Promise<any> {
|
|
150
|
+
// Implementação específica da API do Google
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
async configureModel(config: ModelConfig): Promise<void> {
|
|
154
|
+
// Configuração específica
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
// Exemplo: Adapter para FileSystem
|
|
159
|
+
class NodeFileSystemAdapter implements IFileSystemPort {
|
|
160
|
+
async listDirectory(path: string): Promise<any> {
|
|
161
|
+
// Implementação usando Node.js fs
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
// ... outros métodos
|
|
165
|
+
}
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
## Benefícios Desta Abordagem
|
|
169
|
+
|
|
170
|
+
1. **Desacoplamento**: Core não depende de implementações específicas
|
|
171
|
+
2. **Testabilidade**: Facilita mocks e testes unitários
|
|
172
|
+
3. **Flexibilidade**: Permite trocar provedores facilmente
|
|
173
|
+
4. **Manutenibilidade**: Isola mudanças externas
|
|
174
|
+
5. **Extensibilidade**: Facilita adição de novos provedores
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# Git Versioning Module
|
|
2
|
+
|
|
3
|
+
Purpose
|
|
4
|
+
- Lightweight helper for staging, committing and optionally pushing changes to Git/GitHub.
|
|
5
|
+
|
|
6
|
+
Behavior
|
|
7
|
+
- Finds repository root (searches up from working directory)
|
|
8
|
+
- Stages all changes and commits with a sensible default message
|
|
9
|
+
- Optionally creates `BOXSAFE_VERSION_NOTES.md` describing the commit
|
|
10
|
+
- Attempts to push to `origin` and will try a token from keyring (`gh-token`) or `PASSWORD_GIT` env var if push fails due to auth
|
|
11
|
+
|
|
12
|
+
How to use
|
|
13
|
+
- Programmatic: import `runVersionControl` from `@core/loop/git` and call with options `{ autoPush?: boolean, generateNotes?: boolean, commitMessage?: string }`.
|
|
14
|
+
- CLI / manual: this module is intended to be invoked by the agent runtime.
|
|
15
|
+
|
|
16
|
+
Security
|
|
17
|
+
- Token injection only used as a fallback for a single push attempt. Prefer using native credential helpers or keyring (see `core/auth/dasktop/cred`).
|