gitwise-cli 0.24.2__py3-none-any.whl

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 (125) hide show
  1. gitwise/__init__.py +11 -0
  2. gitwise/__main__.py +113 -0
  3. gitwise/_cli_completions.py +88 -0
  4. gitwise/_cli_dispatch.py +469 -0
  5. gitwise/_cli_introspection.py +275 -0
  6. gitwise/_cli_parser.py +345 -0
  7. gitwise/_cli_setup_agents.py +439 -0
  8. gitwise/_i18n_data.json +1934 -0
  9. gitwise/_paths.py +22 -0
  10. gitwise/_runtime_config.py +246 -0
  11. gitwise/audit.py +338 -0
  12. gitwise/branches.py +183 -0
  13. gitwise/clean.py +197 -0
  14. gitwise/commit.py +142 -0
  15. gitwise/conflicts.py +112 -0
  16. gitwise/context.py +163 -0
  17. gitwise/design.py +383 -0
  18. gitwise/diff.py +309 -0
  19. gitwise/doctor.py +116 -0
  20. gitwise/git.py +254 -0
  21. gitwise/health.py +345 -0
  22. gitwise/i18n.py +99 -0
  23. gitwise/log.py +329 -0
  24. gitwise/merge.py +193 -0
  25. gitwise/optimize.py +212 -0
  26. gitwise/output.py +652 -0
  27. gitwise/pick.py +102 -0
  28. gitwise/pr.py +543 -0
  29. gitwise/py.typed +0 -0
  30. gitwise/schema.py +49 -0
  31. gitwise/setup.py +551 -0
  32. gitwise/setup_agents/__init__.py +36 -0
  33. gitwise/setup_agents/adapters/__init__.py +17 -0
  34. gitwise/setup_agents/adapters/aider.py +5 -0
  35. gitwise/setup_agents/adapters/base.py +5 -0
  36. gitwise/setup_agents/adapters/codex.py +5 -0
  37. gitwise/setup_agents/adapters/continue_adapter.py +5 -0
  38. gitwise/setup_agents/adapters/cursor.py +5 -0
  39. gitwise/setup_agents/adapters/opencode.py +5 -0
  40. gitwise/setup_agents/adapters/pi.py +5 -0
  41. gitwise/setup_agents/exec.py +449 -0
  42. gitwise/setup_agents/format.py +164 -0
  43. gitwise/setup_agents/plan.py +254 -0
  44. gitwise/setup_agents/plan_gitfiles.py +167 -0
  45. gitwise/setup_agents/plan_skills.py +256 -0
  46. gitwise/setup_agents/providers/__init__.py +96 -0
  47. gitwise/setup_agents/providers/aider.py +11 -0
  48. gitwise/setup_agents/providers/base.py +79 -0
  49. gitwise/setup_agents/providers/claude.py +408 -0
  50. gitwise/setup_agents/providers/codex.py +11 -0
  51. gitwise/setup_agents/providers/continue_adapter.py +11 -0
  52. gitwise/setup_agents/providers/cursor.py +11 -0
  53. gitwise/setup_agents/providers/opencode.py +11 -0
  54. gitwise/setup_agents/providers/pi.py +11 -0
  55. gitwise/setup_agents/state.py +141 -0
  56. gitwise/setup_agents/types.py +48 -0
  57. gitwise/share/agents/skills/git-audit/SKILL.md +25 -0
  58. gitwise/share/agents/skills/git-clean/SKILL.md +22 -0
  59. gitwise/share/agents/skills/git-optimize/SKILL.md +21 -0
  60. gitwise/share/aider/CONVENTIONS.md.template +8 -0
  61. gitwise/share/aider/aider.conf.yml.template +4 -0
  62. gitwise/share/claude/CLAUDE.md.template +9 -0
  63. gitwise/share/claude/rules/gitwise.md +16 -0
  64. gitwise/share/claude/settings.json.template +47 -0
  65. gitwise/share/claude/skills/git-audit/SKILL.md +25 -0
  66. gitwise/share/claude/skills/git-clean/SKILL.md +22 -0
  67. gitwise/share/claude/skills/git-optimize/SKILL.md +21 -0
  68. gitwise/share/codex/agents/gitwise.toml.template +18 -0
  69. gitwise/share/continue/rules/gitwise.md.template +14 -0
  70. gitwise/share/cursor/rules/gitwise.mdc.template +16 -0
  71. gitwise/share/git-config-modern.txt +48 -0
  72. gitwise/share/hooks/commit-msg +22 -0
  73. gitwise/share/hooks/pre-commit +19 -0
  74. gitwise/share/opencode/agents/gitwise.md.template +14 -0
  75. gitwise/share/pi/skills/gitwise.md.template +14 -0
  76. gitwise/share/schemas/v1/input/audit.json +40 -0
  77. gitwise/share/schemas/v1/input/branches.json +51 -0
  78. gitwise/share/schemas/v1/input/clean.json +52 -0
  79. gitwise/share/schemas/v1/input/commands.json +36 -0
  80. gitwise/share/schemas/v1/input/commit.json +63 -0
  81. gitwise/share/schemas/v1/input/completions.json +51 -0
  82. gitwise/share/schemas/v1/input/conflicts.json +46 -0
  83. gitwise/share/schemas/v1/input/context.json +36 -0
  84. gitwise/share/schemas/v1/input/diff.json +56 -0
  85. gitwise/share/schemas/v1/input/doctor.json +36 -0
  86. gitwise/share/schemas/v1/input/health.json +36 -0
  87. gitwise/share/schemas/v1/input/log.json +71 -0
  88. gitwise/share/schemas/v1/input/merge.json +63 -0
  89. gitwise/share/schemas/v1/input/optimize.json +44 -0
  90. gitwise/share/schemas/v1/input/pick.json +63 -0
  91. gitwise/share/schemas/v1/input/pr.json +51 -0
  92. gitwise/share/schemas/v1/input/schema.json +48 -0
  93. gitwise/share/schemas/v1/input/setup-agents.json +108 -0
  94. gitwise/share/schemas/v1/input/setup.json +55 -0
  95. gitwise/share/schemas/v1/input/show.json +46 -0
  96. gitwise/share/schemas/v1/input/snapshot.json +36 -0
  97. gitwise/share/schemas/v1/input/stash.json +68 -0
  98. gitwise/share/schemas/v1/input/status.json +36 -0
  99. gitwise/share/schemas/v1/input/suggest.json +36 -0
  100. gitwise/share/schemas/v1/input/summarize.json +44 -0
  101. gitwise/share/schemas/v1/input/sync.json +55 -0
  102. gitwise/share/schemas/v1/input/tag.json +73 -0
  103. gitwise/share/schemas/v1/input/undo.json +60 -0
  104. gitwise/share/schemas/v1/input/update.json +40 -0
  105. gitwise/share/schemas/v1/input/worktree.json +50 -0
  106. gitwise/show.py +118 -0
  107. gitwise/snapshot.py +110 -0
  108. gitwise/stash.py +188 -0
  109. gitwise/status.py +93 -0
  110. gitwise/suggest.py +148 -0
  111. gitwise/summarize.py +202 -0
  112. gitwise/sync.py +257 -0
  113. gitwise/tag.py +252 -0
  114. gitwise/undo.py +145 -0
  115. gitwise/update.py +42 -0
  116. gitwise/utils/__init__.py +1 -0
  117. gitwise/utils/git_output.py +51 -0
  118. gitwise/utils/json_envelope.py +58 -0
  119. gitwise/utils/parsing.py +34 -0
  120. gitwise/worktree.py +182 -0
  121. gitwise_cli-0.24.2.dist-info/METADATA +151 -0
  122. gitwise_cli-0.24.2.dist-info/RECORD +125 -0
  123. gitwise_cli-0.24.2.dist-info/WHEEL +4 -0
  124. gitwise_cli-0.24.2.dist-info/entry_points.txt +2 -0
  125. gitwise_cli-0.24.2.dist-info/licenses/LICENSE +21 -0
@@ -0,0 +1,1934 @@
1
+ {
2
+ "aborted": {
3
+ "es": "cancelado.",
4
+ "en": "aborted."
5
+ },
6
+ "adapter_created": {
7
+ "es": "adaptador {adapter}: creado {file}",
8
+ "en": "adapter {adapter}: created {file}"
9
+ },
10
+ "adapter_exists": {
11
+ "es": "adaptador {adapter}: {file} ya existe",
12
+ "en": "adapter {adapter}: {file} already exists"
13
+ },
14
+ "adapter_alias_deprecated": {
15
+ "es": "alias deprecado: usa \"{target}\" en lugar de \"{alias}\"",
16
+ "en": "deprecated alias: use \"{target}\" instead of \"{alias}\""
17
+ },
18
+ "providers_available": {
19
+ "es": "providers disponibles: {list}",
20
+ "en": "available providers: {list}"
21
+ },
22
+ "adapter_no_template": {
23
+ "es": "plantilla de adaptador no encontrada: {path}",
24
+ "en": "adapter template not found: {path}"
25
+ },
26
+ "adapters_available": {
27
+ "es": "adaptadores disponibles: {list}",
28
+ "en": "available adapters: {list}"
29
+ },
30
+ "adapters_none_with_others": {
31
+ "es": "\"none\" no se puede combinar con otros adaptadores",
32
+ "en": "\"none\" cannot be combined with other adapters"
33
+ },
34
+ "adapters_require_local": {
35
+ "es": "los adaptadores requieren --local",
36
+ "en": "adapters require --local"
37
+ },
38
+ "action_failed": {
39
+ "es": "acción falló: {error} — revirtiendo {count} acciones previas",
40
+ "en": "action failed: {error} — rolling back {count} previous actions"
41
+ },
42
+ "actions_to_perform": {
43
+ "es": "acciones a realizar:",
44
+ "en": "actions to perform:"
45
+ },
46
+ "active_in_worktree": {
47
+ "es": "activa en un worktree",
48
+ "en": "active in a worktree"
49
+ },
50
+ "already_contains_conventions": {
51
+ "es": "ya contiene convenciones git",
52
+ "en": "already contains git conventions"
53
+ },
54
+ "already_exists": {
55
+ "es": "ya existe",
56
+ "en": "already exists"
57
+ },
58
+ "already_points_to_agents": {
59
+ "es": "ya apunta a AGENTS.md",
60
+ "en": "already points to AGENTS.md"
61
+ },
62
+ "already_up_to_date": {
63
+ "es": "Ya está actualizado.",
64
+ "en": "Already up to date."
65
+ },
66
+ "audit_fix_label": {
67
+ "es": "solución",
68
+ "en": "fix"
69
+ },
70
+ "audit_ignore_label": {
71
+ "es": "ignorar",
72
+ "en": "ignore"
73
+ },
74
+ "branch_deleted": {
75
+ "es": "eliminada: {branch}",
76
+ "en": "deleted: {branch}"
77
+ },
78
+ "branch_label": {
79
+ "es": "rama: {branch}",
80
+ "en": "branch: {branch}"
81
+ },
82
+ "branch_list_title": {
83
+ "es": "Ramas",
84
+ "en": "Branches"
85
+ },
86
+ "branch_list_title_current": {
87
+ "es": "Ramas (actual: {branch})",
88
+ "en": "Branches (current: {branch})"
89
+ },
90
+ "branches_ahead": {
91
+ "es": "adelantada",
92
+ "en": "ahead"
93
+ },
94
+ "branches_behind": {
95
+ "es": "atrasada",
96
+ "en": "behind"
97
+ },
98
+ "branches_current": {
99
+ "es": "actual",
100
+ "en": "current"
101
+ },
102
+ "branches_merged": {
103
+ "es": "fusionadas",
104
+ "en": "merged"
105
+ },
106
+ "branches_remote_label": {
107
+ "es": "remotas",
108
+ "en": "remote"
109
+ },
110
+ "branches_sort_label": {
111
+ "es": "ordenar por: {sort}",
112
+ "en": "sort by: {sort}"
113
+ },
114
+ "branches_stale_label": {
115
+ "es": "antiguas [gone]",
116
+ "en": "stale [gone]"
117
+ },
118
+ "branches_to_delete": {
119
+ "es": "ramas sin seguimiento remoto a eliminar ({count}):",
120
+ "en": "stale branches to delete ({count}):"
121
+ },
122
+ "branches_worktree": {
123
+ "es": "worktree",
124
+ "en": "worktree"
125
+ },
126
+ "cancelled": {
127
+ "es": "cancelado.",
128
+ "en": "cancelled."
129
+ },
130
+ "changed_files": {
131
+ "es": "archivos modificados: ({count})",
132
+ "en": "changed files: ({count})"
133
+ },
134
+ "claude_md_identical_content": {
135
+ "es": "contenido idéntico a AGENTS.md",
136
+ "en": "identical content to AGENTS.md"
137
+ },
138
+ "claude_md_replaced": {
139
+ "es": "{file} reemplazado por symlink a {target} (backup: {backup})",
140
+ "en": "{file} replaced by symlink to {target} (backup: {backup})"
141
+ },
142
+ "claude_md_separate": {
143
+ "es": "{c} y {a} son archivos separados con contenido distinto. Para unificar: revisa `diff {c} {a}`, mueve contenido relevante manualmente, luego ejecuta `gitwise setup-agents --replace-claude-with-symlink`.",
144
+ "en": "{c} and {a} are separate files with different content. To unify: review `diff {c} {a}`, move relevant content manually, then run `gitwise setup-agents --replace-claude-with-symlink`."
145
+ },
146
+ "claude_md_symlink_other": {
147
+ "es": "{file} es symlink a '{existing}', no a '{expected}'. Revisa manualmente. Para reemplazar: `gitwise setup-agents --replace-claude-with-symlink`",
148
+ "en": "{file} is symlink to '{existing}', not '{expected}'. Review manually. To replace: `gitwise setup-agents --replace-claude-with-symlink`"
149
+ },
150
+ "clean_fix": {
151
+ "es": "gitwise clean --branches --dry-run",
152
+ "en": "gitwise clean --branches --dry-run"
153
+ },
154
+ "clean_refs_not_implemented": {
155
+ "es": "'clean --refs' no está implementado",
156
+ "en": "'clean --refs' is not implemented"
157
+ },
158
+ "clean_specify_flag": {
159
+ "es": "especifica --branches (o --refs)",
160
+ "en": "specify --branches (or --refs)"
161
+ },
162
+ "clean_to_delete": {
163
+ "es": "para eliminar: gitwise clean --branches --yes",
164
+ "en": "to delete: gitwise clean --branches --yes"
165
+ },
166
+ "col_age": {
167
+ "es": "Antigüedad",
168
+ "en": "Age"
169
+ },
170
+ "col_author": {
171
+ "es": "Autor",
172
+ "en": "Author"
173
+ },
174
+ "col_branch": {
175
+ "es": "Rama",
176
+ "en": "Branch"
177
+ },
178
+ "col_date": {
179
+ "es": "Fecha",
180
+ "en": "Date"
181
+ },
182
+ "col_name": {
183
+ "es": "Nombre",
184
+ "en": "Name"
185
+ },
186
+ "col_sha": {
187
+ "es": "SHA",
188
+ "en": "SHA"
189
+ },
190
+ "col_status": {
191
+ "es": "Estado",
192
+ "en": "Status"
193
+ },
194
+ "col_subject": {
195
+ "es": "Asunto",
196
+ "en": "Subject"
197
+ },
198
+ "col_tag": {
199
+ "es": "Tag",
200
+ "en": "Tag"
201
+ },
202
+ "commit_amend_label": {
203
+ "es": "amend",
204
+ "en": "amend"
205
+ },
206
+ "commit_amend_protected": {
207
+ "es": "no se puede hacer --amend en rama protegida: {branch}",
208
+ "en": "cannot --amend on protected branch: {branch}"
209
+ },
210
+ "commit_amend_pushed": {
211
+ "es": "no se puede hacer --amend: {branch} ya fue pusheada (requeriría force-push)",
212
+ "en": "cannot --amend: {branch} already pushed (would require force-push)"
213
+ },
214
+ "commit_branch_label": {
215
+ "es": "rama",
216
+ "en": "branch"
217
+ },
218
+ "commit_breaking_hint": {
219
+ "es": "cambio rompedor",
220
+ "en": "breaking change"
221
+ },
222
+ "commit_graph_ausente": {
223
+ "es": "commit-graph ausente — git log puede ser 2-10x más lento",
224
+ "en": "commit-graph missing — git log can be 2-10x slower"
225
+ },
226
+ "commit_graph_cost": {
227
+ "es": "latencia acumulada en cada sesión de Claude",
228
+ "en": "accumulated latency in each Claude session"
229
+ },
230
+ "commit_graph_failed": {
231
+ "es": "commit-graph: falló (repo puede estar vacío)",
232
+ "en": "commit-graph: failed (repo may be empty)"
233
+ },
234
+ "commit_graph_fix": {
235
+ "es": "gitwise optimize --yes",
236
+ "en": "gitwise optimize --yes"
237
+ },
238
+ "commit_graph_fix_cost": {
239
+ "es": "trivial (segundos)",
240
+ "en": "trivial (seconds)"
241
+ },
242
+ "commit_graph_updated": {
243
+ "es": "commit-graph actualizado",
244
+ "en": "commit-graph updated"
245
+ },
246
+ "commit_invalid_format": {
247
+ "es": "el mensaje no sigue conventional commits: tipo(scope): descripción",
248
+ "en": "message does not follow conventional commits: type(scope): description"
249
+ },
250
+ "commit_msg_label": {
251
+ "es": "mensaje",
252
+ "en": "msg"
253
+ },
254
+ "commit_no_message": {
255
+ "es": "usa -m para proveer un mensaje de commit",
256
+ "en": "use -m to provide a commit message"
257
+ },
258
+ "commit_scope_hint": {
259
+ "es": "ámbito: {scope}",
260
+ "en": "scope: {scope}"
261
+ },
262
+ "commit_type_invalid": {
263
+ "es": "tipo inválido: {type}. Válidos: feat, fix, refactor, docs, chore, test, style, perf, ci, build, revert",
264
+ "en": "invalid type: {type}. Valid: feat, fix, refactor, docs, chore, test, style, perf, ci, build, revert"
265
+ },
266
+ "completed_in": {
267
+ "es": "completado en {elapsed}s",
268
+ "en": "completed in {elapsed}s"
269
+ },
270
+ "completions_unsupported_shell": {
271
+ "es": "shell no soportado para completions: {shell}",
272
+ "en": "unsupported shell for completions: {shell}"
273
+ },
274
+ "aliases_label": {
275
+ "es": "aliases",
276
+ "en": "aliases"
277
+ },
278
+ "missing_dependency_completions_shtab": {
279
+ "es": "dependencia faltante: shtab (requerida para completions bash/zsh)",
280
+ "en": "missing dependency: shtab (required for bash/zsh completions)"
281
+ },
282
+ "missing_dependency_hint": {
283
+ "es": "usa `uv run python -m gitwise ...` o instala deps con `uv sync`",
284
+ "en": "use `uv run python -m gitwise ...` or install dependencies with `uv sync`"
285
+ },
286
+ "config_failed": {
287
+ "es": "config {name}: falló (continuando)",
288
+ "en": "config {name}: failed (continuing)"
289
+ },
290
+ "config_up_to_date": {
291
+ "es": "configuración de git ya está actualizada",
292
+ "en": "git config is already up to date"
293
+ },
294
+ "configuring_agents_global": {
295
+ "es": "configurando agentes globalmente en: {path}",
296
+ "en": "configuring agents globally in: {path}"
297
+ },
298
+ "configuring_agents_in": {
299
+ "es": "configurando agentes en: {root}",
300
+ "en": "configuring agents in: {root}"
301
+ },
302
+ "confirm_delete_branches": {
303
+ "es": "¿eliminar {count} rama(s)? [s/N] ",
304
+ "en": "delete {count} branch(es)? [y/N] "
305
+ },
306
+ "confirm_optimize": {
307
+ "es": "¿ejecutar optimizaciones? [s/N] ",
308
+ "en": "run optimizations? [y/N] "
309
+ },
310
+ "confirm_setup_changes": {
311
+ "es": "¿aplicar estos cambios? [s/N] ",
312
+ "en": "apply these changes? [y/N] "
313
+ },
314
+ "confirm_stash_clean": {
315
+ "es": "¿Limpiar {count} stash(es)? (y/N)",
316
+ "en": "Clear {count} stash(es)? (y/N)"
317
+ },
318
+ "confirm_stash_drop": {
319
+ "es": "¿Eliminar {ref}? (y/N)",
320
+ "en": "Drop {ref}? (y/N)"
321
+ },
322
+ "confirm_tag_delete": {
323
+ "es": "¿Eliminar tag {name}? (y/N)",
324
+ "en": "Delete tag {name}? (y/N)"
325
+ },
326
+ "conflict_dir_agents": {
327
+ "es": "conflicto dir/agents",
328
+ "en": "conflict dir/agents"
329
+ },
330
+ "conflicts_found": {
331
+ "es": "{count} archivo(s) en conflicto",
332
+ "en": "{count} file(s) in conflict"
333
+ },
334
+ "conflicts_hint": {
335
+ "es": "Usa --ours o --theirs para resolver automaticamente",
336
+ "en": "Use --ours or --theirs to auto-resolve"
337
+ },
338
+ "conflicts_none": {
339
+ "es": "No hay conflictos",
340
+ "en": "No conflicts"
341
+ },
342
+ "conflicts_resolved_ours": {
343
+ "es": "{count} conflicto(s) resuelto(s) con ours",
344
+ "en": "{count} conflict(s) resolved with ours"
345
+ },
346
+ "conflicts_resolved_theirs": {
347
+ "es": "{count} conflicto(s) resuelto(s) con theirs",
348
+ "en": "{count} conflict(s) resolved with theirs"
349
+ },
350
+ "continue_prompt": {
351
+ "es": "¿continuar? [s/N] ",
352
+ "en": "continue? [y/N] "
353
+ },
354
+ "conventions_heading": {
355
+ "es": "## Convenciones git para este proyecto",
356
+ "en": "## Git conventions for this project"
357
+ },
358
+ "conventions_pointer": {
359
+ "es": "\n\n@AGENTS.md\n",
360
+ "en": "\n\n@AGENTS.md\n"
361
+ },
362
+ "could_not_delete": {
363
+ "es": "no se pudo eliminar: {branch} ({error})",
364
+ "en": "could not delete: {branch} ({error})"
365
+ },
366
+ "created": {
367
+ "es": "creado: {file}",
368
+ "en": "created: {file}"
369
+ },
370
+ "ctx_branches": {
371
+ "es": "## Ramas: {local} local, {remote} remota(s)",
372
+ "en": "## Branches: {local} local, {remote} remote"
373
+ },
374
+ "ctx_directory_tree": {
375
+ "es": "## Árbol de directorios",
376
+ "en": "## Directory Tree"
377
+ },
378
+ "ctx_file_types": {
379
+ "es": "## Tipos de archivo",
380
+ "en": "## File Types"
381
+ },
382
+ "ctx_more_entries": {
383
+ "es": " ... ({count} entradas más)",
384
+ "en": " ... ({count} more entries)"
385
+ },
386
+ "ctx_todo_fixme": {
387
+ "es": "## TODO/FIXME: {todo} TODO, {fixme} FIXME",
388
+ "en": "## TODO/FIXME: {todo} TODO, {fixme} FIXME"
389
+ },
390
+ "ctx_top_contributors": {
391
+ "es": "## Top contribuidores",
392
+ "en": "## Top Contributors"
393
+ },
394
+ "current_branch_msg": {
395
+ "es": "rama actual (activa)",
396
+ "en": "current branch (checked out)"
397
+ },
398
+ "current_value": {
399
+ "es": " (actual: {current})",
400
+ "en": " (current: {current})"
401
+ },
402
+ "debug_mkdir": {
403
+ "es": "mkdir: {file}",
404
+ "en": "mkdir: {file}"
405
+ },
406
+ "debug_rollback_deleted": {
407
+ "es": "rollback: eliminado {file}",
408
+ "en": "rollback: deleted {file}"
409
+ },
410
+ "debug_rollback_failed": {
411
+ "es": "rollback falló para {file}: {error}",
412
+ "en": "rollback failed for {file}: {error}"
413
+ },
414
+ "debug_rollback_restored": {
415
+ "es": "rollback: restaurado {file} desde {backup}",
416
+ "en": "rollback: restored {file} from {backup}"
417
+ },
418
+ "debug_rollback_restored_skill": {
419
+ "es": "rollback: restaurado {file} desde {skill}",
420
+ "en": "rollback: restored {file} from {skill}"
421
+ },
422
+ "debug_rollback_symlink": {
423
+ "es": "rollback: eliminado symlink {file}",
424
+ "en": "rollback: deleted symlink {file}"
425
+ },
426
+ "debug_skip": {
427
+ "es": "skip: {file}",
428
+ "en": "skip: {file}"
429
+ },
430
+ "debug_snapshot_written": {
431
+ "es": "snapshot escrito en {path}",
432
+ "en": "snapshot written to {path}"
433
+ },
434
+ "deleted_count": {
435
+ "es": "eliminadas {count} rama(s) sin seguimiento remoto",
436
+ "en": "deleted {count} stale branch(es)"
437
+ },
438
+ "detached_head": {
439
+ "es": "(HEAD desacoplado)",
440
+ "en": "(detached HEAD)"
441
+ },
442
+ "diagnostic": {
443
+ "es": "Diagnóstico{suffix} — {count} observación(es):",
444
+ "en": "Diagnostic{suffix} — {count} finding(s):"
445
+ },
446
+ "diff_prefix": {
447
+ "es": "diff: {stat}",
448
+ "en": "diff: {stat}"
449
+ },
450
+ "directory_exists": {
451
+ "es": "el directorio ya existe: {path}",
452
+ "en": "directory already exists: {path}"
453
+ },
454
+ "doctor_git_label": {
455
+ "es": "git",
456
+ "en": "git"
457
+ },
458
+ "doctor_install_label": {
459
+ "es": "instalación",
460
+ "en": "install"
461
+ },
462
+ "doctor_purpose_label": {
463
+ "es": "propósito",
464
+ "en": "purpose"
465
+ },
466
+ "doctor_python_label": {
467
+ "es": "python",
468
+ "en": "python"
469
+ },
470
+ "dry_run_no_clean": {
471
+ "es": "modo simulación — no se limpiará nada",
472
+ "en": "dry-run mode — nothing will be cleaned"
473
+ },
474
+ "dry_run_no_delete": {
475
+ "es": "modo simulación — no se eliminará nada",
476
+ "en": "dry-run mode — nothing will be deleted"
477
+ },
478
+ "dry_run_no_exec": {
479
+ "es": "modo simulación — no se ejecutará nada",
480
+ "en": "dry-run mode — nothing will be executed"
481
+ },
482
+ "dry_run_nothing": {
483
+ "es": "modo simulación — no se escribirá nada:",
484
+ "en": "dry-run mode — nothing will be written:"
485
+ },
486
+ "error": {
487
+ "es": "error",
488
+ "en": "error"
489
+ },
490
+ "error_updating": {
491
+ "es": "error al actualizar",
492
+ "en": "error updating"
493
+ },
494
+ "file_too_large": {
495
+ "es": ".claude/rules/{name}: archivo demasiado grande — no validado",
496
+ "en": ".claude/rules/{name}: file too large — not validated"
497
+ },
498
+ "fix_label": {
499
+ "es": "fix",
500
+ "en": "fix"
501
+ },
502
+ "fsmonitor_cost": {
503
+ "es": "~50ms extra por git status en repos medianos",
504
+ "en": "~50ms extra per git status in medium repos"
505
+ },
506
+ "fsmonitor_disabled": {
507
+ "es": "core.fsmonitor desactivado — git status más lento en repos grandes",
508
+ "en": "core.fsmonitor disabled — slower git status in large repos"
509
+ },
510
+ "fsmonitor_fix": {
511
+ "es": "gitwise setup --yes",
512
+ "en": "gitwise setup --yes"
513
+ },
514
+ "fsmonitor_fix_cost": {
515
+ "es": "trivial",
516
+ "en": "trivial"
517
+ },
518
+ "fsmonitor_not_supported": {
519
+ "es": "fsmonitor integrado no está soportado en Linux (solo macOS y Windows)",
520
+ "en": "built-in fsmonitor not supported on Linux (macOS and Windows only)"
521
+ },
522
+ "gc_already_running": {
523
+ "es": "git gc/maintenance ya está en ejecución — esperá a que termine",
524
+ "en": "git gc/maintenance already running — wait for it to finish"
525
+ },
526
+ "git_command_failed": {
527
+ "es": "Error al ejecutar {cmd}: {error}",
528
+ "en": "Failed to run {cmd}: {error}"
529
+ },
530
+ "git_diff_failed": {
531
+ "es": "git diff falló: {error}",
532
+ "en": "git diff failed: {error}"
533
+ },
534
+ "git_log_failed": {
535
+ "es": "Error al obtener log: {error}",
536
+ "en": "Failed to get log: {error}"
537
+ },
538
+ "git_log_title": {
539
+ "es": "Commits",
540
+ "en": "Commits"
541
+ },
542
+ "git_ref_failed": {
543
+ "es": "Error al listar refs: {error}",
544
+ "en": "Failed to list refs: {error}"
545
+ },
546
+ "git_show_failed": {
547
+ "es": "Error al mostrar commit: {error}",
548
+ "en": "Failed to show commit: {error}"
549
+ },
550
+ "git_too_old": {
551
+ "es": "git {ver} demasiado antiguo — se requiere ≥ {min}",
552
+ "en": "git {ver} too old — ≥ {min} required"
553
+ },
554
+ "git_version_ok": {
555
+ "es": "git {ver} (≥ {min} requerido)",
556
+ "en": "git {ver} (≥ {min} required)"
557
+ },
558
+ "gitattributes_conflict": {
559
+ "es": ".gitattributes: '{pattern}' tiene regla existente '{existing}' que puede entrar en conflicto con la de gitwise '{desired}'. Elimina la línea fuera del bloque managed para evitar duplicados.",
560
+ "en": ".gitattributes: '{pattern}' has existing rule '{existing}' that may conflict with gitwise's '{desired}'. Remove the line outside the managed block to avoid duplicates."
561
+ },
562
+ "gitattributes_force_lf": {
563
+ "es": "# Convention files: force LF for cross-platform consistency",
564
+ "en": "# Convention files: force LF for cross-platform consistency"
565
+ },
566
+ "gitattributes_merge_ours": {
567
+ "es": "# Generated snapshot: use local version on merge",
568
+ "en": "# Generated snapshot: use local version on merge"
569
+ },
570
+ "gitignore_backups": {
571
+ "es": "# Backups from gitwise setup-agents",
572
+ "en": "# Backups from gitwise setup-agents"
573
+ },
574
+ "gitignore_claude_local": {
575
+ "es": "# Claude Code local/personal files (do not commit)",
576
+ "en": "# Claude Code local/personal files (do not commit)"
577
+ },
578
+ "gitignore_snapshot": {
579
+ "es": "# Snapshot regenerated each gitwise run (timestamps change)",
580
+ "en": "# Snapshot regenerated each gitwise run (timestamps change)"
581
+ },
582
+ "gitwise": {
583
+ "es": "gitwise",
584
+ "en": "gitwise"
585
+ },
586
+ "global_skill_symlink_broken": {
587
+ "es": "~/.claude/skills/{skill} es un symlink roto — arréglalo manualmente",
588
+ "en": "~/.claude/skills/{skill} is a broken symlink — fix it manually"
589
+ },
590
+ "global_skill_symlink_different": {
591
+ "es": "~/.claude/skills/{skill} es symlink a '{existing}', no a '{expected}' — se mantiene como está",
592
+ "en": "~/.claude/skills/{skill} is symlink to '{existing}', not '{expected}' — keeping as is"
593
+ },
594
+ "gpg_active_no_key_repo": {
595
+ "es": "GPG signing activo pero sin user.signingkey — ejecuta: git config user.signingkey <id>",
596
+ "en": "GPG signing active but no user.signingkey — run: git config user.signingkey <id>"
597
+ },
598
+ "gpg_binary_fix_cost": {
599
+ "es": "trivial",
600
+ "en": "trivial"
601
+ },
602
+ "gpg_binary_missing_audit": {
603
+ "es": "commit.gpgsign=true pero gpg no instalado — los commits fallarán",
604
+ "en": "commit.gpgsign=true but gpg not installed — commits will fail"
605
+ },
606
+ "gpg_binary_missing_cost": {
607
+ "es": "ningún git commit funcionará hasta instalarlo",
608
+ "en": "no git commit will work until installed"
609
+ },
610
+ "gpg_binary_missing_fix": {
611
+ "es": "brew install gnupg",
612
+ "en": "brew install gnupg"
613
+ },
614
+ "gpg_enable_instruction": {
615
+ "es": " → git config --global commit.gpgsign true",
616
+ "en": " → git config --global commit.gpgsign true"
617
+ },
618
+ "gpg_install_instruction": {
619
+ "es": " → brew install gnupg",
620
+ "en": " → brew install gnupg"
621
+ },
622
+ "gpg_key_fix_cost": {
623
+ "es": "trivial",
624
+ "en": "trivial"
625
+ },
626
+ "gpg_key_instruction": {
627
+ "es": " → git config --global user.signingkey <key-id>",
628
+ "en": " → git config --global user.signingkey <key-id>"
629
+ },
630
+ "gpg_key_missing_audit": {
631
+ "es": "commit.gpgsign=true pero user.signingkey no configurado",
632
+ "en": "commit.gpgsign=true but user.signingkey not configured"
633
+ },
634
+ "gpg_key_missing_cost": {
635
+ "es": "ningún git commit funcionará",
636
+ "en": "no git commit will work"
637
+ },
638
+ "gpg_key_missing_fix": {
639
+ "es": "git config user.signingkey <key-id>",
640
+ "en": "git config user.signingkey <key-id>"
641
+ },
642
+ "gpg_no_signing_key": {
643
+ "es": " commit.gpgsign=true pero user.signingkey no configurado",
644
+ "en": " commit.gpgsign=true but user.signingkey not configured"
645
+ },
646
+ "gpg_not_configured_audit": {
647
+ "es": "GPG no configurado — commits sin firma digital",
648
+ "en": "GPG not configured — unsigned commits"
649
+ },
650
+ "gpg_not_configured_cost": {
651
+ "es": "commits no verificables criptográficamente",
652
+ "en": "commits not cryptographically verifiable"
653
+ },
654
+ "gpg_not_configured_fix": {
655
+ "es": "brew install gnupg → git config --global commit.gpgsign true",
656
+ "en": "brew install gnupg → git config --global commit.gpgsign true"
657
+ },
658
+ "gpg_not_configured_fix_cost": {
659
+ "es": "requiere crear llave GPG (~5 min)",
660
+ "en": "requires creating GPG key (~5 min)"
661
+ },
662
+ "gpg_not_enabled": {
663
+ "es": " gpg instalado pero commit.gpgsign no activado",
664
+ "en": " gpg installed but commit.gpgsign not enabled"
665
+ },
666
+ "gpg_not_installed": {
667
+ "es": " gpg no instalado — commits no se firmarán",
668
+ "en": " gpg not installed — commits won't be signed"
669
+ },
670
+ "gpg_not_installed_commit": {
671
+ "es": "GPG no instalado — no se pueden firmar commits",
672
+ "en": "GPG not installed — cannot sign commits"
673
+ },
674
+ "gpg_ready_msg": {
675
+ "es": " GPG listo — commit.gpgsign=true, llave y binario configurados",
676
+ "en": " GPG ready — commit.gpgsign=true, key and binary configured"
677
+ },
678
+ "gpg_signing_active_global": {
679
+ "es": "GPG signing activo pero sin user.signingkey — ejecuta: git config user.signingkey <id>",
680
+ "en": "GPG signing active but no user.signingkey — run: git config user.signingkey <id>"
681
+ },
682
+ "gpg_signing_active_no_key": {
683
+ "es": "GPG signing activo pero sin user.signingkey — ejecuta: git config user.signingkey <id>",
684
+ "en": "GPG signing active but no user.signingkey — run: git config user.signingkey <id>"
685
+ },
686
+ "gpg_signing_not_configured": {
687
+ "es": "GPG signing no configurado — si lo deseas: git config commit.gpgsign true",
688
+ "en": "GPG signing not configured — if desired: git config commit.gpgsign true"
689
+ },
690
+ "gpg_title": {
691
+ "es": "GPG (firma de commits):",
692
+ "en": "GPG (commit signing):"
693
+ },
694
+ "health_commit_graph": {
695
+ "es": "commit-graph ausente",
696
+ "en": "no commit-graph"
697
+ },
698
+ "health_gpg_signing": {
699
+ "es": "firma GPG desactivada",
700
+ "en": "GPG signing off"
701
+ },
702
+ "health_label": {
703
+ "es": "Salud: {score}/100 Nota: {grade}",
704
+ "en": "Health: {score}/100 Grade: {grade}"
705
+ },
706
+ "health_no_commits": {
707
+ "es": "sin commits",
708
+ "en": "no commits"
709
+ },
710
+ "health_old_stashes": {
711
+ "es": "stashes acumulados",
712
+ "en": "old stashes"
713
+ },
714
+ "health_remote": {
715
+ "es": "sin remoto",
716
+ "en": "no remote"
717
+ },
718
+ "health_stale_branches": {
719
+ "es": "ramas sin seguimiento remoto",
720
+ "en": "stale branches"
721
+ },
722
+ "health_too_many_branches": {
723
+ "es": "exceso de ramas",
724
+ "en": "too many branches"
725
+ },
726
+ "health_untracked_clutter": {
727
+ "es": "archivos sin seguimiento",
728
+ "en": "untracked clutter"
729
+ },
730
+ "health_upstream": {
731
+ "es": "sin rama seguimiento",
732
+ "en": "no upstream"
733
+ },
734
+ "help_group_options": {
735
+ "es": "opciones",
736
+ "en": "options"
737
+ },
738
+ "help_group_positional_arguments": {
739
+ "es": "argumentos posicionales",
740
+ "en": "positional arguments"
741
+ },
742
+ "help_root_environment_epilog": {
743
+ "es": "Entorno:\n GITWISE_DEBUG=1 imprime logs debug de subprocess git\n GITWISE_LOG_JSON=1 logs estructurados en stderr (JSON lines)\n GITWISE_JSON_PRETTY=1 activa JSON con formato por defecto\n GITWISE_LANG=es|en fuerza el locale de salida\n GITWISE_THEME=dark|light|auto override de tema de color\n GITWISE_NO_COLOR=1 desactiva salida ANSI color\n GITWISE_OUTPUT=agent modo de salida orientado a máquina\n GITWISE_AGENT=1 alias para forzar modo agent\n GITWISE_GIT_TIMEOUT=<s> timeout de subprocess git en segundos\n GITWISE_WIDTH=<cols> override del ancho de salida\n GITWISE_BIN_DIR=<path> destino de instalación para install.sh",
744
+ "en": "Environment:\n GITWISE_DEBUG=1 print git subprocess debug logs\n GITWISE_LOG_JSON=1 structured stderr logs (JSON lines)\n GITWISE_JSON_PRETTY=1 pretty-print JSON output by default\n GITWISE_LANG=es|en force output locale\n GITWISE_THEME=dark|light|auto color theme override\n GITWISE_NO_COLOR=1 disable ANSI color output\n GITWISE_OUTPUT=agent machine-oriented output mode\n GITWISE_AGENT=1 alias to force agent output mode\n GITWISE_GIT_TIMEOUT=<s> git subprocess timeout in seconds\n GITWISE_WIDTH=<cols> override output width\n GITWISE_BIN_DIR=<path> install destination for install.sh"
745
+ },
746
+ "hint_prefix": {
747
+ "es": "sugerencia",
748
+ "en": "hint"
749
+ },
750
+ "hook_install_note": {
751
+ "es": "instala hooks GPG + conventional commits",
752
+ "en": "installs GPG + conventional commit hooks"
753
+ },
754
+ "hook_installs": {
755
+ "es": "instala hooks GPG + conventional commits",
756
+ "en": "installs GPG + conventional commit hooks"
757
+ },
758
+ "ignora_label": {
759
+ "es": "ignora",
760
+ "en": "ignore"
761
+ },
762
+ "installed_globally": {
763
+ "es": "instalado globalmente",
764
+ "en": "installed globally"
765
+ },
766
+ "invalid_json": {
767
+ "es": ".claude/settings.json existente tiene JSON inválido — se sobreescribirá",
768
+ "en": "existing .claude/settings.json has invalid JSON — will be overwritten"
769
+ },
770
+ "large_blobs": {
771
+ "es": "{count} archivo(s) grandes (≥1MB) en HEAD",
772
+ "en": "{count} large file(s) (≥1MB) in HEAD"
773
+ },
774
+ "large_blobs_cost": {
775
+ "es": "lentitud en clone y fetch",
776
+ "en": "slow clone and fetch"
777
+ },
778
+ "large_blobs_fix": {
779
+ "es": "considerar git-lfs o eliminación de la historia",
780
+ "en": "consider git-lfs or history removal"
781
+ },
782
+ "large_blobs_fix_cost": {
783
+ "es": "depende del archivo",
784
+ "en": "depends on the file"
785
+ },
786
+ "last_commits": {
787
+ "es": "últimos {count} commits:",
788
+ "en": "last {count} commits:"
789
+ },
790
+ "legacy_commands": {
791
+ "es": ".claude/commands/{skill}.md es formato antiguo — ahora se usa .claude/skills/{skill}/SKILL.md. Eliminá el .md viejo manualmente.",
792
+ "en": ".claude/commands/{skill}.md is legacy format — now using .claude/skills/{skill}/SKILL.md. Delete the old .md manually."
793
+ },
794
+ "legacy_migration_mode": {
795
+ "es": "modo migracion legacy activo: se prioriza layout canonico (AGENTS.md + .agents/skills)",
796
+ "en": "legacy migration mode enabled: canonical layout (AGENTS.md + .agents/skills) is enforced"
797
+ },
798
+ "log_no_commits": {
799
+ "es": "sin commits aún",
800
+ "en": "no commits yet"
801
+ },
802
+ "managed_block_created": {
803
+ "es": "creado bloque managed: {file}",
804
+ "en": "created managed block: {file}"
805
+ },
806
+ "managed_block_unclosed": {
807
+ "es": "{file}: bloque managed sin marcador de cierre — se dejará intacto",
808
+ "en": "{file}: managed block missing closing marker — will be left intact"
809
+ },
810
+ "managed_block_updated": {
811
+ "es": "actualizado bloque managed: {file}",
812
+ "en": "updated managed block: {file}"
813
+ },
814
+ "markers_label": {
815
+ "es": "marcadores",
816
+ "en": "markers"
817
+ },
818
+ "merge_branch_not_found": {
819
+ "es": "Branch {branch} no encontrada",
820
+ "en": "Branch {branch} not found"
821
+ },
822
+ "merge_conflicts": {
823
+ "es": "Conflictos detectados durante la mezcla",
824
+ "en": "Conflicts detected during merge"
825
+ },
826
+ "merge_detached_head": {
827
+ "es": "HEAD desacoplado, no se puede mezclar",
828
+ "en": "Detached HEAD, cannot merge"
829
+ },
830
+ "merge_diverged": {
831
+ "es": "Branches divergidas (ahead: {ahead}, behind: {behind})",
832
+ "en": "Branches diverged (ahead: {ahead}, behind: {behind})"
833
+ },
834
+ "merge_merge_label": {
835
+ "es": "merge",
836
+ "en": "merge"
837
+ },
838
+ "merge_ok": {
839
+ "es": "Mezcla completada: {branch} → {into}",
840
+ "en": "Merge completed: {branch} → {into}"
841
+ },
842
+ "merge_proceed": {
843
+ "es": "¿Continuar con la mezcla? (y/N)",
844
+ "en": "Proceed with merge? (y/N)"
845
+ },
846
+ "merge_rebase_label": {
847
+ "es": "rebase",
848
+ "en": "rebase"
849
+ },
850
+ "merge_rebased": {
851
+ "es": "Rebase completado: {branch} → {into}",
852
+ "en": "Rebase completed: {branch} → {into}"
853
+ },
854
+ "merge_hint": {
855
+ "es": "Revisa conflictos o usa --dry-run para ver advertencias antes de ejecutar.",
856
+ "en": "Review conflicts or use --dry-run to inspect warnings before running."
857
+ },
858
+ "merge_same_branch": {
859
+ "es": "No se puede mezclar una branch consigo misma",
860
+ "en": "Cannot merge a branch into itself"
861
+ },
862
+ "merge_uncommitted": {
863
+ "es": "Hay cambios sin confirmar",
864
+ "en": "There are uncommitted changes"
865
+ },
866
+ "schema_unknown_command": {
867
+ "es": "comando desconocido: {name}",
868
+ "en": "unknown command: {name}"
869
+ },
870
+ "schema_unknown_command_hint": {
871
+ "es": "ejecuta `gitwise commands --json` para listar comandos disponibles",
872
+ "en": "run `gitwise commands --json` to list available commands"
873
+ },
874
+ "schema_file_missing": {
875
+ "es": "schema no encontrado para comando '{command}' en versión {version}",
876
+ "en": "schema not found for command '{command}' in version {version}"
877
+ },
878
+ "schema_file_missing_hint": {
879
+ "es": "ejecuta `gitwise schema <command> --version v1 --json` o verifica `share/schemas/v1/input/*.json`",
880
+ "en": "run `gitwise schema <command> --version v1 --json` or verify `share/schemas/v1/input/*.json`"
881
+ },
882
+ "migrated_skill": {
883
+ "es": "migrado: {file} → {target} (symlink)",
884
+ "en": "migrated: {file} → {target} (symlink)"
885
+ },
886
+ "migrate_requires_local": {
887
+ "es": "--migrate-legacy-claude requiere --local",
888
+ "en": "--migrate-legacy-claude requires --local"
889
+ },
890
+ "missing_globs_frontmatter": {
891
+ "es": ".claude/rules/{name}: falta 'globs:' en frontmatter — la regla no se activará",
892
+ "en": ".claude/rules/{name}: missing 'globs:' in frontmatter — rule won't activate"
893
+ },
894
+ "mixed_staging": {
895
+ "es": "hay archivos en área de preparación y sin confirmar — el commit no sería atómico",
896
+ "en": "staged and unstaged files present — commit wouldn't be atomic"
897
+ },
898
+ "mixed_staging_cost": {
899
+ "es": "commits no atómicos dificultan el historial",
900
+ "en": "non-atomic commits make history harder to follow"
901
+ },
902
+ "mixed_staging_fix": {
903
+ "es": "revisar con git diff --staged antes de confirmar",
904
+ "en": "review with git diff --staged before committing"
905
+ },
906
+ "mixed_staging_fix_cost": {
907
+ "es": "n/a",
908
+ "en": "n/a"
909
+ },
910
+ "modified_files_status": {
911
+ "es": "estado ({count} archivos modificados):",
912
+ "en": "status ({count} modified files):"
913
+ },
914
+ "no_commits_yet": {
915
+ "es": "sin commits aún",
916
+ "en": "no commits yet"
917
+ },
918
+ "no_commits_yet_note": {
919
+ "es": "sin commits aún",
920
+ "en": "no commits yet"
921
+ },
922
+ "no_deletable_branches": {
923
+ "es": "no hay ramas eliminables",
924
+ "en": "no branches to delete"
925
+ },
926
+ "no_orphaned_worktrees": {
927
+ "es": "no hay worktrees huérfanos{suffix}",
928
+ "en": "no orphaned worktrees{suffix}"
929
+ },
930
+ "no_repo_root": {
931
+ "es": "no se pudo determinar la raíz del repositorio",
932
+ "en": "could not determine repository root"
933
+ },
934
+ "no_stale_branches": {
935
+ "es": "no hay ramas sin seguimiento remoto ([gone])",
936
+ "en": "no stale branches ([gone])"
937
+ },
938
+ "no_uncommitted_changes": {
939
+ "es": "sin cambios sin confirmar",
940
+ "en": "no uncommitted changes"
941
+ },
942
+ "no_upstream_audit": {
943
+ "es": "Branch sin upstream configurado",
944
+ "en": "Branch has no upstream configured"
945
+ },
946
+ "no_upstream_cost": {
947
+ "es": "push/pull podrían fallar sin upstream",
948
+ "en": "push/pull may fail without upstream"
949
+ },
950
+ "no_upstream_fix": {
951
+ "es": "git branch --set-upstream-to=origin/<branch>",
952
+ "en": "git branch --set-upstream-to=origin/<branch>"
953
+ },
954
+ "not_a_git_repo": {
955
+ "es": "no es un repositorio git",
956
+ "en": "not a git repository"
957
+ },
958
+ "not_configured": {
959
+ "es": " (no configurado)",
960
+ "en": " (not configured)"
961
+ },
962
+ "nothing_staged": {
963
+ "es": "nada en área de preparación",
964
+ "en": "nothing staged"
965
+ },
966
+ "ok_prefix": {
967
+ "es": "✓",
968
+ "en": "✓"
969
+ },
970
+ "old_stashes_msg": {
971
+ "es": "{count} stash(es) con más de {days} días",
972
+ "en": "{count} stash(es) older than {days} days"
973
+ },
974
+ "optimizing": {
975
+ "es": "optimizando: {root}",
976
+ "en": "optimizing: {root}"
977
+ },
978
+ "optional_tools": {
979
+ "es": "herramientas opcionales:",
980
+ "en": "optional tools:"
981
+ },
982
+ "orphaned_worktrees": {
983
+ "es": "worktrees huérfanos detectados ({count}) — directorio inexistente:",
984
+ "en": "orphaned worktrees detected ({count}) — missing directory:"
985
+ },
986
+ "output_exceeds_8kb": {
987
+ "es": "output {size} bytes supera 8KB — usa --max-commits menor",
988
+ "en": "output {size} bytes exceeds 8KB — use smaller --max-commits"
989
+ },
990
+ "pending": {
991
+ "es": "pendiente",
992
+ "en": "pending"
993
+ },
994
+ "pick_aborted": {
995
+ "es": "Pick abortado",
996
+ "en": "Pick aborted"
997
+ },
998
+ "pick_conflicts": {
999
+ "es": "Conflictos durante pick",
1000
+ "en": "Conflicts during pick"
1001
+ },
1002
+ "pick_continued": {
1003
+ "es": "Pick continuado",
1004
+ "en": "Pick continued"
1005
+ },
1006
+ "pick_dry": {
1007
+ "es": "Se ejecutaría {action} en: {refs}",
1008
+ "en": "Would {action}: {refs}"
1009
+ },
1010
+ "pick_no_refs": {
1011
+ "es": "Se requieren refs de commits",
1012
+ "en": "Commit refs required"
1013
+ },
1014
+ "pick_ok": {
1015
+ "es": "{action} completado: {refs}",
1016
+ "en": "{action} completed: {refs}"
1017
+ },
1018
+ "planned_changes": {
1019
+ "es": "cambios planificados ({count}):",
1020
+ "en": "planned changes ({count}):"
1021
+ },
1022
+ "platform_label": {
1023
+ "es": "plataforma: {name}",
1024
+ "en": "platform: {name}"
1025
+ },
1026
+ "pr_gh_required": {
1027
+ "es": "gh CLI no encontrado — instala: brew install gh",
1028
+ "en": "gh CLI not found — install: brew install gh"
1029
+ },
1030
+ "pr_invalid_json": {
1031
+ "es": "respuesta JSON inválida desde gh",
1032
+ "en": "invalid JSON response from gh"
1033
+ },
1034
+ "pr_invalid_selector": {
1035
+ "es": "selector de PR inválido: {selector}",
1036
+ "en": "invalid PR selector: {selector}"
1037
+ },
1038
+ "pr_list_title": {
1039
+ "es": "Pull Requests",
1040
+ "en": "Pull Requests"
1041
+ },
1042
+ "pr_body_title": {
1043
+ "es": "Descripción",
1044
+ "en": "Description"
1045
+ },
1046
+ "pr_body_truncated": {
1047
+ "es": "(texto truncado)",
1048
+ "en": "(text truncated)"
1049
+ },
1050
+ "pr_comment_empty": {
1051
+ "es": "(sin contenido)",
1052
+ "en": "(empty body)"
1053
+ },
1054
+ "pr_comment_header": {
1055
+ "es": "Comentario {index} — {author} — {created}",
1056
+ "en": "Comment {index} - {author} - {created}"
1057
+ },
1058
+ "pr_comment_truncated": {
1059
+ "es": "(comentario truncado)",
1060
+ "en": "(comment truncated)"
1061
+ },
1062
+ "pr_comments_none": {
1063
+ "es": "no hay comentarios en este PR",
1064
+ "en": "no comments on this PR"
1065
+ },
1066
+ "pr_comments_title": {
1067
+ "es": "Comentarios PR #{number}: {title}",
1068
+ "en": "PR #{number} comments: {title}"
1069
+ },
1070
+ "pr_current_label": {
1071
+ "es": "PR actual",
1072
+ "en": "current PR"
1073
+ },
1074
+ "pr_checks_col_duration": {
1075
+ "es": "Duración",
1076
+ "en": "Duration"
1077
+ },
1078
+ "pr_checks_col_name": {
1079
+ "es": "Check",
1080
+ "en": "Check"
1081
+ },
1082
+ "pr_checks_col_status": {
1083
+ "es": "Estado",
1084
+ "en": "Status"
1085
+ },
1086
+ "pr_checks_col_workflow": {
1087
+ "es": "Workflow",
1088
+ "en": "Workflow"
1089
+ },
1090
+ "pr_checks_links_title": {
1091
+ "es": "Links",
1092
+ "en": "Links"
1093
+ },
1094
+ "pr_checks_none": {
1095
+ "es": "no hay checks para este PR",
1096
+ "en": "no checks for this PR"
1097
+ },
1098
+ "pr_check_state_cancel": {
1099
+ "es": "cancelado",
1100
+ "en": "cancelled"
1101
+ },
1102
+ "pr_check_state_fail": {
1103
+ "es": "fallido",
1104
+ "en": "failed"
1105
+ },
1106
+ "pr_check_state_other": {
1107
+ "es": "otro",
1108
+ "en": "other"
1109
+ },
1110
+ "pr_check_state_pass": {
1111
+ "es": "ok",
1112
+ "en": "pass"
1113
+ },
1114
+ "pr_check_state_pending": {
1115
+ "es": "pendiente",
1116
+ "en": "pending"
1117
+ },
1118
+ "pr_check_state_queued": {
1119
+ "es": "en cola",
1120
+ "en": "queued"
1121
+ },
1122
+ "pr_check_state_running": {
1123
+ "es": "en ejecución",
1124
+ "en": "running"
1125
+ },
1126
+ "pr_check_state_skip": {
1127
+ "es": "omitido",
1128
+ "en": "skipped"
1129
+ },
1130
+ "pr_checks_summary": {
1131
+ "es": "Resumen",
1132
+ "en": "Summary"
1133
+ },
1134
+ "pr_checks_summary_value": {
1135
+ "es": "{total} total | {passed} {label_pass} | {failed} {label_fail} | {running} {label_running} | {other} {label_other}",
1136
+ "en": "{total} total | {passed} {label_pass} | {failed} {label_fail} | {running} {label_running} | {other} {label_other}"
1137
+ },
1138
+ "pr_checks_table_title": {
1139
+ "es": "Checks",
1140
+ "en": "Checks"
1141
+ },
1142
+ "pr_checks_title": {
1143
+ "es": "Checks {selector}",
1144
+ "en": "Checks {selector}"
1145
+ },
1146
+ "pr_field_assignees": {
1147
+ "es": "Assignees",
1148
+ "en": "Assignees"
1149
+ },
1150
+ "pr_field_author": {
1151
+ "es": "Autor",
1152
+ "en": "Author"
1153
+ },
1154
+ "pr_field_branch": {
1155
+ "es": "Ramas",
1156
+ "en": "Branches"
1157
+ },
1158
+ "pr_field_changes": {
1159
+ "es": "Cambios",
1160
+ "en": "Changes"
1161
+ },
1162
+ "pr_field_comments": {
1163
+ "es": "Comentarios",
1164
+ "en": "Comments"
1165
+ },
1166
+ "pr_field_closed_at": {
1167
+ "es": "Cerrado",
1168
+ "en": "Closed"
1169
+ },
1170
+ "pr_field_labels": {
1171
+ "es": "Labels",
1172
+ "en": "Labels"
1173
+ },
1174
+ "pr_field_mergeable": {
1175
+ "es": "Mergeable",
1176
+ "en": "Mergeable"
1177
+ },
1178
+ "pr_field_merged_at": {
1179
+ "es": "Mergeado",
1180
+ "en": "Merged"
1181
+ },
1182
+ "pr_field_review": {
1183
+ "es": "Review",
1184
+ "en": "Review"
1185
+ },
1186
+ "pr_field_review_requests": {
1187
+ "es": "Review requests",
1188
+ "en": "Review requests"
1189
+ },
1190
+ "pr_field_state": {
1191
+ "es": "Estado",
1192
+ "en": "State"
1193
+ },
1194
+ "pr_field_url": {
1195
+ "es": "URL",
1196
+ "en": "URL"
1197
+ },
1198
+ "pr_none": {
1199
+ "es": "no hay pull requests abiertos",
1200
+ "en": "no open pull requests"
1201
+ },
1202
+ "pr_unknown_action": {
1203
+ "es": "acción desconocida: {action}. Usa: list, checks, view, comments",
1204
+ "en": "unknown action: {action}. Use: list, checks, view, comments"
1205
+ },
1206
+ "pr_view_title": {
1207
+ "es": "PR #{number}: {title}",
1208
+ "en": "PR #{number}: {title}"
1209
+ },
1210
+ "protected_branch": {
1211
+ "es": "protegida (lista por defecto)",
1212
+ "en": "protected (default list)"
1213
+ },
1214
+ "protected_key": {
1215
+ "es": "Intento de modificar clave protegida: {name}",
1216
+ "en": "Attempt to modify protected key: {name}"
1217
+ },
1218
+ "protected_key_attempt": {
1219
+ "es": "Intento de modificar clave protegida: {key}",
1220
+ "en": "Attempt to modify protected key: {key}"
1221
+ },
1222
+ "protected_stale_branches": {
1223
+ "es": "ramas sin seguimiento remoto protegidas ({count}) — no se tocarán:",
1224
+ "en": "protected stale branches ({count}) — won't be touched:"
1225
+ },
1226
+ "prune_complete": {
1227
+ "es": "prune completado",
1228
+ "en": "prune complete"
1229
+ },
1230
+ "prune_not_critical": {
1231
+ "es": "prune: no crítico, continuando",
1232
+ "en": "prune: not critical, continuing"
1233
+ },
1234
+ "python_too_old": {
1235
+ "es": "Python {ver} demasiado antiguo — se requiere ≥ 3.9",
1236
+ "en": "Python {ver} too old — ≥ 3.9 required"
1237
+ },
1238
+ "python_version_ok": {
1239
+ "es": "Python {ver}",
1240
+ "en": "Python {ver}"
1241
+ },
1242
+ "repack_complete": {
1243
+ "es": "repack completado",
1244
+ "en": "repack complete"
1245
+ },
1246
+ "repack_failed": {
1247
+ "es": "repack: falló",
1248
+ "en": "repack: failed"
1249
+ },
1250
+ "repack_fallo_bitmap": {
1251
+ "es": "repack --write-bitmap-index falló, reintentando sin bitmap",
1252
+ "en": "repack --write-bitmap-index failed, retrying without bitmap"
1253
+ },
1254
+ "replaced": {
1255
+ "es": "reemplazado: {file} (backup: {backup})",
1256
+ "en": "replaced: {file} (backup: {backup})"
1257
+ },
1258
+ "repo_good_shape": {
1259
+ "es": "repositorio en buen estado{suffix}",
1260
+ "en": "repository in good shape{suffix}"
1261
+ },
1262
+ "repo_size": {
1263
+ "es": "tamaño del repo: {size}KB",
1264
+ "en": "repo size: {size}KB"
1265
+ },
1266
+ "section_current_branch": {
1267
+ "es": "## Rama actual",
1268
+ "en": "## Current branch"
1269
+ },
1270
+ "section_last_commits": {
1271
+ "es": "## Últimos 10 commits",
1272
+ "en": "## Last 10 commits"
1273
+ },
1274
+ "section_status": {
1275
+ "es": "## Estado",
1276
+ "en": "## Status"
1277
+ },
1278
+ "settings_sin_gpg_deny": {
1279
+ "es": "settings.json no tiene reglas deny para GPG bypass — revisar manualmente",
1280
+ "en": "settings.json missing deny rules for GPG bypass — check manually"
1281
+ },
1282
+ "settings_updated_merged": {
1283
+ "es": "actualizado (deny rules merged): .claude/settings.json",
1284
+ "en": "updated (deny rules merged): .claude/settings.json"
1285
+ },
1286
+ "setup_agents_complete": {
1287
+ "es": "setup-agents completado",
1288
+ "en": "setup-agents complete"
1289
+ },
1290
+ "setup_agents_failed": {
1291
+ "es": "setup-agents falló: {error}",
1292
+ "en": "setup-agents failed: {error}"
1293
+ },
1294
+ "setup_agents_global_complete": {
1295
+ "es": "setup-agents global completado",
1296
+ "en": "setup-agents global complete"
1297
+ },
1298
+ "setup_agents_global_failed": {
1299
+ "es": "setup-agents (global) falló: {error}",
1300
+ "en": "setup-agents (global) failed: {error}"
1301
+ },
1302
+ "setup_complete": {
1303
+ "es": "setup completado",
1304
+ "en": "setup complete"
1305
+ },
1306
+ "setup_hook_backend_selected": {
1307
+ "es": "hooks backend: {backend} (modo solicitado: {requested})",
1308
+ "en": "hooks backend: {backend} (requested mode: {requested})"
1309
+ },
1310
+ "setup_hook_managers_detected": {
1311
+ "es": "managers detectados: {managers}",
1312
+ "en": "detected managers: {managers}"
1313
+ },
1314
+ "setup_hook_warning_legacy_conflict": {
1315
+ "es": "core.hooksPath apunta a '{current}'. Con modo preserve se omiten hooks para no romper configuración existente.",
1316
+ "en": "core.hooksPath points to '{current}'. In preserve mode, hooks are skipped to avoid breaking existing setup."
1317
+ },
1318
+ "setup_hook_warning_legacy_overwrite": {
1319
+ "es": "modo legacy sobrescribirá core.hooksPath actual: '{current}'",
1320
+ "en": "legacy mode will overwrite current core.hooksPath: '{current}'"
1321
+ },
1322
+ "setup_hook_warning_managers_no_native": {
1323
+ "es": "detectados {managers} y Git sin hooks nativos: se omite instalación de hooks para evitar conflictos.",
1324
+ "en": "detected {managers} and native config hooks unavailable: skipping hook installation to avoid conflicts."
1325
+ },
1326
+ "setup_hook_warning_managers_preserve": {
1327
+ "es": "detectados {managers}. Con modo preserve se omite instalación de hooks para evitar conflictos.",
1328
+ "en": "detected {managers}. In preserve mode, hook installation is skipped to avoid conflicts."
1329
+ },
1330
+ "setup_hook_warning_existing_scripts": {
1331
+ "es": "hooks ya existentes detectados ({hooks}) en el directorio activo. Con modo preserve se omite instalación de hooks para evitar sobreescritura.",
1332
+ "en": "existing hooks detected ({hooks}) in the active hooks directory. In preserve mode, hook installation is skipped to avoid overwriting."
1333
+ },
1334
+ "setup_hook_warning_native_unsupported": {
1335
+ "es": "modo native requiere soporte de hooks por configuración de Git (git hook + hook.<name>.*). Se omite instalación de hooks.",
1336
+ "en": "native mode requires Git config hooks support (git hook + hook.<name>.*). Hook installation is skipped."
1337
+ },
1338
+ "setup_note_fsmonitor": {
1339
+ "es": "solo macOS",
1340
+ "en": "macOS only"
1341
+ },
1342
+ "setup_note_hooks_legacy": {
1343
+ "es": "instala hooks Gitwise vía core.hooksPath (modo legacy)",
1344
+ "en": "installs Gitwise hooks via core.hooksPath (legacy mode)"
1345
+ },
1346
+ "setup_note_hooks_native": {
1347
+ "es": "instala hook nativo por configuración Git (modo native)",
1348
+ "en": "installs native hook via Git config (native mode)"
1349
+ },
1350
+ "setup_note_hooks_native_event": {
1351
+ "es": "agrega evento del hook nativo en Git config",
1352
+ "en": "adds native hook event in Git config"
1353
+ },
1354
+ "setup_note_hooks_native_migrate": {
1355
+ "es": "migra desde core.hooksPath de Gitwise a hooks nativos",
1356
+ "en": "migrates from Gitwise core.hooksPath to native hooks"
1357
+ },
1358
+ "setup_note_hooks": {
1359
+ "es": "instala hooks GPG + conventional commits",
1360
+ "en": "installs GPG + conventional commit hooks"
1361
+ },
1362
+ "setup_note_manyfiles": {
1363
+ "es": "opcional, git ≥ 2.40",
1364
+ "en": "opt-in, git ≥ 2.40"
1365
+ },
1366
+ "show_header": {
1367
+ "es": "mostrar {ref}",
1368
+ "en": "show {ref}"
1369
+ },
1370
+ "show_ref_not_found": {
1371
+ "es": "referencia no encontrada: {ref}",
1372
+ "en": "ref not found: {ref}"
1373
+ },
1374
+ "skill_conflict_dir_agents": {
1375
+ "es": "~/.claude/skills/{skill} es dir regular y ~/.agents/skills/{skill} también existe — sin cambios. Consolida manualmente.",
1376
+ "en": "~/.claude/skills/{skill} is a regular dir and ~/.agents/skills/{skill} also exists — no changes. Consolidate manually."
1377
+ },
1378
+ "skill_dir_regular_with_agents": {
1379
+ "es": ".claude/skills/{skill} es un directorio regular aunque .agents/ existe — gitwise escribe SKILL.md directamente",
1380
+ "en": ".claude/skills/{skill} is a regular directory even though .agents/ exists — gitwise writes SKILL.md directly"
1381
+ },
1382
+ "skill_globally_available": {
1383
+ "es": ".claude/skills/{skill}: skill ya disponible globalmente (~/.claude/skills/) — se omite creación local (prioridad user > project)",
1384
+ "en": ".claude/skills/{skill}: skill already available globally (~/.claude/skills/) — skipping local creation (user > project priority)"
1385
+ },
1386
+ "skill_symlink_broken": {
1387
+ "es": ".claude/skills/{skill} es un symlink roto — arréglalo manualmente",
1388
+ "en": ".claude/skills/{skill} is a broken symlink — fix it manually"
1389
+ },
1390
+ "skill_symlink_different": {
1391
+ "es": ".claude/skills/{skill} es symlink a '{existing}', no a '{expected}' — se mantiene como está",
1392
+ "en": ".claude/skills/{skill} is symlink to '{existing}', not '{expected}' — keeping as is"
1393
+ },
1394
+ "skills_already_configured": {
1395
+ "es": "skills ({count}): ya configurados",
1396
+ "en": "skills ({count}): already configured"
1397
+ },
1398
+ "snapshot_generated": {
1399
+ "es": "snapshot generado: {path}",
1400
+ "en": "snapshot generated: {path}"
1401
+ },
1402
+ "space_freed": {
1403
+ "es": "espacio liberado: {saved}KB ({before}KB → {after}KB)",
1404
+ "en": "space freed: {saved}KB ({before}KB → {after}KB)"
1405
+ },
1406
+ "stale_branches_audit": {
1407
+ "es": "{count} rama(s) con upstream eliminado ([gone])",
1408
+ "en": "{count} branch(es) with deleted upstream ([gone])"
1409
+ },
1410
+ "stale_branches_cost": {
1411
+ "es": "clutter en `git branch`; confunde agentes Claude",
1412
+ "en": "clutter in `git branch`; confuses Claude agents"
1413
+ },
1414
+ "stale_branches_fix_cost": {
1415
+ "es": "trivial",
1416
+ "en": "trivial"
1417
+ },
1418
+ "stash_clean_dry": {
1419
+ "es": "Se eliminarían {count} stash(es)",
1420
+ "en": "Would drop {count} stash(es)"
1421
+ },
1422
+ "stash_cleaned": {
1423
+ "es": "{count} stash(es) eliminados",
1424
+ "en": "{count} stash(es) cleared"
1425
+ },
1426
+ "stash_cleared_count": {
1427
+ "es": "{count} stash(es) eliminados",
1428
+ "en": "{count} stash(es) cleared"
1429
+ },
1430
+ "stash_col_branch": {
1431
+ "es": "Rama",
1432
+ "en": "Branch"
1433
+ },
1434
+ "stash_col_message": {
1435
+ "es": "Mensaje",
1436
+ "en": "Message"
1437
+ },
1438
+ "stash_col_ref": {
1439
+ "es": "Ref",
1440
+ "en": "Ref"
1441
+ },
1442
+ "stash_cost": {
1443
+ "es": "acumulación de WIP probablemente irrelevante",
1444
+ "en": "accumulation of probably irrelevant WIP"
1445
+ },
1446
+ "stash_dropped": {
1447
+ "es": "Stash {ref} eliminado",
1448
+ "en": "Stash {ref} dropped"
1449
+ },
1450
+ "stash_empty": {
1451
+ "es": "No hay stashes",
1452
+ "en": "No stashes"
1453
+ },
1454
+ "stash_fix": {
1455
+ "es": "git stash drop stash@{N} o git stash clear",
1456
+ "en": "git stash drop stash@{N} or git stash clear"
1457
+ },
1458
+ "stash_fix_cost": {
1459
+ "es": "irreversible — revisar antes",
1460
+ "en": "irreversible — review first"
1461
+ },
1462
+ "stash_list_title": {
1463
+ "es": "Stashes",
1464
+ "en": "Stashes"
1465
+ },
1466
+ "stash_not_found": {
1467
+ "es": "stash@{{{index}}} no encontrado",
1468
+ "en": "stash@{{{index}}} not found"
1469
+ },
1470
+ "stash_popped": {
1471
+ "es": "Stash {ref} restaurado",
1472
+ "en": "Stash {ref} restored"
1473
+ },
1474
+ "stash_hint": {
1475
+ "es": "Usa 'gitwise stash list' para ver índices válidos antes de show/drop/pop.",
1476
+ "en": "Use 'gitwise stash list' to inspect valid indexes before show/drop/pop."
1477
+ },
1478
+ "stash_unknown_action": {
1479
+ "es": "Acción desconocida: {action}",
1480
+ "en": "Unknown action: {action}"
1481
+ },
1482
+ "stashes_section": {
1483
+ "es": "## Stashes: {count}",
1484
+ "en": "## Stashes: {count}"
1485
+ },
1486
+ "status_ahead_label": {
1487
+ "es": "adelante",
1488
+ "en": "ahead"
1489
+ },
1490
+ "status_behind_label": {
1491
+ "es": "atrás",
1492
+ "en": "behind"
1493
+ },
1494
+ "status_clean": {
1495
+ "es": "(limpio)",
1496
+ "en": "(clean)"
1497
+ },
1498
+ "status_more_files": {
1499
+ "es": "... +{count} más",
1500
+ "en": "... +{count} more"
1501
+ },
1502
+ "status_staged": {
1503
+ "es": "{count} archivo(s) en área de preparación",
1504
+ "en": "{count} file(s) staged"
1505
+ },
1506
+ "status_staged_label": {
1507
+ "es": "preparados",
1508
+ "en": "staged"
1509
+ },
1510
+ "status_unstaged": {
1511
+ "es": "{count} archivo(s) modificado(s)",
1512
+ "en": "{count} file(s) modified"
1513
+ },
1514
+ "status_unstaged_label": {
1515
+ "es": "modificados",
1516
+ "en": "unstaged"
1517
+ },
1518
+ "status_untracked": {
1519
+ "es": "{count} archivo(s) sin seguimiento",
1520
+ "en": "{count} untracked file(s)"
1521
+ },
1522
+ "status_untracked_label": {
1523
+ "es": "sin seguimiento",
1524
+ "en": "untracked"
1525
+ },
1526
+ "status_sync_fetch": {
1527
+ "es": "Sincronizando: fetch...",
1528
+ "en": "Syncing: fetch..."
1529
+ },
1530
+ "status_sync_pull": {
1531
+ "es": "Sincronizando: pull...",
1532
+ "en": "Syncing: pull..."
1533
+ },
1534
+ "status_sync_push": {
1535
+ "es": "Sincronizando: push...",
1536
+ "en": "Syncing: push..."
1537
+ },
1538
+ "status_optimize_commit_graph": {
1539
+ "es": "Optimizando: actualizando commit-graph...",
1540
+ "en": "Optimizing: updating commit-graph..."
1541
+ },
1542
+ "status_optimize_repack": {
1543
+ "es": "Optimizando: repack...",
1544
+ "en": "Optimizing: repack..."
1545
+ },
1546
+ "status_optimize_prune": {
1547
+ "es": "Optimizando: prune...",
1548
+ "en": "Optimizing: prune..."
1549
+ },
1550
+ "status_audit_stashes": {
1551
+ "es": "Auditando: revisando stashes...",
1552
+ "en": "Auditing: checking stashes..."
1553
+ },
1554
+ "status_audit_blobs": {
1555
+ "es": "Auditando: buscando blobs grandes...",
1556
+ "en": "Auditing: scanning large blobs..."
1557
+ },
1558
+ "status_audit_sizer": {
1559
+ "es": "Auditando: ejecutando git-sizer...",
1560
+ "en": "Auditing: running git-sizer..."
1561
+ },
1562
+ "step_commit_graph": {
1563
+ "es": "git commit-graph write --reachable --changed-paths",
1564
+ "en": "git commit-graph write --reachable --changed-paths"
1565
+ },
1566
+ "step_prune": {
1567
+ "es": "git prune (elimina objetos no referenciados)",
1568
+ "en": "git prune (remove unreachable objects)"
1569
+ },
1570
+ "step_repack": {
1571
+ "es": "git repack -A -d --write-bitmap-index",
1572
+ "en": "git repack -A -d --write-bitmap-index"
1573
+ },
1574
+ "strict_warnings": {
1575
+ "es": "--strict: warnings tratados como errores",
1576
+ "en": "--strict: warnings treated as errors"
1577
+ },
1578
+ "suggest_diff_failed": {
1579
+ "es": "No se pudo obtener diff staged",
1580
+ "en": "Failed to get staged diff"
1581
+ },
1582
+ "suggest_message": {
1583
+ "es": "Sugerencia: {message}",
1584
+ "en": "Suggestion: {message}"
1585
+ },
1586
+ "suggest_no_staged": {
1587
+ "es": "No hay archivos en área de preparación",
1588
+ "en": "No staged files"
1589
+ },
1590
+ "suggest_type": {
1591
+ "es": "tipo {type}",
1592
+ "en": "type {type}"
1593
+ },
1594
+ "suggest_update_file": {
1595
+ "es": "actualizar {filename}",
1596
+ "en": "update {filename}"
1597
+ },
1598
+ "suggest_update_files": {
1599
+ "es": "actualizar {count} archivos",
1600
+ "en": "update {count} files"
1601
+ },
1602
+ "summary": {
1603
+ "es": "resumen",
1604
+ "en": "summary"
1605
+ },
1606
+ "symlink_conflict_broken": {
1607
+ "es": "{file} es un symlink roto — arréglalo manualmente",
1608
+ "en": "{file} is a broken symlink — fix it manually"
1609
+ },
1610
+ "symlink_conflict_file": {
1611
+ "es": "{file} es un archivo regular — no se sobreescribirá automáticamente",
1612
+ "en": "{file} is a regular file — won't be overwritten automatically"
1613
+ },
1614
+ "symlink_conflict_regular": {
1615
+ "es": "{file} ya es symlink a '{existing}', se esperaba '{expected}'",
1616
+ "en": "{file} is already a symlink to '{existing}', expected '{expected}'"
1617
+ },
1618
+ "symlink_created_msg": {
1619
+ "es": "symlink: {file} → {target}",
1620
+ "en": "symlink: {file} → {target}"
1621
+ },
1622
+ "symlink_read_failed": {
1623
+ "es": "no se pudo leer symlink {file}: {error}",
1624
+ "en": "could not read symlink {file}: {error}"
1625
+ },
1626
+ "symlink_escapes_root": {
1627
+ "es": "Symlink target escapa del root del repositorio: {target}",
1628
+ "en": "Symlink target escapes repository root: {target}"
1629
+ },
1630
+ "symlink_outside_repo": {
1631
+ "es": ".claude/rules/{name}: symlink fuera del repo — ignorado",
1632
+ "en": ".claude/rules/{name}: symlink outside repo — ignored"
1633
+ },
1634
+ "sync_action_fetch_all": {
1635
+ "es": "fetch --all --prune",
1636
+ "en": "fetch --all --prune"
1637
+ },
1638
+ "sync_action_fetch_remote": {
1639
+ "es": "fetch {remote}",
1640
+ "en": "fetch {remote}"
1641
+ },
1642
+ "sync_complete": {
1643
+ "es": "sync completado: {branch} ↑{ahead} ↓{behind}",
1644
+ "en": "sync complete: {branch} ↑{ahead} ↓{behind}"
1645
+ },
1646
+ "sync_complete_title": {
1647
+ "es": "sincronización completa",
1648
+ "en": "sync complete"
1649
+ },
1650
+ "sync_dry_run_title": {
1651
+ "es": "sincronización (simulación)",
1652
+ "en": "sync (dry-run)"
1653
+ },
1654
+ "sync_fetch_failed": {
1655
+ "es": "fetch falló: {error}",
1656
+ "en": "fetch failed: {error}"
1657
+ },
1658
+ "sync_pull_diverged": {
1659
+ "es": "pull falló: el branch local y el remoto han divergido (gitwise sync usa --ff-only por seguridad)",
1660
+ "en": "pull failed: local and remote have diverged (gitwise sync uses --ff-only for safety)"
1661
+ },
1662
+ "sync_pull_diverged_hint": {
1663
+ "es": "Inspecciona el estado con: gitwise sync --dry-run --json. Reconcilia con: git pull --rebase (recomendado) o git pull --no-rebase. Luego: gitwise sync --push.",
1664
+ "en": "Inspect state with: gitwise sync --dry-run --json. Reconcile with: git pull --rebase (recommended) or git pull --no-rebase. Then: gitwise sync --push."
1665
+ },
1666
+ "yes_required_with_json": {
1667
+ "es": "--json en un comando con efectos requiere --yes explícito (no se puede confirmar de forma interactiva)",
1668
+ "en": "--json on a side-effecting command requires explicit --yes (cannot confirm interactively)"
1669
+ },
1670
+ "yes_required_hint": {
1671
+ "es": "Vuelve a ejecutar con --yes o usa --dry-run para inspeccionar el plan sin efectos.",
1672
+ "en": "Re-run with --yes, or use --dry-run to inspect the plan without side effects."
1673
+ },
1674
+ "optimize_partial_failure": {
1675
+ "es": "optimize completó con fallos en uno o más pasos",
1676
+ "en": "optimize completed with one or more failed steps"
1677
+ },
1678
+ "clean_delete_failures": {
1679
+ "es": "clean no pudo borrar {count} branches",
1680
+ "en": "clean could not delete {count} branches"
1681
+ },
1682
+ "setup_partial_failure": {
1683
+ "es": "setup completó con fallos en uno o más keys",
1684
+ "en": "setup completed with one or more failed keys"
1685
+ },
1686
+ "sync_pull_ff": {
1687
+ "es": "pull --ff-only",
1688
+ "en": "pull --ff-only"
1689
+ },
1690
+ "sync_push_commits": {
1691
+ "es": "push ({count} commits)",
1692
+ "en": "push ({count} commits)"
1693
+ },
1694
+ "sync_push_failed": {
1695
+ "es": "push falló: {error}",
1696
+ "en": "push failed: {error}"
1697
+ },
1698
+ "sync_hint": {
1699
+ "es": "Verifica remote/upstream y prueba con --dry-run antes de reintentar.",
1700
+ "en": "Check remote/upstream and try --dry-run before retrying."
1701
+ },
1702
+ "sync_push_protected_hint": {
1703
+ "es": "Haz push desde una branch de feature y abre PR hacia la rama protegida.",
1704
+ "en": "Push from a feature branch and open a PR into the protected branch."
1705
+ },
1706
+ "sync_push_protected": {
1707
+ "es": "no se puede hacer push a rama protegida: {branch}",
1708
+ "en": "cannot push to protected branch: {branch}"
1709
+ },
1710
+ "sync_status": {
1711
+ "es": "ahead {ahead}, behind {behind}",
1712
+ "en": "ahead {ahead}, behind {behind}"
1713
+ },
1714
+ "tag_create_dry": {
1715
+ "es": "Se crearía tag {name}",
1716
+ "en": "Would create tag {name}"
1717
+ },
1718
+ "tag_created": {
1719
+ "es": "Tag {name} creado",
1720
+ "en": "Tag {name} created"
1721
+ },
1722
+ "tag_delete_dry": {
1723
+ "es": "Se eliminaría tag {name}",
1724
+ "en": "Would delete tag {name}"
1725
+ },
1726
+ "tag_deleted": {
1727
+ "es": "Tag {name} eliminado",
1728
+ "en": "Tag {name} deleted"
1729
+ },
1730
+ "tag_empty": {
1731
+ "es": "No hay tags",
1732
+ "en": "No tags"
1733
+ },
1734
+ "tag_latest_title": {
1735
+ "es": "último tag",
1736
+ "en": "latest tag"
1737
+ },
1738
+ "tag_list_title": {
1739
+ "es": "Tags",
1740
+ "en": "Tags"
1741
+ },
1742
+ "tag_name_required": {
1743
+ "es": "Se requiere nombre de tag",
1744
+ "en": "Tag name required"
1745
+ },
1746
+ "tag_no_semver": {
1747
+ "es": "No se encontró tag semver",
1748
+ "en": "No semver tag found"
1749
+ },
1750
+ "tag_unknown_action": {
1751
+ "es": "Acción desconocida: {action}",
1752
+ "en": "Unknown action: {action}"
1753
+ },
1754
+ "template_not_found": {
1755
+ "es": "template no encontrado: {path}",
1756
+ "en": "template not found: {path}"
1757
+ },
1758
+ "tip_staged": {
1759
+ "es": "sin cambios sin confirmar (tip: --staged para archivos en staging)",
1760
+ "en": "no uncommitted changes (tip: --staged for staged files)"
1761
+ },
1762
+ "tool_bat_desc": {
1763
+ "es": "visualización de archivos con syntax highlighting",
1764
+ "en": "file viewing with syntax highlighting"
1765
+ },
1766
+ "tool_delta_desc": {
1767
+ "es": "diffs con syntax highlighting",
1768
+ "en": "diffs with syntax highlighting"
1769
+ },
1770
+ "tool_eza_desc": {
1771
+ "es": "listado de directorios moderno",
1772
+ "en": "modern directory listing"
1773
+ },
1774
+ "tool_git_sizer_desc": {
1775
+ "es": "análisis de tamaño e historia del repo",
1776
+ "en": "repo size and history analysis"
1777
+ },
1778
+ "tool_rg_desc": {
1779
+ "es": "búsqueda rápida en código (ripgrep)",
1780
+ "en": "fast code search (ripgrep)"
1781
+ },
1782
+ "tool_watchman_desc": {
1783
+ "es": "fsmonitor nativo — acelera git status",
1784
+ "en": "native fsmonitor — speeds up git status"
1785
+ },
1786
+ "trivial": {
1787
+ "es": "trivial",
1788
+ "en": "trivial"
1789
+ },
1790
+ "undo_complete": {
1791
+ "es": "undo completado: HEAD ahora en {ref}",
1792
+ "en": "undo complete: HEAD now at {ref}"
1793
+ },
1794
+ "undo_complete_title": {
1795
+ "es": "undo completo",
1796
+ "en": "undo complete"
1797
+ },
1798
+ "undo_confirm_hard": {
1799
+ "es": "¿reset --hard a {ref}? Esto descartará cambios sin commit [s/N] ",
1800
+ "en": "reset --hard to {ref}? This will discard uncommitted changes [y/N] "
1801
+ },
1802
+ "undo_dry_run_title": {
1803
+ "es": "undo (simulación)",
1804
+ "en": "undo (dry-run)"
1805
+ },
1806
+ "undo_no_entries": {
1807
+ "es": "no hay entradas en el reflog",
1808
+ "en": "no reflog entries"
1809
+ },
1810
+ "undo_not_enough_history": {
1811
+ "es": "no hay suficiente historial para retroceder {steps} pasos",
1812
+ "en": "not enough history to go back {steps} steps"
1813
+ },
1814
+ "undo_reflog_failed": {
1815
+ "es": "no se pudo leer el reflog",
1816
+ "en": "could not read reflog"
1817
+ },
1818
+ "undo_reset_to": {
1819
+ "es": "reset a",
1820
+ "en": "reset to"
1821
+ },
1822
+ "unknown_action": {
1823
+ "es": "acción desconocida: {action} en {file}",
1824
+ "en": "unknown action: {action} on {file}"
1825
+ },
1826
+ "unknown_adapter": {
1827
+ "es": "adaptador desconocido: {name}",
1828
+ "en": "unknown adapter: {name}"
1829
+ },
1830
+ "unknown_branch": {
1831
+ "es": "desconocida",
1832
+ "en": "unknown"
1833
+ },
1834
+ "unset_value": {
1835
+ "es": "<unset>",
1836
+ "en": "<unset>"
1837
+ },
1838
+ "update_dry_run": {
1839
+ "es": "ejecutaría: git pull --ff-only en {dir}",
1840
+ "en": "would run: git pull --ff-only in {dir}"
1841
+ },
1842
+ "updated_git_conventions": {
1843
+ "es": "actualizado: {file} (convenciones git agregadas)",
1844
+ "en": "updated: {file} (git conventions added)"
1845
+ },
1846
+ "updating_from": {
1847
+ "es": "actualizando desde {dir}...",
1848
+ "en": "updating from {dir}..."
1849
+ },
1850
+ "using_delta": {
1851
+ "es": "usando delta para mostrar diff",
1852
+ "en": "using delta to display diff"
1853
+ },
1854
+ "warning_label": {
1855
+ "es": "advertencia",
1856
+ "en": "warning"
1857
+ },
1858
+ "working_tree_clean": {
1859
+ "es": "working tree limpio",
1860
+ "en": "working tree clean"
1861
+ },
1862
+ "worktree_branch_msg": {
1863
+ "es": " rama: {branch}",
1864
+ "en": " branch: {branch}"
1865
+ },
1866
+ "worktree_created": {
1867
+ "es": "worktree creado: {path}",
1868
+ "en": "worktree created: {path}"
1869
+ },
1870
+ "worktree_failed": {
1871
+ "es": "no se pudo crear worktree: {error}",
1872
+ "en": "could not create worktree: {error}"
1873
+ },
1874
+ "worktree_to_use": {
1875
+ "es": " para usarlo: cd {path}",
1876
+ "en": " to use: cd {path}"
1877
+ },
1878
+ "worktree_usage": {
1879
+ "es": "uso: gitwise worktree new <branch>",
1880
+ "en": "usage: gitwise worktree new <branch>"
1881
+ },
1882
+ "worktree_usage_full": {
1883
+ "es": "uso: gitwise worktree new <branch> | gitwise worktree clean [--dry-run]",
1884
+ "en": "usage: gitwise worktree new <branch> | gitwise worktree clean [--dry-run]"
1885
+ },
1886
+ "worktrees_active": {
1887
+ "es": "## Worktrees activos: {count}",
1888
+ "en": "## Active worktrees: {count}"
1889
+ },
1890
+ "worktrees_cleaned": {
1891
+ "es": "limpiados {count} worktree(s) huérfano(s)",
1892
+ "en": "cleaned {count} orphaned worktree(s)"
1893
+ },
1894
+ "worktrees_to_clean": {
1895
+ "es": "worktrees a limpiar:",
1896
+ "en": "worktrees to clean:"
1897
+ },
1898
+ "yes_response": {
1899
+ "es": "s",
1900
+ "en": "y"
1901
+ },
1902
+ "invalid_ref": {
1903
+ "es": "referencia inválida: {ref}",
1904
+ "en": "invalid ref: {ref}"
1905
+ },
1906
+ "invalid_branch_name": {
1907
+ "es": "nombre de rama inválido: {name}",
1908
+ "en": "invalid branch name: {name}"
1909
+ },
1910
+ "no_remote_branches": {
1911
+ "es": "no hay ramas remotas",
1912
+ "en": "no remote branches"
1913
+ },
1914
+ "update_requires_git_clone": {
1915
+ "es": "update requiere una instalación vía git clone (no se encontró .git/)",
1916
+ "en": "update requires a git clone installation (.git/ not found)"
1917
+ },
1918
+ "invalid_grep_pattern": {
1919
+ "es": "patrón de búsqueda inválido o peligroso: {pattern}",
1920
+ "en": "invalid or unsafe grep pattern: {pattern}"
1921
+ },
1922
+ "invalid_author_pattern": {
1923
+ "es": "patrón de author inválido o peligroso: {pattern}",
1924
+ "en": "invalid or unsafe author pattern: {pattern}"
1925
+ },
1926
+ "unexpected_error": {
1927
+ "es": "error inesperado. Ejecuta con GITWISE_DEBUG=1 para más detalles.",
1928
+ "en": "unexpected error. Run with GITWISE_DEBUG=1 for details."
1929
+ },
1930
+ "invalid_sort_field": {
1931
+ "es": "campo de ordenamiento no válido: {field}. Campos válidos: refname, committerdate, creatordate, authordate",
1932
+ "en": "invalid sort field: {field}. Valid fields: refname, committerdate, creatordate, authordate"
1933
+ }
1934
+ }