@aksp/opencrew 1.9.0 → 1.11.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 (53) hide show
  1. package/CHANGELOG.md +112 -0
  2. package/README.md +98 -6
  3. package/package.json +1 -1
  4. package/src/commands/init.js +4 -5
  5. package/src/commands/update.js +8 -0
  6. package/src/lib/resumo.js +5 -1
  7. package/templates/AGENTS.md +17 -7
  8. package/templates/_opencrew/.opencrew-version +1 -1
  9. package/templates/_opencrew/core/architect.agent.yaml +25 -16
  10. package/templates/_opencrew/core/best-practices/_catalog.yaml +5 -0
  11. package/templates/_opencrew/core/best-practices/documento-oficial.md +144 -0
  12. package/templates/_opencrew/core/formato-da-crew.md +162 -0
  13. package/templates/_opencrew/core/modelos/documento-oficial.md +42 -0
  14. package/templates/_opencrew/core/prompts/build.prompt.md +33 -57
  15. package/templates/_opencrew/core/prompts/design.prompt.md +12 -11
  16. package/templates/_opencrew/core/prompts/discovery.prompt.md +23 -5
  17. package/templates/_opencrew/core/prompts/documento.prompt.md +134 -0
  18. package/templates/_opencrew/core/prompts/entrega.prompt.md +5 -4
  19. package/templates/_opencrew/core/prompts/repair.prompt.md +75 -84
  20. package/templates/_opencrew/core/runner.pipeline.md +9 -12
  21. package/templates/_opencrew/core/scripts/conserto/achados.mjs +158 -0
  22. package/templates/_opencrew/core/scripts/conserto/aplicar.mjs +156 -0
  23. package/templates/_opencrew/core/scripts/conserto/argumentos.mjs +51 -0
  24. package/templates/_opencrew/core/scripts/conserto/crew.mjs +126 -0
  25. package/templates/_opencrew/core/scripts/conserto/edicoes.mjs +133 -0
  26. package/templates/_opencrew/core/scripts/conserto/gravar.mjs +55 -0
  27. package/templates/_opencrew/core/scripts/conserto.mjs +82 -0
  28. package/templates/_opencrew/core/scripts/documento/argumentos.mjs +50 -0
  29. package/templates/_opencrew/core/scripts/documento/corpo.mjs +51 -0
  30. package/templates/_opencrew/core/scripts/documento/estilos.mjs +42 -0
  31. package/templates/_opencrew/core/scripts/documento/gravar.mjs +44 -0
  32. package/templates/_opencrew/core/scripts/documento/linha.mjs +58 -0
  33. package/templates/_opencrew/core/scripts/documento/marcacoes.mjs +55 -0
  34. package/templates/_opencrew/core/scripts/documento/markdown.mjs +92 -0
  35. package/templates/_opencrew/core/scripts/documento/pacote.mjs +82 -0
  36. package/templates/_opencrew/core/scripts/documento/perfil.mjs +70 -0
  37. package/templates/_opencrew/core/scripts/documento/png.mjs +20 -0
  38. package/templates/_opencrew/core/scripts/documento/projeto.mjs +60 -0
  39. package/templates/_opencrew/core/scripts/documento/tabelas.mjs +57 -0
  40. package/templates/_opencrew/core/scripts/documento/timbre.mjs +64 -0
  41. package/templates/_opencrew/core/scripts/documento/xml.mjs +95 -0
  42. package/templates/_opencrew/core/scripts/documento/zip.mjs +86 -0
  43. package/templates/_opencrew/core/scripts/documento.mjs +150 -0
  44. package/templates/_opencrew/core/scripts/entrega/canais.mjs +7 -3
  45. package/templates/_opencrew/core/scripts/entrega/comparar.mjs +2 -2
  46. package/templates/_opencrew/core/scripts/entrega/copia.mjs +1 -1
  47. package/templates/_opencrew/core/scripts/entrega/documentos.mjs +104 -0
  48. package/templates/_opencrew/core/scripts/entrega/gravar.mjs +3 -3
  49. package/templates/_opencrew/core/scripts/entrega/leiame.mjs +3 -2
  50. package/templates/_opencrew/core/scripts/entrega/passos.mjs +12 -2
  51. package/templates/_opencrew/core/scripts/entrega/separar.mjs +3 -0
  52. package/templates/_opencrew/core/scripts/entregar.mjs +12 -5
  53. package/templates/_opencrew/core/scripts/verificar/proibicoes.mjs +30 -5
package/CHANGELOG.md CHANGED
@@ -3,6 +3,118 @@
3
3
  All notable changes to opencrew are documented here.
4
4
  The format is based on [Keep a Changelog](https://keepachangelog.com/).
5
5
 
6
+ ## [1.11.0] — 2026-10-07
7
+
8
+ Fase U4, fatia 1: "Conserto de crews e caminho de criação" (`specs/fase-u4a-conserto-de-crews.md`).
9
+ Chega a quem já usa com um `npx @aksp/opencrew@latest update`; as suas crews só mudam quando você
10
+ pede o conserto e diz sim a cada ponto.
11
+
12
+ Ainda não nesta versão: histórico confiável e pedido avulso à crew (`/opencrew pedir`), que vêm
13
+ na 1.12.0; retomar uma execução interrompida, na 1.13.0. O conserto não reordena passos: crew
14
+ sem revisão, sem aprovação final ou que publica antes da revisão é apontada e resolvida com
15
+ `/opencrew edit`.
16
+
17
+ ### Added
18
+ - **`/opencrew repair <crew>` conserta crews antigas.** Ele lê a crew e mostra, em português, o
19
+ que falta para as melhorias das versões seguintes valerem nela: passo sem o formato do texto
20
+ (o verificador media como post de blog), crew sem os arquivos do projeto que deve ler,
21
+ proibição sem trecho entre aspas (que o verificador não consegue barrar), nomes dos agentes,
22
+ passo que publica sem a marca. Conserta um ponto por vez, com o seu sim; cada arquivo alterado
23
+ ganha uma cópia `.bak`. Quem grava é um script (`_opencrew/core/scripts/conserto.mjs`), não a
24
+ IA; sem `--aplicar` ele só lê.
25
+ - **Proibição que é regra de conteúdo** ("nunca prever votação por aclamação") pode ser marcada
26
+ como `(revisão humana)`: fica para o revisor e deixa de aparecer como pendência do verificador.
27
+ - **Crew de documento na criação.** Pedir uma crew de ata, ofício, contrato ou proposta leva a
28
+ perguntas próprias (quais documentos, quem assina e quem recebe, papel timbrado, quais arquivos
29
+ mandam no texto), sem a oferta de investigar perfis de referência, e os passos já saem com o
30
+ formato `documento-oficial`.
31
+ - **Formato da crew escrito num lugar só** (`_opencrew/core/formato-da-crew.md`): `crew.yaml`,
32
+ `pipeline.yaml`, os campos de cada passo e o `id` do agente, com um exemplo completo. A criação,
33
+ o runner e o conserto seguem esse arquivo; as formas que versões antigas gravaram continuam
34
+ sendo lidas.
35
+ - Depois do `update`, quando o projeto tem ao menos uma crew, o resumo lembra do
36
+ `/opencrew repair`.
37
+
38
+ ### Changed
39
+ - **`max_review_cycles` no `crew.yaml` passa a valer.** O runner só lia o limite de ciclos de
40
+ revisão no passo de revisão; crews que o declaravam no `crew.yaml` recebiam sempre 3.
41
+ - **Tier Express tem passo de revisão**, feito pelo próprio redator: o verificador automático roda
42
+ também nele. Antes o texto dizia "o redator se revisa" e, em outro ponto, "toda crew precisa de
43
+ revisor".
44
+ - **Checkpoint que guarda a resposta em arquivo** deixa de usar sempre o formato de "foco de
45
+ pesquisa": fora do checkpoint do pesquisador, grava o título, a sua resposta e a data.
46
+ - O Architect lista os prompts de cada fase da criação, e o ponto de entrada diz onde ele está;
47
+ antes um apontava para o outro.
48
+ - Pasta de `crews/` sem `crew.yaml` (os modelos instalados) não aparece mais como crew nas
49
+ listas.
50
+
51
+ ### Fixed
52
+ - `init --ide=<lista> --yes` (e `--all`) instalava as pontes das 9 IDEs; agora a lista vence.
53
+ `--yes` sem `--ide` continua instalando todas.
54
+ - Uma frase cortada no meio nas instruções instaladas (`_opencrew/core/system.md`, desde a
55
+ 1.10.0): a rota do documento Word e o pedido de entrega de uma execução encerrada não exigem o
56
+ onboarding.
57
+ - O Build exigia um checkpoint imediatamente antes de cada passo que publica, o que era
58
+ impossível com dois passos de publicação seguidos.
59
+
60
+ ## [1.10.0] — 2026-10-07
61
+
62
+ Fase U3b "Documento Word, com perfil de documento oficial" (`specs/fase-u3b-documento-word.md`).
63
+ Chega a quem já usa com um `npx @aksp/opencrew@latest update`; o papel timbrado é criado só quando
64
+ você pede.
65
+
66
+ Ainda não nesta versão: imagem no corpo do texto, link clicável, sumário, nota de rodapé e
67
+ numeração automática; logotipo em JPEG ou SVG; ler ou regravar um modelo `.dotx`; mais de um
68
+ perfil por projeto na entrega; PDF direto (o Word salva como PDF). O resultado foi conferido no
69
+ Word; no LibreOffice e no Google Docs, não.
70
+
71
+ ### Added
72
+ - **Documento Word.** O texto em markdown (`.md` ou `.txt`) vira um arquivo do Word (`.docx`) com
73
+ as mesmas palavras e os mesmos números, na mesma ordem. No chat: `/opencrew documento <arquivo>`
74
+ (ou "Documento Word" no menu). No terminal:
75
+ `node _opencrew/core/scripts/documento.mjs "<arquivo.md>"`. O Word sai ao lado do texto, com o
76
+ mesmo nome; `--saida` escolhe outra pasta ou outro nome. Antes, quem precisava de um documento
77
+ oficial mantinha um script à parte, com o texto dentro do código.
78
+ - **Papel timbrado (perfil de documento oficial).** Um arquivo de texto do projeto,
79
+ `_opencrew/_memory/documento-oficial.md`, guarda o logotipo (PNG), três linhas de cabeçalho, o
80
+ rodapé com "Página X de Y", as margens, a fonte e o tamanho da letra. Na primeira vez a IA
81
+ pergunta se você quer configurar e preenche o arquivo com as suas respostas; `--criar-perfil`
82
+ cria o arquivo a partir do modelo. O `update` não toca nele, e nenhum comando o sobrescreve.
83
+ - **Três marcações para documento.** `::: titulo` e `::: subtitulo` (centralizados),
84
+ `::: quebra-de-pagina` (o anexo começa em página nova) e `::: assinaturas` … `:::` (as linhas
85
+ de assinatura, duas por linha, com o nome e o cargo). Títulos `#`, `##` e `###`, tabelas, listas,
86
+ negrito e itálico saem como estilos do Word.
87
+ - **O texto oficial não muda.** Número de item escrito por você ("1.", "6.1.", "a)", "§ 1º") vai
88
+ como texto: nada é renumerado, reordenado nem corrigido.
89
+ - **Na entrega, a pasta `documentos/`.** O passo com `format: documento-oficial` sai como
90
+ `entrega/documentos/<nome>.docx`, com o papel timbrado do projeto, e o LEIA-ME ganha a seção
91
+ "Documentos", com o que conferir no Word. Sem papel timbrado configurado, a entrega avisa e
92
+ diz como criar. A cópia para a pasta do projeto leva `documentos/`
93
+ junto.
94
+ - **Guia `documento-oficial`** (o 23º guia de melhores práticas): ensina o redator a escrever um
95
+ texto que vira documento — um parágrafo por linha, número escrito à mão, anexo depois da quebra
96
+ de página, assinaturas no fim. Crews novas recebem esse formato no passo cujo resultado é um
97
+ documento para imprimir, assinar ou protocolar.
98
+ - **Avisos de conversão.** O relatório diz o que ficou como texto (imagem, marcação `:::`
99
+ desconhecida, bloco de assinaturas sem o `:::` final) e quantos caracteres inválidos foram
100
+ removidos. Aviso não impede o documento.
101
+
102
+ ### Changed
103
+ - **Um Word que já existe não é trocado em silêncio.** Se há um `.docx` diferente no destino, nada
104
+ é gravado e a IA pergunta antes de substituir (`--substituir`). Igual, byte a byte: nada a fazer.
105
+ - **Perfil com erro não gera documento.** Chave desconhecida, valor fora da faixa, logotipo que
106
+ não existe, não é PNG ou passa de 2 MB: a mensagem diz a linha, e nada é gravado.
107
+ - O menu "Mais opções" ganha "Documento Word".
108
+
109
+ ### Internal
110
+ - `documento.mjs` e os módulos de `scripts/documento/` (sem dependência, sem `node:zlib`, até 200
111
+ linhas cada): zip sem compressão, com CRC-32 próprio e data fixa — o mesmo texto, com o mesmo
112
+ perfil, dá o mesmo arquivo, byte a byte. `modelos/documento-oficial.md` é o modelo do perfil;
113
+ `prompts/documento.prompt.md`, o prompt da rota. O `src/` não mudou; o runner não cresceu (874
114
+ linhas).
115
+ - `AGENTS.md`: a regra 15 cita o `documento.mjs`; a regra 7 diz que abrir o `.docx` no Word não é
116
+ conferido pela porta.
117
+
6
118
  ## [1.9.0] — 2026-10-07
7
119
 
8
120
  Fase U3a, fatia 2 "Entrega no projeto" (`specs/fase-u3a2-entrega-no-projeto.md`). Chega a quem já
package/README.md CHANGED
@@ -36,6 +36,9 @@ dentro da sua IDE.**
36
36
  colar, as imagens e um `LEIA-ME.md` com o passo a passo. O que não está pronto fica marcado.
37
37
  - 📁 **Entrega no seu projeto** — a crew pergunta uma vez onde guardar e copia a entrega para uma
38
38
  pasta do seu projeto, uma subpasta por execução, sem sobrescrever nada.
39
+ - 📄 **Documento Word em papel timbrado** — ata, ofício, declaração: o texto em markdown vira um
40
+ arquivo do Word com as mesmas palavras, o seu logotipo no cabeçalho, "Página X de Y" no rodapé
41
+ e as linhas de assinatura. Um comando: `/opencrew documento <arquivo>`.
39
42
  - 🎛️ **Seleção inteligente de agentes** — o sistema analisa seu pedido e
40
43
  sugere quais agentes são necessários para aquela tarefa. Você confirma ou
41
44
  ajusta com um clique. Agentes pulados não gastam tokens naquele run.
@@ -181,10 +184,12 @@ meu-projeto/
181
184
  │ │ ├── runner.pipeline.md ← executor de pipeline
182
185
  │ │ ├── skills.engine.md ← gerenciador de skills
183
186
  │ │ ├── architect.agent.yaml ← definição do Arquiteto
184
- │ │ ├── best-practices/ ← 22 guias de melhores práticas + _catalog.yaml
185
- │ │ ├── scripts/ ← verificador, conferência de fontes, caminhos, entrega e os scripts do Escritório
187
+ │ │ ├── formato-da-crew.md ← o formato dos arquivos de uma crew (crew.yaml, pipeline.yaml, passos)
188
+ │ │ ├── best-practices/ ← 23 guias de melhores práticas + _catalog.yaml
189
+ │ │ ├── scripts/ ← verificador, conferência de fontes, caminhos, entrega, documento Word, conserto de crews e os scripts do Escritório
190
+ │ │ ├── modelos/ ← modelo do perfil de documento oficial (papel timbrado)
186
191
  │ │ ├── escritorio/ ← página do Escritório ao vivo (abre com /opencrew dashboard)
187
- │ │ └── prompts/ ← 14 prompts de fase (discovery, design, build, entrega, etc.)
192
+ │ │ └── prompts/ ← 15 prompts de fase (discovery, design, build, entrega, documento, etc.)
188
193
  │ ├── agents/ ← 5 agentes base compartilhados
189
194
  │ │ ├── researcher.agent.md
190
195
  │ │ ├── copywriter.agent.md
@@ -193,7 +198,8 @@ meu-projeto/
193
198
  │ │ └── strategist.agent.md
194
199
  │ ├── _memory/
195
200
  │ │ ├── company.md ← perfil da sua empresa (onboarding)
196
- │ │ └── preferences.md ← idioma, tier padrão, Escritório ligado ou desligado
201
+ │ │ ├── preferences.md ← idioma, tier padrão, Escritório ligado ou desligado
202
+ │ │ └── documento-oficial.md ← seu papel timbrado (só existe depois que você pede; veja "Documento Word")
197
203
  │ └── .opencrew-version
198
204
  │
199
205
  ├── crews/ ← suas crews vivem aqui
@@ -231,6 +237,7 @@ entrega/
231
237
  ├── whatsapp/ ← mensagem.txt
232
238
  ├── twitter/ ← tweet.txt (na thread: tweet-1.txt, tweet-2.txt…)
233
239
  ├── youtube/ ← o roteiro
240
+ ├── documentos/ ← o Word (.docx) de cada texto de formato documento-oficial
234
241
  ├── outros/ ← arquivo sem canal (proposta, minuta, relatório), como está
235
242
  └── editaveis/ ← o HTML dos slides, para quem quiser ajustar
236
243
  ```
@@ -286,6 +293,83 @@ são sempre em português.
286
293
 
287
294
  ---
288
295
 
296
+ ## Documento Word
297
+
298
+ Ata, ofício, declaração, contrato: quando o resultado é um documento para imprimir, assinar ou
299
+ protocolar, o OpenCrew transforma o texto em markdown num arquivo do Word (`.docx`) com **as
300
+ mesmas palavras e os mesmos números, na mesma ordem**. Você escreve (ou a crew escreve) o texto;
301
+ um comando gera o documento.
302
+
303
+ **Como gerar:** no chat da sua IDE, digite `/opencrew documento Atas/ata.md` — ou escolha
304
+ "Documento Word" em "Mais opções" do menu. O Word sai ao lado do texto, com o mesmo nome
305
+ (`Atas/ata.docx`), e a IA mostra o relatório: onde gravou, qual papel timbrado usou e os avisos.
306
+ Também funciona direto no terminal, na pasta do projeto:
307
+
308
+ ```bash
309
+ node _opencrew/core/scripts/documento.mjs "Atas/ata.md"
310
+ node _opencrew/core/scripts/documento.mjs "Atas/ata.md" --saida "Documentos/Prontos"
311
+ node _opencrew/core/scripts/documento.mjs --criar-perfil # cria o arquivo do papel timbrado
312
+ ```
313
+
314
+ **Papel timbrado.** Na primeira vez, a IA pergunta se você quer configurar o papel timbrado do
315
+ projeto. Com o "sim", ela cria o perfil de documento oficial em
316
+ `_opencrew/_memory/documento-oficial.md`, pergunta o logotipo, as linhas do cabeçalho e o rodapé
317
+ e preenche o arquivo. É um arquivo de texto, seu, que o `update` nunca toca. Nele ficam:
318
+
319
+ - o logotipo (um PNG de até 2 MB, dentro do projeto) e a largura dele;
320
+ - três linhas de cabeçalho (nome da organização, registro, site e contato);
321
+ - o texto do rodapé e o "Página X de Y";
322
+ - as margens, a fonte e o tamanho da letra.
323
+
324
+ Com o "não", o documento sai sem timbre, com as margens padrão e "Página X de Y" no rodapé. É um
325
+ perfil por projeto; mudar o perfil não muda os documentos já gerados.
326
+
327
+ **Como escrever o texto.** Markdown comum, um parágrafo por linha, com três marcações a mais:
328
+
329
+ ```
330
+ ::: titulo ATA DA REUNIÃO DA DIRETORIA
331
+ ::: subtitulo Realizada em 5 de maio de 2026
332
+
333
+ # I. Abertura
334
+ Aos 5 dias do mês de maio de 2026, reuniu-se a diretoria.
335
+
336
+ ::: assinaturas
337
+ Ana Lima | Presidente
338
+ Rui Sá | Secretário
339
+ :::
340
+
341
+ ::: quebra-de-pagina
342
+ ::: titulo ANEXO I — CALENDÁRIO
343
+ ```
344
+
345
+ - `::: titulo` e `::: subtitulo` saem centralizados; `#`, `##` e `###` viram os títulos das
346
+ seções; tabela vira tabela; `- item` vira lista com marcador.
347
+ - `::: quebra-de-pagina` começa uma página nova (para o anexo); `::: assinaturas`, uma linha
348
+ `Nome | Cargo` por pessoa e `:::` para fechar montam as linhas de assinatura.
349
+ - **Os números são os seus.** "1.", "6.1.", "a)" e "§ 1º" vão como texto, do jeito que você
350
+ escreveu: nada é renumerado, reordenado nem corrigido.
351
+ - **Nada é trocado sem você saber.** Se já existe um Word diferente com esse nome (você pode tê-lo
352
+ editado), nada é gravado: a IA pergunta antes de substituir.
353
+ - **Avisos de conversão.** O relatório diz o que não coube no documento e ficou como texto: imagem,
354
+ marcação `:::` desconhecida, bloco de assinaturas sem o `:::` final. Perfil com erro (chave
355
+ desconhecida, logotipo que não existe) não gera documento: a mensagem diz a linha.
356
+ - **O Word é uma cópia do texto.** O que você mudar no Word não volta para o texto: altere o texto
357
+ e gere de novo. Para ter um PDF, abra o documento no Word e use Salvar como PDF.
358
+
359
+ **Dentro de uma crew.** O passo cujo resultado é um documento usa `format: documento-oficial` (o
360
+ guia que ensina o redator a escrever assim). Na entrega, esse texto vira
361
+ `entrega/documentos/<nome>.docx`, com o papel timbrado do projeto, e o LEIA-ME diz o que conferir.
362
+ Crews novas já nascem assim; numa crew antiga, acrescente `format: documento-oficial` ao passo.
363
+
364
+ **O que não faz.** Não põe imagem no corpo do texto, link clicável, sumário, nota de rodapé nem
365
+ numeração automática; o logotipo é só PNG; tamanhos e cores dos títulos são fixos; não lê nem
366
+ regrava um modelo `.dotx`. Os testes conferem a estrutura do arquivo; como ele fica na página,
367
+ você confere no Word. No LibreOffice e no Google Docs o resultado não foi conferido.
368
+
369
+ Quem já usa o OpenCrew recebe o documento Word com um `npx @aksp/opencrew@latest update`.
370
+
371
+ ---
372
+
289
373
  ## Escritório ao vivo
290
374
 
291
375
  Quer ver a equipe trabalhando? O **Escritório** é uma página em pixel-art, aberta no navegador,
@@ -354,6 +438,13 @@ o que você fez:
354
438
  `# opencrew:end`)? Nenhuma linha sua é apagada: o `update` guarda o arquivo como estava e põe
355
439
  um bloco completo no fim. O bloco começa por um comentário que diz que ele é do OpenCrew: as
356
440
  suas linhas ficam fora dele.
441
+ - **E as crews que você já tinha?** O `update` não mexe nelas. Para levar a elas o que veio
442
+ depois — o formato de cada texto (sem ele o verificador mede tudo como post de blog), os
443
+ arquivos do projeto que a crew deve ler, as proibições que o verificador consegue barrar —,
444
+ peça na sua IDE `/opencrew repair <nome>`. Ele mostra o que falta, pergunta antes de cada
445
+ mudança e deixa uma cópia `.bak` do arquivo que alterou. O que não dá para consertar assim
446
+ (crew sem passo de revisão, publicação antes da revisão) ele aponta e manda para
447
+ `/opencrew edit`.
357
448
  - **A instalação anterior parou no meio?** O `update` não altera nada e pede para você rodar
358
449
  `npx @aksp/opencrew init`, que conclui a instalação sem apagar o que já existe.
359
450
  - **Apagou um modelo de crew ou um skill do catálogo?** Ele volta no `update`, e a saída diz o
@@ -406,13 +497,14 @@ npx @aksp/opencrew update --check
406
497
  | `/opencrew run <nome>` | Executa o pipeline de uma crew |
407
498
  | `/opencrew list` | Lista todas as suas crews |
408
499
  | `/opencrew edit <nome>` | Modifica uma crew existente |
409
- | `/opencrew repair <nome>` | Conserta o manifesto de uma crew com nomes quebrados |
500
+ | `/opencrew repair <nome>` | Mostra o que falta numa crew que você já tem (formato de cada texto, arquivos do projeto que ela deve ler, proibições que o verificador consegue barrar, nomes dos agentes) e conserta um ponto por vez, com o seu sim e uma cópia `.bak` |
410
501
  | `/opencrew delete <nome>` | Remove uma crew |
411
502
  | `/opencrew skills` | Navega, instala ou remove skills |
412
503
  | `/opencrew install <skill>` | Instala uma skill do catálogo |
413
504
  | `/opencrew settings` | Altera preferências (idioma, tier, Escritório) |
414
505
  | `/opencrew dashboard` | Liga e abre o Escritório ao vivo (a equipe trabalhando, no navegador) |
415
506
  | `/opencrew dashboard off` | Desliga o Escritório |
507
+ | `/opencrew documento <arquivo>` | Transforma um texto (`.md` ou `.txt`) em documento Word, com o papel timbrado do projeto |
416
508
  | `/opencrew show-company` | Mostra o perfil da empresa |
417
509
  | `/opencrew edit-company` | Reconfigura o perfil da empresa |
418
510
  | `/opencrew help` | Mostra a lista de comandos |
@@ -425,7 +517,7 @@ npx @aksp/opencrew update --check
425
517
  | `npx @aksp/opencrew@latest update` | Atualiza o framework |
426
518
  | `npx @aksp/opencrew update --check` (ou `--dry-run`) | Verifica se há update disponível, sem alterar nada |
427
519
  | `npx @aksp/opencrew upgrade` | Atalho para `update` |
428
- | `npx @aksp/opencrew init --ide=claude-code,cursor` | Instala só as pontes das IDEs indicadas |
520
+ | `npx @aksp/opencrew init --ide=claude-code,cursor` | Instala só as pontes das IDEs indicadas (também com `--yes`) |
429
521
  | `npx @aksp/opencrew init --all` (ou `-y`) | Instala as pontes de todas as IDEs |
430
522
  | `npx @aksp/opencrew@latest init --repair-bridges` | Regrava as pontes das IDEs já instaladas num workspace existente (`--ide=a,b`: só as indicadas; `--all`: as 9) |
431
523
  | `npx @aksp/opencrew version` | Mostra a versão instalada |
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aksp/opencrew",
3
- "version": "1.9.0",
3
+ "version": "1.11.0",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
@@ -148,14 +148,13 @@ async function workspaceState(target) {
148
148
  }
149
149
 
150
150
  /**
151
- * Decide which IDEs to configure. --all / --yes → every IDE; --ide → validated list;
152
- * nothing → `fallback()` (the interactive prompt; in repair mode, the detection). Throws
153
- * UsageError if --ide names no valid IDE.
151
+ * Decide which IDEs to configure. --ide → validated list, whatever comes with it; without it,
152
+ * --all / --yes → every IDE; nothing → `fallback()` (the interactive prompt; in repair mode, the
153
+ * detection). Throws UsageError if --ide names no valid IDE.
154
154
  */
155
155
  async function resolveIdes(opts, fallback) {
156
- if (opts.all || opts.yes) return allIdeIds();
157
156
  const ids = normalizeIdes(opts.ide);
158
- if (!ids) return fallback();
157
+ if (!ids) return opts.all || opts.yes ? allIdeIds() : fallback();
159
158
  const invalid = ids.filter((id) => !ideById(id));
160
159
  const valid = ids.filter((id) => ideById(id));
161
160
  if (!valid.length) {
@@ -88,6 +88,7 @@ async function apply(target, version) {
88
88
  const done = { unreadable, ...(await refreshBridges(ctx)) };
89
89
  done.mcp = await updateMcp(ctx, await readFile(tpl('.mcp.json')));
90
90
  done.leftovers = await findLeftovers(target);
91
+ done.hasCrew = await hasCrew(target);
91
92
  say(updateSummary(ctx, done));
92
93
 
93
94
  await writeManifest(target, version, ctx.files);
@@ -97,6 +98,13 @@ async function apply(target, version) {
97
98
  log(c.dim(`${UNTOUCHED}\n`));
98
99
  }
99
100
 
101
+ /** Is there a crew of the user's? A folder of `crews/` with `crew.yaml` (the templates have none). Only looks. */
102
+ async function hasCrew(target) {
103
+ const dirs = await fs.readdir(path.join(target, 'crews'), { withFileTypes: true }).catch(() => []);
104
+ const found = await Promise.all(dirs.filter((d) => d.isDirectory()).map((d) => exists(path.join(target, 'crews', d.name, 'crew.yaml'))));
105
+ return found.includes(true);
106
+ }
107
+
100
108
  /** @returns what `deliverTree` did to each crew template (only the missing ones are written). */
101
109
  async function refreshFramework(ctx) {
102
110
  const dest = (...p) => path.join(ctx.target, ...p);
package/src/lib/resumo.js CHANGED
@@ -18,6 +18,9 @@ export const ALREADY_INSTALLED = 'Para atualizar, rode `npx @aksp/opencrew@lates
18
18
  /** `update` over `_opencrew/core` with no version stamp (spec U3a-2, rule 31). */
19
19
  export const INTERRUPTED = 'A instalação anterior não terminou. Rode `npx @aksp/opencrew init` para concluir.';
20
20
 
21
+ /** After an `update`, when the project has at least one crew (spec U4-1, decision 7). */
22
+ export const REPAIR_HINT = 'Para levar as melhorias novas às crews que você já tem, peça na sua IDE: /opencrew repair';
23
+
21
24
  const NO_BRIDGES = 'Nenhuma ponte de IDE encontrada: nada a atualizar. Para criar a ponte de uma IDE: `npx @aksp/opencrew@latest init --repair-bridges --ide=<id>`.';
22
25
  const LEAK_REMOVED = 'CLAUDE.md: removi a seção de STATUS.md que as versões 1.4.0 e 1.4.1 gravaram por engano.';
23
26
  const FIRST_PROTECTED = 'Primeira atualização com proteção: sem registro anterior, guardamos tudo o que diferia. Daqui em diante, só o que você editar.';
@@ -112,7 +115,7 @@ function copyLines(ctx, unreadable) {
112
115
  * @param {object} done what each step returned: `agents` and `gitignore` (deliverBlock; `agents`
113
116
  * is null when a pre-1.3 AGENTS.md was migrated), `ides` (detected), `bridges` (deliverBridges),
114
117
  * `leak` (the STATUS.md section left CLAUDE.md's block), `mcp` (updateMcp), `leftovers`
115
- * (findLeftovers) and `unreadable` (manifest)
118
+ * (findLeftovers), `unreadable` (manifest) and `hasCrew` (a folder of `crews/` with `crew.yaml`)
116
119
  * @returns {Array<[Function, string]>} lines for `say`
117
120
  */
118
121
  export function updateSummary(ctx, done) {
@@ -124,5 +127,6 @@ export function updateSummary(ctx, done) {
124
127
  ...mcpLines(ctx, done.mcp),
125
128
  ...leftoverLines(done.leftovers, done.mcp),
126
129
  ...copyLines(ctx, done.unreadable),
130
+ ...(done.hasCrew ? [[info, REPAIR_HINT]] : []),
127
131
  ];
128
132
  }
@@ -10,6 +10,8 @@ On activation, perform these steps IN ORDER:
10
10
  1. Read the company context file: `{project-root}/_opencrew/_memory/company.md`
11
11
  2. Read the preferences file: `{project-root}/_opencrew/_memory/preferences.md`
12
12
  3. Check if company.md is empty or contains only the template — if so, trigger ONBOARDING
13
+ (except for `/opencrew documento` and the request to deliver a run that already ended: neither
14
+ uses the company context)
13
15
  4. Otherwise, display the MAIN MENU
14
16
 
15
17
  ## Onboarding Flow (first time only)
@@ -36,7 +38,10 @@ numbered list and ask the user to reply with a number.
36
38
  **Primary menu:** Create a new crew · Run an existing crew · My crews ·
37
39
  More options
38
40
 
39
- **More options:** Skills · Company profile · Settings & Help
41
+ **More options:** Skills · Documento Word · Company profile · Settings & Help
42
+
43
+ "Documento Word" turns a text file of the project into a Word document: load
44
+ `_opencrew/core/prompts/documento.prompt.md`, which asks for the file.
40
45
 
41
46
  ## Command Routing
42
47
 
@@ -46,11 +51,11 @@ Route input to the matching action:
46
51
  |---------------|--------|
47
52
  | `/opencrew` or `/opencrew menu` | Show main menu |
48
53
  | `/opencrew help` | Show help text |
49
- | `/opencrew create <description>` | Load Architect → Create Crew flow |
50
- | `/opencrew list` | List all crews in `crews/` |
54
+ | `/opencrew create <description>` | Load the Architect (`_opencrew/core/architect.agent.yaml`) → Create Crew flow: one prompt per phase, listed there |
55
+ | `/opencrew list` | List all crews in `crews/` (a folder without `crew.yaml` is not a crew) |
51
56
  | `/opencrew run <name>` | Load Pipeline Runner → Execute crew |
52
- | `/opencrew edit <name> <changes>` | Load Architect → Edit Crew flow |
53
- | `/opencrew repair <name>` | Load `_opencrew/core/prompts/repair.prompt.md` → fix agent names / rebuild crew-party.csv |
57
+ | `/opencrew edit <name> <changes>` | Load the Architect → Edit Crew flow |
58
+ | `/opencrew repair <name>` | Load `_opencrew/core/prompts/repair.prompt.md` → show what an existing crew is missing and fix one point at a time, each with a `.bak` copy |
54
59
  | `/opencrew skills` | Load Skills Engine → Show skills menu |
55
60
  | `/opencrew install <name>` | Install a skill from the catalog |
56
61
  | `/opencrew uninstall <name>` | Remove an installed skill |
@@ -60,6 +65,7 @@ Route input to the matching action:
60
65
  | `/opencrew settings` | Show/edit preferences.md |
61
66
  | `/opencrew dashboard` | Turn on and open the Escritório (live view) — see "Dashboard (Optional)" |
62
67
  | `/opencrew dashboard off` | Turn the Escritório off — see "Dashboard (Optional)" |
68
+ | `/opencrew documento <arquivo>` | Load `_opencrew/core/prompts/documento.prompt.md` → turn that text file (`.md` or `.txt`) into a Word document (`.docx`) |
63
69
  | `/opencrew reset` | Confirm and reset all configuration |
64
70
  | Request to deliver a run that already ended ("monte a entrega da execução …") | Load `_opencrew/core/prompts/entrega.prompt.md` → build the `entrega/` folder of that run |
65
71
  | Request to change where the delivery is copied ("muda a pasta de entrega", "não quero mais cópia", "volta a copiar") | Load `_opencrew/core/prompts/entrega.prompt.md` → "Changing the folder later" |
@@ -69,7 +75,8 @@ Route input to the matching action:
69
75
 
70
76
  When a specific agent needs to be activated:
71
77
 
72
- 1. Read the agent's `.agent.md` file completely
78
+ 1. Read the agent's `.agent.md` file completely (the Architect is the exception: it lives in
79
+ `_opencrew/core/architect.agent.yaml`)
73
80
  2. Adopt the agent's persona (role, identity, communication_style, principles)
74
81
  3. Follow the agent's menu/workflow instructions
75
82
  4. When the agent's task is complete, return to the opencrew main context
@@ -124,10 +131,13 @@ and touch nothing else: stop no process, delete no file.
124
131
  see `_opencrew/core/runner.pipeline.md`
125
132
  - Exception: the delivery folder (`entrega/`) — its folder names, file names and the `LEIA-ME.md`
126
133
  are written by a script in fixed PT-BR, whatever the user's language
134
+ - Exception: the report of the Word document script (`documento.mjs`) and the "Página X de Y" of
135
+ the footer it writes are fixed PT-BR too
127
136
 
128
137
  ## Critical Rules
129
138
 
130
- - NEVER skip the onboarding if company.md is not configured
139
+ - NEVER skip the onboarding if company.md is not configured (the Word document route is the only
140
+ exception: it does not use the company context)
131
141
  - ALWAYS load company context before running any crew
132
142
  - ALWAYS present checkpoints to the user — never skip them
133
143
  - ALWAYS save outputs to the crew's output directory
@@ -1 +1 @@
1
- 1.9.0
1
+ 1.11.0
@@ -57,24 +57,30 @@ agent:
57
57
  create-crew: |
58
58
  ## Create Crew
59
59
 
60
- The create flow is now handled by the phased orchestration system.
61
- See the SKILL.md entry point for the full phased flow:
62
- Discovery → Investigation → Design → Template Selection (optional) → Build
63
-
64
- Each phase is a separate prompt in `_opencrew/core/prompts/`:
65
- - `discovery.prompt.md` — Phase 1: Intelligent wizard
66
- - `sherlock-*.md` — Phase 2: Investigation (optional)
67
- - `design.prompt.md` — Phase 3: Crew architecture (includes optional Phase H.5: Template Selection)
68
- - `build.prompt.md` — Phase 4: File generation + validation
69
-
70
- The SKILL.md orchestrator dispatches each phase as a subagent.
60
+ Creating a crew takes four phases, in this order. Each phase is one prompt: read it
61
+ completely when its turn comes, follow it to the end, and only then load the next one.
62
+
63
+ 1. `_opencrew/core/prompts/discovery.prompt.md` — Discovery: the questions; ends by
64
+ writing `crews/{code}/_build/discovery.yaml`
65
+ 2. `_opencrew/core/prompts/sherlock-shared.md` — Investigation: ONLY when the discovery
66
+ ended with the investigation enabled; it names the platform prompt to load with it
67
+ 3. `_opencrew/core/prompts/design.prompt.md` — Design: agents and pipeline (includes the
68
+ optional template selection); ends by writing `crews/{code}/_build/design.yaml`
69
+ 4. `_opencrew/core/prompts/build.prompt.md` — Build: writes the crew files, in the format
70
+ of `_opencrew/core/formato-da-crew.md`, and validates them
71
+
72
+ If your IDE can run a phase as a subagent, you may; otherwise run the phases one after
73
+ the other in this conversation. Never skip a phase and never write crew files before
74
+ the Build.
71
75
 
72
76
  edit-crew: |
73
77
  ## Edit Crew Workflow
74
78
 
75
- 1. Ask which crew to edit (list available crews if not specified).
79
+ 1. Ask which crew to edit (list available crews if not specified; a folder without
80
+ crew.yaml is not a crew).
76
81
  If only 1 crew exists, add "Cancel" as a second option. If 0 crews, inform user directly.
77
- 2. Read the crew's crew.yaml to understand current structure
82
+ 2. Read the crew's crew.yaml to understand current structure (the format of the crew
83
+ files is in `_opencrew/core/formato-da-crew.md`)
78
84
  3. Ask what changes the user wants
79
85
  4. **If the user asks to edit/define/change the visual template or identity of a design agent:**
80
86
  - Read and follow `skills/template-designer/SKILL.md`
@@ -86,8 +92,10 @@ agent:
86
92
  list-crews: |
87
93
  ## List Crews Workflow
88
94
 
89
- 1. Read all directories in crews/
90
- 2. For each, read crew.yaml to get name, description, icon, agent count
95
+ 1. Read all directories in crews/. A folder without crew.yaml is not a crew (the
96
+ template folders installed with the product): leave it out
97
+ 2. For each crew, read crew.yaml to get name, description and icon (inside `crew:` or,
98
+ in older crews, loose at the top level) and count the agents in crew-party.csv
91
99
  3. Present as a formatted list:
92
100
  ```
93
101
  Your Crews:
@@ -102,7 +110,8 @@ agent:
102
110
  delete-crew: |
103
111
  ## Delete Crew Workflow
104
112
 
105
- 1. Ask which crew to delete (list available if not specified).
113
+ 1. Ask which crew to delete (list available if not specified; a folder without
114
+ crew.yaml is not a crew).
106
115
  If only 1 crew exists, add "Cancel" as a second option. If 0 crews, inform user directly.
107
116
  2. Show crew details (name, agents, output count)
108
117
  3. Confirm deletion with explicit "Are you sure?" presented as a numbered list (1. Yes, delete / 2. No, cancel)
@@ -114,3 +114,8 @@ catalog:
114
114
  name: "WhatsApp Broadcast"
115
115
  whenToUse: "Creating agents that produce WhatsApp broadcast messages or conversational marketing content."
116
116
  file: whatsapp-broadcast.md
117
+
118
+ - id: documento-oficial
119
+ name: "Documento oficial (Word)"
120
+ whenToUse: "Creating agents that produce a document to print, sign or file (minutes, official letter, statement, contract, formal report) that becomes a Word file."
121
+ file: documento-oficial.md