specweave 0.28.9 → 0.28.13

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 (58) hide show
  1. package/dist/src/cli/commands/init.d.ts.map +1 -1
  2. package/dist/src/cli/commands/init.js +35 -8
  3. package/dist/src/cli/commands/init.js.map +1 -1
  4. package/dist/src/cli/helpers/init/index.d.ts +2 -0
  5. package/dist/src/cli/helpers/init/index.d.ts.map +1 -1
  6. package/dist/src/cli/helpers/init/index.js +4 -0
  7. package/dist/src/cli/helpers/init/index.js.map +1 -1
  8. package/dist/src/cli/helpers/init/language-selection.d.ts +40 -0
  9. package/dist/src/cli/helpers/init/language-selection.d.ts.map +1 -0
  10. package/dist/src/cli/helpers/init/language-selection.js +281 -0
  11. package/dist/src/cli/helpers/init/language-selection.js.map +1 -0
  12. package/dist/src/cli/helpers/init/repository-setup.d.ts +2 -0
  13. package/dist/src/cli/helpers/init/repository-setup.d.ts.map +1 -1
  14. package/dist/src/cli/helpers/init/repository-setup.js +156 -12
  15. package/dist/src/cli/helpers/init/repository-setup.js.map +1 -1
  16. package/dist/src/cli/helpers/init/translation-config.d.ts +61 -0
  17. package/dist/src/cli/helpers/init/translation-config.d.ts.map +1 -0
  18. package/dist/src/cli/helpers/init/translation-config.js +437 -0
  19. package/dist/src/cli/helpers/init/translation-config.js.map +1 -0
  20. package/dist/src/cli/helpers/init/types.d.ts +33 -0
  21. package/dist/src/cli/helpers/init/types.d.ts.map +1 -1
  22. package/dist/src/core/config/types.d.ts +143 -0
  23. package/dist/src/core/config/types.d.ts.map +1 -1
  24. package/dist/src/core/config/types.js.map +1 -1
  25. package/dist/src/core/repo-structure/repo-id-generator.d.ts +24 -95
  26. package/dist/src/core/repo-structure/repo-id-generator.d.ts.map +1 -1
  27. package/dist/src/core/repo-structure/repo-id-generator.js +31 -223
  28. package/dist/src/core/repo-structure/repo-id-generator.js.map +1 -1
  29. package/dist/src/core/repo-structure/repo-structure-manager.d.ts.map +1 -1
  30. package/dist/src/core/repo-structure/repo-structure-manager.js +12 -46
  31. package/dist/src/core/repo-structure/repo-structure-manager.js.map +1 -1
  32. package/dist/src/sync/sync-coordinator.d.ts +5 -0
  33. package/dist/src/sync/sync-coordinator.d.ts.map +1 -1
  34. package/dist/src/sync/sync-coordinator.js +104 -6
  35. package/dist/src/sync/sync-coordinator.js.map +1 -1
  36. package/dist/src/utils/multi-repo-detector.d.ts +85 -0
  37. package/dist/src/utils/multi-repo-detector.d.ts.map +1 -0
  38. package/dist/src/utils/multi-repo-detector.js +264 -0
  39. package/dist/src/utils/multi-repo-detector.js.map +1 -0
  40. package/package.json +1 -1
  41. package/plugins/specweave/agents/pm/AGENT.md +178 -0
  42. package/plugins/specweave/agents/test-aware-planner/AGENT.md +54 -0
  43. package/plugins/specweave/commands/specweave-increment.md +30 -0
  44. package/plugins/specweave/commands/specweave-save.md +838 -0
  45. package/plugins/specweave/hooks/hooks.json +12 -0
  46. package/plugins/specweave/hooks/lib/update-status-line.sh +9 -1
  47. package/plugins/specweave/hooks/post-increment-completion.sh +4 -3
  48. package/plugins/specweave/hooks/post-increment-planning.sh +95 -51
  49. package/plugins/specweave/hooks/post-metadata-change.sh +18 -4
  50. package/plugins/specweave/hooks/pre-task-completion-edit.sh +355 -0
  51. package/plugins/specweave/lib/hooks/sync-living-docs.js +43 -0
  52. package/plugins/specweave/skills/increment-planner/SKILL.md +252 -2
  53. package/plugins/specweave/skills/spec-generator/SKILL.md +163 -0
  54. package/plugins/specweave/skills/umbrella-repo-detector/SKILL.md +286 -0
  55. package/plugins/specweave-github/hooks/.specweave/logs/hooks-debug.log +18 -0
  56. package/plugins/specweave-infrastructure/skills/hetzner-provisioner/README.md +1 -1
  57. package/plugins/specweave-release/commands/specweave-release-npm.md +14 -22
  58. package/plugins/specweave-release/hooks/.specweave/logs/dora-tracking.log +27 -0
@@ -0,0 +1,437 @@
1
+ /**
2
+ * Translation configuration prompts
3
+ *
4
+ * NOTE: Language selection is now in language-selection.ts (asked first)
5
+ * This module only handles auto-translation scope configuration.
6
+ *
7
+ * CRITICAL: User MUST be asked before enabling translation
8
+ * Translation can ~2x token usage (significant cost impact)
9
+ *
10
+ * @module cli/helpers/init/translation-config
11
+ */
12
+ import * as fs from '../../../utils/fs-native.js';
13
+ import * as path from 'path';
14
+ import chalk from 'chalk';
15
+ import { select, confirm } from '@inquirer/prompts';
16
+ /**
17
+ * Get human-readable language name in native form
18
+ */
19
+ function getLanguageNativeName(code) {
20
+ const names = {
21
+ en: 'English',
22
+ ru: 'Русский',
23
+ es: 'Español',
24
+ zh: '中文',
25
+ de: 'Deutsch',
26
+ fr: 'Français',
27
+ ja: '日本語',
28
+ ko: '한국어',
29
+ pt: 'Português',
30
+ };
31
+ return names[code] || code;
32
+ }
33
+ /**
34
+ * Get translated strings for translation config prompts
35
+ */
36
+ function getTranslationStrings(language) {
37
+ const strings = {
38
+ en: {
39
+ header: '📝 Auto-Translation Configuration',
40
+ subheader: 'Configure automatic translation for your documentation',
41
+ costHeader: 'TRANSLATION COST NOTICE',
42
+ costLine1: 'Enabling translation will approximately DOUBLE token usage:',
43
+ costLine2: '• Each spec.md translation: ~$0.003-0.005',
44
+ costLine3: '• Living docs update: ~$0.002-0.004',
45
+ costLine4: '• GitHub/JIRA issue sync: ~$0.001-0.002',
46
+ costLine5: 'Estimated monthly increase: $0.50-$2.00 (depends on activity)',
47
+ enableQuestion: 'Enable automatic translation?',
48
+ disabled: 'Translation: Disabled',
49
+ manualHint: 'use /specweave:translate manually',
50
+ scopeQuestion: 'What should be auto-translated?',
51
+ scopeAll: 'Everything (specs + living docs + external tools)',
52
+ scopeLivingDocs: 'Living docs only (internal documentation)',
53
+ scopeExternal: 'External sync only (GitHub/JIRA/ADO issues)',
54
+ scopeCustom: 'Let me choose individually',
55
+ customSpecs: 'Translate spec.md, plan.md, tasks.md after creation?',
56
+ customLivingDocs: 'Translate living docs on update?',
57
+ customExternal: 'Translate GitHub/JIRA/ADO issues on sync?',
58
+ summary: 'Translation configured',
59
+ translationEnabled: 'Translation: Enabled (auto)',
60
+ scopeLabel: 'Scope',
61
+ specsLabel: 'Increment specs',
62
+ livingDocsLabel: 'Living docs',
63
+ externalLabel: 'External tools',
64
+ },
65
+ ru: {
66
+ header: '📝 Настройка автоперевода',
67
+ subheader: 'Настройте автоматический перевод документации',
68
+ costHeader: 'УВЕДОМЛЕНИЕ О СТОИМОСТИ ПЕРЕВОДА',
69
+ costLine1: 'Включение перевода примерно УДВОИТ расход токенов:',
70
+ costLine2: '• Каждый перевод spec.md: ~$0.003-0.005',
71
+ costLine3: '• Обновление living docs: ~$0.002-0.004',
72
+ costLine4: '• Синхр. GitHub/JIRA: ~$0.001-0.002',
73
+ costLine5: 'Ориентир. увеличение в месяц: $0.50-$2.00 (зависит от активности)',
74
+ enableQuestion: 'Включить автоматический перевод?',
75
+ disabled: 'Перевод: Отключён',
76
+ manualHint: 'используйте /specweave:translate вручную',
77
+ scopeQuestion: 'Что переводить автоматически?',
78
+ scopeAll: 'Всё (specs + living docs + внешние инструменты)',
79
+ scopeLivingDocs: 'Только living docs (внутренняя документация)',
80
+ scopeExternal: 'Только внешняя синхр. (GitHub/JIRA/ADO issues)',
81
+ scopeCustom: 'Выбрать по отдельности',
82
+ customSpecs: 'Переводить spec.md, plan.md, tasks.md после создания?',
83
+ customLivingDocs: 'Переводить living docs при обновлении?',
84
+ customExternal: 'Переводить GitHub/JIRA/ADO issues при синхронизации?',
85
+ summary: 'Перевод настроен',
86
+ translationEnabled: 'Перевод: Включён (авто)',
87
+ scopeLabel: 'Область',
88
+ specsLabel: 'Спецификации инкрементов',
89
+ livingDocsLabel: 'Living docs',
90
+ externalLabel: 'Внешние инструменты',
91
+ },
92
+ es: {
93
+ header: '📝 Configuración de traducción automática',
94
+ subheader: 'Configure la traducción automática de la documentación',
95
+ costHeader: 'AVISO DE COSTO DE TRADUCCIÓN',
96
+ costLine1: 'Habilitar la traducción aproximadamente DUPLICARÁ el uso de tokens:',
97
+ costLine2: '• Cada traducción de spec.md: ~$0.003-0.005',
98
+ costLine3: '• Actualización de living docs: ~$0.002-0.004',
99
+ costLine4: '• Sincr. GitHub/JIRA: ~$0.001-0.002',
100
+ costLine5: 'Aumento mensual estimado: $0.50-$2.00 (depende de la actividad)',
101
+ enableQuestion: '¿Habilitar traducción automática?',
102
+ disabled: 'Traducción: Deshabilitada',
103
+ manualHint: 'use /specweave:translate manualmente',
104
+ scopeQuestion: '¿Qué se debe traducir automáticamente?',
105
+ scopeAll: 'Todo (specs + living docs + herramientas externas)',
106
+ scopeLivingDocs: 'Solo living docs (documentación interna)',
107
+ scopeExternal: 'Solo sincr. externa (issues de GitHub/JIRA/ADO)',
108
+ scopeCustom: 'Déjame elegir individualmente',
109
+ customSpecs: '¿Traducir spec.md, plan.md, tasks.md después de crear?',
110
+ customLivingDocs: '¿Traducir living docs al actualizar?',
111
+ customExternal: '¿Traducir issues de GitHub/JIRA/ADO al sincronizar?',
112
+ summary: 'Traducción configurada',
113
+ translationEnabled: 'Traducción: Habilitada (auto)',
114
+ scopeLabel: 'Alcance',
115
+ specsLabel: 'Specs de incrementos',
116
+ livingDocsLabel: 'Living docs',
117
+ externalLabel: 'Herramientas externas',
118
+ },
119
+ zh: {
120
+ header: '📝 自动翻译配置',
121
+ subheader: '配置文档的自动翻译',
122
+ costHeader: '翻译费用通知',
123
+ costLine1: '启用翻译将使令牌使用量大约翻倍:',
124
+ costLine2: '• 每个 spec.md 翻译:~$0.003-0.005',
125
+ costLine3: '• Living docs 更新: ~$0.002-0.004',
126
+ costLine4: '• GitHub/JIRA 同步: ~$0.001-0.002',
127
+ costLine5: '预计每月增加:$0.50-$2.00(取决于活动量)',
128
+ enableQuestion: '启用自动翻译?',
129
+ disabled: '翻译:已禁用',
130
+ manualHint: '手动使用 /specweave:translate',
131
+ scopeQuestion: '什么应该自动翻译?',
132
+ scopeAll: '全部(specs + living docs + 外部工具)',
133
+ scopeLivingDocs: '仅 living docs(内部文档)',
134
+ scopeExternal: '仅外部同步(GitHub/JIRA/ADO issues)',
135
+ scopeCustom: '让我单独选择',
136
+ customSpecs: '创建后翻译 spec.md、plan.md、tasks.md?',
137
+ customLivingDocs: '更新时翻译 living docs?',
138
+ customExternal: '同步时翻译 GitHub/JIRA/ADO issues?',
139
+ summary: '翻译已配置',
140
+ translationEnabled: '翻译:已启用(自动)',
141
+ scopeLabel: '范围',
142
+ specsLabel: '增量规范',
143
+ livingDocsLabel: 'Living docs',
144
+ externalLabel: '外部工具',
145
+ },
146
+ de: {
147
+ header: '📝 Auto-Übersetzung Konfiguration',
148
+ subheader: 'Konfigurieren Sie die automatische Übersetzung der Dokumentation',
149
+ costHeader: 'ÜBERSETZUNGSKOSTEN-HINWEIS',
150
+ costLine1: 'Das Aktivieren der Übersetzung wird den Token-Verbrauch ungefähr VERDOPPELN:',
151
+ costLine2: '• Jede spec.md Übersetzung: ~$0.003-0.005',
152
+ costLine3: '• Living docs Update: ~$0.002-0.004',
153
+ costLine4: '• GitHub/JIRA Sync: ~$0.001-0.002',
154
+ costLine5: 'Geschätzte monatliche Erhöhung: $0.50-$2.00 (abhängig von Aktivität)',
155
+ enableQuestion: 'Automatische Übersetzung aktivieren?',
156
+ disabled: 'Übersetzung: Deaktiviert',
157
+ manualHint: 'verwenden Sie /specweave:translate manuell',
158
+ scopeQuestion: 'Was soll automatisch übersetzt werden?',
159
+ scopeAll: 'Alles (specs + living docs + externe Tools)',
160
+ scopeLivingDocs: 'Nur living docs (interne Dokumentation)',
161
+ scopeExternal: 'Nur externe Sync (GitHub/JIRA/ADO issues)',
162
+ scopeCustom: 'Einzeln auswählen',
163
+ customSpecs: 'spec.md, plan.md, tasks.md nach Erstellung übersetzen?',
164
+ customLivingDocs: 'Living docs bei Update übersetzen?',
165
+ customExternal: 'GitHub/JIRA/ADO issues bei Sync übersetzen?',
166
+ summary: 'Übersetzung konfiguriert',
167
+ translationEnabled: 'Übersetzung: Aktiviert (auto)',
168
+ scopeLabel: 'Bereich',
169
+ specsLabel: 'Increment Specs',
170
+ livingDocsLabel: 'Living docs',
171
+ externalLabel: 'Externe Tools',
172
+ },
173
+ fr: {
174
+ header: '📝 Configuration de traduction automatique',
175
+ subheader: 'Configurez la traduction automatique de la documentation',
176
+ costHeader: 'AVIS DE COÛT DE TRADUCTION',
177
+ costLine1: 'L\'activation de la traduction DOUBLERA approximativement l\'utilisation des tokens:',
178
+ costLine2: '• Chaque traduction spec.md: ~$0.003-0.005',
179
+ costLine3: '• Mise à jour living docs: ~$0.002-0.004',
180
+ costLine4: '• Sync GitHub/JIRA: ~$0.001-0.002',
181
+ costLine5: 'Augmentation mensuelle estimée: $0.50-$2.00 (dépend de l\'activité)',
182
+ enableQuestion: 'Activer la traduction automatique?',
183
+ disabled: 'Traduction: Désactivée',
184
+ manualHint: 'utilisez /specweave:translate manuellement',
185
+ scopeQuestion: 'Que faut-il traduire automatiquement?',
186
+ scopeAll: 'Tout (specs + living docs + outils externes)',
187
+ scopeLivingDocs: 'Living docs uniquement (documentation interne)',
188
+ scopeExternal: 'Sync externe uniquement (issues GitHub/JIRA/ADO)',
189
+ scopeCustom: 'Choisir individuellement',
190
+ customSpecs: 'Traduire spec.md, plan.md, tasks.md après création?',
191
+ customLivingDocs: 'Traduire living docs lors de la mise à jour?',
192
+ customExternal: 'Traduire issues GitHub/JIRA/ADO lors de la sync?',
193
+ summary: 'Traduction configurée',
194
+ translationEnabled: 'Traduction: Activée (auto)',
195
+ scopeLabel: 'Portée',
196
+ specsLabel: 'Specs d\'incréments',
197
+ livingDocsLabel: 'Living docs',
198
+ externalLabel: 'Outils externes',
199
+ },
200
+ ja: {
201
+ header: '📝 自動翻訳設定',
202
+ subheader: 'ドキュメントの自動翻訳を設定',
203
+ costHeader: '翻訳コスト通知',
204
+ costLine1: '翻訳を有効にすると、トークン使用量がほぼ2倍になります:',
205
+ costLine2: '• 各 spec.md 翻訳:~$0.003-0.005',
206
+ costLine3: '• Living docs 更新: ~$0.002-0.004',
207
+ costLine4: '• GitHub/JIRA 同期: ~$0.001-0.002',
208
+ costLine5: '推定月額増加:$0.50-$2.00(活動量による)',
209
+ enableQuestion: '自動翻訳を有効にしますか?',
210
+ disabled: '翻訳:無効',
211
+ manualHint: '手動で /specweave:translate を使用',
212
+ scopeQuestion: '何を自動翻訳しますか?',
213
+ scopeAll: 'すべて(specs + living docs + 外部ツール)',
214
+ scopeLivingDocs: 'living docs のみ(内部ドキュメント)',
215
+ scopeExternal: '外部同期のみ(GitHub/JIRA/ADO issues)',
216
+ scopeCustom: '個別に選択',
217
+ customSpecs: '作成後に spec.md, plan.md, tasks.md を翻訳?',
218
+ customLivingDocs: '更新時に living docs を翻訳?',
219
+ customExternal: '同期時に GitHub/JIRA/ADO issues を翻訳?',
220
+ summary: '翻訳が設定されました',
221
+ translationEnabled: '翻訳:有効(自動)',
222
+ scopeLabel: '範囲',
223
+ specsLabel: 'インクリメント仕様',
224
+ livingDocsLabel: 'Living docs',
225
+ externalLabel: '外部ツール',
226
+ },
227
+ ko: {
228
+ header: '📝 자동 번역 구성',
229
+ subheader: '문서의 자동 번역 구성',
230
+ costHeader: '번역 비용 알림',
231
+ costLine1: '번역을 활성화하면 토큰 사용량이 약 2배로 증가합니다:',
232
+ costLine2: '• 각 spec.md 번역: ~$0.003-0.005',
233
+ costLine3: '• Living docs 업데이트: ~$0.002-0.004',
234
+ costLine4: '• GitHub/JIRA 동기화: ~$0.001-0.002',
235
+ costLine5: '예상 월 증가: $0.50-$2.00 (활동량에 따라 다름)',
236
+ enableQuestion: '자동 번역을 활성화하시겠습니까?',
237
+ disabled: '번역: 비활성화됨',
238
+ manualHint: '수동으로 /specweave:translate 사용',
239
+ scopeQuestion: '무엇을 자동 번역하시겠습니까?',
240
+ scopeAll: '전체 (specs + living docs + 외부 도구)',
241
+ scopeLivingDocs: 'living docs만 (내부 문서)',
242
+ scopeExternal: '외부 동기화만 (GitHub/JIRA/ADO issues)',
243
+ scopeCustom: '개별 선택',
244
+ customSpecs: '생성 후 spec.md, plan.md, tasks.md 번역?',
245
+ customLivingDocs: '업데이트 시 living docs 번역?',
246
+ customExternal: '동기화 시 GitHub/JIRA/ADO issues 번역?',
247
+ summary: '번역이 구성되었습니다',
248
+ translationEnabled: '번역: 활성화됨 (자동)',
249
+ scopeLabel: '범위',
250
+ specsLabel: '증분 사양',
251
+ livingDocsLabel: 'Living docs',
252
+ externalLabel: '외부 도구',
253
+ },
254
+ pt: {
255
+ header: '📝 Configuração de tradução automática',
256
+ subheader: 'Configure a tradução automática da documentação',
257
+ costHeader: 'AVISO DE CUSTO DE TRADUÇÃO',
258
+ costLine1: 'Ativar tradução aproximadamente DOBRARÁ o uso de tokens:',
259
+ costLine2: '• Cada tradução de spec.md: ~$0.003-0.005',
260
+ costLine3: '• Atualização de living docs: ~$0.002-0.004',
261
+ costLine4: '• Sinc. GitHub/JIRA: ~$0.001-0.002',
262
+ costLine5: 'Aumento mensal estimado: $0.50-$2.00 (depende da atividade)',
263
+ enableQuestion: 'Habilitar tradução automática?',
264
+ disabled: 'Tradução: Desabilitada',
265
+ manualHint: 'use /specweave:translate manualmente',
266
+ scopeQuestion: 'O que deve ser traduzido automaticamente?',
267
+ scopeAll: 'Tudo (specs + living docs + ferramentas externas)',
268
+ scopeLivingDocs: 'Apenas living docs (documentação interna)',
269
+ scopeExternal: 'Apenas sinc. externa (issues GitHub/JIRA/ADO)',
270
+ scopeCustom: 'Deixe-me escolher individualmente',
271
+ customSpecs: 'Traduzir spec.md, plan.md, tasks.md após criação?',
272
+ customLivingDocs: 'Traduzir living docs ao atualizar?',
273
+ customExternal: 'Traduzir issues GitHub/JIRA/ADO ao sincronizar?',
274
+ summary: 'Tradução configurada',
275
+ translationEnabled: 'Tradução: Habilitada (auto)',
276
+ scopeLabel: 'Escopo',
277
+ specsLabel: 'Specs de incrementos',
278
+ livingDocsLabel: 'Living docs',
279
+ externalLabel: 'Ferramentas externas',
280
+ },
281
+ };
282
+ return strings[language] || strings.en;
283
+ }
284
+ /**
285
+ * Prompt user for translation configuration
286
+ *
287
+ * NOTE: Language is already selected in language-selection.ts
288
+ * This only handles auto-translation scope configuration.
289
+ *
290
+ * CRITICAL: Shows cost warning before enabling translation
291
+ * User must explicitly opt-in to translation (default: disabled)
292
+ *
293
+ * @param languageResult - Result from language selection (language + bilingual preference)
294
+ * @returns Translation configuration result
295
+ */
296
+ export async function promptTranslationConfig(languageResult) {
297
+ // Get language from result or use English default
298
+ const language = languageResult?.language || 'en';
299
+ const keepEnglishOriginals = languageResult?.keepEnglishOriginals || false;
300
+ const strings = getTranslationStrings(language);
301
+ // If English selected, no translation needed
302
+ if (language === 'en') {
303
+ return {
304
+ language: 'en',
305
+ translationEnabled: false,
306
+ translationScope: { livingDocs: false, externalSync: false, incrementSpecs: false },
307
+ keepEnglishOriginals: false,
308
+ };
309
+ }
310
+ console.log('');
311
+ console.log(chalk.cyan.bold(strings.header));
312
+ console.log(chalk.gray(` ${strings.subheader}`));
313
+ console.log('');
314
+ // STEP 1: Cost Warning (CRITICAL!)
315
+ console.log(chalk.yellow.bold(`⚠️ ${strings.costHeader}`));
316
+ console.log(chalk.yellow('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━'));
317
+ console.log(chalk.white(` ${strings.costLine1}`));
318
+ console.log('');
319
+ console.log(chalk.gray(` ${strings.costLine2}`));
320
+ console.log(chalk.gray(` ${strings.costLine3}`));
321
+ console.log(chalk.gray(` ${strings.costLine4}`));
322
+ console.log('');
323
+ console.log(chalk.gray(` ${strings.costLine5}`));
324
+ console.log(chalk.gray(' Translation uses Claude Haiku (cheapest model).'));
325
+ console.log(chalk.yellow('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━'));
326
+ console.log('');
327
+ // STEP 2: Enable Translation?
328
+ const enableTranslation = await confirm({
329
+ message: strings.enableQuestion,
330
+ default: false, // Default to NO (opt-in, not opt-out)
331
+ });
332
+ if (!enableTranslation) {
333
+ console.log('');
334
+ console.log(chalk.green(` ✔ ${strings.disabled} (${strings.manualHint})`));
335
+ console.log('');
336
+ return {
337
+ language,
338
+ translationEnabled: false,
339
+ translationScope: { livingDocs: false, externalSync: false, incrementSpecs: false },
340
+ keepEnglishOriginals,
341
+ };
342
+ }
343
+ // STEP 3: Translation Scope
344
+ const scope = await select({
345
+ message: strings.scopeQuestion,
346
+ choices: [
347
+ { name: strings.scopeAll, value: 'all' },
348
+ { name: strings.scopeLivingDocs, value: 'living-docs' },
349
+ { name: strings.scopeExternal, value: 'external' },
350
+ { name: strings.scopeCustom, value: 'custom' },
351
+ ],
352
+ default: 'living-docs'
353
+ });
354
+ let translationScope = { livingDocs: false, externalSync: false, incrementSpecs: false };
355
+ if (scope === 'all') {
356
+ translationScope = { livingDocs: true, externalSync: true, incrementSpecs: true };
357
+ }
358
+ else if (scope === 'living-docs') {
359
+ translationScope = { livingDocs: true, externalSync: false, incrementSpecs: true };
360
+ }
361
+ else if (scope === 'external') {
362
+ translationScope = { livingDocs: false, externalSync: true, incrementSpecs: false };
363
+ }
364
+ else {
365
+ // Custom selection
366
+ translationScope.incrementSpecs = await confirm({
367
+ message: strings.customSpecs,
368
+ default: true,
369
+ });
370
+ translationScope.livingDocs = await confirm({
371
+ message: strings.customLivingDocs,
372
+ default: true,
373
+ });
374
+ translationScope.externalSync = await confirm({
375
+ message: strings.customExternal,
376
+ default: false,
377
+ });
378
+ }
379
+ // Summary
380
+ console.log('');
381
+ console.log(chalk.green(` ✔ ${strings.translationEnabled}`));
382
+ if (translationScope.incrementSpecs)
383
+ console.log(chalk.green(` ✔ ${strings.scopeLabel}: ${strings.specsLabel}`));
384
+ if (translationScope.livingDocs)
385
+ console.log(chalk.green(` ✔ ${strings.scopeLabel}: ${strings.livingDocsLabel}`));
386
+ if (translationScope.externalSync)
387
+ console.log(chalk.green(` ✔ ${strings.scopeLabel}: ${strings.externalLabel}`));
388
+ console.log('');
389
+ return {
390
+ language,
391
+ translationEnabled: true,
392
+ translationScope,
393
+ keepEnglishOriginals,
394
+ };
395
+ }
396
+ /**
397
+ * Update config.json with translation configuration
398
+ *
399
+ * @param targetDir - Project directory
400
+ * @param config - Translation configuration result
401
+ */
402
+ export function updateConfigWithTranslation(targetDir, config) {
403
+ const configPath = path.join(targetDir, '.specweave', 'config.json');
404
+ if (!fs.existsSync(configPath)) {
405
+ console.error(chalk.red('⚠️ config.json not found, cannot update translation configuration'));
406
+ return;
407
+ }
408
+ const existingConfig = fs.readJsonSync(configPath);
409
+ // Update language at root level
410
+ existingConfig.language = config.language;
411
+ // Update translation configuration
412
+ existingConfig.translation = {
413
+ enabled: config.translationEnabled,
414
+ languages: config.translationEnabled ? ['en', config.language] : ['en'],
415
+ primary: config.language,
416
+ method: config.translationEnabled ? 'auto' : 'manual',
417
+ preserveFrameworkTerms: true,
418
+ scope: config.translationScope,
419
+ keepEnglishOriginals: config.keepEnglishOriginals,
420
+ };
421
+ fs.writeJsonSync(configPath, existingConfig, { spaces: 2 });
422
+ }
423
+ /**
424
+ * Get translation configuration for CI/non-interactive mode
425
+ *
426
+ * @param language - Language code from CLI options
427
+ * @returns Default translation configuration (disabled)
428
+ */
429
+ export function getDefaultTranslationConfig(language = 'en') {
430
+ return {
431
+ language,
432
+ translationEnabled: false,
433
+ translationScope: { livingDocs: false, externalSync: false, incrementSpecs: false },
434
+ keepEnglishOriginals: false,
435
+ };
436
+ }
437
+ //# sourceMappingURL=translation-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"translation-config.js","sourceRoot":"","sources":["../../../../../src/cli/helpers/init/translation-config.ts"],"names":[],"mappings":"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"}
@@ -70,6 +70,39 @@ export interface TestingConfig {
70
70
  e2e: number;
71
71
  };
72
72
  }
73
+ /**
74
+ * Translation scope - what gets auto-translated
75
+ */
76
+ export interface TranslationScope {
77
+ /** Auto-translate spec.md, plan.md, tasks.md after creation */
78
+ incrementSpecs: boolean;
79
+ /** Auto-translate living docs on update */
80
+ livingDocs: boolean;
81
+ /** Auto-translate GitHub/JIRA/ADO issues on sync */
82
+ externalSync: boolean;
83
+ }
84
+ /**
85
+ * Translation configuration for config.json
86
+ *
87
+ * CRITICAL: Translation can ~2x token usage
88
+ * User MUST explicitly opt-in during init
89
+ */
90
+ export interface TranslationConfig {
91
+ /** Master switch for auto-translation */
92
+ enabled: boolean;
93
+ /** Enabled languages (always includes 'en' as source) */
94
+ languages: SupportedLanguage[];
95
+ /** Primary output language for user */
96
+ primary: SupportedLanguage;
97
+ /** Translation method: auto (hooks), manual (/specweave:translate), none */
98
+ method: 'auto' | 'manual' | 'none';
99
+ /** Keep SpecWeave framework terms in English (increment, spec.md, etc.) */
100
+ preserveFrameworkTerms: boolean;
101
+ /** What to auto-translate */
102
+ scope: TranslationScope;
103
+ /** Keep English originals as .en.md files */
104
+ keepEnglishOriginals: boolean;
105
+ }
73
106
  /**
74
107
  * Context passed between init steps
75
108
  */
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../src/cli/helpers/init/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAErE;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,UAAU,GAAG,OAAO,GAAG,QAAQ,CAAC;AAE3D;;GAEG;AACH,MAAM,MAAM,iBAAiB,GACzB,eAAe,GACf,kBAAkB,GAClB,kBAAkB,GAClB,qBAAqB,GACrB,YAAY,GACZ,eAAe,GACf,OAAO,GACP,cAAc,GACd,iBAAiB,CAAC;AAEtB;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,MAAM,MAAM,QAAQ,GAAG,KAAK,GAAG,YAAY,GAAG,QAAQ,CAAC;AAEvD;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,eAAe,EAAE,QAAQ,CAAC;IAC1B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,eAAe,EAAE;QACf,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;QACpB,GAAG,EAAE,MAAM,CAAC;KACb,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,IAAI,EAAE,OAAO,CAAC;IACd,gBAAgB,EAAE,OAAO,CAAC;IAC1B,eAAe,EAAE,OAAO,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,WAAW,CAAC;CACtB"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../src/cli/helpers/init/types.ts"],"names":[],"mappings":"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"}