remcodex 0.1.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +331 -0
  3. package/dist/server/src/app.js +186 -0
  4. package/dist/server/src/cli.js +270 -0
  5. package/dist/server/src/controllers/codex-options.controller.js +199 -0
  6. package/dist/server/src/controllers/message.controller.js +21 -0
  7. package/dist/server/src/controllers/project.controller.js +44 -0
  8. package/dist/server/src/controllers/session.controller.js +175 -0
  9. package/dist/server/src/db/client.js +10 -0
  10. package/dist/server/src/db/migrations.js +32 -0
  11. package/dist/server/src/gateways/ws.gateway.js +60 -0
  12. package/dist/server/src/services/codex-app-server-runner.js +363 -0
  13. package/dist/server/src/services/codex-exec-runner.js +147 -0
  14. package/dist/server/src/services/codex-rollout-sync.js +977 -0
  15. package/dist/server/src/services/codex-runner.js +11 -0
  16. package/dist/server/src/services/codex-stream-events.js +478 -0
  17. package/dist/server/src/services/event-store.js +328 -0
  18. package/dist/server/src/services/project-manager.js +130 -0
  19. package/dist/server/src/services/pty-runner.js +72 -0
  20. package/dist/server/src/services/session-manager.js +1586 -0
  21. package/dist/server/src/services/session-timeline-service.js +181 -0
  22. package/dist/server/src/types/codex-launch.js +2 -0
  23. package/dist/server/src/types/models.js +37 -0
  24. package/dist/server/src/utils/ansi.js +143 -0
  25. package/dist/server/src/utils/codex-launch.js +102 -0
  26. package/dist/server/src/utils/codex-quota.js +179 -0
  27. package/dist/server/src/utils/codex-status.js +163 -0
  28. package/dist/server/src/utils/codex-ui-options.js +114 -0
  29. package/dist/server/src/utils/command.js +46 -0
  30. package/dist/server/src/utils/errors.js +16 -0
  31. package/dist/server/src/utils/ids.js +7 -0
  32. package/dist/server/src/utils/node-pty.js +29 -0
  33. package/package.json +36 -0
  34. package/scripts/fix-node-pty-helper.js +36 -0
  35. package/web/api.js +175 -0
  36. package/web/app.js +8082 -0
  37. package/web/components/composer.js +627 -0
  38. package/web/components/session-workbench.js +173 -0
  39. package/web/i18n/index.js +171 -0
  40. package/web/i18n/locales/de.js +50 -0
  41. package/web/i18n/locales/en.js +320 -0
  42. package/web/i18n/locales/es.js +50 -0
  43. package/web/i18n/locales/fr.js +50 -0
  44. package/web/i18n/locales/ja.js +50 -0
  45. package/web/i18n/locales/ko.js +50 -0
  46. package/web/i18n/locales/pt-BR.js +50 -0
  47. package/web/i18n/locales/ru.js +50 -0
  48. package/web/i18n/locales/zh-CN.js +320 -0
  49. package/web/i18n/locales/zh-Hant.js +53 -0
  50. package/web/index.html +23 -0
  51. package/web/message-rich-text.js +218 -0
  52. package/web/session-command-activity.js +980 -0
  53. package/web/session-event-adapter.js +826 -0
  54. package/web/session-timeline-reducer.js +728 -0
  55. package/web/session-timeline-renderer.js +656 -0
  56. package/web/session-ws.js +31 -0
  57. package/web/styles.css +5665 -0
  58. package/web/vendor/markdown-it.js +6969 -0
@@ -0,0 +1,320 @@
1
+ export default {
2
+ "app.name": "RemCodex",
3
+ "nav.projects": "Projects",
4
+ "nav.sessions": "Sessions",
5
+ "marketing.headline": "Keep an eye on Codex CLI from your phone",
6
+ "marketing.copy": "Register a project, start a session, and hand the task off to a server-managed Codex CLI.",
7
+ "workspace.openSidebar": "Open session sidebar",
8
+ "workspace.closeSidebar": "Collapse session sidebar",
9
+ "workspace.language.select": "Language",
10
+ "workspace.language.switchToEnglish": "Switch to English",
11
+ "workspace.language.switchToChinese": "Switch to Chinese",
12
+ "workspace.language.toggle": "EN",
13
+ "workspace.empty.eyebrow": "Session Workspace",
14
+ "workspace.empty.title": "Choose a session to start working",
15
+ "workspace.empty.subtitle": "Switch sessions from the sidebar, or create/import one directly.",
16
+ "workspace.empty.newSession": "New session",
17
+ "workspace.empty.importCodex": "Import Codex session",
18
+ "workspace.sidebar.import": "Import Codex",
19
+ "workspace.sidebar.newSession": "+ New session",
20
+ "workspace.sidebar.empty": "No sessions match the current filter.",
21
+ "workspace.session.untitled": "Untitled session",
22
+ "workspace.project.untitled": "Untitled project",
23
+ "workspace.create.eyebrow": "Session",
24
+ "workspace.create.pickProjectTitle": "Choose a project to start a session",
25
+ "workspace.create.close": "Close",
26
+ "workspace.create.noProjects": "There are no projects yet. Pick a directory to use it directly, or create a new project folder inside it.",
27
+ "workspace.create.chooseDirectory": "Choose directory",
28
+ "workspace.create.startSession": "Start session",
29
+ "workspace.create.processing": "Working...",
30
+ "workspace.create.directoryTitle": "Choose a directory to start a session",
31
+ "workspace.create.projectName": "New project name (optional)",
32
+ "workspace.create.projectNamePlaceholder": "Leave empty to use this directory directly, or enter a name to create a new project folder inside it",
33
+ "workspace.create.projectHelp": "Leave it empty to use the current directory as the project root. If you enter a project name, RemCodex will create that folder inside the current directory before starting the session.",
34
+ "workspace.create.currentDirectory": "Current directory",
35
+ "workspace.create.pathPlaceholder": "Choose a directory, or type a path directly",
36
+ "workspace.create.upOneLevel": "Up one level",
37
+ "workspace.create.loadingDirectories": "Loading directories...",
38
+ "workspace.create.noChildDirectories": "There are no subdirectories to browse here.",
39
+ "workspace.create.backToProjects": "Back to project list",
40
+ "workspace.create.pathRequired": "Choose a directory or type a path directly.",
41
+ "workspace.import.eyebrow": "Codex",
42
+ "workspace.import.title": "Import Codex session",
43
+ "workspace.import.searchPlaceholder": "Search by title, path, or session ID",
44
+ "workspace.import.loading": "Loading importable sessions...",
45
+ "workspace.import.empty": "No matching Codex sessions were found.",
46
+ "workspace.import.imported": "Imported",
47
+ "workspace.import.available": "Available",
48
+ "workspace.import.syncLatest": "Sync latest",
49
+ "workspace.import.importSession": "Import session",
50
+ "workspace.import.syncToExisting": "Will sync into existing session {sessionId}",
51
+ "workspace.import.importSelected": "Will import {title}",
52
+ "workspace.import.chooseSession": "Choose a session",
53
+ "workspace.import.noneAvailable": "There are no local Codex sessions available to import.",
54
+ "workspace.import.invalidPrompt": "Invalid import selection.",
55
+ "workspace.import.promptHeader": "Enter the number to import:",
56
+ "workspace.loading.session": "Loading session content...",
57
+ "workspace.loading.projects": "Loading projects...",
58
+ "workspace.loading.sessions": "Loading sessions...",
59
+ "projects.runtimeEyebrow": "Runtime",
60
+ "projects.healthTitle": "Server health",
61
+ "projects.codexCommand": "Codex command",
62
+ "projects.executionMode": "Execution mode",
63
+ "projects.projectRoots": "Project roots",
64
+ "projects.registryEyebrow": "Project registry",
65
+ "projects.addTitle": "Add project",
66
+ "projects.name": "Project name",
67
+ "projects.namePlaceholder": "e.g. easygo-service",
68
+ "projects.path": "Local path",
69
+ "projects.pathPlaceholder": "/workspace/easygo-service",
70
+ "projects.register": "Register project",
71
+ "projects.listTitle": "Projects",
72
+ "projects.count": ({ count }) => (count === 1 ? "1 project" : `${count} projects`),
73
+ "projects.promptSessionTitle": "Enter a session title",
74
+ "projects.promptSessionDefault": "Fix an API error",
75
+ "sessions.filterListTitle": "Filters and list",
76
+ "sessions.searchPlaceholder": "Search title, last reply, or command",
77
+ "sessions.showing": "Showing {visible} / {total}",
78
+ "sessions.clearFilters": "Clear filters",
79
+ "sessions.projectMeta": "Project: {value}",
80
+ "sessions.lastEventMeta": "Last event: {value}",
81
+ "sessions.eventCount": ({ count }) => (count === 1 ? "1 event" : `${count} events`),
82
+ "sessions.threadReady": "Thread ready",
83
+ "sessions.threadMissing": "Thread missing",
84
+ "sessions.pendingApproval": "Pending approval",
85
+ "sessions.emptyFiltered": "No sessions match the current filters.",
86
+ "sessions.pageRange": "Items {start}-{end} of {total}",
87
+ "sessions.pageIndex": "Page {page} / {total}",
88
+ "sessions.pagePrev": "Previous",
89
+ "sessions.pageNext": "Next",
90
+ "sessions.pendingApprovalTitle": "Pending approval",
91
+ "sessions.lastCommandTitle": "Last command",
92
+ "sessions.lastReplyTitle": "Last reply",
93
+ "sessions.statusAll": ({ count }) => `All statuses (${count})`,
94
+ "sessions.projectAll": ({ count }) => `All projects (${count})`,
95
+ "sessions.threadAll": "All threads",
96
+ "sessions.threadReadyFilter": "Thread ready",
97
+ "sessions.threadMissingFilter": "Thread missing",
98
+ "sessions.sort.activity_desc": "Recently active",
99
+ "sessions.sort.created_desc": "Recently created",
100
+ "sessions.sort.events_desc": "Most events",
101
+ "sessions.sort.reply_desc": "Recently replied",
102
+ "session.status.idle": "Idle",
103
+ "session.status.starting": "Starting",
104
+ "session.status.running": "Running",
105
+ "session.status.waiting_input": "Waiting",
106
+ "session.status.stopping": "Stopping",
107
+ "session.status.completed": "Completed",
108
+ "session.status.failed": "Failed",
109
+ "session.status.unknown": "Unknown status",
110
+ "session.host.unsynced": "Host not synced",
111
+ "session.model.unsynced": "Model not synced",
112
+ "session.reasoning.unsynced": "Reasoning not synced",
113
+ "session.elapsed": "Session {value}",
114
+ "session.turnElapsed": "Turn {value}",
115
+ "session.externalRunning": "Running externally",
116
+ "session.current": "Current session",
117
+ "session.back": "Back",
118
+ "inspect.selectionTitle": "Details",
119
+ "inspect.close": "Close",
120
+ "inspect.searchFlow": "Search timeline",
121
+ "inspect.searchPlaceholder": "Search commands, errors, or replies",
122
+ "inspect.searchPrev": "Previous",
123
+ "inspect.searchNext": "Next",
124
+ "inspect.clearSearch": "Clear",
125
+ "inspect.results": "Results",
126
+ "inspect.resultCount": ({ count }) => (count === 1 ? "1 result" : `${count} results`),
127
+ "inspect.resultCountMatches": ({ count }) => (count === 1 ? "1 match" : `${count} matches`),
128
+ "inspect.emptySearch": "No search results match the current filters.",
129
+ "inspect.rawEventsEmpty": "There are no raw events yet.",
130
+ "inspect.hint.permissionsDenied": "The current command hit a system permission denial. The target path might be outside the writable workspace.",
131
+ "inspect.hint.readOnly": "The current runtime is in read-only mode, so write operations fail immediately.",
132
+ "inspect.hint.workspaceWrite": "The current runtime is in workspace-write mode, so writes are limited to the current writable roots.",
133
+ "inspect.hint.noInteractiveApproval": "The current {mode} runtime path does not support interactive approval prompts.",
134
+ "inspect.hint.workspaceRoot": "The current workspace root is {path}.",
135
+ "inspect.hint.sandboxApproval": "This failure is related to the current sandbox / approval settings.",
136
+ "inspect.session": "Session",
137
+ "inspect.project": "Project",
138
+ "inspect.projectDirectory": "Project directory",
139
+ "inspect.currentCwd": "Current CWD",
140
+ "inspect.executionPath": "Execution path",
141
+ "inspect.workspaceRoot": "Workspace root",
142
+ "inspect.writableRoots": "Writable roots",
143
+ "inspect.pid": "PID",
144
+ "inspect.thread": "Thread",
145
+ "inspect.runtimeHints": "Restrictions",
146
+ "inspect.fetchHistory": "Fetch history",
147
+ "inspect.followBottom": "Jump to bottom and follow",
148
+ "inspect.autoScroll": "Auto-scroll: {value}",
149
+ "inspect.rawEventsDebug": "Raw events / debug data",
150
+ "inspect.emptySelection": "Choose a task to inspect its input, execution, and final reply.",
151
+ "inspect.detailTitle": "Turn details",
152
+ "inspect.userInput": "User input",
153
+ "inspect.executionDetails": "Execution details",
154
+ "inspect.assistantReply": "Assistant reply",
155
+ "inspect.rawStdout": "Raw CLI output",
156
+ "inspect.output": "Output",
157
+ "inspect.viewOutputDetails": "View output details",
158
+ "inspect.viewFullCommandOutput": "View full command and output",
159
+ "inspect.commandStillRunning": "The command is still running and output will keep streaming.",
160
+ "inspect.commandEndedWithErrors": "The command finished with stderr output.",
161
+ "inspect.commandCompletedExpand": "The command finished. Expand to inspect full output.",
162
+ "inspect.commandCompletedNoOutput": "The command finished with no extra output.",
163
+ "inspect.executionSteps": "Execution steps",
164
+ "inspect.viewRawEvents": "View raw events",
165
+ "inspect.copyCommand": "Copy command",
166
+ "inspect.commandMetrics": "Command metrics",
167
+ "inspect.commandOutput": "Output",
168
+ "inspect.copyFailed": "Copy failed. Please copy manually.",
169
+ "inspect.copied": "Copied",
170
+ "inspect.tool": "Tool",
171
+ "inspect.userKind": "User",
172
+ "inspect.statusKind": "Status",
173
+ "inspect.commandUnknown": "Unknown command",
174
+ "inspect.systemNotice": "System notice",
175
+ "inspect.running": "Running",
176
+ "inspect.error": "Error",
177
+ "inspect.warning": "Warning",
178
+ "inspect.completed": "Completed",
179
+ "inspect.stderr": "Stderr",
180
+ "inspect.duration": "Duration",
181
+ "inspect.problemCommand": "Problem command",
182
+ "inspect.longRunning": "Long running",
183
+ "inspect.slowCommand": "Slow command",
184
+ "inspect.noOutput": "No output",
185
+ "inspect.noOutputYetShort": "No output yet",
186
+ "inspect.processExit": "Process exit",
187
+ "inspect.statusChange": "Status change",
188
+ "inspect.filter.all": "All",
189
+ "inspect.filter.assistant": "Assistant",
190
+ "inspect.filter.command": "Tool / command",
191
+ "inspect.filter.system": "System",
192
+ "inspect.severity.all": "All severities",
193
+ "approval.required": "Approval required",
194
+ "approval.commandRequired": "Command execution requires approval",
195
+ "approval.fileChangeRequired": "File changes require approval",
196
+ "approval.extraPermissionRequired": "Extra permissions require approval",
197
+ "approval.pending": "Pending",
198
+ "approval.restore": "Restart required",
199
+ "approval.continueHint": "This step needs your approval before execution can continue.",
200
+ "approval.restoreHint": "This approval request was restored from history and the runtime is no longer active. Send the task again to request approval one more time.",
201
+ "approval.deny": "Deny",
202
+ "approval.allowOnce": "Allow once",
203
+ "approval.allowForTurn": "Allow for turn",
204
+ "approval.pathInWritable": "The target path {targetPath} is already writable. This approval is needed to continue a sensitive operation.",
205
+ "approval.pathOutsideWorkspace": "The target path {targetPath} is outside the current workspace root {workspaceRoot}, so approval is required.",
206
+ "approval.pathOutsideWritable": "The target path {targetPath} is outside the current writable roots, so approval is required.",
207
+ "composer.reasoning.low": "Low",
208
+ "composer.reasoning.medium": "Medium",
209
+ "composer.reasoning.high": "High",
210
+ "composer.reasoning.xhigh": "Very high",
211
+ "composer.slashMenu": "Slash commands",
212
+ "composer.slashLoading": "Loading commands...",
213
+ "composer.slashEmpty": "No matching commands",
214
+ "composer.quota.remaining": "Quota remaining",
215
+ "composer.quota.hours": "5 hours {percent} {remain}",
216
+ "composer.quota.week": "1 week {percent} {reset}",
217
+ "composer.environment": "Environment menu",
218
+ "composer.unsynced": "Not synced",
219
+ "composer.placeholder": "Describe the development task you want Codex to handle",
220
+ "composer.aria.message": "Send a message to Codex",
221
+ "composer.aria.model": "Model",
222
+ "composer.aria.reasoning": "Reasoning effort",
223
+ "composer.aria.stop": "Stop current task",
224
+ "composer.aria.send": "Send",
225
+ "timeline.empty": "No conversation yet.",
226
+ "timeline.userMessage": "User message",
227
+ "timeline.assistantCommentary": "Assistant commentary",
228
+ "timeline.assistant": "Assistant",
229
+ "timeline.thinking": "Thinking...",
230
+ "timeline.command": "Command",
231
+ "timeline.commandStreaming": "Command output is still streaming...",
232
+ "timeline.patch": "Edited files",
233
+ "timeline.patchStreaming": "Patch output is still streaming...",
234
+ "timeline.activitySummary": "Activity summary",
235
+ "timeline.fileChanges": "Edited files",
236
+ "timeline.file.untitled": "Untitled file",
237
+ "timeline.summary.moreItems": "and {count} more",
238
+ "timeline.summary.moreFiles": "and {count} more files",
239
+ "timeline.summary.moreLocations": "and {count} more locations",
240
+ "timeline.summary.searchAt": "searched in {value}",
241
+ "timeline.summary.activities": "{count} activities",
242
+ "timeline.system": "System",
243
+ "timeline.jumpToBottom": "Jump to bottom",
244
+ "timeline.validation.completed": ({ count }) => (count > 1 ? `Validated ${count} items` : "Validated"),
245
+ "timeline.search.completed": ({ count }) => (count > 1 ? `Searched ${count} items` : "Searched"),
246
+ "timeline.browse.completed": ({ count }) => (count > 1 ? `Browsed ${count} files` : "Browsed file"),
247
+ "timeline.edit.completed": ({ count }) => (count > 1 ? `Edited ${count} files` : "Edited file"),
248
+ "timeline.executedActivities": ({ count }) => `Completed ${count} activities`,
249
+ "activity.search": "Search",
250
+ "activity.browse.single": "Browsed 1 file",
251
+ "activity.browse.multiple": "Browsed {count} files",
252
+ "activity.edit.single": "Edited file",
253
+ "activity.edit.multiple": "Edited {count} files",
254
+ "activity.validation.completed": "Validated",
255
+ "activity.running.edit": "Editing files",
256
+ "activity.failed.edit": "File edit failed",
257
+ "activity.completed.edit": "Edited file",
258
+ "activity.running.search": "Searching",
259
+ "activity.failed.search": "Search failed",
260
+ "activity.completed.search": "Searched",
261
+ "activity.running.browse": "Viewing files",
262
+ "activity.failed.browse": "File view failed",
263
+ "activity.completed.browse": "Browsed file",
264
+ "activity.running.validation": "Validating",
265
+ "activity.failed.validation": "Validation failed",
266
+ "activity.completed.validation": "Validated",
267
+ "activity.running.git": "Running Git operation",
268
+ "activity.failed.git": "Git operation failed",
269
+ "activity.completed.git": "Ran Git operation",
270
+ "activity.running.run": "Running command",
271
+ "activity.failed.run": "Command failed",
272
+ "activity.completed.run": "Ran command",
273
+ "task.commandExecuted": "Ran {label}",
274
+ "task.commandRunning": "Running {label}",
275
+ "task.commandFailed": "Failed {label}",
276
+ "task.processing": "Working",
277
+ "task.empty": "No execution steps to display.",
278
+ "command.outputCount": ({ count }) => `output ${count}`,
279
+ "command.stdoutCount": ({ count }) => `stdout ${count}`,
280
+ "command.stderrCount": ({ count }) => `stderr ${count}`,
281
+ "command.elapsedLabel": "Elapsed {value}",
282
+ "command.runningForLabel": "Running {value}",
283
+ "command.summary.running": "Command is still running...",
284
+ "command.summary.completed": "Command completed.",
285
+ "command.summary.failedExpand": "Command failed. Expand to inspect full output.",
286
+ "command.summary.completedWithStderr": "Command completed with stderr output.",
287
+ "command.summary.completedExpand": "Command completed. Expand to inspect full output.",
288
+ "runtime.low": "Low",
289
+ "runtime.medium": "Medium",
290
+ "runtime.high": "High",
291
+ "runtime.xhigh": "Very high",
292
+ "generic.close": "Close",
293
+ "generic.back": "Back",
294
+ "generic.refresh": "Refresh",
295
+ "generic.online": "Online",
296
+ "generic.search": "Search",
297
+ "generic.project": "Project",
298
+ "generic.status": "Status",
299
+ "generic.sort": "Sort",
300
+ "generic.keyword": "Keyword",
301
+ "generic.clear": "Clear",
302
+ "generic.copy": "Copy",
303
+ "generic.expand": "Expand",
304
+ "generic.collapse": "Collapse",
305
+ "generic.type": "Type",
306
+ "generic.level": "Severity",
307
+ "generic.on": "On",
308
+ "generic.off": "Off",
309
+ "generic.notSynced": "Not synced",
310
+ "generic.notStarted": "Not started",
311
+ "generic.notEstablished": "Not established",
312
+ "generic.showing": "Showing {visible} / {total}",
313
+ "generic.segmentCount": ({ count }) => (count === 1 ? "1 segment" : `${count} segments`),
314
+ "generic.noExtraOutput": "No extra output.",
315
+ "generic.noOutputYet": "This command has no output yet.",
316
+ "generic.unknown": "Unknown",
317
+ "generic.none": "None",
318
+ "composer.slashUnavailable": "This command is not available right now.",
319
+ "composer.slashExecuted": "{slash} executed.",
320
+ };
@@ -0,0 +1,50 @@
1
+ import en from "./en.js";
2
+
3
+ export default {
4
+ ...en,
5
+ "nav.projects": "Proyectos",
6
+ "nav.sessions": "Sesiones",
7
+ "workspace.openSidebar": "Abrir barra lateral de sesiones",
8
+ "workspace.closeSidebar": "Ocultar barra lateral de sesiones",
9
+ "workspace.empty.title": "Elige una sesión para empezar a trabajar",
10
+ "workspace.empty.subtitle": "Cambia de sesión desde la barra lateral o crea/importa una nueva.",
11
+ "workspace.empty.newSession": "Nueva sesión",
12
+ "workspace.sidebar.import": "Importar sesión de Codex",
13
+ "workspace.sidebar.newSession": "+ Nueva sesión",
14
+ "workspace.sidebar.empty": "Ninguna sesión coincide con el filtro actual.",
15
+ "workspace.session.untitled": "Sesión sin título",
16
+ "workspace.loading.session": "Cargando contenido de la sesión...",
17
+ "workspace.loading.projects": "Cargando proyectos...",
18
+ "workspace.loading.sessions": "Cargando sesiones...",
19
+ "session.status.idle": "Inactiva",
20
+ "session.status.starting": "Iniciando",
21
+ "session.status.running": "En ejecución",
22
+ "session.status.waiting_input": "Esperando",
23
+ "session.status.stopping": "Deteniendo",
24
+ "session.status.completed": "Completada",
25
+ "session.status.failed": "Falló",
26
+ "session.current": "Sesión actual",
27
+ "approval.required": "Se requiere aprobación",
28
+ "approval.pending": "Pendiente",
29
+ "approval.deny": "Denegar",
30
+ "approval.allowOnce": "Permitir una vez",
31
+ "approval.allowForTurn": "Permitir en este turno",
32
+ "composer.placeholder": "Describe la tarea de desarrollo que quieres que Codex resuelva",
33
+ "timeline.empty": "Todavía no hay conversación.",
34
+ "timeline.thinking": "Pensando...",
35
+ "generic.close": "Cerrar",
36
+ "generic.back": "Volver",
37
+ "generic.refresh": "Actualizar",
38
+ "generic.search": "Buscar",
39
+ "generic.project": "Proyecto",
40
+ "generic.status": "Estado",
41
+ "generic.sort": "Ordenar",
42
+ "generic.keyword": "Palabra clave",
43
+ "generic.copy": "Copiar",
44
+ "generic.expand": "Expandir",
45
+ "generic.collapse": "Contraer",
46
+ "generic.on": "Sí",
47
+ "generic.off": "No",
48
+ "generic.none": "Ninguno",
49
+ "inspect.selectionTitle": "Detalles",
50
+ };
@@ -0,0 +1,50 @@
1
+ import en from "./en.js";
2
+
3
+ export default {
4
+ ...en,
5
+ "nav.projects": "Projets",
6
+ "nav.sessions": "Sessions",
7
+ "workspace.openSidebar": "Ouvrir la barre latérale des sessions",
8
+ "workspace.closeSidebar": "Réduire la barre latérale des sessions",
9
+ "workspace.empty.title": "Choisissez une session pour commencer",
10
+ "workspace.empty.subtitle": "Basculez entre les sessions depuis la barre latérale ou créez / importez-en une.",
11
+ "workspace.empty.newSession": "Nouvelle session",
12
+ "workspace.sidebar.import": "Importer une session Codex",
13
+ "workspace.sidebar.newSession": "+ Nouvelle session",
14
+ "workspace.sidebar.empty": "Aucune session ne correspond au filtre actuel.",
15
+ "workspace.session.untitled": "Session sans titre",
16
+ "workspace.loading.session": "Chargement du contenu de la session...",
17
+ "workspace.loading.projects": "Chargement des projets...",
18
+ "workspace.loading.sessions": "Chargement des sessions...",
19
+ "session.status.idle": "Inactif",
20
+ "session.status.starting": "Démarrage",
21
+ "session.status.running": "En cours",
22
+ "session.status.waiting_input": "En attente",
23
+ "session.status.stopping": "Arrêt",
24
+ "session.status.completed": "Terminé",
25
+ "session.status.failed": "Échec",
26
+ "session.current": "Session actuelle",
27
+ "approval.required": "Approbation requise",
28
+ "approval.pending": "En attente",
29
+ "approval.deny": "Refuser",
30
+ "approval.allowOnce": "Autoriser une fois",
31
+ "approval.allowForTurn": "Autoriser pour ce tour",
32
+ "composer.placeholder": "Décrivez la tâche de développement que vous voulez confier à Codex",
33
+ "timeline.empty": "Aucune conversation pour le moment.",
34
+ "timeline.thinking": "Réflexion...",
35
+ "generic.close": "Fermer",
36
+ "generic.back": "Retour",
37
+ "generic.refresh": "Actualiser",
38
+ "generic.search": "Rechercher",
39
+ "generic.project": "Projet",
40
+ "generic.status": "Statut",
41
+ "generic.sort": "Trier",
42
+ "generic.keyword": "Mot-clé",
43
+ "generic.copy": "Copier",
44
+ "generic.expand": "Développer",
45
+ "generic.collapse": "Réduire",
46
+ "generic.on": "Activé",
47
+ "generic.off": "Désactivé",
48
+ "generic.none": "Aucun",
49
+ "inspect.selectionTitle": "Détails",
50
+ };
@@ -0,0 +1,50 @@
1
+ import en from "./en.js";
2
+
3
+ export default {
4
+ ...en,
5
+ "nav.projects": "プロジェクト",
6
+ "nav.sessions": "セッション",
7
+ "workspace.openSidebar": "セッションサイドバーを開く",
8
+ "workspace.closeSidebar": "セッションサイドバーを閉じる",
9
+ "workspace.empty.title": "作業を始めるセッションを選択",
10
+ "workspace.empty.subtitle": "サイドバーでセッションを切り替えるか、新規作成 / インポートしてください。",
11
+ "workspace.empty.newSession": "新しいセッション",
12
+ "workspace.sidebar.import": "Codex セッションをインポート",
13
+ "workspace.sidebar.newSession": "+ 新しいセッション",
14
+ "workspace.sidebar.empty": "現在のフィルターに一致するセッションはありません。",
15
+ "workspace.session.untitled": "無題のセッション",
16
+ "workspace.loading.session": "セッション内容を読み込み中...",
17
+ "workspace.loading.projects": "プロジェクトを読み込み中...",
18
+ "workspace.loading.sessions": "セッションを読み込み中...",
19
+ "session.status.idle": "待機中",
20
+ "session.status.starting": "起動中",
21
+ "session.status.running": "実行中",
22
+ "session.status.waiting_input": "入力待ち",
23
+ "session.status.stopping": "停止中",
24
+ "session.status.completed": "完了",
25
+ "session.status.failed": "失敗",
26
+ "session.current": "現在のセッション",
27
+ "approval.required": "承認が必要です",
28
+ "approval.pending": "保留中",
29
+ "approval.deny": "拒否",
30
+ "approval.allowOnce": "一度だけ許可",
31
+ "approval.allowForTurn": "このターンで許可",
32
+ "composer.placeholder": "Codex に任せたい開発タスクを説明してください",
33
+ "timeline.empty": "まだ会話はありません。",
34
+ "timeline.thinking": "思考中...",
35
+ "generic.close": "閉じる",
36
+ "generic.back": "戻る",
37
+ "generic.refresh": "更新",
38
+ "generic.search": "検索",
39
+ "generic.project": "プロジェクト",
40
+ "generic.status": "状態",
41
+ "generic.sort": "並び替え",
42
+ "generic.keyword": "キーワード",
43
+ "generic.copy": "コピー",
44
+ "generic.expand": "展開",
45
+ "generic.collapse": "折りたたむ",
46
+ "generic.on": "オン",
47
+ "generic.off": "オフ",
48
+ "generic.none": "なし",
49
+ "inspect.selectionTitle": "詳細",
50
+ };
@@ -0,0 +1,50 @@
1
+ import en from "./en.js";
2
+
3
+ export default {
4
+ ...en,
5
+ "nav.projects": "프로젝트",
6
+ "nav.sessions": "세션",
7
+ "workspace.openSidebar": "세션 사이드바 열기",
8
+ "workspace.closeSidebar": "세션 사이드바 닫기",
9
+ "workspace.empty.title": "작업을 시작할 세션을 선택하세요",
10
+ "workspace.empty.subtitle": "사이드바에서 세션을 전환하거나 새로 만들기 / 가져오기를 하세요.",
11
+ "workspace.empty.newSession": "새 세션",
12
+ "workspace.sidebar.import": "Codex 세션 가져오기",
13
+ "workspace.sidebar.newSession": "+ 새 세션",
14
+ "workspace.sidebar.empty": "현재 필터와 일치하는 세션이 없습니다.",
15
+ "workspace.session.untitled": "제목 없는 세션",
16
+ "workspace.loading.session": "세션 내용을 불러오는 중...",
17
+ "workspace.loading.projects": "프로젝트를 불러오는 중...",
18
+ "workspace.loading.sessions": "세션을 불러오는 중...",
19
+ "session.status.idle": "대기",
20
+ "session.status.starting": "시작 중",
21
+ "session.status.running": "실행 중",
22
+ "session.status.waiting_input": "입력 대기",
23
+ "session.status.stopping": "중지 중",
24
+ "session.status.completed": "완료",
25
+ "session.status.failed": "실패",
26
+ "session.current": "현재 세션",
27
+ "approval.required": "승인이 필요합니다",
28
+ "approval.pending": "대기 중",
29
+ "approval.deny": "거부",
30
+ "approval.allowOnce": "한 번 허용",
31
+ "approval.allowForTurn": "이번 턴에서 허용",
32
+ "composer.placeholder": "Codex가 처리할 개발 작업을 설명하세요",
33
+ "timeline.empty": "아직 대화가 없습니다.",
34
+ "timeline.thinking": "생각 중...",
35
+ "generic.close": "닫기",
36
+ "generic.back": "뒤로",
37
+ "generic.refresh": "새로고침",
38
+ "generic.search": "검색",
39
+ "generic.project": "프로젝트",
40
+ "generic.status": "상태",
41
+ "generic.sort": "정렬",
42
+ "generic.keyword": "키워드",
43
+ "generic.copy": "복사",
44
+ "generic.expand": "펼치기",
45
+ "generic.collapse": "접기",
46
+ "generic.on": "켜짐",
47
+ "generic.off": "꺼짐",
48
+ "generic.none": "없음",
49
+ "inspect.selectionTitle": "세부 정보",
50
+ };
@@ -0,0 +1,50 @@
1
+ import en from "./en.js";
2
+
3
+ export default {
4
+ ...en,
5
+ "nav.projects": "Projetos",
6
+ "nav.sessions": "Sessões",
7
+ "workspace.openSidebar": "Abrir barra lateral de sessões",
8
+ "workspace.closeSidebar": "Recolher barra lateral de sessões",
9
+ "workspace.empty.title": "Escolha uma sessão para começar a trabalhar",
10
+ "workspace.empty.subtitle": "Troque de sessão pela barra lateral ou crie / importe uma nova.",
11
+ "workspace.empty.newSession": "Nova sessão",
12
+ "workspace.sidebar.import": "Importar sessão do Codex",
13
+ "workspace.sidebar.newSession": "+ Nova sessão",
14
+ "workspace.sidebar.empty": "Nenhuma sessão corresponde ao filtro atual.",
15
+ "workspace.session.untitled": "Sessão sem título",
16
+ "workspace.loading.session": "Carregando conteúdo da sessão...",
17
+ "workspace.loading.projects": "Carregando projetos...",
18
+ "workspace.loading.sessions": "Carregando sessões...",
19
+ "session.status.idle": "Inativa",
20
+ "session.status.starting": "Iniciando",
21
+ "session.status.running": "Executando",
22
+ "session.status.waiting_input": "Aguardando",
23
+ "session.status.stopping": "Parando",
24
+ "session.status.completed": "Concluída",
25
+ "session.status.failed": "Falhou",
26
+ "session.current": "Sessão atual",
27
+ "approval.required": "Aprovação necessária",
28
+ "approval.pending": "Pendente",
29
+ "approval.deny": "Negar",
30
+ "approval.allowOnce": "Permitir uma vez",
31
+ "approval.allowForTurn": "Permitir neste turno",
32
+ "composer.placeholder": "Descreva a tarefa de desenvolvimento que você quer que o Codex resolva",
33
+ "timeline.empty": "Ainda não há conversa.",
34
+ "timeline.thinking": "Pensando...",
35
+ "generic.close": "Fechar",
36
+ "generic.back": "Voltar",
37
+ "generic.refresh": "Atualizar",
38
+ "generic.search": "Buscar",
39
+ "generic.project": "Projeto",
40
+ "generic.status": "Status",
41
+ "generic.sort": "Ordenar",
42
+ "generic.keyword": "Palavra-chave",
43
+ "generic.copy": "Copiar",
44
+ "generic.expand": "Expandir",
45
+ "generic.collapse": "Recolher",
46
+ "generic.on": "Ligado",
47
+ "generic.off": "Desligado",
48
+ "generic.none": "Nenhum",
49
+ "inspect.selectionTitle": "Detalhes",
50
+ };
@@ -0,0 +1,50 @@
1
+ import en from "./en.js";
2
+
3
+ export default {
4
+ ...en,
5
+ "nav.projects": "Проекты",
6
+ "nav.sessions": "Сессии",
7
+ "workspace.openSidebar": "Открыть боковую панель сессий",
8
+ "workspace.closeSidebar": "Свернуть боковую панель сессий",
9
+ "workspace.empty.title": "Выберите сессию, чтобы начать работу",
10
+ "workspace.empty.subtitle": "Переключайте сессии в боковой панели или создайте / импортируйте новую.",
11
+ "workspace.empty.newSession": "Новая сессия",
12
+ "workspace.sidebar.import": "Импортировать сессию Codex",
13
+ "workspace.sidebar.newSession": "+ Новая сессия",
14
+ "workspace.sidebar.empty": "Нет сессий, подходящих под текущий фильтр.",
15
+ "workspace.session.untitled": "Сессия без названия",
16
+ "workspace.loading.session": "Загрузка содержимого сессии...",
17
+ "workspace.loading.projects": "Загрузка проектов...",
18
+ "workspace.loading.sessions": "Загрузка сессий...",
19
+ "session.status.idle": "Ожидание",
20
+ "session.status.starting": "Запуск",
21
+ "session.status.running": "Выполняется",
22
+ "session.status.waiting_input": "Ожидание ввода",
23
+ "session.status.stopping": "Остановка",
24
+ "session.status.completed": "Завершено",
25
+ "session.status.failed": "Ошибка",
26
+ "session.current": "Текущая сессия",
27
+ "approval.required": "Требуется подтверждение",
28
+ "approval.pending": "Ожидание",
29
+ "approval.deny": "Отклонить",
30
+ "approval.allowOnce": "Разрешить один раз",
31
+ "approval.allowForTurn": "Разрешить для этого хода",
32
+ "composer.placeholder": "Опишите задачу разработки, которую Codex должен выполнить",
33
+ "timeline.empty": "Диалога пока нет.",
34
+ "timeline.thinking": "Размышляет...",
35
+ "generic.close": "Закрыть",
36
+ "generic.back": "Назад",
37
+ "generic.refresh": "Обновить",
38
+ "generic.search": "Поиск",
39
+ "generic.project": "Проект",
40
+ "generic.status": "Статус",
41
+ "generic.sort": "Сортировка",
42
+ "generic.keyword": "Ключевое слово",
43
+ "generic.copy": "Копировать",
44
+ "generic.expand": "Развернуть",
45
+ "generic.collapse": "Свернуть",
46
+ "generic.on": "Вкл",
47
+ "generic.off": "Выкл",
48
+ "generic.none": "Нет",
49
+ "inspect.selectionTitle": "Подробности",
50
+ };