codexspec 0.6.1__tar.gz → 0.6.2__tar.gz
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.
- {codexspec-0.6.1 → codexspec-0.6.2}/PKG-INFO +1 -1
- {codexspec-0.6.1 → codexspec-0.6.2}/pyproject.toml +1 -1
- {codexspec-0.6.1 → codexspec-0.6.2}/src/codexspec/__init__.py +53 -3
- {codexspec-0.6.1 → codexspec-0.6.2}/src/codexspec/i18n.py +123 -15
- {codexspec-0.6.1 → codexspec-0.6.2}/templates/commands/analyze.md +6 -1
- {codexspec-0.6.1 → codexspec-0.6.2}/templates/commands/checklist.md +5 -5
- {codexspec-0.6.1 → codexspec-0.6.2}/templates/commands/clarify.md +6 -1
- {codexspec-0.6.1 → codexspec-0.6.2}/templates/commands/config.md +12 -8
- {codexspec-0.6.1 → codexspec-0.6.2}/templates/commands/constitution.md +5 -4
- {codexspec-0.6.1 → codexspec-0.6.2}/templates/commands/generate-spec.md +6 -1
- {codexspec-0.6.1 → codexspec-0.6.2}/templates/commands/implement-tasks.md +5 -5
- {codexspec-0.6.1 → codexspec-0.6.2}/templates/commands/plan-to-tasks.md +6 -1
- {codexspec-0.6.1 → codexspec-0.6.2}/templates/commands/quick.md +6 -1
- {codexspec-0.6.1 → codexspec-0.6.2}/templates/commands/review-code.md +5 -5
- {codexspec-0.6.1 → codexspec-0.6.2}/templates/commands/review-plan.md +6 -1
- {codexspec-0.6.1 → codexspec-0.6.2}/templates/commands/review-spec.md +6 -1
- {codexspec-0.6.1 → codexspec-0.6.2}/templates/commands/review-tasks.md +6 -1
- {codexspec-0.6.1 → codexspec-0.6.2}/templates/commands/spec-to-plan.md +6 -1
- {codexspec-0.6.1 → codexspec-0.6.2}/templates/commands/specify.md +6 -1
- {codexspec-0.6.1 → codexspec-0.6.2}/templates/commands/tasks-to-issues.md +5 -5
- {codexspec-0.6.1 → codexspec-0.6.2}/.gitignore +0 -0
- {codexspec-0.6.1 → codexspec-0.6.2}/LICENSE +0 -0
- {codexspec-0.6.1 → codexspec-0.6.2}/README.md +0 -0
- {codexspec-0.6.1 → codexspec-0.6.2}/codexspec-icon.svg +0 -0
- {codexspec-0.6.1 → codexspec-0.6.2}/codexspec-logo-dark.svg +0 -0
- {codexspec-0.6.1 → codexspec-0.6.2}/codexspec-logo-light.svg +0 -0
- {codexspec-0.6.1 → codexspec-0.6.2}/scripts/bash/check-i18n-completeness.sh +0 -0
- {codexspec-0.6.1 → codexspec-0.6.2}/scripts/bash/check-i18n-structure.sh +0 -0
- {codexspec-0.6.1 → codexspec-0.6.2}/scripts/bash/check-prerequisites.sh +0 -0
- {codexspec-0.6.1 → codexspec-0.6.2}/scripts/bash/common.sh +0 -0
- {codexspec-0.6.1 → codexspec-0.6.2}/scripts/bash/create-new-feature.sh +0 -0
- {codexspec-0.6.1 → codexspec-0.6.2}/scripts/powershell/check-prerequisites.ps1 +0 -0
- {codexspec-0.6.1 → codexspec-0.6.2}/scripts/powershell/common.ps1 +0 -0
- {codexspec-0.6.1 → codexspec-0.6.2}/scripts/powershell/create-new-feature.ps1 +0 -0
- {codexspec-0.6.1 → codexspec-0.6.2}/src/codexspec/commands/__init__.py +0 -0
- {codexspec-0.6.1 → codexspec-0.6.2}/src/codexspec/commands/installer.py +0 -0
- {codexspec-0.6.1 → codexspec-0.6.2}/src/codexspec/idea.md +0 -0
- {codexspec-0.6.1 → codexspec-0.6.2}/src/codexspec/translator.py +0 -0
- {codexspec-0.6.1 → codexspec-0.6.2}/templates/commands/commit-staged.md +0 -0
- {codexspec-0.6.1 → codexspec-0.6.2}/templates/commands/pr.md +0 -0
- {codexspec-0.6.1 → codexspec-0.6.2}/templates/docs/checklist-template.md +0 -0
- {codexspec-0.6.1 → codexspec-0.6.2}/templates/docs/constitution-template.md +0 -0
- {codexspec-0.6.1 → codexspec-0.6.2}/templates/docs/plan-template-detailed.md +0 -0
- {codexspec-0.6.1 → codexspec-0.6.2}/templates/docs/plan-template-simple.md +0 -0
- {codexspec-0.6.1 → codexspec-0.6.2}/templates/docs/requirements-template.md +0 -0
- {codexspec-0.6.1 → codexspec-0.6.2}/templates/docs/spec-template-detailed.md +0 -0
- {codexspec-0.6.1 → codexspec-0.6.2}/templates/docs/spec-template-simple.md +0 -0
- {codexspec-0.6.1 → codexspec-0.6.2}/templates/docs/tasks-template-detailed.md +0 -0
- {codexspec-0.6.1 → codexspec-0.6.2}/templates/docs/tasks-template-simple.md +0 -0
- {codexspec-0.6.1 → codexspec-0.6.2}/templates/translations/de.json +0 -0
- {codexspec-0.6.1 → codexspec-0.6.2}/templates/translations/en.json +0 -0
- {codexspec-0.6.1 → codexspec-0.6.2}/templates/translations/es.json +0 -0
- {codexspec-0.6.1 → codexspec-0.6.2}/templates/translations/fr.json +0 -0
- {codexspec-0.6.1 → codexspec-0.6.2}/templates/translations/ja.json +0 -0
- {codexspec-0.6.1 → codexspec-0.6.2}/templates/translations/ko.json +0 -0
- {codexspec-0.6.1 → codexspec-0.6.2}/templates/translations/pt-BR.json +0 -0
- {codexspec-0.6.1 → codexspec-0.6.2}/templates/translations/zh-CN.json +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: codexspec
|
|
3
|
-
Version: 0.6.
|
|
3
|
+
Version: 0.6.2
|
|
4
4
|
Summary: CodexSpec - A Requirements-First SDD toolkit for Claude Code
|
|
5
5
|
Project-URL: Homepage, https://github.com/Zts0hg/codexspec
|
|
6
6
|
Project-URL: Repository, https://github.com/Zts0hg/codexspec
|
|
@@ -30,12 +30,13 @@ from .commands.installer import (
|
|
|
30
30
|
from .i18n import (
|
|
31
31
|
generate_config_content,
|
|
32
32
|
get_commit_language,
|
|
33
|
+
get_interaction_language,
|
|
33
34
|
get_language_name,
|
|
34
|
-
get_project_language,
|
|
35
35
|
get_supported_languages,
|
|
36
36
|
is_supported_language,
|
|
37
37
|
normalize_locale,
|
|
38
38
|
update_config_language,
|
|
39
|
+
update_language_field,
|
|
39
40
|
update_output_language,
|
|
40
41
|
)
|
|
41
42
|
from .translator import translate
|
|
@@ -185,6 +186,16 @@ def config(
|
|
|
185
186
|
"-c",
|
|
186
187
|
help="Set the commit message language (defaults to output language)",
|
|
187
188
|
),
|
|
189
|
+
set_interaction_lang: Optional[str] = typer.Option(
|
|
190
|
+
None,
|
|
191
|
+
"--set-interaction-lang",
|
|
192
|
+
help="Set the interaction language (LLM dialogue + codexspec CLI terminal output)",
|
|
193
|
+
),
|
|
194
|
+
set_document_lang: Optional[str] = typer.Option(
|
|
195
|
+
None,
|
|
196
|
+
"--set-document-lang",
|
|
197
|
+
help="Set the document language (generated requirements/spec/plan/tasks files)",
|
|
198
|
+
),
|
|
188
199
|
list_langs: bool = typer.Option(
|
|
189
200
|
False,
|
|
190
201
|
"--list-langs",
|
|
@@ -322,6 +333,45 @@ def config(
|
|
|
322
333
|
console.print(f"[green]Commit message language set to:[/green] {normalized} ({lang_name})")
|
|
323
334
|
return
|
|
324
335
|
|
|
336
|
+
# Handle set interaction language
|
|
337
|
+
if set_interaction_lang:
|
|
338
|
+
normalized = normalize_locale(set_interaction_lang)
|
|
339
|
+
if not is_supported_language(normalized):
|
|
340
|
+
console.print(
|
|
341
|
+
f"[yellow]Warning: '{set_interaction_lang}' is not in the list of "
|
|
342
|
+
"commonly supported languages.[/yellow]"
|
|
343
|
+
)
|
|
344
|
+
console.print(
|
|
345
|
+
"It may still work if Claude supports it. "
|
|
346
|
+
"Run [cyan]codexspec config --list-langs[/cyan] to see supported languages."
|
|
347
|
+
)
|
|
348
|
+
if update_language_field(config_file, "interaction", normalized):
|
|
349
|
+
lang_name = get_language_name(normalized)
|
|
350
|
+
console.print(f"[green]Interaction language set to:[/green] {normalized} ({lang_name})")
|
|
351
|
+
else:
|
|
352
|
+
console.print("[red]Failed to update interaction language setting[/red]")
|
|
353
|
+
raise typer.Exit(1)
|
|
354
|
+
return
|
|
355
|
+
|
|
356
|
+
# Handle set document language
|
|
357
|
+
if set_document_lang:
|
|
358
|
+
normalized = normalize_locale(set_document_lang)
|
|
359
|
+
if not is_supported_language(normalized):
|
|
360
|
+
console.print(
|
|
361
|
+
f"[yellow]Warning: '{set_document_lang}' is not in the list of commonly supported languages.[/yellow]"
|
|
362
|
+
)
|
|
363
|
+
console.print(
|
|
364
|
+
"It may still work if Claude supports it. "
|
|
365
|
+
"Run [cyan]codexspec config --list-langs[/cyan] to see supported languages."
|
|
366
|
+
)
|
|
367
|
+
if update_language_field(config_file, "document", normalized):
|
|
368
|
+
lang_name = get_language_name(normalized)
|
|
369
|
+
console.print(f"[green]Document language set to:[/green] {normalized} ({lang_name})")
|
|
370
|
+
else:
|
|
371
|
+
console.print("[red]Failed to update document language setting[/red]")
|
|
372
|
+
raise typer.Exit(1)
|
|
373
|
+
return
|
|
374
|
+
|
|
325
375
|
# Display current configuration
|
|
326
376
|
console.print(
|
|
327
377
|
Panel(
|
|
@@ -340,8 +390,8 @@ def list_commands() -> None:
|
|
|
340
390
|
showing their display names and descriptions.
|
|
341
391
|
"""
|
|
342
392
|
|
|
343
|
-
# Get user's language preference
|
|
344
|
-
language =
|
|
393
|
+
# Get user's language preference (CLI terminal output uses the interaction language)
|
|
394
|
+
language = get_interaction_language()
|
|
345
395
|
|
|
346
396
|
metadata = get_installed_commands_metadata()
|
|
347
397
|
|
|
@@ -8,6 +8,7 @@ at runtime.
|
|
|
8
8
|
"""
|
|
9
9
|
|
|
10
10
|
import os
|
|
11
|
+
import re
|
|
11
12
|
from pathlib import Path
|
|
12
13
|
from typing import Optional
|
|
13
14
|
|
|
@@ -194,9 +195,18 @@ version: "1.0"
|
|
|
194
195
|
|
|
195
196
|
# Language settings for internationalization (i18n)
|
|
196
197
|
language:
|
|
197
|
-
#
|
|
198
|
-
# and
|
|
198
|
+
# Interaction language - language for conversing with the user (LLM dialogue
|
|
199
|
+
# and codexspec CLI terminal output). Supports any Claude-supported language.
|
|
199
200
|
# Common values: en, zh-CN, zh-TW, ja, ko, es, fr, de, pt, ru
|
|
201
|
+
interaction: "{language}"
|
|
202
|
+
|
|
203
|
+
# Document language - language for generated artifact files
|
|
204
|
+
# (requirements/spec/plan/tasks). Set this differently from interaction to
|
|
205
|
+
# keep documents in one language while conversing in another.
|
|
206
|
+
document: "{language}"
|
|
207
|
+
|
|
208
|
+
# Output language (legacy) - fallback used when interaction/document are not
|
|
209
|
+
# set. Kept for backward compatibility; prefer setting interaction/document.
|
|
200
210
|
output: "{language}"
|
|
201
211
|
|
|
202
212
|
# Commit message language - language for git commit messages
|
|
@@ -235,31 +245,91 @@ def generate_config_content(language: str = "en", created: str = None) -> str:
|
|
|
235
245
|
return CONFIG_TEMPLATE.format(language=normalized_lang, created=created)
|
|
236
246
|
|
|
237
247
|
|
|
238
|
-
def
|
|
239
|
-
"""
|
|
248
|
+
def _read_language_key(content: str, key: str) -> Optional[str]:
|
|
249
|
+
"""Read a `key: value` language setting from config content (YAML-like regex).
|
|
240
250
|
|
|
241
|
-
Returns
|
|
242
|
-
The configured language code, or "en" if not configured or file doesn't exist.
|
|
251
|
+
Returns the raw value (quotes stripped) or None if the key is absent.
|
|
243
252
|
"""
|
|
244
|
-
|
|
245
|
-
|
|
253
|
+
match = re.search(rf"^\s*{re.escape(key)}:\s*['\"]?(\S+?)['\"]?\s*$", content, re.MULTILINE)
|
|
254
|
+
return match.group(1) if match else None
|
|
255
|
+
|
|
246
256
|
|
|
247
|
-
|
|
257
|
+
def _resolve_language(config_file: Path, primary_key: str) -> str:
|
|
258
|
+
"""Resolve a language setting: primary_key -> output (legacy) -> 'en'.
|
|
259
|
+
|
|
260
|
+
Args:
|
|
261
|
+
config_file: Path to the project's config.yml.
|
|
262
|
+
primary_key: The primary language key to try first ('interaction' or 'document').
|
|
263
|
+
|
|
264
|
+
Returns:
|
|
265
|
+
The normalized language code, defaulting to 'en'.
|
|
266
|
+
"""
|
|
248
267
|
if not config_file.exists():
|
|
249
268
|
return "en"
|
|
250
|
-
|
|
251
269
|
try:
|
|
252
270
|
content = config_file.read_text(encoding="utf-8")
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
271
|
+
for key in (primary_key, "output"):
|
|
272
|
+
value = _read_language_key(content, key)
|
|
273
|
+
if value:
|
|
274
|
+
return normalize_locale(value) or "en"
|
|
257
275
|
except (OSError, re.error):
|
|
258
276
|
pass
|
|
259
|
-
|
|
260
277
|
return "en"
|
|
261
278
|
|
|
262
279
|
|
|
280
|
+
def _default_config_path() -> Path:
|
|
281
|
+
return Path.cwd() / ".codexspec" / "config.yml"
|
|
282
|
+
|
|
283
|
+
|
|
284
|
+
def get_interaction_language(config_file: Optional[Path] = None) -> str:
|
|
285
|
+
"""Resolve the interaction language (user<->LLM conversation and CLI terminal).
|
|
286
|
+
|
|
287
|
+
Resolution order: explicit `language.interaction` -> `language.output`
|
|
288
|
+
(legacy) -> 'en'. Existing configs that only set `output` behave exactly as
|
|
289
|
+
before.
|
|
290
|
+
|
|
291
|
+
Args:
|
|
292
|
+
config_file: Optional explicit path to config.yml; defaults to
|
|
293
|
+
`.codexspec/config.yml` in the current working directory.
|
|
294
|
+
|
|
295
|
+
Returns:
|
|
296
|
+
The normalized interaction language code.
|
|
297
|
+
"""
|
|
298
|
+
return _resolve_language(config_file or _default_config_path(), "interaction")
|
|
299
|
+
|
|
300
|
+
|
|
301
|
+
def get_document_language(config_file: Optional[Path] = None) -> str:
|
|
302
|
+
"""Resolve the document language (generated artifact files).
|
|
303
|
+
|
|
304
|
+
Resolution order: explicit `language.document` -> `language.output`
|
|
305
|
+
(legacy) -> 'en'. Existing configs that only set `output` behave exactly as
|
|
306
|
+
before.
|
|
307
|
+
|
|
308
|
+
Args:
|
|
309
|
+
config_file: Optional explicit path to config.yml; defaults to
|
|
310
|
+
`.codexspec/config.yml` in the current working directory.
|
|
311
|
+
|
|
312
|
+
Returns:
|
|
313
|
+
The normalized document language code.
|
|
314
|
+
"""
|
|
315
|
+
return _resolve_language(config_file or _default_config_path(), "document")
|
|
316
|
+
|
|
317
|
+
|
|
318
|
+
def get_project_language(config_file: Optional[Path] = None) -> str:
|
|
319
|
+
"""Get the project language from .codexspec/config.yml.
|
|
320
|
+
|
|
321
|
+
Backward-compatibility alias for the interaction language. Historically this
|
|
322
|
+
returned the `output` language; it now resolves the interaction language,
|
|
323
|
+
which falls back to `output` then `en` — so output-only configs are
|
|
324
|
+
unaffected. Prefer :func:`get_interaction_language` / :func:`get_document_language`
|
|
325
|
+
for new code.
|
|
326
|
+
|
|
327
|
+
Returns:
|
|
328
|
+
The configured language code, or "en" if not configured or file doesn't exist.
|
|
329
|
+
"""
|
|
330
|
+
return get_interaction_language(config_file)
|
|
331
|
+
|
|
332
|
+
|
|
263
333
|
def get_commit_language(config_file: Path) -> Optional[str]:
|
|
264
334
|
"""Get the commit language from a config.yml file.
|
|
265
335
|
|
|
@@ -286,6 +356,44 @@ def get_commit_language(config_file: Path) -> Optional[str]:
|
|
|
286
356
|
return None
|
|
287
357
|
|
|
288
358
|
|
|
359
|
+
def update_language_field(config_file: Path, key: str, language: str) -> bool:
|
|
360
|
+
"""Update a single ``language.<key>`` setting in config.yml.
|
|
361
|
+
|
|
362
|
+
Updates the value in place when ``key`` already exists; otherwise inserts
|
|
363
|
+
``<indent>{key}: "{language}"`` immediately after the ``language:`` line.
|
|
364
|
+
The value is normalized via :func:`normalize_locale`.
|
|
365
|
+
|
|
366
|
+
Args:
|
|
367
|
+
config_file: Path to the project's config.yml.
|
|
368
|
+
key: Language sub-key to set (e.g. "interaction", "document").
|
|
369
|
+
language: New language code (will be normalized).
|
|
370
|
+
|
|
371
|
+
Returns:
|
|
372
|
+
True if updated or inserted; False if there is no ``language:`` section
|
|
373
|
+
to insert into or the file cannot be written.
|
|
374
|
+
"""
|
|
375
|
+
normalized = normalize_locale(language)
|
|
376
|
+
try:
|
|
377
|
+
content = config_file.read_text(encoding="utf-8")
|
|
378
|
+
pattern = rf'^(\s*{re.escape(key)}:\s*)["\']?\S+?["\']?\s*$'
|
|
379
|
+
new_content, count = re.subn(pattern, rf'\g<1>"{normalized}"', content, flags=re.MULTILINE)
|
|
380
|
+
if count:
|
|
381
|
+
config_file.write_text(new_content, encoding="utf-8")
|
|
382
|
+
return True
|
|
383
|
+
|
|
384
|
+
# Key absent: insert under the `language:` section.
|
|
385
|
+
lang_match = re.search(r"^(\s*)language:\s*$", content, re.MULTILINE)
|
|
386
|
+
if not lang_match:
|
|
387
|
+
return False
|
|
388
|
+
indent = lang_match.group(1) + " "
|
|
389
|
+
insert_line = f'{indent}{key}: "{normalized}"'
|
|
390
|
+
end = lang_match.end()
|
|
391
|
+
config_file.write_text(content[:end] + "\n" + insert_line + content[end:], encoding="utf-8")
|
|
392
|
+
return True
|
|
393
|
+
except (OSError, re.error):
|
|
394
|
+
return False
|
|
395
|
+
|
|
396
|
+
|
|
289
397
|
def update_output_language(config_file: Path, language: str) -> bool:
|
|
290
398
|
"""Update only the output language setting in config.yml.
|
|
291
399
|
|
|
@@ -7,7 +7,12 @@ argument-hint: "[feature directory]"
|
|
|
7
7
|
|
|
8
8
|
## Language Preference
|
|
9
9
|
|
|
10
|
-
Read `.codexspec/config.yml`.
|
|
10
|
+
Read `.codexspec/config.yml`. Two independent language controls apply (each falls back to `language.output`, then English):
|
|
11
|
+
|
|
12
|
+
- **Interaction language** (`language.interaction`): language for all conversation with the user — questions, explanations, status messages, and `codexspec` CLI terminal output.
|
|
13
|
+
- **Document language** (`language.document`): language for generated artifact files (requirements/spec/plan/tasks).
|
|
14
|
+
|
|
15
|
+
Converse in the interaction language and author artifacts in the document language. Apply the project's translation standard to both: translate by meaning (not word-for-word), keep English for terms with no good native equivalent, and write as if originally in that language.
|
|
11
16
|
|
|
12
17
|
## User Input
|
|
13
18
|
|
|
@@ -20,12 +20,12 @@ scripts:
|
|
|
20
20
|
|
|
21
21
|
## Language Preference
|
|
22
22
|
|
|
23
|
-
|
|
23
|
+
Read `.codexspec/config.yml`. Two independent language controls apply (each falls back to `language.output`, then English):
|
|
24
24
|
|
|
25
|
-
-
|
|
26
|
-
-
|
|
27
|
-
|
|
28
|
-
|
|
25
|
+
- **Interaction language** (`language.interaction`): language for all conversation with the user — questions, explanations, status messages, and `codexspec` CLI terminal output.
|
|
26
|
+
- **Document language** (`language.document`): language for generated artifact files (requirements/spec/plan/tasks).
|
|
27
|
+
|
|
28
|
+
Converse in the interaction language and author artifacts in the document language. Apply the project's translation standard to both: translate by meaning (not word-for-word), keep English for terms with no good native equivalent, and write as if originally in that language.
|
|
29
29
|
|
|
30
30
|
## Checklist Purpose: "Unit Tests for Requirements"
|
|
31
31
|
|
|
@@ -7,7 +7,12 @@ argument-hint: "[spec.md, requirements.md, or feature directory]"
|
|
|
7
7
|
|
|
8
8
|
## Language Preference
|
|
9
9
|
|
|
10
|
-
Read `.codexspec/config.yml`.
|
|
10
|
+
Read `.codexspec/config.yml`. Two independent language controls apply (each falls back to `language.output`, then English):
|
|
11
|
+
|
|
12
|
+
- **Interaction language** (`language.interaction`): language for all conversation with the user — questions, explanations, status messages, and `codexspec` CLI terminal output.
|
|
13
|
+
- **Document language** (`language.document`): language for generated artifact files (requirements/spec/plan/tasks).
|
|
14
|
+
|
|
15
|
+
Converse in the interaction language and author artifacts in the document language. Apply the project's translation standard to both: translate by meaning (not word-for-word), keep English for terms with no good native equivalent, and write as if originally in that language.
|
|
11
16
|
|
|
12
17
|
## User Input
|
|
13
18
|
|
|
@@ -7,12 +7,14 @@ argument-hint: "[--view] View current configuration without modification"
|
|
|
7
7
|
|
|
8
8
|
## Language Preference
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
Read `.codexspec/config.yml`. Two independent language controls apply (each falls back to `language.output`, then English):
|
|
11
11
|
|
|
12
|
-
-
|
|
13
|
-
-
|
|
14
|
-
|
|
15
|
-
|
|
12
|
+
- **Interaction language** (`language.interaction`): language for all conversation with the user — questions, explanations, status messages, and `codexspec` CLI terminal output.
|
|
13
|
+
- **Document language** (`language.document`): language for generated artifact files (requirements/spec/plan/tasks).
|
|
14
|
+
|
|
15
|
+
Converse in the interaction language and author artifacts in the document language. Apply the project's translation standard to both: translate by meaning (not word-for-word), keep English for terms with no good native equivalent, and write as if originally in that language.
|
|
16
|
+
|
|
17
|
+
A fresh or reset config writes only `output`; `interaction` and `document` resolve to it via the fallback above, so an `output`-only config is fully functional (non-blocking). Set `interaction` or `document` individually only to make them differ from `output`. That is why the YAML examples below stay `output`-only.
|
|
16
18
|
|
|
17
19
|
## Parameter Check
|
|
18
20
|
|
|
@@ -98,7 +100,9 @@ Display the configuration as in Step 2, then exit.
|
|
|
98
100
|
"question": "Which setting would you like to modify?",
|
|
99
101
|
"header": "Modify",
|
|
100
102
|
"options": [
|
|
101
|
-
{"label": "
|
|
103
|
+
{"label": "Interaction language", "description": "Language for conversing with you (LLM dialogue + codexspec CLI terminal output) (currently: {current value})"},
|
|
104
|
+
{"label": "Document language", "description": "Language for generated artifact files (requirements/spec/plan/tasks) (currently: {current value})"},
|
|
105
|
+
{"label": "Output language (legacy)", "description": "Fallback language used when interaction/document are not set (currently: {current value})"},
|
|
102
106
|
{"label": "Commit language", "description": "Language for commit messages (currently: {current value})"},
|
|
103
107
|
{"label": "Back", "description": "Return to main menu"}
|
|
104
108
|
]
|
|
@@ -182,7 +186,7 @@ Let's configure your language preferences.
|
|
|
182
186
|
```json
|
|
183
187
|
{
|
|
184
188
|
"questions": [{
|
|
185
|
-
"question": "Select your
|
|
189
|
+
"question": "Select your project's base language (sets `output`; interaction and document inherit it unless set individually):",
|
|
186
190
|
"header": "Output Lang",
|
|
187
191
|
"options": [
|
|
188
192
|
{"label": "English (en)", "description": "Default, recommended for international projects"},
|
|
@@ -280,6 +284,6 @@ project:
|
|
|
280
284
|
|
|
281
285
|
## Output Format
|
|
282
286
|
|
|
283
|
-
|
|
287
|
+
Converse in the interaction language and author generated artifacts in the document language. If either is unset, it falls back to `output`, then English.
|
|
284
288
|
|
|
285
289
|
Technical terms and file paths should remain in English for clarity.
|
|
@@ -23,11 +23,12 @@ handoffs:
|
|
|
23
23
|
|
|
24
24
|
## Language Preference
|
|
25
25
|
|
|
26
|
-
|
|
26
|
+
Read `.codexspec/config.yml`. Two independent language controls apply (each falls back to `language.output`, then English):
|
|
27
27
|
|
|
28
|
-
-
|
|
29
|
-
-
|
|
30
|
-
|
|
28
|
+
- **Interaction language** (`language.interaction`): language for all conversation with the user — questions, explanations, status messages, and `codexspec` CLI terminal output.
|
|
29
|
+
- **Document language** (`language.document`): language for generated artifact files (requirements/spec/plan/tasks).
|
|
30
|
+
|
|
31
|
+
Converse in the interaction language and author artifacts in the document language. Apply the project's translation standard to both: translate by meaning (not word-for-word), keep English for terms with no good native equivalent, and write as if originally in that language.
|
|
31
32
|
|
|
32
33
|
## User Input
|
|
33
34
|
|
|
@@ -10,7 +10,12 @@ handoffs:
|
|
|
10
10
|
|
|
11
11
|
## Language Preference
|
|
12
12
|
|
|
13
|
-
Read `.codexspec/config.yml`.
|
|
13
|
+
Read `.codexspec/config.yml`. Two independent language controls apply (each falls back to `language.output`, then English):
|
|
14
|
+
|
|
15
|
+
- **Interaction language** (`language.interaction`): language for all conversation with the user — questions, explanations, status messages, and `codexspec` CLI terminal output.
|
|
16
|
+
- **Document language** (`language.document`): language for generated artifact files (requirements/spec/plan/tasks).
|
|
17
|
+
|
|
18
|
+
Converse in the interaction language and author artifacts in the document language. Apply the project's translation standard to both: translate by meaning (not word-for-word), keep English for terms with no good native equivalent, and write as if originally in that language.
|
|
14
19
|
|
|
15
20
|
## User Input
|
|
16
21
|
|
|
@@ -10,12 +10,12 @@ handoffs:
|
|
|
10
10
|
|
|
11
11
|
## Language Preference
|
|
12
12
|
|
|
13
|
-
|
|
13
|
+
Read `.codexspec/config.yml`. Two independent language controls apply (each falls back to `language.output`, then English):
|
|
14
14
|
|
|
15
|
-
-
|
|
16
|
-
-
|
|
17
|
-
|
|
18
|
-
|
|
15
|
+
- **Interaction language** (`language.interaction`): language for all conversation with the user — questions, explanations, status messages, and `codexspec` CLI terminal output.
|
|
16
|
+
- **Document language** (`language.document`): language for generated artifact files (requirements/spec/plan/tasks).
|
|
17
|
+
|
|
18
|
+
Converse in the interaction language and author artifacts in the document language. Apply the project's translation standard to both: translate by meaning (not word-for-word), keep English for terms with no good native equivalent, and write as if originally in that language.
|
|
19
19
|
|
|
20
20
|
## Feature Resolution
|
|
21
21
|
|
|
@@ -10,7 +10,12 @@ handoffs:
|
|
|
10
10
|
|
|
11
11
|
## Language Preference
|
|
12
12
|
|
|
13
|
-
Read `.codexspec/config.yml`.
|
|
13
|
+
Read `.codexspec/config.yml`. Two independent language controls apply (each falls back to `language.output`, then English):
|
|
14
|
+
|
|
15
|
+
- **Interaction language** (`language.interaction`): language for all conversation with the user — questions, explanations, status messages, and `codexspec` CLI terminal output.
|
|
16
|
+
- **Document language** (`language.document`): language for generated artifact files (requirements/spec/plan/tasks).
|
|
17
|
+
|
|
18
|
+
Converse in the interaction language and author artifacts in the document language. Apply the project's translation standard to both: translate by meaning (not word-for-word), keep English for terms with no good native equivalent, and write as if originally in that language.
|
|
14
19
|
|
|
15
20
|
## User Input
|
|
16
21
|
|
|
@@ -7,7 +7,12 @@ argument-hint: "Describe a small requirement"
|
|
|
7
7
|
|
|
8
8
|
## Language Preference
|
|
9
9
|
|
|
10
|
-
Read `.codexspec/config.yml`.
|
|
10
|
+
Read `.codexspec/config.yml`. Two independent language controls apply (each falls back to `language.output`, then English):
|
|
11
|
+
|
|
12
|
+
- **Interaction language** (`language.interaction`): language for all conversation with the user — questions, explanations, status messages, and `codexspec` CLI terminal output.
|
|
13
|
+
- **Document language** (`language.document`): language for generated artifact files (requirements/spec/plan/tasks).
|
|
14
|
+
|
|
15
|
+
Converse in the interaction language and author artifacts in the document language. Apply the project's translation standard to both: translate by meaning (not word-for-word), keep English for terms with no good native equivalent, and write as if originally in that language.
|
|
11
16
|
|
|
12
17
|
## User Input
|
|
13
18
|
|
|
@@ -14,12 +14,12 @@ allowed-tools: Read, Grep, Glob, Bash(ruff check:*), Bash(mypy:*), Bash(python -
|
|
|
14
14
|
|
|
15
15
|
## Language Preference
|
|
16
16
|
|
|
17
|
-
|
|
17
|
+
Read `.codexspec/config.yml`. Two independent language controls apply (each falls back to `language.output`, then English):
|
|
18
18
|
|
|
19
|
-
-
|
|
20
|
-
-
|
|
21
|
-
|
|
22
|
-
|
|
19
|
+
- **Interaction language** (`language.interaction`): language for all conversation with the user — questions, explanations, status messages, and `codexspec` CLI terminal output.
|
|
20
|
+
- **Document language** (`language.document`): language for generated artifact files (requirements/spec/plan/tasks).
|
|
21
|
+
|
|
22
|
+
Converse in the interaction language and author artifacts in the document language. Apply the project's translation standard to both: translate by meaning (not word-for-word), keep English for terms with no good native equivalent, and write as if originally in that language.
|
|
23
23
|
|
|
24
24
|
## User Input
|
|
25
25
|
|
|
@@ -10,7 +10,12 @@ handoffs:
|
|
|
10
10
|
|
|
11
11
|
## Language Preference
|
|
12
12
|
|
|
13
|
-
Read `.codexspec/config.yml`.
|
|
13
|
+
Read `.codexspec/config.yml`. Two independent language controls apply (each falls back to `language.output`, then English):
|
|
14
|
+
|
|
15
|
+
- **Interaction language** (`language.interaction`): language for all conversation with the user — questions, explanations, status messages, and `codexspec` CLI terminal output.
|
|
16
|
+
- **Document language** (`language.document`): language for generated artifact files (requirements/spec/plan/tasks).
|
|
17
|
+
|
|
18
|
+
Converse in the interaction language and author artifacts in the document language. Apply the project's translation standard to both: translate by meaning (not word-for-word), keep English for terms with no good native equivalent, and write as if originally in that language.
|
|
14
19
|
|
|
15
20
|
## User Input
|
|
16
21
|
|
|
@@ -10,7 +10,12 @@ handoffs:
|
|
|
10
10
|
|
|
11
11
|
## Language Preference
|
|
12
12
|
|
|
13
|
-
Read `.codexspec/config.yml`.
|
|
13
|
+
Read `.codexspec/config.yml`. Two independent language controls apply (each falls back to `language.output`, then English):
|
|
14
|
+
|
|
15
|
+
- **Interaction language** (`language.interaction`): language for all conversation with the user — questions, explanations, status messages, and `codexspec` CLI terminal output.
|
|
16
|
+
- **Document language** (`language.document`): language for generated artifact files (requirements/spec/plan/tasks).
|
|
17
|
+
|
|
18
|
+
Converse in the interaction language and author artifacts in the document language. Apply the project's translation standard to both: translate by meaning (not word-for-word), keep English for terms with no good native equivalent, and write as if originally in that language.
|
|
14
19
|
|
|
15
20
|
## User Input
|
|
16
21
|
|
|
@@ -10,7 +10,12 @@ handoffs:
|
|
|
10
10
|
|
|
11
11
|
## Language Preference
|
|
12
12
|
|
|
13
|
-
Read `.codexspec/config.yml`.
|
|
13
|
+
Read `.codexspec/config.yml`. Two independent language controls apply (each falls back to `language.output`, then English):
|
|
14
|
+
|
|
15
|
+
- **Interaction language** (`language.interaction`): language for all conversation with the user — questions, explanations, status messages, and `codexspec` CLI terminal output.
|
|
16
|
+
- **Document language** (`language.document`): language for generated artifact files (requirements/spec/plan/tasks).
|
|
17
|
+
|
|
18
|
+
Converse in the interaction language and author artifacts in the document language. Apply the project's translation standard to both: translate by meaning (not word-for-word), keep English for terms with no good native equivalent, and write as if originally in that language.
|
|
14
19
|
|
|
15
20
|
## User Input
|
|
16
21
|
|
|
@@ -10,7 +10,12 @@ handoffs:
|
|
|
10
10
|
|
|
11
11
|
## Language Preference
|
|
12
12
|
|
|
13
|
-
Read `.codexspec/config.yml`.
|
|
13
|
+
Read `.codexspec/config.yml`. Two independent language controls apply (each falls back to `language.output`, then English):
|
|
14
|
+
|
|
15
|
+
- **Interaction language** (`language.interaction`): language for all conversation with the user — questions, explanations, status messages, and `codexspec` CLI terminal output.
|
|
16
|
+
- **Document language** (`language.document`): language for generated artifact files (requirements/spec/plan/tasks).
|
|
17
|
+
|
|
18
|
+
Converse in the interaction language and author artifacts in the document language. Apply the project's translation standard to both: translate by meaning (not word-for-word), keep English for terms with no good native equivalent, and write as if originally in that language.
|
|
14
19
|
|
|
15
20
|
## User Input
|
|
16
21
|
|
|
@@ -10,7 +10,12 @@ scripts:
|
|
|
10
10
|
|
|
11
11
|
## Language Preference
|
|
12
12
|
|
|
13
|
-
Read `.codexspec/config.yml`.
|
|
13
|
+
Read `.codexspec/config.yml`. Two independent language controls apply (each falls back to `language.output`, then English):
|
|
14
|
+
|
|
15
|
+
- **Interaction language** (`language.interaction`): language for all conversation with the user — questions, explanations, status messages, and `codexspec` CLI terminal output.
|
|
16
|
+
- **Document language** (`language.document`): language for generated artifact files (requirements/spec/plan/tasks).
|
|
17
|
+
|
|
18
|
+
Converse in the interaction language and author artifacts in the document language. Apply the project's translation standard to both: translate by meaning (not word-for-word), keep English for terms with no good native equivalent, and write as if originally in that language.
|
|
14
19
|
|
|
15
20
|
## User Input
|
|
16
21
|
|
|
@@ -20,12 +20,12 @@ scripts:
|
|
|
20
20
|
|
|
21
21
|
## Language Preference
|
|
22
22
|
|
|
23
|
-
|
|
23
|
+
Read `.codexspec/config.yml`. Two independent language controls apply (each falls back to `language.output`, then English):
|
|
24
24
|
|
|
25
|
-
-
|
|
26
|
-
-
|
|
27
|
-
|
|
28
|
-
|
|
25
|
+
- **Interaction language** (`language.interaction`): language for all conversation with the user — questions, explanations, status messages, and `codexspec` CLI terminal output.
|
|
26
|
+
- **Document language** (`language.document`): language for generated artifact files (requirements/spec/plan/tasks).
|
|
27
|
+
|
|
28
|
+
Converse in the interaction language and author artifacts in the document language. Apply the project's translation standard to both: translate by meaning (not word-for-word), keep English for terms with no good native equivalent, and write as if originally in that language.
|
|
29
29
|
|
|
30
30
|
## User Input
|
|
31
31
|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|