@jonsoc/app 1.1.34

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 (139) hide show
  1. package/AGENTS.md +30 -0
  2. package/README.md +51 -0
  3. package/bunfig.toml +2 -0
  4. package/e2e/context.spec.ts +45 -0
  5. package/e2e/file-open.spec.ts +23 -0
  6. package/e2e/file-viewer.spec.ts +35 -0
  7. package/e2e/fixtures.ts +40 -0
  8. package/e2e/home.spec.ts +21 -0
  9. package/e2e/model-picker.spec.ts +43 -0
  10. package/e2e/navigation.spec.ts +9 -0
  11. package/e2e/palette.spec.ts +15 -0
  12. package/e2e/prompt-mention.spec.ts +26 -0
  13. package/e2e/prompt-slash-open.spec.ts +22 -0
  14. package/e2e/prompt.spec.ts +62 -0
  15. package/e2e/session.spec.ts +21 -0
  16. package/e2e/settings.spec.ts +44 -0
  17. package/e2e/sidebar.spec.ts +21 -0
  18. package/e2e/terminal-init.spec.ts +25 -0
  19. package/e2e/terminal.spec.ts +16 -0
  20. package/e2e/tsconfig.json +8 -0
  21. package/e2e/utils.ts +38 -0
  22. package/happydom.ts +75 -0
  23. package/index.html +23 -0
  24. package/package.json +72 -0
  25. package/playwright.config.ts +43 -0
  26. package/public/_headers +17 -0
  27. package/public/apple-touch-icon-v3.png +1 -0
  28. package/public/apple-touch-icon.png +1 -0
  29. package/public/favicon-96x96-v3.png +1 -0
  30. package/public/favicon-96x96.png +1 -0
  31. package/public/favicon-v3.ico +1 -0
  32. package/public/favicon-v3.svg +1 -0
  33. package/public/favicon.ico +1 -0
  34. package/public/favicon.svg +1 -0
  35. package/public/oc-theme-preload.js +28 -0
  36. package/public/site.webmanifest +1 -0
  37. package/public/social-share-zen.png +1 -0
  38. package/public/social-share.png +1 -0
  39. package/public/web-app-manifest-192x192.png +1 -0
  40. package/public/web-app-manifest-512x512.png +1 -0
  41. package/script/e2e-local.ts +143 -0
  42. package/src/addons/serialize.test.ts +319 -0
  43. package/src/addons/serialize.ts +591 -0
  44. package/src/app.tsx +150 -0
  45. package/src/components/dialog-connect-provider.tsx +428 -0
  46. package/src/components/dialog-edit-project.tsx +259 -0
  47. package/src/components/dialog-fork.tsx +104 -0
  48. package/src/components/dialog-manage-models.tsx +59 -0
  49. package/src/components/dialog-select-directory.tsx +208 -0
  50. package/src/components/dialog-select-file.tsx +196 -0
  51. package/src/components/dialog-select-mcp.tsx +96 -0
  52. package/src/components/dialog-select-model-unpaid.tsx +130 -0
  53. package/src/components/dialog-select-model.tsx +162 -0
  54. package/src/components/dialog-select-provider.tsx +70 -0
  55. package/src/components/dialog-select-server.tsx +249 -0
  56. package/src/components/dialog-settings.tsx +112 -0
  57. package/src/components/file-tree.tsx +112 -0
  58. package/src/components/link.tsx +17 -0
  59. package/src/components/model-tooltip.tsx +91 -0
  60. package/src/components/prompt-input.tsx +2076 -0
  61. package/src/components/session/index.ts +5 -0
  62. package/src/components/session/session-context-tab.tsx +428 -0
  63. package/src/components/session/session-header.tsx +343 -0
  64. package/src/components/session/session-new-view.tsx +93 -0
  65. package/src/components/session/session-sortable-tab.tsx +56 -0
  66. package/src/components/session/session-sortable-terminal-tab.tsx +187 -0
  67. package/src/components/session-context-usage.tsx +113 -0
  68. package/src/components/session-lsp-indicator.tsx +42 -0
  69. package/src/components/session-mcp-indicator.tsx +34 -0
  70. package/src/components/settings-agents.tsx +15 -0
  71. package/src/components/settings-commands.tsx +15 -0
  72. package/src/components/settings-general.tsx +306 -0
  73. package/src/components/settings-keybinds.tsx +437 -0
  74. package/src/components/settings-mcp.tsx +15 -0
  75. package/src/components/settings-models.tsx +15 -0
  76. package/src/components/settings-permissions.tsx +234 -0
  77. package/src/components/settings-providers.tsx +15 -0
  78. package/src/components/terminal.tsx +315 -0
  79. package/src/components/titlebar.tsx +156 -0
  80. package/src/context/command.tsx +308 -0
  81. package/src/context/comments.tsx +140 -0
  82. package/src/context/file.tsx +409 -0
  83. package/src/context/global-sdk.tsx +106 -0
  84. package/src/context/global-sync.tsx +898 -0
  85. package/src/context/language.tsx +161 -0
  86. package/src/context/layout-scroll.test.ts +73 -0
  87. package/src/context/layout-scroll.ts +118 -0
  88. package/src/context/layout.tsx +648 -0
  89. package/src/context/local.tsx +578 -0
  90. package/src/context/notification.tsx +173 -0
  91. package/src/context/permission.tsx +167 -0
  92. package/src/context/platform.tsx +59 -0
  93. package/src/context/prompt.tsx +245 -0
  94. package/src/context/sdk.tsx +48 -0
  95. package/src/context/server.tsx +214 -0
  96. package/src/context/settings.tsx +166 -0
  97. package/src/context/sync.tsx +320 -0
  98. package/src/context/terminal.tsx +267 -0
  99. package/src/custom-elements.d.ts +17 -0
  100. package/src/entry.tsx +76 -0
  101. package/src/env.d.ts +8 -0
  102. package/src/hooks/use-providers.ts +31 -0
  103. package/src/i18n/ar.ts +656 -0
  104. package/src/i18n/br.ts +667 -0
  105. package/src/i18n/da.ts +582 -0
  106. package/src/i18n/de.ts +591 -0
  107. package/src/i18n/en.ts +665 -0
  108. package/src/i18n/es.ts +585 -0
  109. package/src/i18n/fr.ts +592 -0
  110. package/src/i18n/ja.ts +579 -0
  111. package/src/i18n/ko.ts +580 -0
  112. package/src/i18n/no.ts +602 -0
  113. package/src/i18n/pl.ts +661 -0
  114. package/src/i18n/ru.ts +664 -0
  115. package/src/i18n/zh.ts +574 -0
  116. package/src/i18n/zht.ts +570 -0
  117. package/src/index.css +57 -0
  118. package/src/index.ts +2 -0
  119. package/src/pages/directory-layout.tsx +57 -0
  120. package/src/pages/error.tsx +290 -0
  121. package/src/pages/home.tsx +125 -0
  122. package/src/pages/layout.tsx +2599 -0
  123. package/src/pages/session.tsx +2505 -0
  124. package/src/sst-env.d.ts +10 -0
  125. package/src/utils/dom.ts +51 -0
  126. package/src/utils/id.ts +99 -0
  127. package/src/utils/index.ts +1 -0
  128. package/src/utils/perf.ts +135 -0
  129. package/src/utils/persist.ts +377 -0
  130. package/src/utils/prompt.ts +203 -0
  131. package/src/utils/same.ts +6 -0
  132. package/src/utils/solid-dnd.tsx +55 -0
  133. package/src/utils/sound.ts +110 -0
  134. package/src/utils/speech.ts +302 -0
  135. package/src/utils/worktree.ts +58 -0
  136. package/sst-env.d.ts +9 -0
  137. package/tsconfig.json +26 -0
  138. package/vite.config.ts +15 -0
  139. package/vite.js +26 -0
package/src/i18n/es.ts ADDED
@@ -0,0 +1,585 @@
1
+ export const dict = {
2
+ "command.category.suggested": "Sugerido",
3
+ "command.category.view": "Ver",
4
+ "command.category.project": "Proyecto",
5
+ "command.category.provider": "Proveedor",
6
+ "command.category.server": "Servidor",
7
+ "command.category.session": "Sesión",
8
+ "command.category.theme": "Tema",
9
+ "command.category.language": "Idioma",
10
+ "command.category.file": "Archivo",
11
+ "command.category.terminal": "Terminal",
12
+ "command.category.model": "Modelo",
13
+ "command.category.mcp": "MCP",
14
+ "command.category.agent": "Agente",
15
+ "command.category.permissions": "Permisos",
16
+ "command.category.workspace": "Espacio de trabajo",
17
+
18
+ "theme.scheme.system": "Sistema",
19
+ "theme.scheme.light": "Claro",
20
+ "theme.scheme.dark": "Oscuro",
21
+
22
+ "command.sidebar.toggle": "Alternar barra lateral",
23
+ "command.project.open": "Abrir proyecto",
24
+ "command.provider.connect": "Conectar proveedor",
25
+ "command.server.switch": "Cambiar servidor",
26
+ "command.session.previous": "Sesión anterior",
27
+ "command.session.next": "Siguiente sesión",
28
+ "command.session.archive": "Archivar sesión",
29
+
30
+ "command.palette": "Paleta de comandos",
31
+
32
+ "command.theme.cycle": "Alternar tema",
33
+ "command.theme.set": "Usar tema: {{theme}}",
34
+ "command.theme.scheme.cycle": "Alternar esquema de color",
35
+ "command.theme.scheme.set": "Usar esquema de color: {{scheme}}",
36
+
37
+ "command.language.cycle": "Alternar idioma",
38
+ "command.language.set": "Usar idioma: {{language}}",
39
+
40
+ "command.session.new": "Nueva sesión",
41
+ "command.file.open": "Abrir archivo",
42
+ "command.file.open.description": "Buscar archivos y comandos",
43
+ "command.terminal.toggle": "Alternar terminal",
44
+ "command.review.toggle": "Alternar revisión",
45
+ "command.terminal.new": "Nueva terminal",
46
+ "command.terminal.new.description": "Crear una nueva pestaña de terminal",
47
+ "command.steps.toggle": "Alternar pasos",
48
+ "command.steps.toggle.description": "Mostrar u ocultar pasos para el mensaje actual",
49
+ "command.message.previous": "Mensaje anterior",
50
+ "command.message.previous.description": "Ir al mensaje de usuario anterior",
51
+ "command.message.next": "Siguiente mensaje",
52
+ "command.message.next.description": "Ir al siguiente mensaje de usuario",
53
+ "command.model.choose": "Elegir modelo",
54
+ "command.model.choose.description": "Seleccionar un modelo diferente",
55
+ "command.mcp.toggle": "Alternar MCPs",
56
+ "command.mcp.toggle.description": "Alternar MCPs",
57
+ "command.agent.cycle": "Alternar agente",
58
+ "command.agent.cycle.description": "Cambiar al siguiente agente",
59
+ "command.agent.cycle.reverse": "Alternar agente hacia atrás",
60
+ "command.agent.cycle.reverse.description": "Cambiar al agente anterior",
61
+ "command.model.variant.cycle": "Alternar esfuerzo de pensamiento",
62
+ "command.model.variant.cycle.description": "Cambiar al siguiente nivel de esfuerzo",
63
+ "command.permissions.autoaccept.enable": "Aceptar ediciones automáticamente",
64
+ "command.permissions.autoaccept.disable": "Dejar de aceptar ediciones automáticamente",
65
+ "command.session.undo": "Deshacer",
66
+ "command.session.undo.description": "Deshacer el último mensaje",
67
+ "command.session.redo": "Rehacer",
68
+ "command.session.redo.description": "Rehacer el último mensaje deshecho",
69
+ "command.session.compact": "Compactar sesión",
70
+ "command.session.compact.description": "Resumir la sesión para reducir el tamaño del contexto",
71
+ "command.session.fork": "Bifurcar desde mensaje",
72
+ "command.session.fork.description": "Crear una nueva sesión desde un mensaje anterior",
73
+ "command.session.share": "Compartir sesión",
74
+ "command.session.share.description": "Compartir esta sesión y copiar la URL al portapapeles",
75
+ "command.session.unshare": "Dejar de compartir sesión",
76
+ "command.session.unshare.description": "Dejar de compartir esta sesión",
77
+
78
+ "palette.search.placeholder": "Buscar archivos y comandos",
79
+ "palette.empty": "No se encontraron resultados",
80
+ "palette.group.commands": "Comandos",
81
+ "palette.group.files": "Archivos",
82
+
83
+ "dialog.provider.search.placeholder": "Buscar proveedores",
84
+ "dialog.provider.empty": "No se encontraron proveedores",
85
+ "dialog.provider.group.popular": "Popular",
86
+ "dialog.provider.group.other": "Otro",
87
+ "dialog.provider.tag.recommended": "Recomendado",
88
+ "dialog.provider.anthropic.note": "Conectar con Claude Pro/Max o clave API",
89
+ "dialog.provider.openai.note": "Conectar con ChatGPT Pro/Plus o clave API",
90
+ "dialog.provider.copilot.note": "Conectar con Copilot o clave API",
91
+
92
+ "dialog.model.select.title": "Seleccionar modelo",
93
+ "dialog.model.search.placeholder": "Buscar modelos",
94
+ "dialog.model.empty": "Sin resultados de modelos",
95
+ "dialog.model.manage": "Gestionar modelos",
96
+ "dialog.model.manage.description": "Personalizar qué modelos aparecen en el selector de modelos.",
97
+
98
+ "dialog.model.unpaid.freeModels.title": "Modelos gratuitos proporcionados por JonsOC",
99
+ "dialog.model.unpaid.addMore.title": "Añadir más modelos de proveedores populares",
100
+
101
+ "dialog.provider.viewAll": "Ver todos los proveedores",
102
+
103
+ "provider.connect.title": "Conectar {{provider}}",
104
+ "provider.connect.title.anthropicProMax": "Iniciar sesión con Claude Pro/Max",
105
+ "provider.connect.selectMethod": "Seleccionar método de inicio de sesión para {{provider}}.",
106
+ "provider.connect.method.apiKey": "Clave API",
107
+ "provider.connect.status.inProgress": "Autorización en progreso...",
108
+ "provider.connect.status.waiting": "Esperando autorización...",
109
+ "provider.connect.status.failed": "Autorización fallida: {{error}}",
110
+ "provider.connect.apiKey.description":
111
+ "Introduce tu clave API de {{provider}} para conectar tu cuenta y usar modelos de {{provider}} en JonsOC.",
112
+ "provider.connect.apiKey.label": "Clave API de {{provider}}",
113
+ "provider.connect.apiKey.placeholder": "Clave API",
114
+ "provider.connect.apiKey.required": "La clave API es obligatoria",
115
+ "provider.connect.jonsocZen.line1":
116
+ "JonsOC Zen te da acceso a un conjunto curado de modelos fiables optimizados para agentes de programación.",
117
+ "provider.connect.jonsocZen.line2":
118
+ "Con una sola clave API obtendrás acceso a modelos como Claude, GPT, Gemini, GLM y más.",
119
+ "provider.connect.jonsocZen.visit.prefix": "Visita ",
120
+ "provider.connect.jonsocZen.visit.suffix": " para obtener tu clave API.",
121
+ "provider.connect.oauth.code.visit.prefix": "Visita ",
122
+ "provider.connect.oauth.code.visit.link": "este enlace",
123
+ "provider.connect.oauth.code.visit.suffix":
124
+ " para obtener tu código de autorización para conectar tu cuenta y usar modelos de {{provider}} en JonsOC.",
125
+ "provider.connect.oauth.code.label": "Código de autorización {{method}}",
126
+ "provider.connect.oauth.code.placeholder": "Código de autorización",
127
+ "provider.connect.oauth.code.required": "El código de autorización es obligatorio",
128
+ "provider.connect.oauth.code.invalid": "Código de autorización inválido",
129
+ "provider.connect.oauth.auto.visit.prefix": "Visita ",
130
+ "provider.connect.oauth.auto.visit.link": "este enlace",
131
+ "provider.connect.oauth.auto.visit.suffix":
132
+ " e introduce el código a continuación para conectar tu cuenta y usar modelos de {{provider}} en JonsOC.",
133
+ "provider.connect.oauth.auto.confirmationCode": "Código de confirmación",
134
+ "provider.connect.toast.connected.title": "{{provider}} conectado",
135
+ "provider.connect.toast.connected.description": "Los modelos de {{provider}} ahora están disponibles para usar.",
136
+
137
+ "model.tag.free": "Gratis",
138
+ "model.tag.latest": "Último",
139
+
140
+ "common.search.placeholder": "Buscar",
141
+ "common.goBack": "Volver",
142
+ "common.loading": "Cargando",
143
+ "common.cancel": "Cancelar",
144
+ "common.submit": "Enviar",
145
+ "common.save": "Guardar",
146
+ "common.saving": "Guardando...",
147
+ "common.default": "Predeterminado",
148
+ "common.attachment": "adjunto",
149
+
150
+ "prompt.placeholder.shell": "Introduce comando de shell...",
151
+ "prompt.placeholder.normal": 'Pregunta cualquier cosa... "{{example}}"',
152
+ "prompt.mode.shell": "Shell",
153
+ "prompt.mode.shell.exit": "esc para salir",
154
+
155
+ "prompt.example.1": "Arreglar un TODO en el código",
156
+ "prompt.example.2": "¿Cuál es el stack tecnológico de este proyecto?",
157
+ "prompt.example.3": "Arreglar pruebas rotas",
158
+ "prompt.example.4": "Explicar cómo funciona la autenticación",
159
+ "prompt.example.5": "Encontrar y arreglar vulnerabilidades de seguridad",
160
+ "prompt.example.6": "Añadir pruebas unitarias para el servicio de usuario",
161
+ "prompt.example.7": "Refactorizar esta función para que sea más legible",
162
+ "prompt.example.8": "¿Qué significa este error?",
163
+ "prompt.example.9": "Ayúdame a depurar este problema",
164
+ "prompt.example.10": "Generar documentación de API",
165
+ "prompt.example.11": "Optimizar consultas a la base de datos",
166
+ "prompt.example.12": "Añadir validación de entrada",
167
+ "prompt.example.13": "Crear un nuevo componente para...",
168
+ "prompt.example.14": "¿Cómo despliego este proyecto?",
169
+ "prompt.example.15": "Revisar mi código para mejores prácticas",
170
+ "prompt.example.16": "Añadir manejo de errores a esta función",
171
+ "prompt.example.17": "Explicar este patrón de regex",
172
+ "prompt.example.18": "Convertir esto a TypeScript",
173
+ "prompt.example.19": "Añadir logging en todo el código",
174
+ "prompt.example.20": "¿Qué dependencias están desactualizadas?",
175
+ "prompt.example.21": "Ayúdame a escribir un script de migración",
176
+ "prompt.example.22": "Implementar caché para este endpoint",
177
+ "prompt.example.23": "Añadir paginación a esta lista",
178
+ "prompt.example.24": "Crear un comando CLI para...",
179
+ "prompt.example.25": "¿Cómo funcionan las variables de entorno aquí?",
180
+
181
+ "prompt.popover.emptyResults": "Sin resultados coincidentes",
182
+ "prompt.popover.emptyCommands": "Sin comandos coincidentes",
183
+ "prompt.dropzone.label": "Suelta imágenes o PDFs aquí",
184
+ "prompt.slash.badge.custom": "personalizado",
185
+ "prompt.context.active": "activo",
186
+ "prompt.context.includeActiveFile": "Incluir archivo activo",
187
+ "prompt.context.removeActiveFile": "Eliminar archivo activo del contexto",
188
+ "prompt.context.removeFile": "Eliminar archivo del contexto",
189
+ "prompt.action.attachFile": "Adjuntar archivo",
190
+ "prompt.attachment.remove": "Eliminar adjunto",
191
+ "prompt.action.send": "Enviar",
192
+ "prompt.action.stop": "Detener",
193
+
194
+ "prompt.toast.pasteUnsupported.title": "Pegado no soportado",
195
+ "prompt.toast.pasteUnsupported.description": "Solo se pueden pegar imágenes o PDFs aquí.",
196
+ "prompt.toast.modelAgentRequired.title": "Selecciona un agente y modelo",
197
+ "prompt.toast.modelAgentRequired.description": "Elige un agente y modelo antes de enviar un prompt.",
198
+ "prompt.toast.worktreeCreateFailed.title": "Fallo al crear el árbol de trabajo",
199
+ "prompt.toast.sessionCreateFailed.title": "Fallo al crear la sesión",
200
+ "prompt.toast.shellSendFailed.title": "Fallo al enviar comando de shell",
201
+ "prompt.toast.commandSendFailed.title": "Fallo al enviar comando",
202
+ "prompt.toast.promptSendFailed.title": "Fallo al enviar prompt",
203
+
204
+ "dialog.mcp.title": "MCPs",
205
+ "dialog.mcp.description": "{{enabled}} de {{total}} habilitados",
206
+ "dialog.mcp.empty": "No hay MCPs configurados",
207
+
208
+ "mcp.status.connected": "conectado",
209
+ "mcp.status.failed": "fallido",
210
+ "mcp.status.needs_auth": "necesita auth",
211
+ "mcp.status.disabled": "deshabilitado",
212
+
213
+ "dialog.fork.empty": "No hay mensajes desde donde bifurcar",
214
+
215
+ "dialog.directory.search.placeholder": "Buscar carpetas",
216
+ "dialog.directory.empty": "No se encontraron carpetas",
217
+
218
+ "dialog.server.title": "Servidores",
219
+ "dialog.server.description": "Cambiar a qué servidor de JonsOC se conecta esta app.",
220
+ "dialog.server.search.placeholder": "Buscar servidores",
221
+ "dialog.server.empty": "No hay servidores aún",
222
+ "dialog.server.add.title": "Añadir un servidor",
223
+ "dialog.server.add.url": "URL del servidor",
224
+ "dialog.server.add.placeholder": "http://localhost:4096",
225
+ "dialog.server.add.error": "No se pudo conectar al servidor",
226
+ "dialog.server.add.checking": "Comprobando...",
227
+ "dialog.server.add.button": "Añadir",
228
+ "dialog.server.default.title": "Servidor predeterminado",
229
+ "dialog.server.default.description":
230
+ "Conectar a este servidor al iniciar la app en lugar de iniciar un servidor local. Requiere reinicio.",
231
+ "dialog.server.default.none": "Ningún servidor seleccionado",
232
+ "dialog.server.default.set": "Establecer servidor actual como predeterminado",
233
+ "dialog.server.default.clear": "Limpiar",
234
+ "dialog.server.action.remove": "Eliminar servidor",
235
+
236
+ "dialog.project.edit.title": "Editar proyecto",
237
+ "dialog.project.edit.name": "Nombre",
238
+ "dialog.project.edit.icon": "Icono",
239
+ "dialog.project.edit.icon.alt": "Icono del proyecto",
240
+ "dialog.project.edit.icon.hint": "Haz clic o arrastra una imagen",
241
+ "dialog.project.edit.icon.recommended": "Recomendado: 128x128px",
242
+ "dialog.project.edit.color": "Color",
243
+ "dialog.project.edit.color.select": "Seleccionar color {{color}}",
244
+
245
+ "context.breakdown.title": "Desglose de Contexto",
246
+ "context.breakdown.note":
247
+ 'Desglose aproximado de tokens de entrada. "Otro" incluye definiciones de herramientas y sobrecarga.',
248
+ "context.breakdown.system": "Sistema",
249
+ "context.breakdown.user": "Usuario",
250
+ "context.breakdown.assistant": "Asistente",
251
+ "context.breakdown.tool": "Llamadas a herramientas",
252
+ "context.breakdown.other": "Otro",
253
+
254
+ "context.systemPrompt.title": "Prompt del Sistema",
255
+ "context.rawMessages.title": "Mensajes en bruto",
256
+
257
+ "context.stats.session": "Sesión",
258
+ "context.stats.messages": "Mensajes",
259
+ "context.stats.provider": "Proveedor",
260
+ "context.stats.model": "Modelo",
261
+ "context.stats.limit": "Límite de Contexto",
262
+ "context.stats.totalTokens": "Tokens Totales",
263
+ "context.stats.usage": "Uso",
264
+ "context.stats.inputTokens": "Tokens de Entrada",
265
+ "context.stats.outputTokens": "Tokens de Salida",
266
+ "context.stats.reasoningTokens": "Tokens de Razonamiento",
267
+ "context.stats.cacheTokens": "Tokens de Caché (lectura/escritura)",
268
+ "context.stats.userMessages": "Mensajes de Usuario",
269
+ "context.stats.assistantMessages": "Mensajes de Asistente",
270
+ "context.stats.totalCost": "Costo Total",
271
+ "context.stats.sessionCreated": "Sesión Creada",
272
+ "context.stats.lastActivity": "Última Actividad",
273
+
274
+ "context.usage.tokens": "Tokens",
275
+ "context.usage.usage": "Uso",
276
+ "context.usage.cost": "Costo",
277
+ "context.usage.clickToView": "Haz clic para ver contexto",
278
+ "context.usage.view": "Ver uso del contexto",
279
+
280
+ "language.en": "Inglés",
281
+ "language.zh": "Chino (simplificado)",
282
+ "language.zht": "Chino (tradicional)",
283
+ "language.ko": "Coreano",
284
+ "language.de": "Alemán",
285
+ "language.es": "Español",
286
+ "language.fr": "Francés",
287
+ "language.ja": "Japonés",
288
+ "language.da": "Danés",
289
+ "language.ru": "Ruso",
290
+ "language.pl": "Polaco",
291
+ "language.ar": "Árabe",
292
+ "language.no": "Noruego",
293
+ "language.br": "Portugués (Brasil)",
294
+
295
+ "toast.language.title": "Idioma",
296
+ "toast.language.description": "Cambiado a {{language}}",
297
+
298
+ "toast.theme.title": "Tema cambiado",
299
+ "toast.scheme.title": "Esquema de color",
300
+
301
+ "toast.permissions.autoaccept.on.title": "Aceptando ediciones automáticamente",
302
+ "toast.permissions.autoaccept.on.description": "Los permisos de edición y escritura serán aprobados automáticamente",
303
+ "toast.permissions.autoaccept.off.title": "Se dejó de aceptar ediciones automáticamente",
304
+ "toast.permissions.autoaccept.off.description": "Los permisos de edición y escritura requerirán aprobación",
305
+
306
+ "toast.model.none.title": "Ningún modelo seleccionado",
307
+ "toast.model.none.description": "Conecta un proveedor para resumir esta sesión",
308
+
309
+ "toast.file.loadFailed.title": "Fallo al cargar archivo",
310
+
311
+ "toast.session.share.copyFailed.title": "Fallo al copiar URL al portapapeles",
312
+ "toast.session.share.success.title": "Sesión compartida",
313
+ "toast.session.share.success.description": "¡URL compartida copiada al portapapeles!",
314
+ "toast.session.share.failed.title": "Fallo al compartir sesión",
315
+ "toast.session.share.failed.description": "Ocurrió un error al compartir la sesión",
316
+
317
+ "toast.session.unshare.success.title": "Sesión dejó de compartirse",
318
+ "toast.session.unshare.success.description": "¡La sesión dejó de compartirse exitosamente!",
319
+ "toast.session.unshare.failed.title": "Fallo al dejar de compartir sesión",
320
+ "toast.session.unshare.failed.description": "Ocurrió un error al dejar de compartir la sesión",
321
+
322
+ "toast.session.listFailed.title": "Fallo al cargar sesiones para {{project}}",
323
+
324
+ "toast.update.title": "Actualización disponible",
325
+ "toast.update.description": "Una nueva versión de JonsOC ({{version}}) está disponible para instalar.",
326
+ "toast.update.action.installRestart": "Instalar y reiniciar",
327
+ "toast.update.action.notYet": "Todavía no",
328
+
329
+ "error.page.title": "Algo salió mal",
330
+ "error.page.description": "Ocurrió un error al cargar la aplicación.",
331
+ "error.page.details.label": "Detalles del error",
332
+ "error.page.action.restart": "Reiniciar",
333
+ "error.page.action.checking": "Comprobando...",
334
+ "error.page.action.checkUpdates": "Buscar actualizaciones",
335
+ "error.page.action.updateTo": "Actualizar a {{version}}",
336
+ "error.page.report.prefix": "Por favor reporta este error al equipo de JonsOC",
337
+ "error.page.report.discord": "en Discord",
338
+ "error.page.version": "Versión: {{version}}",
339
+
340
+ "error.dev.rootNotFound":
341
+ "Elemento raíz no encontrado. ¿Olvidaste añadirlo a tu index.html? ¿O tal vez el atributo id está mal escrito?",
342
+
343
+ "error.globalSync.connectFailed": "No se pudo conectar al servidor. ¿Hay un servidor ejecutándose en `{{url}}`?",
344
+
345
+ "error.chain.unknown": "Error desconocido",
346
+ "error.chain.causedBy": "Causado por:",
347
+ "error.chain.apiError": "Error de API",
348
+ "error.chain.status": "Estado: {{status}}",
349
+ "error.chain.retryable": "Reintentable: {{retryable}}",
350
+ "error.chain.responseBody": "Cuerpo de la respuesta:\n{{body}}",
351
+ "error.chain.didYouMean": "¿Quisiste decir: {{suggestions}}",
352
+ "error.chain.modelNotFound": "Modelo no encontrado: {{provider}}/{{model}}",
353
+ "error.chain.checkConfig": "Comprueba los nombres de proveedor/modelo en tu configuración (jonsoc.json)",
354
+ "error.chain.mcpFailed": 'El servidor MCP "{{name}}" falló. Nota, JonsOC no soporta autenticación MCP todavía.',
355
+ "error.chain.providerAuthFailed": "Autenticación de proveedor fallida ({{provider}}): {{message}}",
356
+ "error.chain.providerInitFailed":
357
+ 'Fallo al inicializar proveedor "{{provider}}". Comprueba credenciales y configuración.',
358
+ "error.chain.configJsonInvalid": "El archivo de configuración en {{path}} no es un JSON(C) válido",
359
+ "error.chain.configJsonInvalidWithMessage":
360
+ "El archivo de configuración en {{path}} no es un JSON(C) válido: {{message}}",
361
+ "error.chain.configDirectoryTypo":
362
+ 'El directorio "{{dir}}" en {{path}} no es válido. Renombra el directorio a "{{suggestion}}" o elimínalo. Esto es un error tipográfico común.',
363
+ "error.chain.configFrontmatterError": "Fallo al analizar frontmatter en {{path}}:\n{{message}}",
364
+ "error.chain.configInvalid": "El archivo de configuración en {{path}} es inválido",
365
+ "error.chain.configInvalidWithMessage": "El archivo de configuración en {{path}} es inválido: {{message}}",
366
+
367
+ "notification.permission.title": "Permiso requerido",
368
+ "notification.permission.description": "{{sessionTitle}} en {{projectName}} necesita permiso",
369
+ "notification.question.title": "Pregunta",
370
+ "notification.question.description": "{{sessionTitle}} en {{projectName}} tiene una pregunta",
371
+ "notification.action.goToSession": "Ir a sesión",
372
+
373
+ "notification.session.responseReady.title": "Respuesta lista",
374
+ "notification.session.error.title": "Error de sesión",
375
+ "notification.session.error.fallbackDescription": "Ocurrió un error",
376
+
377
+ "home.recentProjects": "Proyectos recientes",
378
+ "home.empty.title": "Sin proyectos recientes",
379
+ "home.empty.description": "Empieza abriendo un proyecto local",
380
+
381
+ "session.tab.session": "Sesión",
382
+ "session.tab.review": "Revisión",
383
+ "session.tab.context": "Contexto",
384
+ "session.panel.reviewAndFiles": "Revisión y archivos",
385
+ "session.review.filesChanged": "{{count}} Archivos Cambiados",
386
+ "session.review.loadingChanges": "Cargando cambios...",
387
+ "session.review.empty": "No hay cambios en esta sesión aún",
388
+ "session.messages.renderEarlier": "Renderizar mensajes anteriores",
389
+ "session.messages.loadingEarlier": "Cargando mensajes anteriores...",
390
+ "session.messages.loadEarlier": "Cargar mensajes anteriores",
391
+ "session.messages.loading": "Cargando mensajes...",
392
+
393
+ "session.context.addToContext": "Añadir {{selection}} al contexto",
394
+
395
+ "session.new.worktree.main": "Rama principal",
396
+ "session.new.worktree.mainWithBranch": "Rama principal ({{branch}})",
397
+ "session.new.worktree.create": "Crear nuevo árbol de trabajo",
398
+ "session.new.lastModified": "Última modificación",
399
+
400
+ "session.header.search.placeholder": "Buscar {{project}}",
401
+ "session.header.searchFiles": "Buscar archivos",
402
+
403
+ "session.share.popover.title": "Publicar en web",
404
+ "session.share.popover.description.shared":
405
+ "Esta sesión es pública en la web. Es accesible para cualquiera con el enlace.",
406
+ "session.share.popover.description.unshared":
407
+ "Compartir sesión públicamente en la web. Será accesible para cualquiera con el enlace.",
408
+ "session.share.action.share": "Compartir",
409
+ "session.share.action.publish": "Publicar",
410
+ "session.share.action.publishing": "Publicando...",
411
+ "session.share.action.unpublish": "Despublicar",
412
+ "session.share.action.unpublishing": "Despublicando...",
413
+ "session.share.action.view": "Ver",
414
+ "session.share.copy.copied": "Copiado",
415
+ "session.share.copy.copyLink": "Copiar enlace",
416
+
417
+ "lsp.tooltip.none": "Sin servidores LSP",
418
+ "lsp.label.connected": "{{count}} LSP",
419
+
420
+ "prompt.loading": "Cargando prompt...",
421
+ "terminal.loading": "Cargando terminal...",
422
+ "terminal.title": "Terminal",
423
+ "terminal.title.numbered": "Terminal {{number}}",
424
+ "terminal.close": "Cerrar terminal",
425
+
426
+ "common.closeTab": "Cerrar pestaña",
427
+ "common.dismiss": "Descartar",
428
+ "common.requestFailed": "Solicitud fallida",
429
+ "common.moreOptions": "Más opciones",
430
+ "common.learnMore": "Saber más",
431
+ "common.rename": "Renombrar",
432
+ "common.reset": "Restablecer",
433
+ "common.archive": "Archivar",
434
+ "common.delete": "Eliminar",
435
+ "common.close": "Cerrar",
436
+ "common.edit": "Editar",
437
+ "common.loadMore": "Cargar más",
438
+
439
+ "sidebar.nav.projectsAndSessions": "Proyectos y sesiones",
440
+ "sidebar.settings": "Ajustes",
441
+ "sidebar.help": "Ayuda",
442
+ "sidebar.workspaces.enable": "Habilitar espacios de trabajo",
443
+ "sidebar.workspaces.disable": "Deshabilitar espacios de trabajo",
444
+ "sidebar.gettingStarted.title": "Empezando",
445
+ "sidebar.gettingStarted.line1": "JonsOC incluye modelos gratuitos para que puedas empezar inmediatamente.",
446
+ "sidebar.gettingStarted.line2": "Conecta cualquier proveedor para usar modelos, inc. Claude, GPT, Gemini etc.",
447
+ "sidebar.project.recentSessions": "Sesiones recientes",
448
+ "sidebar.project.viewAllSessions": "Ver todas las sesiones",
449
+
450
+ "settings.section.desktop": "Escritorio",
451
+ "settings.tab.general": "General",
452
+ "settings.tab.shortcuts": "Atajos",
453
+
454
+ "settings.general.section.appearance": "Apariencia",
455
+ "settings.general.section.notifications": "Notificaciones del sistema",
456
+ "settings.general.section.sounds": "Efectos de sonido",
457
+
458
+ "settings.general.row.language.title": "Idioma",
459
+ "settings.general.row.language.description": "Cambiar el idioma de visualización para JonsOC",
460
+ "settings.general.row.appearance.title": "Apariencia",
461
+ "settings.general.row.appearance.description": "Personaliza cómo se ve JonsOC en tu dispositivo",
462
+ "settings.general.row.theme.title": "Tema",
463
+ "settings.general.row.theme.description": "Personaliza el tema de JonsOC.",
464
+ "settings.general.row.font.title": "Fuente",
465
+ "settings.general.row.font.description": "Personaliza la fuente mono usada en bloques de código",
466
+
467
+ "settings.general.notifications.agent.title": "Agente",
468
+ "settings.general.notifications.agent.description":
469
+ "Mostrar notificación del sistema cuando el agente termine o necesite atención",
470
+ "settings.general.notifications.permissions.title": "Permisos",
471
+ "settings.general.notifications.permissions.description":
472
+ "Mostrar notificación del sistema cuando se requiera un permiso",
473
+ "settings.general.notifications.errors.title": "Errores",
474
+ "settings.general.notifications.errors.description": "Mostrar notificación del sistema cuando ocurra un error",
475
+
476
+ "settings.general.sounds.agent.title": "Agente",
477
+ "settings.general.sounds.agent.description": "Reproducir sonido cuando el agente termine o necesite atención",
478
+ "settings.general.sounds.permissions.title": "Permisos",
479
+ "settings.general.sounds.permissions.description": "Reproducir sonido cuando se requiera un permiso",
480
+ "settings.general.sounds.errors.title": "Errores",
481
+ "settings.general.sounds.errors.description": "Reproducir sonido cuando ocurra un error",
482
+
483
+ "settings.shortcuts.title": "Atajos de teclado",
484
+ "settings.shortcuts.reset.button": "Restablecer a valores predeterminados",
485
+ "settings.shortcuts.reset.toast.title": "Atajos restablecidos",
486
+ "settings.shortcuts.reset.toast.description":
487
+ "Los atajos de teclado han sido restablecidos a los valores predeterminados.",
488
+ "settings.shortcuts.conflict.title": "Atajo ya en uso",
489
+ "settings.shortcuts.conflict.description": "{{keybind}} ya está asignado a {{titles}}.",
490
+ "settings.shortcuts.unassigned": "Sin asignar",
491
+ "settings.shortcuts.pressKeys": "Presiona teclas",
492
+ "settings.shortcuts.search.placeholder": "Buscar atajos",
493
+ "settings.shortcuts.search.empty": "No se encontraron atajos",
494
+
495
+ "settings.shortcuts.group.general": "General",
496
+ "settings.shortcuts.group.session": "Sesión",
497
+ "settings.shortcuts.group.navigation": "Navegación",
498
+ "settings.shortcuts.group.modelAndAgent": "Modelo y agente",
499
+ "settings.shortcuts.group.terminal": "Terminal",
500
+ "settings.shortcuts.group.prompt": "Prompt",
501
+
502
+ "settings.providers.title": "Proveedores",
503
+ "settings.providers.description": "La configuración de proveedores estará disponible aquí.",
504
+ "settings.models.title": "Modelos",
505
+ "settings.models.description": "La configuración de modelos estará disponible aquí.",
506
+ "settings.agents.title": "Agentes",
507
+ "settings.agents.description": "La configuración de agentes estará disponible aquí.",
508
+ "settings.commands.title": "Comandos",
509
+ "settings.commands.description": "La configuración de comandos estará disponible aquí.",
510
+ "settings.mcp.title": "MCP",
511
+ "settings.mcp.description": "La configuración de MCP estará disponible aquí.",
512
+
513
+ "settings.permissions.title": "Permisos",
514
+ "settings.permissions.description": "Controla qué herramientas puede usar el servidor por defecto.",
515
+ "settings.permissions.section.tools": "Herramientas",
516
+ "settings.permissions.toast.updateFailed.title": "Fallo al actualizar permisos",
517
+
518
+ "settings.permissions.action.allow": "Permitir",
519
+ "settings.permissions.action.ask": "Preguntar",
520
+ "settings.permissions.action.deny": "Denegar",
521
+
522
+ "settings.permissions.tool.read.title": "Leer",
523
+ "settings.permissions.tool.read.description": "Leer un archivo (coincide con la ruta del archivo)",
524
+ "settings.permissions.tool.edit.title": "Editar",
525
+ "settings.permissions.tool.edit.description":
526
+ "Modificar archivos, incluyendo ediciones, escrituras, parches y multi-ediciones",
527
+ "settings.permissions.tool.glob.title": "Glob",
528
+ "settings.permissions.tool.glob.description": "Coincidir archivos usando patrones glob",
529
+ "settings.permissions.tool.grep.title": "Grep",
530
+ "settings.permissions.tool.grep.description": "Buscar contenidos de archivo usando expresiones regulares",
531
+ "settings.permissions.tool.list.title": "Listar",
532
+ "settings.permissions.tool.list.description": "Listar archivos dentro de un directorio",
533
+ "settings.permissions.tool.bash.title": "Bash",
534
+ "settings.permissions.tool.bash.description": "Ejecutar comandos de shell",
535
+ "settings.permissions.tool.task.title": "Tarea",
536
+ "settings.permissions.tool.task.description": "Lanzar sub-agentes",
537
+ "settings.permissions.tool.skill.title": "Habilidad",
538
+ "settings.permissions.tool.skill.description": "Cargar una habilidad por nombre",
539
+ "settings.permissions.tool.lsp.title": "LSP",
540
+ "settings.permissions.tool.lsp.description": "Ejecutar consultas de servidor de lenguaje",
541
+ "settings.permissions.tool.todoread.title": "Leer Todo",
542
+ "settings.permissions.tool.todoread.description": "Leer la lista de tareas",
543
+ "settings.permissions.tool.todowrite.title": "Escribir Todo",
544
+ "settings.permissions.tool.todowrite.description": "Actualizar la lista de tareas",
545
+ "settings.permissions.tool.webfetch.title": "Web Fetch",
546
+ "settings.permissions.tool.webfetch.description": "Obtener contenido de una URL",
547
+ "settings.permissions.tool.websearch.title": "Búsqueda Web",
548
+ "settings.permissions.tool.websearch.description": "Buscar en la web",
549
+ "settings.permissions.tool.codesearch.title": "Búsqueda de Código",
550
+ "settings.permissions.tool.codesearch.description": "Buscar código en la web",
551
+ "settings.permissions.tool.external_directory.title": "Directorio Externo",
552
+ "settings.permissions.tool.external_directory.description": "Acceder a archivos fuera del directorio del proyecto",
553
+ "settings.permissions.tool.doom_loop.title": "Bucle Infinito",
554
+ "settings.permissions.tool.doom_loop.description": "Detectar llamadas a herramientas repetidas con entrada idéntica",
555
+
556
+ "session.delete.failed.title": "Fallo al eliminar sesión",
557
+ "session.delete.title": "Eliminar sesión",
558
+ "session.delete.confirm": '¿Eliminar sesión "{{name}}"?',
559
+ "session.delete.button": "Eliminar sesión",
560
+
561
+ "workspace.new": "Nuevo espacio de trabajo",
562
+ "workspace.type.local": "local",
563
+ "workspace.type.sandbox": "sandbox",
564
+ "workspace.create.failed.title": "Fallo al crear espacio de trabajo",
565
+ "workspace.delete.failed.title": "Fallo al eliminar espacio de trabajo",
566
+ "workspace.resetting.title": "Restableciendo espacio de trabajo",
567
+ "workspace.resetting.description": "Esto puede tomar un minuto.",
568
+ "workspace.reset.failed.title": "Fallo al restablecer espacio de trabajo",
569
+ "workspace.reset.success.title": "Espacio de trabajo restablecido",
570
+ "workspace.reset.success.description": "El espacio de trabajo ahora coincide con la rama predeterminada.",
571
+ "workspace.status.checking": "Comprobando cambios no fusionados...",
572
+ "workspace.status.error": "No se pudo verificar el estado de git.",
573
+ "workspace.status.clean": "No se detectaron cambios no fusionados.",
574
+ "workspace.status.dirty": "Cambios no fusionados detectados en este espacio de trabajo.",
575
+ "workspace.delete.title": "Eliminar espacio de trabajo",
576
+ "workspace.delete.confirm": '¿Eliminar espacio de trabajo "{{name}}"?',
577
+ "workspace.delete.button": "Eliminar espacio de trabajo",
578
+ "workspace.reset.title": "Restablecer espacio de trabajo",
579
+ "workspace.reset.confirm": '¿Restablecer espacio de trabajo "{{name}}"?',
580
+ "workspace.reset.button": "Restablecer espacio de trabajo",
581
+ "workspace.reset.archived.none": "No se archivarán sesiones activas.",
582
+ "workspace.reset.archived.one": "1 sesión será archivada.",
583
+ "workspace.reset.archived.many": "{{count}} sesiones serán archivadas.",
584
+ "workspace.reset.note": "Esto restablecerá el espacio de trabajo para coincidir con la rama predeterminada.",
585
+ }