sauron-cli 1.2.0 → 1.4.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.
@@ -0,0 +1,156 @@
1
+ ---
2
+ trigger: always_on
3
+ ---
4
+
5
+ # SAURON START
6
+ ---
7
+ trigger: always_on
8
+ ---
9
+
10
+ # SAURON START
11
+ ---
12
+ trigger: always_on
13
+ ---
14
+
15
+ # SAURON START
16
+ ---
17
+ trigger: always_on
18
+ ---
19
+
20
+ # SAURON START
21
+ ---
22
+ trigger: always_on
23
+ ---
24
+
25
+ # Regra de Memória do Projeto (OBRIGATÓRIA)
26
+
27
+ > Esta regra garante que o Wiki (`.sauron/wiki/`) é a fonte da verdade absoluta do projeto.
28
+ > Violá-la significa perder informação crítica entre sessões.
29
+
30
+ ---
31
+
32
+ ## 1. LEITURA — Antes de Agir
33
+
34
+ Sempre que algo for perguntado ou uma tarefa for iniciada:
35
+
36
+ 1. Leia `.sauron/wiki/summary.json` (o arquivo de roteamento base) primeiro. Este arquivo segue um **padrão rígido** e é a única fonte confiável de metadados.
37
+ 2. Navegue pelas sub-páginas relevantes usando as informações de nome original e tipo (file/folder) contidas no JSON.
38
+ 3. Só recorra à exploração do sistema de arquivos se a informação **não existir** no sumário (e atualize o sumário se necessário seguindo o schema da Seção 6).
39
+
40
+ ---
41
+
42
+ ## 2. PROTOCOLO DE SINCRONIZAÇÃO (NUVEM)
43
+
44
+ O fluxo de documentação segue um ciclo de três etapas para garantir a persistência:
45
+
46
+ 1. **PULL (Manual)**: Antes de iniciar a tarefa, o usuário executa `sauron pull` para atualizar os documentos locais com a versão mais recente da nuvem.
47
+ 2. **EXECUÇÃO (IA)**: Durante o desenvolvimento, o Agente atualiza/cria os documentos em `.sauron/wiki/` em tempo real.
48
+ 3. **PUSH (Manual)**: Ao finalizar a tarefa, o usuário executa `sauron push` para enviar as atualizações locais para a nuvem.
49
+
50
+ > [!IMPORTANT]
51
+ > O Agente deve assumir que o diretório `.sauron/wiki/` é o destino final e atualizá-lo diligentemente, permitindo que o usuário sincronize as mudanças posteriormente.
52
+
53
+ ---
54
+
55
+ ## 3. ESCRITA — Depois de Entregar (CRÍTICO)
56
+
57
+ **Após QUALQUER entrega funcional, a wiki DEVE ser atualizada NO MESEMO TURNO de resposta.**
58
+
59
+ ### Gatilhos Obrigatórios de Escrita
60
+
61
+ | Evento | Ação no Wiki |
62
+ |--------|-------------|
63
+ | **Integração de API externa** | Criar/atualizar página documentando URL, autenticação, payload, resposta e tratamento de erros. |
64
+ | **Nova página/rota criada** | Registrar em `summary.json` (seguindo o **padrão rígido** da Seção 6) + criar arquivo `.md`. |
65
+ | **Fluxo de autenticação alterado** | Atualizar a página de auth com o fluxo completo, incluindo cookies, tokens e middleware. |
66
+ | **Novo componente de UI funcional** | Registrar na página do módulo correspondente com props, comportamento e dependências. |
67
+ | **Decisão arquitetural tomada** | Documentar usando o formato "Decisão Arquitetural" (Problema → Opções → Escolha → Justificativa). |
68
+ | **Variável de ambiente adicionada/alterada** | Registrar na página de infraestrutura com nome, propósito e exemplo. |
69
+ | **Schema de banco alterado** | Atualizar `module-data-schema.md` com a mudança. |
70
+ | **Bug crítico resolvido** | Registrar causa raiz e solução na página do módulo afetado. |
71
+
72
+ ### Regra de Ouro
73
+
74
+ ```
75
+ ❌ ERRADO: Entregar código → Responder ao usuário → Esquecer o wiki
76
+ ✅ CORRETO: Entregar código → Atualizar wiki → Responder ao usuário
77
+ ```
78
+
79
+ A atualização do wiki é **parte da entrega**, não um passo opcional posterior.
80
+
81
+ ---
82
+
83
+ ## 4. FORMATO — O que Escrever
84
+
85
+ Cada registro deve conter no mínimo:
86
+ - **O que foi feito** (descrição objetiva)
87
+ - **Por que foi feito** (contexto e motivação)
88
+ - **Como funciona** (detalhes técnicos: endpoints, payloads, fluxos)
89
+ - **Arquivos afetados** (lista de caminhos)
90
+ - **Data** (timestamp da alteração)
91
+
92
+ ---
93
+
94
+ ## 6. ESTRUTURA RÍGIDA DO SUMMARY.JSON
95
+
96
+ O arquivo `.sauron/wiki/summary.json` é o mapa de metadados que vincula os arquivos locais ao servidor. O CLI exige um padrão estrito para o comando `sauron push` funcionar corretamente.
97
+
98
+ ### Regras de Ouro do Summary
99
+ - **NUNCA altere IDs**: Os campos `id`, `domainId` e `orgId` são cruciais. Removê-los ou alterá-los causará a criação de documentos duplicados no servidor em vez de atualizar os existentes.
100
+ - **Mantenha o Mapeamento**: O campo `name` deve ser o título original (com espaços e acentos). O `slug` e o `path` devem ser gerados seguindo a lógica de normalização (lowercase, sem acentos, espaços viram hífens).
101
+ - **Otimização**: Os campos `contentLength` e `contentHash` (SHA256) permitem que o CLI pule arquivos não alterados. Se você editar um arquivo manualmente, o `push` detectará a mudança mesmo se você não atualizar o hash (ele recalcula o hash local), mas o `summary.json` deve ser mantido atualizado para consistência.
102
+ - **Acoplamento Físico**: O Sauron CLI mapeia domínios do banco de dados na nuvem com base na subpasta física no disco local (usando o diretório pai do arquivo). Arquivos na raiz do wiki sempre pertencerão ao domínio genérico `.`. É obrigatória a organização física em pastas para manter a separação lógica na nuvem.
103
+ - **Ignorar summary.md**: O arquivo `summary.md` é uma página especial/reservada. Nunca adicione o `summary.md` como uma entrada do tipo `"file"` dentro do `summary.json`, caso contrário o CLI tentará excluí-lo e falhará com erro 422.
104
+
105
+ ### Schema Obrigatório
106
+
107
+ O JSON deve ser um **array de objetos** seguindo rigorosamente estes formatos:
108
+
109
+ #### Entrada de Pasta (Domínio)
110
+ ```json
111
+ {
112
+ "type": "folder",
113
+ "name": "Título Original",
114
+ "slug": "titulo-original",
115
+ "path": "titulo-original",
116
+ "id": "id-do-dominio"
117
+ }
118
+ ```
119
+
120
+ #### Entrada de Arquivo (Documento)
121
+ ```json
122
+ {
123
+ "type": "file",
124
+ "name": "Título Original do Documento",
125
+ "slug": "titulo-original-do-documento",
126
+ "path": "slug-do-dominio/titulo-original-do-documento.md",
127
+ "id": "id-do-kb",
128
+ "domainId": "id-do-dominio-pai",
129
+ "orgId": "id-da-organizacao",
130
+ "contentLength": 1234,
131
+ "contentHash": "sha256-checksum"
132
+ }
133
+ ```
134
+
135
+ ---
136
+
137
+ ## 7. VALIDAÇÃO — Checklist Mental
138
+
139
+ Antes de finalizar qualquer resposta que envolva código, pergunte-se:
140
+
141
+ - [ ] Criei ou modifiquei um arquivo? → Wiki precisa saber.
142
+ - [ ] Conectei a uma API externa? → Wiki precisa documentar.
143
+ - [ ] Alterei fluxo de login/sessão? → Wiki MUST refletir.
144
+ - [ ] Criei uma nova página/rota? → `summary.json` precisa do registro de roteamento seguindo o **padrão rígido**.
145
+ - [ ] Tomei uma decisão técnica (lib X vs Y, abordagem A vs B)? → Wiki precisa da justificativa.
146
+ - [ ] Adicionei/alterei uma variável de ambiente? → Wiki precisa do registro.
147
+
148
+ Se qualquer checkbox for `true` e o wiki não foi atualizado, **a tarefa NÃO está completa**.
149
+
150
+ # SAURON END
151
+
152
+ # SAURON END
153
+
154
+ # SAURON END
155
+
156
+ # SAURON END
@@ -0,0 +1,172 @@
1
+ ---
2
+ name: wiki
3
+ description: Project Memory and Documentation System - ensures every action, decision, and evolution is recorded, explained, and traceable.
4
+ allowed-tools: Read, Write, Edit, list_dir
5
+ version: 3.0
6
+ priority: MANDATORY
7
+ ---
8
+
9
+ # 🧠 Wiki & Project Memory System
10
+
11
+ > **MANDATORY SKILL** - Build a living knowledge system. Nothing exists unless it is documented.
12
+ > **WRITE OBLIGATION** - Every functional delivery MUST include wiki updates in the SAME response turn.
13
+ > **SYNC PROTOCOL** - The IA updates local `.sauron/wiki/` files; `sauron pull/push` are manual user commands.
14
+
15
+ ---
16
+
17
+ ## 1. Core Principles
18
+
19
+ | Principle | Rule |
20
+ |-----------|------|
21
+ | **Source of Truth** | If it's not documented, it doesn't exist. All changes must be recorded before completion. |
22
+ | **Decision > Impl** | Documentation is about **WHY**, not just **WHAT**. Explain context and alternatives. |
23
+ | **Smart Granularity** | Divide documentation into sub-pages based on modules, domains, or critical components. |
24
+ | **Continuous Evolution** | Pages are living organisms. They must contain current state, history, and future direction. |
25
+ | **Write-on-Deliver** | Wiki update is part of the delivery, not a follow-up task. Code without docs = incomplete work. |
26
+
27
+ ---
28
+
29
+ ## 2. Structure & Naming Conventions
30
+
31
+ | Property | Requirement |
32
+ |----------|-------------|
33
+ | **Base Directory** | `/.sauron/wiki/` |
34
+ | **Root Routing File** | `summary.json` (dentro de `/.sauron/wiki/`) |
35
+ | **Subdirectories** | `knowledge/`, `modules/`, `manuals/`, `standards/`, `history/` (pastas físicas obrigatórias para os domínios no Sauron) |
36
+ | **Naming Pattern** | `{name}.md` (sem prefixos se já estiverem dentro das subpastas físicas de domínio) |
37
+ | **Examples** | `knowledge/architecture.md`, `modules/checkout.md`, `manuals/upholstery.md` |
38
+
39
+ ---
40
+
41
+ ## 3. Reference Templates
42
+
43
+ ### 3.1 Root Routing File (`summary.json`)
44
+ O arquivo `summary.json` é o mapa de metadados que vincula os arquivos locais ao servidor. Ele segue um **padrão rígido** (ver Seção 6 da `memory.md`).
45
+
46
+ ```json
47
+ [
48
+ {
49
+ "type": "folder",
50
+ "name": "Título Original",
51
+ "slug": "titulo-original",
52
+ "path": "titulo-original",
53
+ "id": "UUID-ou-ID"
54
+ },
55
+ {
56
+ "type": "file",
57
+ "name": "Título Original",
58
+ "slug": "titulo-original",
59
+ "path": "slug-do-dominio/titulo-original.md",
60
+ "id": "UUID-ou-ID",
61
+ "domainId": "ID-do-pai",
62
+ "orgId": "ID-da-organizacao",
63
+ "contentLength": 1234,
64
+ "contentHash": "sha256-checksum"
65
+ }
66
+ ]
67
+ ```
68
+
69
+ ### 3.2 Sub-pages (`{name}.md`)
70
+ ```markdown
71
+ # [Module / Page Name]
72
+
73
+ ## 1. Context
74
+ Clear description of what this part of the system is.
75
+
76
+ ## 2. Responsibility
77
+ What this part does and what it DOES NOT do.
78
+
79
+ ## 3. Architectural Decisions
80
+ ### Decision 1
81
+ - **Problem**:
82
+ - **Options Considered**:
83
+ - Option A
84
+ - Option B
85
+ - **Choice**:
86
+ - **Justification**:
87
+ - **Trade-offs**:
88
+
89
+ (repeat as necessary)
90
+
91
+ ## 4. Change History
92
+ ### [Date] - [Change Title]
93
+ - **What was done**:
94
+ - **Why it was done**:
95
+ - **Impact on the system**:
96
+ - **Files affected**:
97
+
98
+ ## 5. Current State
99
+ Objective technical description of the implementation as it stands today.
100
+
101
+ ## 6. Next Steps (Optional)
102
+ Possible future evolutions.
103
+ ```
104
+
105
+ ---
106
+
107
+ ## 4. Update Protocol (MANDATORY)
108
+
109
+ Whenever a relevant action is performed, the AI **MUST**:
110
+
111
+ 1. **Identify Scope**: Determine which page in `/.sauron/wiki/` is affected.
112
+ 2. **Register Change**: Add a specific entry to the **Change History** of the corresponding page.
113
+ 3. **Update Current State**: Ensure the technical description reflects reality after the modification.
114
+ 4. **Register Decisions**: Document technical or strategic choices using the **Architectural Decisions** format.
115
+ 5. **Update Routing**: If a new page was created, register it in `summary.json` with its metadata immediately.
116
+
117
+ ---
118
+
119
+ ## 5. Mandatory Write Triggers
120
+
121
+ > 🔴 These events ALWAYS require a wiki update in the SAME response turn as the code delivery.
122
+
123
+ | Trigger Event | Wiki Action Required |
124
+ |---------------|---------------------|
125
+ | **External API integrated** | Create `{name}.md` under the corresponding folder (e.g. `integrations/` or `modules/`) with: URL, auth method, request/response shapes, error handling, env vars. |
126
+ | **New route/page created** | Register in `summary.json` System Map + create `{name}.md` under the corresponding folder with layout, components, and behavior. |
127
+ | **Authentication flow changed** | Update auth-related page with full flow: credentials, tokens, cookies, middleware, session lifecycle. |
128
+ | **New UI component delivered** | Register in the parent module page with: props, behavior, dependencies, visual state. |
129
+ | **Architectural decision made** | Document in the relevant page using the Decision template (Problem → Options → Choice → Justification). |
130
+ | **Environment variable added/changed** | Register in relevant infrastructure/config page with: name, purpose, example value. |
131
+ | **Database schema changed** | Update `module-data-schema.md` with the change, including SQL and reasoning. |
132
+ | **Critical bug resolved** | Register root cause and solution in the affected module page. |
133
+ | **Middleware/security layer added** | Document the protection boundary, what it intercepts, and its redirect logic. |
134
+ | **Configuration/settings page created** | Document available options, their purpose, and current state (even if mocked). |
135
+
136
+ ### Self-Check Before Responding
137
+
138
+ ```
139
+ Before writing your response to the user, ask yourself:
140
+
141
+ 1. Did I create or modify any file? → Wiki needs to know.
142
+ 2. Did I connect to an external API? → Wiki needs full documentation.
143
+ 3. Did I change login/session flow? → Wiki MUST reflect this.
144
+ 4. Did I create a new page/route? → summary.json needs the registration.
145
+ 5. Did I make a technical decision? → Wiki needs the justification.
146
+ 6. Did I add/change an env variable? → Wiki needs the record.
147
+
148
+ If ANY answer is YES and the wiki was NOT updated → THE TASK IS NOT COMPLETE.
149
+ ```
150
+
151
+ ---
152
+
153
+ ## 6. AI Behavior & Constraints
154
+
155
+ | Rule | Action |
156
+ |------|--------|
157
+ | **Never skip** | Do not modify the system without documenting. |
158
+ | **Never omit** | Always justify decisions; no change can be implicit. |
159
+ | **Never overwrite** | History must never be deleted; append only. |
160
+ | **Never assume** | Do not use context that isn't documented. |
161
+ | **Never defer** | Wiki updates happen NOW, not "later" or "next turn". |
162
+ | **Clarity > Brevity** | Prioritize deep understanding over short summaries. |
163
+
164
+ ---
165
+
166
+ ## 7. Vision/Goal
167
+
168
+ Transform the project into a system where:
169
+ - Code is **Executable**.
170
+ - Documentation is **Explainable**.
171
+ - Decision History is **Auditable**.
172
+ - No session knowledge is **Lost**.
@@ -0,0 +1,152 @@
1
+ # SAURON START
2
+ ---
3
+ trigger: always_on
4
+ ---
5
+
6
+ # SAURON START
7
+ ---
8
+ trigger: always_on
9
+ ---
10
+
11
+ # SAURON START
12
+ ---
13
+ trigger: always_on
14
+ ---
15
+
16
+ # SAURON START
17
+ ---
18
+ trigger: always_on
19
+ ---
20
+
21
+ # Regra de Memória do Projeto (OBRIGATÓRIA)
22
+
23
+ > Esta regra garante que o Wiki (`.sauron/wiki/`) é a fonte da verdade absoluta do projeto.
24
+ > Violá-la significa perder informação crítica entre sessões.
25
+
26
+ ---
27
+
28
+ ## 1. LEITURA — Antes de Agir
29
+
30
+ Sempre que algo for perguntado ou uma tarefa for iniciada:
31
+
32
+ 1. Leia `.sauron/wiki/summary.json` (o arquivo de roteamento base) primeiro. Este arquivo segue um **padrão rígido** e é a única fonte confiável de metadados.
33
+ 2. Navegue pelas sub-páginas relevantes usando as informações de nome original e tipo (file/folder) contidas no JSON.
34
+ 3. Só recorra à exploração do sistema de arquivos se a informação **não existir** no sumário (e atualize o sumário se necessário seguindo o schema da Seção 6).
35
+
36
+ ---
37
+
38
+ ## 2. PROTOCOLO DE SINCRONIZAÇÃO (NUVEM)
39
+
40
+ O fluxo de documentação segue um ciclo de três etapas para garantir a persistência:
41
+
42
+ 1. **PULL (Manual)**: Antes de iniciar a tarefa, o usuário executa `sauron pull` para atualizar os documentos locais com a versão mais recente da nuvem.
43
+ 2. **EXECUÇÃO (IA)**: Durante o desenvolvimento, o Agente atualiza/cria os documentos em `.sauron/wiki/` em tempo real.
44
+ 3. **PUSH (Manual)**: Ao finalizar a tarefa, o usuário executa `sauron push` para enviar as atualizações locais para a nuvem.
45
+
46
+ > [!IMPORTANT]
47
+ > O Agente deve assumir que o diretório `.sauron/wiki/` é o destino final e atualizá-lo diligentemente, permitindo que o usuário sincronize as mudanças posteriormente.
48
+
49
+ ---
50
+
51
+ ## 3. ESCRITA — Depois de Entregar (CRÍTICO)
52
+
53
+ **Após QUALQUER entrega funcional, a wiki DEVE ser atualizada NO MESEMO TURNO de resposta.**
54
+
55
+ ### Gatilhos Obrigatórios de Escrita
56
+
57
+ | Evento | Ação no Wiki |
58
+ |--------|-------------|
59
+ | **Integração de API externa** | Criar/atualizar página documentando URL, autenticação, payload, resposta e tratamento de erros. |
60
+ | **Nova página/rota criada** | Registrar em `summary.json` (seguindo o **padrão rígido** da Seção 6) + criar arquivo `.md`. |
61
+ | **Fluxo de autenticação alterado** | Atualizar a página de auth com o fluxo completo, incluindo cookies, tokens e middleware. |
62
+ | **Novo componente de UI funcional** | Registrar na página do módulo correspondente com props, comportamento e dependências. |
63
+ | **Decisão arquitetural tomada** | Documentar usando o formato "Decisão Arquitetural" (Problema → Opções → Escolha → Justificativa). |
64
+ | **Variável de ambiente adicionada/alterada** | Registrar na página de infraestrutura com nome, propósito e exemplo. |
65
+ | **Schema de banco alterado** | Atualizar `module-data-schema.md` com a mudança. |
66
+ | **Bug crítico resolvido** | Registrar causa raiz e solução na página do módulo afetado. |
67
+
68
+ ### Regra de Ouro
69
+
70
+ ```
71
+ ❌ ERRADO: Entregar código → Responder ao usuário → Esquecer o wiki
72
+ ✅ CORRETO: Entregar código → Atualizar wiki → Responder ao usuário
73
+ ```
74
+
75
+ A atualização do wiki é **parte da entrega**, não um passo opcional posterior.
76
+
77
+ ---
78
+
79
+ ## 4. FORMATO — O que Escrever
80
+
81
+ Cada registro deve conter no mínimo:
82
+ - **O que foi feito** (descrição objetiva)
83
+ - **Por que foi feito** (contexto e motivação)
84
+ - **Como funciona** (detalhes técnicos: endpoints, payloads, fluxos)
85
+ - **Arquivos afetados** (lista de caminhos)
86
+ - **Data** (timestamp da alteração)
87
+
88
+ ---
89
+
90
+ ## 6. ESTRUTURA RÍGIDA DO SUMMARY.JSON
91
+
92
+ O arquivo `.sauron/wiki/summary.json` é o mapa de metadados que vincula os arquivos locais ao servidor. O CLI exige um padrão estrito para o comando `sauron push` funcionar corretamente.
93
+
94
+ ### Regras de Ouro do Summary
95
+ - **NUNCA altere IDs**: Os campos `id`, `domainId` e `orgId` são cruciais. Removê-los ou alterá-los causará a criação de documentos duplicados no servidor em vez de atualizar os existentes.
96
+ - **Mantenha o Mapeamento**: O campo `name` deve ser o título original (com espaços e acentos). O `slug` e o `path` devem ser gerados seguindo a lógica de normalização (lowercase, sem acentos, espaços viram hífens).
97
+ - **Otimização**: Os campos `contentLength` e `contentHash` (SHA256) permitem que o CLI pule arquivos não alterados. Se você editar um arquivo manualmente, o `push` detectará a mudança mesmo se você não atualizar o hash (ele recalcula o hash local), mas o `summary.json` deve ser mantido atualizado para consistência.
98
+ - **Acoplamento Físico**: O Sauron CLI mapeia domínios do banco de dados na nuvem com base na subpasta física no disco local (usando o diretório pai do arquivo). Arquivos na raiz do wiki sempre pertencerão ao domínio genérico `.`. É obrigatória a organização física em pastas para manter a separação lógica na nuvem.
99
+ - **Ignorar summary.md**: O arquivo `summary.md` é uma página especial/reservada. Nunca adicione o `summary.md` como uma entrada do tipo `"file"` dentro do `summary.json`, caso contrário o CLI tentará excluí-lo e falhará com erro 422.
100
+
101
+ ### Schema Obrigatório
102
+
103
+ O JSON deve ser um **array de objetos** seguindo rigorosamente estes formatos:
104
+
105
+ #### Entrada de Pasta (Domínio)
106
+ ```json
107
+ {
108
+ "type": "folder",
109
+ "name": "Título Original",
110
+ "slug": "titulo-original",
111
+ "path": "titulo-original",
112
+ "id": "id-do-dominio"
113
+ }
114
+ ```
115
+
116
+ #### Entrada de Arquivo (Documento)
117
+ ```json
118
+ {
119
+ "type": "file",
120
+ "name": "Título Original do Documento",
121
+ "slug": "titulo-original-do-documento",
122
+ "path": "slug-do-dominio/titulo-original-do-documento.md",
123
+ "id": "id-do-kb",
124
+ "domainId": "id-do-dominio-pai",
125
+ "orgId": "id-da-organizacao",
126
+ "contentLength": 1234,
127
+ "contentHash": "sha256-checksum"
128
+ }
129
+ ```
130
+
131
+ ---
132
+
133
+ ## 7. VALIDAÇÃO — Checklist Mental
134
+
135
+ Antes de finalizar qualquer resposta que envolva código, pergunte-se:
136
+
137
+ - [ ] Criei ou modifiquei um arquivo? → Wiki precisa saber.
138
+ - [ ] Conectei a uma API externa? → Wiki precisa documentar.
139
+ - [ ] Alterei fluxo de login/sessão? → Wiki MUST refletir.
140
+ - [ ] Criei uma nova página/rota? → `summary.json` precisa do registro de roteamento seguindo o **padrão rígido**.
141
+ - [ ] Tomei uma decisão técnica (lib X vs Y, abordagem A vs B)? → Wiki precisa da justificativa.
142
+ - [ ] Adicionei/alterei uma variável de ambiente? → Wiki precisa do registro.
143
+
144
+ Se qualquer checkbox for `true` e o wiki não foi atualizado, **a tarefa NÃO está completa**.
145
+
146
+ # SAURON END
147
+
148
+ # SAURON END
149
+
150
+ # SAURON END
151
+
152
+ # SAURON END
@@ -0,0 +1,157 @@
1
+ ---
2
+ description: Diretrizes de Memória e Write Obligation para evitar Amnésia de Contexto
3
+ globs: *
4
+ ---
5
+
6
+ # SAURON START
7
+ ---
8
+ trigger: always_on
9
+ ---
10
+
11
+ # SAURON START
12
+ ---
13
+ trigger: always_on
14
+ ---
15
+
16
+ # SAURON START
17
+ ---
18
+ trigger: always_on
19
+ ---
20
+
21
+ # SAURON START
22
+ ---
23
+ trigger: always_on
24
+ ---
25
+
26
+ # Regra de Memória do Projeto (OBRIGATÓRIA)
27
+
28
+ > Esta regra garante que o Wiki (`.sauron/wiki/`) é a fonte da verdade absoluta do projeto.
29
+ > Violá-la significa perder informação crítica entre sessões.
30
+
31
+ ---
32
+
33
+ ## 1. LEITURA — Antes de Agir
34
+
35
+ Sempre que algo for perguntado ou uma tarefa for iniciada:
36
+
37
+ 1. Leia `.sauron/wiki/summary.json` (o arquivo de roteamento base) primeiro. Este arquivo segue um **padrão rígido** e é a única fonte confiável de metadados.
38
+ 2. Navegue pelas sub-páginas relevantes usando as informações de nome original e tipo (file/folder) contidas no JSON.
39
+ 3. Só recorra à exploração do sistema de arquivos se a informação **não existir** no sumário (e atualize o sumário se necessário seguindo o schema da Seção 6).
40
+
41
+ ---
42
+
43
+ ## 2. PROTOCOLO DE SINCRONIZAÇÃO (NUVEM)
44
+
45
+ O fluxo de documentação segue um ciclo de três etapas para garantir a persistência:
46
+
47
+ 1. **PULL (Manual)**: Antes de iniciar a tarefa, o usuário executa `sauron pull` para atualizar os documentos locais com a versão mais recente da nuvem.
48
+ 2. **EXECUÇÃO (IA)**: Durante o desenvolvimento, o Agente atualiza/cria os documentos em `.sauron/wiki/` em tempo real.
49
+ 3. **PUSH (Manual)**: Ao finalizar a tarefa, o usuário executa `sauron push` para enviar as atualizações locais para a nuvem.
50
+
51
+ > [!IMPORTANT]
52
+ > O Agente deve assumir que o diretório `.sauron/wiki/` é o destino final e atualizá-lo diligentemente, permitindo que o usuário sincronize as mudanças posteriormente.
53
+
54
+ ---
55
+
56
+ ## 3. ESCRITA — Depois de Entregar (CRÍTICO)
57
+
58
+ **Após QUALQUER entrega funcional, a wiki DEVE ser atualizada NO MESEMO TURNO de resposta.**
59
+
60
+ ### Gatilhos Obrigatórios de Escrita
61
+
62
+ | Evento | Ação no Wiki |
63
+ |--------|-------------|
64
+ | **Integração de API externa** | Criar/atualizar página documentando URL, autenticação, payload, resposta e tratamento de erros. |
65
+ | **Nova página/rota criada** | Registrar em `summary.json` (seguindo o **padrão rígido** da Seção 6) + criar arquivo `.md`. |
66
+ | **Fluxo de autenticação alterado** | Atualizar a página de auth com o fluxo completo, incluindo cookies, tokens e middleware. |
67
+ | **Novo componente de UI funcional** | Registrar na página do módulo correspondente com props, comportamento e dependências. |
68
+ | **Decisão arquitetural tomada** | Documentar usando o formato "Decisão Arquitetural" (Problema → Opções → Escolha → Justificativa). |
69
+ | **Variável de ambiente adicionada/alterada** | Registrar na página de infraestrutura com nome, propósito e exemplo. |
70
+ | **Schema de banco alterado** | Atualizar `module-data-schema.md` com a mudança. |
71
+ | **Bug crítico resolvido** | Registrar causa raiz e solução na página do módulo afetado. |
72
+
73
+ ### Regra de Ouro
74
+
75
+ ```
76
+ ❌ ERRADO: Entregar código → Responder ao usuário → Esquecer o wiki
77
+ ✅ CORRETO: Entregar código → Atualizar wiki → Responder ao usuário
78
+ ```
79
+
80
+ A atualização do wiki é **parte da entrega**, não um passo opcional posterior.
81
+
82
+ ---
83
+
84
+ ## 4. FORMATO — O que Escrever
85
+
86
+ Cada registro deve conter no mínimo:
87
+ - **O que foi feito** (descrição objetiva)
88
+ - **Por que foi feito** (contexto e motivação)
89
+ - **Como funciona** (detalhes técnicos: endpoints, payloads, fluxos)
90
+ - **Arquivos afetados** (lista de caminhos)
91
+ - **Data** (timestamp da alteração)
92
+
93
+ ---
94
+
95
+ ## 6. ESTRUTURA RÍGIDA DO SUMMARY.JSON
96
+
97
+ O arquivo `.sauron/wiki/summary.json` é o mapa de metadados que vincula os arquivos locais ao servidor. O CLI exige um padrão estrito para o comando `sauron push` funcionar corretamente.
98
+
99
+ ### Regras de Ouro do Summary
100
+ - **NUNCA altere IDs**: Os campos `id`, `domainId` e `orgId` são cruciais. Removê-los ou alterá-los causará a criação de documentos duplicados no servidor em vez de atualizar os existentes.
101
+ - **Mantenha o Mapeamento**: O campo `name` deve ser o título original (com espaços e acentos). O `slug` e o `path` devem ser gerados seguindo a lógica de normalização (lowercase, sem acentos, espaços viram hífens).
102
+ - **Otimização**: Os campos `contentLength` e `contentHash` (SHA256) permitem que o CLI pule arquivos não alterados. Se você editar um arquivo manualmente, o `push` detectará a mudança mesmo se você não atualizar o hash (ele recalcula o hash local), mas o `summary.json` deve ser mantido atualizado para consistência.
103
+ - **Acoplamento Físico**: O Sauron CLI mapeia domínios do banco de dados na nuvem com base na subpasta física no disco local (usando o diretório pai do arquivo). Arquivos na raiz do wiki sempre pertencerão ao domínio genérico `.`. É obrigatória a organização física em pastas para manter a separação lógica na nuvem.
104
+ - **Ignorar summary.md**: O arquivo `summary.md` é uma página especial/reservada. Nunca adicione o `summary.md` como uma entrada do tipo `"file"` dentro do `summary.json`, caso contrário o CLI tentará excluí-lo e falhará com erro 422.
105
+
106
+ ### Schema Obrigatório
107
+
108
+ O JSON deve ser um **array de objetos** seguindo rigorosamente estes formatos:
109
+
110
+ #### Entrada de Pasta (Domínio)
111
+ ```json
112
+ {
113
+ "type": "folder",
114
+ "name": "Título Original",
115
+ "slug": "titulo-original",
116
+ "path": "titulo-original",
117
+ "id": "id-do-dominio"
118
+ }
119
+ ```
120
+
121
+ #### Entrada de Arquivo (Documento)
122
+ ```json
123
+ {
124
+ "type": "file",
125
+ "name": "Título Original do Documento",
126
+ "slug": "titulo-original-do-documento",
127
+ "path": "slug-do-dominio/titulo-original-do-documento.md",
128
+ "id": "id-do-kb",
129
+ "domainId": "id-do-dominio-pai",
130
+ "orgId": "id-da-organizacao",
131
+ "contentLength": 1234,
132
+ "contentHash": "sha256-checksum"
133
+ }
134
+ ```
135
+
136
+ ---
137
+
138
+ ## 7. VALIDAÇÃO — Checklist Mental
139
+
140
+ Antes de finalizar qualquer resposta que envolva código, pergunte-se:
141
+
142
+ - [ ] Criei ou modifiquei um arquivo? → Wiki precisa saber.
143
+ - [ ] Conectei a uma API externa? → Wiki precisa documentar.
144
+ - [ ] Alterei fluxo de login/sessão? → Wiki MUST refletir.
145
+ - [ ] Criei uma nova página/rota? → `summary.json` precisa do registro de roteamento seguindo o **padrão rígido**.
146
+ - [ ] Tomei uma decisão técnica (lib X vs Y, abordagem A vs B)? → Wiki precisa da justificativa.
147
+ - [ ] Adicionei/alterei uma variável de ambiente? → Wiki precisa do registro.
148
+
149
+ Se qualquer checkbox for `true` e o wiki não foi atualizado, **a tarefa NÃO está completa**.
150
+
151
+ # SAURON END
152
+
153
+ # SAURON END
154
+
155
+ # SAURON END
156
+
157
+ # SAURON END
@@ -0,0 +1,45 @@
1
+ # Prompt: Evolução do Onboarding e Scanner de Projeto no Sauron CLI
2
+
3
+ ```
4
+ Estou desenvolvendo o Sauron CLI, um framework de persistência de contexto e governança de memória de IA no repositório. O fluxo atual de inicialização ('sauron init') depende de um onboarding interativo que faz quatro perguntas manuais de texto ao desenvolvedor: qual(is) IA(s) usará, severidade das regras, contexto do projeto e stack tecnológica.
5
+
6
+ Quero evoluir esse onboarding para um modelo de "Smart Onboarding e Project Scanner". Em vez de forçar o usuário a digitar tudo manualmente, a CLI deve escanear a estrutura física do repositório antes de exibir os prompts interativos, sugerindo automaticamente as tecnologias detectadas e gerando as primeiras documentações contextuais da wiki baseadas nessa detecção.
7
+
8
+ Stack Técnica:
9
+ - Node.js (ESM)
10
+ - TypeScript 5
11
+ - @clack/prompts para UI interativa
12
+ - fs-extra para leitura e varredura do disco
13
+
14
+ Atualmente, o onboarding coleta dados de forma totalmente manual no arquivo de entrypoint:
15
+
16
+ ```typescript
17
+ // src/features/init/init.command.ts
18
+ let aiTargets = ['Cursor', 'Windsurf', 'Aider', 'Antigravity'];
19
+ let severity = 'Observacional';
20
+ let projectContext = 'Projeto Genérico';
21
+ let projectStack = 'Node.js, TypeScript';
22
+
23
+ if (session.interactive) {
24
+ const config = await p.group({
25
+ targets: () => p.multiselect({ message: 'Qual(is) IA(s)...', options: [...] }),
26
+ severity: () => p.select({ message: 'Qual o nível...', options: [...] }),
27
+ context: () => p.text({ message: 'Descreva brevemente o contexto...', defaultValue: 'Projeto Genérico' }),
28
+ stack: () => p.text({ message: 'Qual a stack tecnológica...', defaultValue: 'Node.js, TypeScript' }),
29
+ });
30
+ aiTargets = config.targets;
31
+ severity = config.severity;
32
+ projectContext = config.context;
33
+ projectStack = config.stack;
34
+ }
35
+ ```
36
+
37
+ Quero ideias, arquitetura e soluções técnicas para os seguintes desafios:
38
+
39
+ 1. **Varredura e Mapeamento de Dependências (Scanner)**: Como estruturar de forma performática a leitura e análise de arquivos comuns de configuração (como package.json, tsconfig.json, next.config.js, compose.yml, requirements.txt, gemini.config, etc.) para inferir a linguagem principal, frameworks frontend/backend, bancos de dados, estilizações e provedores de nuvem?
40
+ 2. **Design de UI Sem Fricção**: Como pré-modular e apresentar as informações encontradas pelo scanner nos prompts do @clack/prompts, de forma que o usuário apenas confirme ou ajuste as tecnologias inferidas em vez de digitá-las do zero?
41
+ 3. **Bootstrapping Inteligente de Wiki**: Como a CLI pode utilizar as informações detectadas da stack para gerar dinamicamente arquivos iniciais de diretrizes na wiki (.sauron/wiki/standards/ e .sauron/wiki/modules/) adaptados àquela stack específica (ex: injetar um modelo de manual técnico do Firebase se detectar o Firebase, ou guias de estilo de Tailwind se encontrar o Tailwind)?
42
+ 4. **Resiliência e Execução Rápida**: Qual a melhor estratégia arquitetural para o scanner operar sem degradar o tempo de inicialização da CLI, lidando graciosamente com repositórios gigantescos ou com dependências desatualizadas?
43
+
44
+ Desenhe a arquitetura técnica dessa camada de escaneamento, especifique os algoritmos de detecção baseados no sistema de arquivos e forneça exemplos de código do serviço do Scanner adaptados para TypeScript.
45
+ ```