@dynamicworks/br-openspec 1.3.1 → 2.0.1

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 (72) hide show
  1. package/LICENSE +22 -22
  2. package/README.md +210 -210
  3. package/README.pt-BR.md +212 -212
  4. package/bin/openspec.js +2 -2
  5. package/dist/commands/feedback.js +4 -4
  6. package/dist/commands/schema.js +60 -60
  7. package/dist/core/artifact-graph/instruction-loader.js +4 -4
  8. package/dist/core/artifact-graph/schema.js +5 -4
  9. package/dist/core/command-generation/adapters/amazon-q.js +5 -5
  10. package/dist/core/command-generation/adapters/antigravity.js +5 -5
  11. package/dist/core/command-generation/adapters/auggie.js +6 -6
  12. package/dist/core/command-generation/adapters/bob.js +6 -6
  13. package/dist/core/command-generation/adapters/claude.js +8 -8
  14. package/dist/core/command-generation/adapters/cline.js +5 -5
  15. package/dist/core/command-generation/adapters/codebuddy.js +7 -7
  16. package/dist/core/command-generation/adapters/codex.js +6 -6
  17. package/dist/core/command-generation/adapters/continue.js +7 -7
  18. package/dist/core/command-generation/adapters/costrict.js +6 -6
  19. package/dist/core/command-generation/adapters/crush.js +8 -8
  20. package/dist/core/command-generation/adapters/cursor.js +8 -8
  21. package/dist/core/command-generation/adapters/factory.js +6 -6
  22. package/dist/core/command-generation/adapters/gemini.js +5 -5
  23. package/dist/core/command-generation/adapters/github-copilot.js +5 -5
  24. package/dist/core/command-generation/adapters/iflow.js +8 -8
  25. package/dist/core/command-generation/adapters/junie.js +5 -5
  26. package/dist/core/command-generation/adapters/kilocode.js +1 -1
  27. package/dist/core/command-generation/adapters/kiro.js +5 -5
  28. package/dist/core/command-generation/adapters/lingma.js +8 -8
  29. package/dist/core/command-generation/adapters/opencode.js +5 -5
  30. package/dist/core/command-generation/adapters/pi.js +5 -5
  31. package/dist/core/command-generation/adapters/qoder.js +8 -8
  32. package/dist/core/command-generation/adapters/qwen.js +5 -5
  33. package/dist/core/command-generation/adapters/roocode.js +5 -5
  34. package/dist/core/command-generation/adapters/windsurf.js +8 -8
  35. package/dist/core/completions/factory.js +3 -2
  36. package/dist/core/completions/generators/bash-generator.js +41 -41
  37. package/dist/core/completions/generators/fish-generator.js +7 -7
  38. package/dist/core/completions/generators/powershell-generator.js +29 -29
  39. package/dist/core/completions/generators/zsh-generator.js +33 -33
  40. package/dist/core/completions/installers/fish-installer.js +13 -12
  41. package/dist/core/completions/installers/powershell-installer.js +16 -17
  42. package/dist/core/completions/installers/zsh-installer.js +1 -1
  43. package/dist/core/completions/templates/bash-templates.js +18 -18
  44. package/dist/core/completions/templates/fish-templates.js +32 -32
  45. package/dist/core/completions/templates/powershell-templates.js +19 -19
  46. package/dist/core/completions/templates/zsh-templates.js +30 -30
  47. package/dist/core/parsers/change-parser.js +7 -6
  48. package/dist/core/project-config.js +12 -13
  49. package/dist/core/shared/skill-generation.js +12 -12
  50. package/dist/core/specs-apply.js +37 -38
  51. package/dist/core/templates/workflows/apply-change.js +288 -288
  52. package/dist/core/templates/workflows/archive-change.js +251 -251
  53. package/dist/core/templates/workflows/bulk-archive-change.js +472 -472
  54. package/dist/core/templates/workflows/continue-change.js +212 -212
  55. package/dist/core/templates/workflows/explore.js +443 -443
  56. package/dist/core/templates/workflows/feedback.js +97 -97
  57. package/dist/core/templates/workflows/ff-change.js +178 -178
  58. package/dist/core/templates/workflows/propose.js +196 -196
  59. package/dist/core/templates/workflows/sync-specs.js +252 -252
  60. package/dist/core/templates/workflows/upstream-sync.js +93 -93
  61. package/dist/core/tools-manager.js +2 -2
  62. package/dist/messages/index.d.ts +111 -0
  63. package/dist/messages/index.js +1115 -977
  64. package/dist/utils/change-metadata.js +8 -7
  65. package/dist/utils/change-utils.js +12 -11
  66. package/package.json +82 -84
  67. package/schemas/spec-driven/schema.yaml +153 -153
  68. package/schemas/spec-driven/templates/design.md +19 -19
  69. package/schemas/spec-driven/templates/proposal.md +23 -23
  70. package/schemas/spec-driven/templates/spec.md +8 -8
  71. package/schemas/spec-driven/templates/tasks.md +9 -9
  72. package/scripts/postinstall.js +83 -83
@@ -8,91 +8,91 @@ export function getUpstreamSyncSkillTemplate() {
8
8
  return {
9
9
  name: 'openspec-upstream-sync',
10
10
  description: 'Sincroniza o BR-OpenSpec com o upstream, traduz novas mensagens e atualiza a documentação em português brasileiro. Use quando houver atualizações no repositório original que precisem ser incorporadas ao fork.',
11
- instructions: `Sincronize o BR-OpenSpec com o repositório upstream e traduza o conteúdo novo para português brasileiro.
12
-
13
- **Entrada**: O usuário indica que há atualizações no upstream ou pede para sincronizar.
14
-
15
- **Pré-requisitos**
16
- - O remote upstream deve estar configurado:
17
- \`git remote add upstream https://github.com/<upstream-owner>/<upstream-repo>.git\` (se ainda não estiver)
18
-
19
- **Passos**
20
-
21
- 1. **Verifique o estado atual**
22
- \`\`\`bash
23
- git fetch upstream
24
- git log --oneline HEAD..upstream/main --no-merges | head -20
25
- \`\`\`
26
- Isso mostra os commits que serão incorporados.
27
-
28
- 2. **Crie uma branch para o sync**
29
- \`\`\`bash
30
- git checkout -b sync/upstream-$(date +%Y%m%d)
31
- \`\`\`
32
-
33
- 3. **Faça o merge do upstream**
34
- \`\`\`bash
35
- git merge upstream/main --no-edit
36
- \`\`\`
37
- - Se houver conflitos em \`src/messages/index.ts\`, resolva mantendo as mensagens em português brasileiro e incorporando as novas chaves em inglês.
38
- - Para outros arquivos, resolva normalmente preservando as adaptações do BR-OpenSpec.
39
-
40
- 4. **Identifique novas strings de usuário**
41
- Após o merge, encontre strings hardcoded em inglês que ainda não estão no catálogo:
42
- \`\`\`bash
43
- git diff upstream/main..HEAD --name-only | grep "^src/"
44
- \`\`\`
45
- Busque por novas ocorrências de \`console.log\`, \`console.error\`, \`console.warn\`, \`.description(\`, \`message:\` em arquivos modificados.
46
-
47
- 5. **Atualize o catálogo de mensagens**
48
- - Adicione novas chaves em \`src/messages/index.ts\` na seção apropriada
49
- - Traduza os valores para português brasileiro
50
- - Mantenha a organização por domínio (CLI_DESCRIPTIONS, CLI_MESSAGES, CHANGE_MESSAGES, etc.)
51
- - Se uma seção nova for necessária, crie-a com o padrão existente
52
-
53
- 6. **Substitua strings hardcoded nos arquivos fonte**
54
- - Substitua cada string em inglês recém-adicionada pela referência ao catálogo
55
- - Adicione o import necessário de \`../messages/index.js\` (ou caminho relativo apropriado)
56
- - NÃO traduza: nomes de variáveis, comentários de código, identificadores técnicos, nomes de comandos CLI
57
-
58
- 7. **Atualize menções ao nome do projeto**
59
- - Novos textos podem referenciar "OpenSpec" em vez de "BR-OpenSpec"
60
- - Substitua referências ao nome do projeto em mensagens de usuário: \`s/\\bOpenSpec\\b/BR-OpenSpec/g\`
61
- - NÃO altere: \`openspec\` (comando), \`openspec-\` (prefixos), \`OPENSPEC_\` (constantes), URLs
62
-
63
- 8. **Sincronize a documentação traduzida**
64
- Compare os arquivos de documentação em inglês com seus correspondentes em pt-BR:
65
- - \`README.md\` ↔ \`README.pt-BR.md\`
66
- - \`docs/*.md\` ↔ \`docs/pt-BR/*.md\`
67
-
68
- Para cada arquivo modificado pelo upstream:
69
- - Aplique as mesmas mudanças estruturais nos correspondentes pt-BR
70
- - Traduza novos trechos adicionados pelo upstream
71
- - **PRESERVE adições pontuais do fork** (ex: justificativa da criação do fork, referências específicas ao BR-OpenSpec, links para recursos em pt-BR)
72
- - Substitua "OpenSpec" por "BR-OpenSpec" quando o texto se referir ao projeto que o usuário está usando
73
- - Mantenha nomes técnicos inalterados: \`openspec\`, \`.openspec.yaml\`, \`openspec/\`, skills \`openspec-*\`
74
-
75
- 9. **Atualize os testes**
76
- - Rode \`pnpm test\` para identificar testes que quebraram devido às traduções
77
- - Atualize as expectativas de strings de \`test/\` para refletir as mensagens em português
78
- - NÃO altere a lógica dos testes — apenas as strings de comparação
79
-
80
- 10. **Valide o build**
81
- \`\`\`bash
82
- pnpm run build
83
- pnpm exec tsc --noEmit
84
- pnpm lint
85
- \`\`\`
86
-
87
- 11. **Resumo do sync**
88
- Informe ao usuário:
89
- - Quais commits foram incorporados
90
- - Quais arquivos foram modificados
91
- - Quantas novas mensagens foram traduzidas
92
- - Quais arquivos de documentação foram sincronizados
93
- - Se há testes ainda falhando (e por quê)
94
-
95
- **IMPORTANTE**: NUNCA traduza código técnico (nomes de variáveis, funções, constantes) ou comentários de documentação de API. Apenas mensagens exibidas ao usuário final.
11
+ instructions: `Sincronize o BR-OpenSpec com o repositório upstream e traduza o conteúdo novo para português brasileiro.
12
+
13
+ **Entrada**: O usuário indica que há atualizações no upstream ou pede para sincronizar.
14
+
15
+ **Pré-requisitos**
16
+ - O remote upstream deve estar configurado:
17
+ \`git remote add upstream https://github.com/<upstream-owner>/<upstream-repo>.git\` (se ainda não estiver)
18
+
19
+ **Passos**
20
+
21
+ 1. **Verifique o estado atual**
22
+ \`\`\`bash
23
+ git fetch upstream
24
+ git log --oneline HEAD..upstream/main --no-merges | head -20
25
+ \`\`\`
26
+ Isso mostra os commits que serão incorporados.
27
+
28
+ 2. **Crie uma branch para o sync**
29
+ \`\`\`bash
30
+ git checkout -b sync/upstream-$(date +%Y%m%d)
31
+ \`\`\`
32
+
33
+ 3. **Faça o merge do upstream**
34
+ \`\`\`bash
35
+ git merge upstream/main --no-edit
36
+ \`\`\`
37
+ - Se houver conflitos em \`src/messages/index.ts\`, resolva mantendo as mensagens em português brasileiro e incorporando as novas chaves em inglês.
38
+ - Para outros arquivos, resolva normalmente preservando as adaptações do BR-OpenSpec.
39
+
40
+ 4. **Identifique novas strings de usuário**
41
+ Após o merge, encontre strings hardcoded em inglês que ainda não estão no catálogo:
42
+ \`\`\`bash
43
+ git diff upstream/main..HEAD --name-only | grep "^src/"
44
+ \`\`\`
45
+ Busque por novas ocorrências de \`console.log\`, \`console.error\`, \`console.warn\`, \`.description(\`, \`message:\` em arquivos modificados.
46
+
47
+ 5. **Atualize o catálogo de mensagens**
48
+ - Adicione novas chaves em \`src/messages/index.ts\` na seção apropriada
49
+ - Traduza os valores para português brasileiro
50
+ - Mantenha a organização por domínio (CLI_DESCRIPTIONS, CLI_MESSAGES, CHANGE_MESSAGES, etc.)
51
+ - Se uma seção nova for necessária, crie-a com o padrão existente
52
+
53
+ 6. **Substitua strings hardcoded nos arquivos fonte**
54
+ - Substitua cada string em inglês recém-adicionada pela referência ao catálogo
55
+ - Adicione o import necessário de \`../messages/index.js\` (ou caminho relativo apropriado)
56
+ - NÃO traduza: nomes de variáveis, comentários de código, identificadores técnicos, nomes de comandos CLI
57
+
58
+ 7. **Atualize menções ao nome do projeto**
59
+ - Novos textos podem referenciar "OpenSpec" em vez de "BR-OpenSpec"
60
+ - Substitua referências ao nome do projeto em mensagens de usuário: \`s/\\bOpenSpec\\b/BR-OpenSpec/g\`
61
+ - NÃO altere: \`openspec\` (comando), \`openspec-\` (prefixos), \`OPENSPEC_\` (constantes), URLs
62
+
63
+ 8. **Sincronize a documentação traduzida**
64
+ Compare os arquivos de documentação em inglês com seus correspondentes em pt-BR:
65
+ - \`README.md\` ↔ \`README.pt-BR.md\`
66
+ - \`docs/*.md\` ↔ \`docs/pt-BR/*.md\`
67
+
68
+ Para cada arquivo modificado pelo upstream:
69
+ - Aplique as mesmas mudanças estruturais nos correspondentes pt-BR
70
+ - Traduza novos trechos adicionados pelo upstream
71
+ - **PRESERVE adições pontuais do fork** (ex: justificativa da criação do fork, referências específicas ao BR-OpenSpec, links para recursos em pt-BR)
72
+ - Substitua "OpenSpec" por "BR-OpenSpec" quando o texto se referir ao projeto que o usuário está usando
73
+ - Mantenha nomes técnicos inalterados: \`openspec\`, \`.openspec.yaml\`, \`openspec/\`, skills \`openspec-*\`
74
+
75
+ 9. **Atualize os testes**
76
+ - Rode \`pnpm test\` para identificar testes que quebraram devido às traduções
77
+ - Atualize as expectativas de strings de \`test/\` para refletir as mensagens em português
78
+ - NÃO altere a lógica dos testes — apenas as strings de comparação
79
+
80
+ 10. **Valide o build**
81
+ \`\`\`bash
82
+ pnpm run build
83
+ pnpm exec tsc --noEmit
84
+ pnpm lint
85
+ \`\`\`
86
+
87
+ 11. **Resumo do sync**
88
+ Informe ao usuário:
89
+ - Quais commits foram incorporados
90
+ - Quais arquivos foram modificados
91
+ - Quantas novas mensagens foram traduzidas
92
+ - Quais arquivos de documentação foram sincronizados
93
+ - Se há testes ainda falhando (e por quê)
94
+
95
+ **IMPORTANTE**: NUNCA traduza código técnico (nomes de variáveis, funções, constantes) ou comentários de documentação de API. Apenas mensagens exibidas ao usuário final.
96
96
  `,
97
97
  };
98
98
  }
@@ -102,14 +102,14 @@ export function getOpsxUpstreamSyncCommandTemplate() {
102
102
  description: 'Sincroniza com upstream e traduz novidades',
103
103
  category: 'maintenance',
104
104
  tags: ['sync', 'upstream', 'i18n'],
105
- content: `Sincronize o BR-OpenSpec com o upstream.
106
-
107
- 1. Verifique atualizações: \`git fetch upstream && git log --oneline HEAD..upstream/main | head -10\`
108
- 2. Se houver commits, crie branch e faça merge
109
- 3. Identifique e traduza novas strings de usuário
110
- 4. Atualize o catálogo em \`src/messages/index.ts\`
111
- 5. Sincronize a documentação em pt-BR preservando adições do fork
112
- 6. Valide: \`pnpm run build && pnpm test\`
105
+ content: `Sincronize o BR-OpenSpec com o upstream.
106
+
107
+ 1. Verifique atualizações: \`git fetch upstream && git log --oneline HEAD..upstream/main | head -10\`
108
+ 2. Se houver commits, crie branch e faça merge
109
+ 3. Identifique e traduza novas strings de usuário
110
+ 4. Atualize o catálogo em \`src/messages/index.ts\`
111
+ 5. Sincronize a documentação em pt-BR preservando adições do fork
112
+ 6. Valide: \`pnpm run build && pnpm test\`
113
113
  7. Resuma as mudanças para o usuário`,
114
114
  };
115
115
  }
@@ -4,7 +4,7 @@
4
4
  * Encapsulates adding and removing IDE/Code Agent OpenSpec configuration files.
5
5
  * Shared by `openspec init` (via InitCommand) and `openspec tools`.
6
6
  */
7
- import { TOOLS_MESSAGES } from '../messages/index.js';
7
+ import { TOOLS_MESSAGES, TOOLS_MANAGER_MESSAGES } from '../messages/index.js';
8
8
  import path from 'path';
9
9
  import * as fs from 'fs';
10
10
  import { createRequire } from 'module';
@@ -100,7 +100,7 @@ export async function removeOpenSpecCommandFiles(projectPath, toolId) {
100
100
  */
101
101
  export async function addTool(projectPath, tool) {
102
102
  if (!tool.skillsDir) {
103
- throw new Error(`Tool '${tool.value}' does not support skill generation.`);
103
+ throw new Error(TOOLS_MANAGER_MESSAGES.toolDoesNotSupportSkills(tool.value));
104
104
  }
105
105
  const globalConfig = getGlobalConfig();
106
106
  const profile = globalConfig.profile ?? 'core';
@@ -607,6 +607,35 @@ export declare const COMPLETION_MESSAGES: {
607
607
  warningCouldNotRemoveLegacy: (path: string, err: string) => string;
608
608
  powershellCompletionHeader: string;
609
609
  powershellCompletionNote: string;
610
+ fishAlreadyInstalled: string;
611
+ fishAlreadyInstalledDetail: string;
612
+ fishAutoLoadsHint: string;
613
+ fishUpdatedWithBackup: string;
614
+ fishUpdated: string;
615
+ fishInstalled: string;
616
+ fishAutoLoadsDir: string;
617
+ fishAvailableImmediately: string;
618
+ fishFailedToInstall: (error: string) => string;
619
+ fishNotInstalled: string;
620
+ fishUninstalled: string;
621
+ fishFailedToUninstall: (error: string) => string;
622
+ powershellUtf16BEUnsupported: string;
623
+ powershellAlreadyInstalled: string;
624
+ powershellAlreadyInstalledDetail: string;
625
+ powershellAlreadyInstalledHint: string;
626
+ powershellUpdatedWithBackup: string;
627
+ powershellUpdated: string;
628
+ powershellInstalledWithProfile: string;
629
+ powershellInstalled: string;
630
+ powershellFailedToInstall: (error: string) => string;
631
+ powershellScriptInstalled: string;
632
+ powershellEnableCompletions: (profilePath: string) => string;
633
+ powershellSourceComment: string;
634
+ powershellThenRestart: string;
635
+ powershellNotInstalled: string;
636
+ powershellUninstalled: string;
637
+ powershellFailedToUninstall: (error: string) => string;
638
+ zshNotInstalled: string;
610
639
  };
611
640
  export declare const FEEDBACK_MESSAGES: {
612
641
  submitFeedback: string;
@@ -864,4 +893,86 @@ export declare const VERIFY_CHANGE_TEMPLATE_MESSAGES: {
864
893
  export declare const TELEMETRY_MESSAGES: {
865
894
  firstRunNotice: string;
866
895
  };
896
+ export declare const CHANGE_PARSER_MESSAGES: {
897
+ mustHaveWhySection: string;
898
+ mustHaveWhatChangesSection: string;
899
+ addRequirement: (text: string) => string;
900
+ modifyRequirement: (text: string) => string;
901
+ removeRequirement: (text: string) => string;
902
+ renameRequirement: (from: string, to: string) => string;
903
+ };
904
+ export declare const SPECS_APPLY_MESSAGES: {
905
+ duplicateInSection: (specName: string, section: string, reqName: string) => string;
906
+ duplicateFromInRenamed: (specName: string, reqName: string) => string;
907
+ duplicateToInRenamed: (specName: string, reqName: string) => string;
908
+ renamedModifiedMustReferenceNew: (specName: string, toName: string) => string;
909
+ renamedToCollidesWithAdded: (specName: string, toName: string) => string;
910
+ requirementInMultipleSections: (specName: string, sectionA: string, sectionB: string, reqName: string) => string;
911
+ noDeltaOperations: (capability: string) => string;
912
+ targetSpecNotExists: (specName: string) => string;
913
+ targetSpecStructurallyInvalid: (specName: string, details: string) => string;
914
+ renamedFailedSourceNotFound: (specName: string, reqName: string) => string;
915
+ renamedFailedTargetExists: (specName: string, reqName: string) => string;
916
+ removedFailedNotFound: (specName: string, reqName: string) => string;
917
+ modifiedFailedNotFound: (specName: string, reqName: string) => string;
918
+ modifiedFailedHeaderMismatch: (specName: string, reqName: string) => string;
919
+ addedFailedAlreadyExists: (specName: string, reqName: string) => string;
920
+ applyingChangesTo: (specPath: string) => string;
921
+ wouldApplyChangesTo: (specPath: string) => string;
922
+ countAdded: (n: number) => string;
923
+ countModified: (n: number) => string;
924
+ countRemoved: (n: number) => string;
925
+ countRenamed: (n: number) => string;
926
+ skeletonPurpose: (changeName: string) => string;
927
+ changeNotFound: (changeName: string) => string;
928
+ validationErrorsInRebuiltSpec: (specName: string, errors: string) => string;
929
+ };
930
+ export declare const PROJECT_CONFIG_SUGGEST_MESSAGES: {
931
+ configNotValidYaml: string;
932
+ configFailedToParse: string;
933
+ unknownArtifactId: (artifactId: string, schemaName: string, validIds: string) => string;
934
+ schemaNotFound: (schemaName: string) => string;
935
+ didYouMean: string;
936
+ schemaType: (isBuiltIn: boolean) => "nativo" | "local do projeto";
937
+ availableSchemas: string;
938
+ builtInSchemas: (schemas: string) => string;
939
+ projectLocalSchemas: (schemas: string) => string;
940
+ noProjectLocalSchemas: string;
941
+ fixSuggestion: (invalidName: string) => string;
942
+ };
943
+ export declare const TOOLS_MANAGER_MESSAGES: {
944
+ toolDoesNotSupportSkills: (toolValue: string) => string;
945
+ };
946
+ export declare const ARTIFACT_GRAPH_MESSAGES: {
947
+ invalidSchema: (errors: string) => string;
948
+ duplicateArtifactId: (id: string) => string;
949
+ invalidDependencyReference: (artifactId: string, ref: string) => string;
950
+ cyclicDependency: (cycle: string) => string;
951
+ templateNotFound: (path: string) => string;
952
+ failedToReadTemplate: (error: string) => string;
953
+ artifactNotFound: (artifactId: string, schemaName: string) => string;
954
+ };
955
+ export declare const CHANGE_METADATA_MESSAGES: {
956
+ failedToWriteMetadata: (error: string) => string;
957
+ failedToReadMetadata: (error: string) => string;
958
+ invalidMetadata: (error: string) => string;
959
+ invalidYaml: (error: string) => string;
960
+ unknownSchema: (schema: string, available: string) => string;
961
+ };
962
+ export declare const CHANGE_UTILS_MESSAGES: {
963
+ changeAlreadyExists: (name: string, dir: string) => string;
964
+ nameEmpty: string;
965
+ nameMustBeLowercase: string;
966
+ nameNoSpaces: string;
967
+ nameNoUnderscores: string;
968
+ nameNoStartHyphen: string;
969
+ nameNoEndHyphen: string;
970
+ nameNoConsecutiveHyphens: string;
971
+ nameOnlyAllowedChars: string;
972
+ nameMustStartWithLetter: string;
973
+ nameKebabCase: string;
974
+ };
975
+ export declare const COMPLETIONS_FACTORY_MESSAGES: {
976
+ unsupportedShell: (shell: string) => string;
977
+ };
867
978
  //# sourceMappingURL=index.d.ts.map