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.
Files changed (118) hide show
  1. package/.directory +2 -0
  2. package/.env.example +3 -0
  3. package/AUDIT_LANG.md +45 -0
  4. package/BOXSAFE_VERSION_NOTES.md +14 -0
  5. package/README.md +4 -0
  6. package/TODO.md +130 -0
  7. package/adapters/index.ts +27 -0
  8. package/adapters/primary/cli-adapter.ts +56 -0
  9. package/adapters/secondary/filesystem/node-filesystem.ts +307 -0
  10. package/adapters/secondary/system/configuration.ts +147 -0
  11. package/ai/caller.ts +42 -0
  12. package/ai/label.ts +33 -0
  13. package/ai/modelConfig.ts +236 -0
  14. package/ai/provider.ts +111 -0
  15. package/boxsafe.config.json +68 -0
  16. package/core/auth/dasktop/cred/CRED.md +112 -0
  17. package/core/auth/dasktop/cred/credLinux.ts +82 -0
  18. package/core/auth/dasktop/cred/credWin.ts +2 -0
  19. package/core/config/defaults/boxsafeDefaults.ts +67 -0
  20. package/core/config/defaults/index.ts +1 -0
  21. package/core/config/loadConfig.ts +133 -0
  22. package/core/loop/about.md +13 -0
  23. package/core/loop/boxConfig.ts +20 -0
  24. package/core/loop/buildExecCommand.ts +76 -0
  25. package/core/loop/cmd/execode.ts +121 -0
  26. package/core/loop/cmd/test.js +3 -0
  27. package/core/loop/execLoop.ts +341 -0
  28. package/core/loop/git/VERSIONING.md +17 -0
  29. package/core/loop/git/commands.ts +11 -0
  30. package/core/loop/git/gitClient.ts +78 -0
  31. package/core/loop/git/index.ts +99 -0
  32. package/core/loop/git/runVersionControlRunner.ts +33 -0
  33. package/core/loop/initNavigator.ts +44 -0
  34. package/core/loop/initTasksManager.ts +35 -0
  35. package/core/loop/runValidation.ts +25 -0
  36. package/core/loop/tasks/AGENT-TASKS.md +36 -0
  37. package/core/loop/tasks/index.ts +96 -0
  38. package/core/loop/toolCalls.ts +168 -0
  39. package/core/loop/toolDispatcher.ts +146 -0
  40. package/core/loop/traceLogger.ts +106 -0
  41. package/core/loop/types.ts +26 -0
  42. package/core/loop/versionControlAdapter.ts +36 -0
  43. package/core/loop/waterfall.ts +404 -0
  44. package/core/loop/writeArtifactAtomically.ts +13 -0
  45. package/core/navigate/NAVIGATE.md +186 -0
  46. package/core/navigate/about.md +128 -0
  47. package/core/navigate/examples.ts +367 -0
  48. package/core/navigate/handler.ts +148 -0
  49. package/core/navigate/index.ts +32 -0
  50. package/core/navigate/navigate.test.ts +372 -0
  51. package/core/navigate/navigator.ts +437 -0
  52. package/core/navigate/types.ts +132 -0
  53. package/core/navigate/utils.ts +146 -0
  54. package/core/paths/paths.ts +33 -0
  55. package/core/ports/index.ts +271 -0
  56. package/core/segments/CONVENTIONS.md +30 -0
  57. package/core/segments/loop/index.ts +18 -0
  58. package/core/segments/map.ts +56 -0
  59. package/core/segments/navigate/index.ts +20 -0
  60. package/core/segments/versionControl/index.ts +18 -0
  61. package/core/util/logger.ts +128 -0
  62. package/docs/AGENT-TASKS.md +36 -0
  63. package/docs/ARQUITETURA_CORRECAO.md +121 -0
  64. package/docs/CONVENTIONS.md +30 -0
  65. package/docs/CRED.md +112 -0
  66. package/docs/L_RAG.md +567 -0
  67. package/docs/NAVIGATE.md +186 -0
  68. package/docs/PRIMARY_ACTORS.md +78 -0
  69. package/docs/SECONDARY_ACTORS.md +174 -0
  70. package/docs/VERSIONING.md +17 -0
  71. package/docs/boxsafe.config.md +472 -0
  72. package/eslint.config.mts +15 -0
  73. package/main.ts +53 -0
  74. package/memo/generated/codelog.md +13 -0
  75. package/memo/state/tasks/state.json +6 -0
  76. package/memo/state/tasks/tasks/task_001.md +2 -0
  77. package/memo/states-logs/logs.txt +7 -0
  78. package/memo/states-logs/trace-mljvrxvi-9g0k4q.jsonl +11 -0
  79. package/memo/states-logs/trace-mljvvc9j-pe9ekj.jsonl +11 -0
  80. package/memo/states-logs/trace-mljvvm1c-wbnqzp.jsonl +11 -0
  81. package/memo/states-logs/trace-mljxecwn-9xh3nw.jsonl +11 -0
  82. package/memo/states-logs/trace-mljxqkfm-ipijik.jsonl +11 -0
  83. package/memo/states-logs/trace-mljxwtrw-3fanky.jsonl +11 -0
  84. package/memo/states-logs/trace-mljxzen3-m8iinh.jsonl +11 -0
  85. package/memo/states-logs/trace-mljyucef-td6odn.jsonl +11 -0
  86. package/memo/states-logs/trace-mljyuprw-b1a6f4.jsonl +11 -0
  87. package/memo/states-logs/trace-mljyvefl-b6yoce.jsonl +11 -0
  88. package/memo/states-logs/trace-mljyxjo4-n7ibj2.jsonl +13 -0
  89. package/memo/states-logs/trace-mljziez5-8drqtn.jsonl +13 -0
  90. package/memo/states-logs/trace-mljziulp-dtd03z.jsonl +13 -0
  91. package/memo/states-logs/trace-mljzjwrq-1p2krb.jsonl +13 -0
  92. package/memo/states-logs/trace-mljzl0i7-b1cqa6.jsonl +13 -0
  93. package/memo/states-logs/trace-mljzmlk6-7kdyls.jsonl +13 -0
  94. package/memo/states-logs/trace-mlk0oj25-xa3dcu.jsonl +13 -0
  95. package/memo/states-logs/trace-mlk1x59q-713huj.jsonl +14 -0
  96. package/memo/states-logs/trace-mlk22dz8-7fd6hq.jsonl +14 -0
  97. package/memo/states-logs/trace-mlk241uy-wmx907.jsonl +14 -0
  98. package/memo/states-logs/trace-mlk2bf5r-yoh1vg.jsonl +15 -0
  99. package/package.json +44 -0
  100. package/pnpm-workspace.yaml +4 -0
  101. package/prompt_improvement_example.md +55 -0
  102. package/remove.txt +1 -0
  103. package/tests/adapters.test.ts +128 -0
  104. package/tests/extractCode.test.ts +26 -0
  105. package/tests/integration.test.ts +83 -0
  106. package/tests/loadConfig.test.ts +25 -0
  107. package/tests/navigatorBoundary.test.ts +17 -0
  108. package/tests/ports.test.ts +84 -0
  109. package/tests/runAllTests.ts +49 -0
  110. package/tests/toolCalls.test.ts +149 -0
  111. package/tests/waterfall.test.ts +52 -0
  112. package/tsconfig.json +32 -0
  113. package/tsup.config.ts +17 -0
  114. package/types.d.ts +96 -0
  115. package/util/ANSI.ts +29 -0
  116. package/util/extractCode.ts +217 -0
  117. package/util/extractToolCalls.ts +80 -0
  118. package/util/logger.ts +125 -0
@@ -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`).