@parallel-cli/parallel 0.4.1 → 0.4.4
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.
- package/CHANGELOG.md +149 -0
- package/README.md +183 -195
- package/dist/agents/agent.js +2 -2
- package/dist/agents/tools.js +47 -5
- package/dist/commands.js +117 -18
- package/dist/config.js +248 -63
- package/dist/controller.js +48 -17
- package/dist/i18n.js +192 -44
- package/dist/index.js +8 -5
- package/dist/pricing.js +162 -54
- package/dist/ui/App.js +208 -102
- package/dist/ui/CommandInput.js +42 -17
- package/dist/ui/SettingsPanel.js +224 -34
- package/dist/ui/Wizard.js +33 -3
- package/dist/ui/views.js +53 -21
- package/package.json +10 -1
package/dist/i18n.js
CHANGED
|
@@ -55,6 +55,10 @@ const en = {
|
|
|
55
55
|
'wiz.provider.name.ph': 'e.g. openrouter, mistral, ollama…',
|
|
56
56
|
'wiz.provider.url.title': 'Base URL (OpenAI-compatible endpoint)',
|
|
57
57
|
'wiz.provider.url.ph': 'e.g. https://openrouter.ai/api/v1',
|
|
58
|
+
'wiz.provider.endpoint.title': 'Review endpoint for {name}',
|
|
59
|
+
'wiz.provider.endpoint.model': 'Model: {model}',
|
|
60
|
+
'wiz.provider.endpoint.use': 'Use this endpoint',
|
|
61
|
+
'wiz.provider.endpoint.edit': 'Edit endpoint',
|
|
58
62
|
'wiz.provider.model.title': "Model name — exactly as written in the provider's documentation",
|
|
59
63
|
'wiz.provider.model.ph': 'e.g. deepseek-chat, gpt-4o-mini, qwen2.5-coder…',
|
|
60
64
|
'wiz.provider.key.title': 'API key for {name}',
|
|
@@ -101,7 +105,7 @@ const en = {
|
|
|
101
105
|
'notes.empty': 'No notes exchanged yet.',
|
|
102
106
|
'sessions.title': '📂 SAVED SESSIONS',
|
|
103
107
|
'sessions.empty': 'No saved sessions for this project yet.',
|
|
104
|
-
'sessions.item': '{date} · {agents} agent(s)',
|
|
108
|
+
'sessions.item': '{name}{date} · {agents} agent(s)',
|
|
105
109
|
'sessions.hint': 'Restore one with /session <n> or /session latest. New launches start fresh by default.',
|
|
106
110
|
'diff.title': '± LIVE DIFFS — {total} change(s) total (last 4 shown)',
|
|
107
111
|
'diff.empty': 'No file changes yet.',
|
|
@@ -117,7 +121,7 @@ const en = {
|
|
|
117
121
|
'help.l2d': ' for everyone).',
|
|
118
122
|
'help.l3': "Agents see each other's statuses and diffs before every action: they co-edit the same files without blocking and without breaking each other's work.",
|
|
119
123
|
'help.states': 'States: 🔨 working · 👂 listening to other agents (double border) · 🧠 thinking · ✋ waiting for your approval · ⏹ stop. Sounds: 1 beep = agent launched/finished, 2 beeps = approval required (/sound off to mute).',
|
|
120
|
-
'help.keys': 'Esc: back to agents view · Tab: completion · ↑/↓: history · Ctrl+V: paste image',
|
|
124
|
+
'help.keys': 'Esc: back to agents view · Tab: completion · PgUp/PgDn: hub/focus scroll · ↑/↓: suggestions, history, or view scroll · Ctrl+V: paste image',
|
|
121
125
|
// commands (descriptions)
|
|
122
126
|
'cmd.ask': 'Ask-only agent: answers and advises without editing',
|
|
123
127
|
'cmd.task': 'Task agent: executes, edits, validates, summarizes',
|
|
@@ -152,9 +156,11 @@ const en = {
|
|
|
152
156
|
'cmd.model': 'Show/change the session model ([provider:]model)',
|
|
153
157
|
'cmd.sessions': 'List saved sessions for this project',
|
|
154
158
|
'cmd.session': 'Restore a saved session by number, or latest',
|
|
155
|
-
'cmd.doctor': '
|
|
159
|
+
'cmd.doctor': 'Run local readiness diagnostics',
|
|
156
160
|
'cmd.settings': 'Global settings — providers, API keys, language, defaults (persisted)',
|
|
157
161
|
'cmd.ssettings': 'Session settings — model, approvals, sound (this session only)',
|
|
162
|
+
'cmd.project': 'Change project folder or reopen folder picker',
|
|
163
|
+
'cmd.wizard': 'Relaunch the setup wizard',
|
|
158
164
|
'cmd.approvals': 'Shell approvals: ask, auto-safe, or yolo (this session)',
|
|
159
165
|
'cmd.sound': 'Sound cues (this session)',
|
|
160
166
|
'cmd.save': 'Save the session now (optionally with a name)',
|
|
@@ -169,7 +175,7 @@ const en = {
|
|
|
169
175
|
'm.usageAsk': 'Usage: /ask [Name:] <question> [--model=m] — advisory only, no edits.',
|
|
170
176
|
'm.usageSpawn': 'Usage: /task [Name:] <task> [--model=m]',
|
|
171
177
|
'm.usageAt': 'Usage: @Agent <message> (or @all <message>)',
|
|
172
|
-
'm.broadcast': '✉ Instruction
|
|
178
|
+
'm.broadcast': '✉ Instruction sent to {n} active agent(s).',
|
|
173
179
|
'm.sent': '✉ Instruction sent to {target}.',
|
|
174
180
|
'm.notFound': 'Agent not found: {target} (agents: {list})',
|
|
175
181
|
'm.none': 'none',
|
|
@@ -200,14 +206,15 @@ const en = {
|
|
|
200
206
|
'm.focusHint': '🎯 focus {name} · type to talk to it · PgUp/PgDn scroll · Esc to exit',
|
|
201
207
|
'm.usageRestore': 'Usage: /restore <agent> (after loading a session via /session)',
|
|
202
208
|
'm.restored': '⏪ {name} relaunched with its previous conversation.',
|
|
209
|
+
'm.noRestoredAgent': 'No agent named "{name}" in the restored session.',
|
|
203
210
|
'm.noConversation': 'No saved conversation for "{name}" in the restored session.',
|
|
204
211
|
'm.conflict': '⚠ {path}: repeated collisions between agents — consider arbitrating (@agent or /focus).',
|
|
205
212
|
'status.bar': '⚡ {agents} agent(s) · {active} active · {cost}',
|
|
206
213
|
'cmd.plan': 'Plan agent: presents its plan, edits only after your approval',
|
|
207
|
-
'cmd.issue': 'spawn an agent on a GitHub issue (needs
|
|
214
|
+
'cmd.issue': 'spawn an agent on a GitHub issue (needs gh, a GitHub repo, and auth)',
|
|
208
215
|
'cmd.undo': "revert the agent's last file change",
|
|
209
|
-
'cmd.commit': 'git-commit
|
|
210
|
-
'cmd.autocommit': 'auto-commit each agent’s files when it finishes',
|
|
216
|
+
'cmd.commit': 'git-commit only files touched by an agent (or all)',
|
|
217
|
+
'cmd.autocommit': 'session-only auto-commit of each agent’s files when it finishes',
|
|
211
218
|
'm.usagePlan': 'Usage: /plan [Name:] <task> — the agent presents its plan and waits for your approval before editing.',
|
|
212
219
|
'm.usageIssue': 'Usage: /issue <number> — spawns an agent on this GitHub issue (gh CLI required).',
|
|
213
220
|
'm.ghMissing': '✗ gh CLI not found. Install it (https://cli.github.com) then `gh auth login`.',
|
|
@@ -247,14 +254,34 @@ const en = {
|
|
|
247
254
|
'm.copyNone': 'No completed agent output to copy.',
|
|
248
255
|
'm.copyDone': 'Copied latest result from {name}.',
|
|
249
256
|
'm.unknown': 'Unknown command: {cmd} — type /help',
|
|
257
|
+
'm.projectActive': 'Active agents are running. Save/stop them first, or rerun with /project [folder] --force.',
|
|
258
|
+
'm.wizardActive': 'Active agents are running. Save/stop them first, or rerun with /wizard --force.',
|
|
250
259
|
'm.imagesIgnored': 'Note: attached images are only supported when launching a new agent.',
|
|
251
260
|
'm.sessionRestored': '📂 Session from {date} restored.',
|
|
252
261
|
'm.usageSession': 'Usage: /sessions to list, then /session <n> or /session latest',
|
|
253
262
|
'm.sessionLoaded': '📂 Session from {date} loaded.',
|
|
263
|
+
'm.sessionActive': 'Active agents are running. Save/stop them first, or rerun with /session <n|latest> --force.',
|
|
264
|
+
'm.sessionRestoreHint': 'Run /restore <agent> to relaunch a saved agent conversation.',
|
|
254
265
|
'm.missingProvider': 'No provider configured. Open /settings → Add a provider, or restart with a first-run config.',
|
|
255
|
-
'm.missingKey': 'Provider {name} has no API key. Use /
|
|
266
|
+
'm.missingKey': 'Provider {name} has no API key. Use /settings → Providers → API key.',
|
|
256
267
|
'm.missingModel': 'Provider {name} has no default model. Use /settings → Provider models.',
|
|
257
268
|
'm.doctorOk': '✓ Configuration ready: {pm}. Changes: /settings · temporary model: /model [provider:]model',
|
|
269
|
+
'm.doctorReport': 'Doctor\n{lines}',
|
|
270
|
+
'm.doctorNoProvider': '✗ No provider configured. Open /settings → Add a provider.',
|
|
271
|
+
'm.doctorProvider': '• Provider: {provider}:{model}',
|
|
272
|
+
'm.doctorKeyMissing': '✗ API key missing. Open /settings → Providers → API key.',
|
|
273
|
+
'm.doctorKeyOk': '✓ API key present.',
|
|
274
|
+
'm.doctorKeySkipped': '✓ API key not required for this local provider.',
|
|
275
|
+
'm.doctorModelMissing': '✗ Model missing or still set to placeholder. Choose a real model in /settings or /model.',
|
|
276
|
+
'm.doctorModelOk': '✓ Model ready: {model}',
|
|
277
|
+
'm.doctorEndpointOk': '✓ Local endpoint reachable: {url}',
|
|
278
|
+
'm.doctorEndpointFail': '⚠ Local endpoint not reachable: {url}',
|
|
279
|
+
'm.doctorAttachOk': '✓ Attach socket is available.',
|
|
280
|
+
'm.doctorAttachMissing': '⚠ Attach socket is not running yet.',
|
|
281
|
+
'm.doctorGitOk': '✓ git CLI found.',
|
|
282
|
+
'm.doctorGitMissing': '⚠ git CLI not found.',
|
|
283
|
+
'm.doctorGhOk': '✓ gh CLI found for /issue.',
|
|
284
|
+
'm.doctorGhMissing': '⚠ gh CLI not found; /issue needs gh and GitHub auth.',
|
|
258
285
|
'm.spawnFail': 'Cannot launch the agent: no usable provider/model. Configure one via /settings.',
|
|
259
286
|
// settings panels
|
|
260
287
|
'set.title': '⚙ SETTINGS — global (persisted in ~/.parallel/config.json)',
|
|
@@ -271,8 +298,13 @@ const en = {
|
|
|
271
298
|
'set.sound': 'Default sound: {state}',
|
|
272
299
|
'set.back': '← Back',
|
|
273
300
|
'set.saved': '✓ Saved to ~/.parallel/config.json',
|
|
301
|
+
'set.sessionProviderReady': '✓ {name} is ready for this session only.',
|
|
302
|
+
'set.setupScope.title': 'Use {name} only now, or save it globally?',
|
|
303
|
+
'set.setupScope.session': 'Use this session only',
|
|
304
|
+
'set.setupScope.global': 'Save globally',
|
|
274
305
|
'set.chooseProvider': 'Choose a provider',
|
|
275
306
|
'set.chooseModel': 'Model ({name}) — pick or type a name from the provider docs',
|
|
307
|
+
'set.modelPlaceholder': 'Choose or type a real model name first. `your-model-here` is only a placeholder.',
|
|
276
308
|
'sset.model': 'Session model: {pm}',
|
|
277
309
|
'sset.approvals': 'Shell approvals (session): {mode}',
|
|
278
310
|
'sset.sound': 'Sound (session): {state}',
|
|
@@ -330,9 +362,12 @@ const en = {
|
|
|
330
362
|
'set.newSkillName': 'Skill name (a .md template will be created in ~/.parallel/skills)',
|
|
331
363
|
'set.newSpecialistName': 'Specialist name (a .md template will be created in ~/.parallel/specialists)',
|
|
332
364
|
// provider-pick section headers
|
|
333
|
-
'wiz.provider.section.configured': 'Configured',
|
|
334
|
-
'wiz.provider.section.
|
|
335
|
-
'wiz.provider.section.
|
|
365
|
+
'wiz.provider.section.configured': 'Configured Providers',
|
|
366
|
+
'wiz.provider.section.western': 'Western',
|
|
367
|
+
'wiz.provider.section.chinese': 'Chinese',
|
|
368
|
+
'wiz.provider.section.gateways': 'Gateways',
|
|
369
|
+
'wiz.provider.section.inference': 'Inference',
|
|
370
|
+
'wiz.provider.section.local': 'Local Models',
|
|
336
371
|
'wiz.provider.customDetail': 'Configure manually',
|
|
337
372
|
'wiz.provider.ollamaDetail': 'Local — no API key needed',
|
|
338
373
|
'wiz.provider.ollama.checking': 'Checking Ollama at localhost:11434...',
|
|
@@ -347,6 +382,8 @@ const en = {
|
|
|
347
382
|
'set.providers.back': 'Back',
|
|
348
383
|
'set.providerDetail.title': '{name}',
|
|
349
384
|
'set.providerDetail.key': 'Set API Key',
|
|
385
|
+
'set.providerDetail.clearKey': 'Clear API Key',
|
|
386
|
+
'set.providerDetail.endpoint': 'Endpoint',
|
|
350
387
|
'set.providerDetail.models': 'Manage Models',
|
|
351
388
|
'set.providerDetail.pricing': 'Pricing',
|
|
352
389
|
'set.providerDetail.setDefault': 'Set as Default',
|
|
@@ -396,6 +433,10 @@ const fr = {
|
|
|
396
433
|
'wiz.provider.name.ph': 'ex : openrouter, mistral, ollama…',
|
|
397
434
|
'wiz.provider.url.title': 'URL de base (endpoint OpenAI-compatible)',
|
|
398
435
|
'wiz.provider.url.ph': 'ex : https://openrouter.ai/api/v1',
|
|
436
|
+
'wiz.provider.endpoint.title': 'Vérifier l’endpoint de {name}',
|
|
437
|
+
'wiz.provider.endpoint.model': 'Modèle : {model}',
|
|
438
|
+
'wiz.provider.endpoint.use': 'Utiliser cet endpoint',
|
|
439
|
+
'wiz.provider.endpoint.edit': 'Modifier l’endpoint',
|
|
399
440
|
'wiz.provider.model.title': 'Nom du modèle — exactement comme dans la documentation du provider',
|
|
400
441
|
'wiz.provider.model.ph': 'ex : deepseek-chat, gpt-4o-mini, qwen2.5-coder…',
|
|
401
442
|
'wiz.provider.key.title': 'Clef API pour {name}',
|
|
@@ -438,7 +479,7 @@ const fr = {
|
|
|
438
479
|
'notes.empty': 'Aucune note échangée pour le moment.',
|
|
439
480
|
'sessions.title': '📂 SESSIONS SAUVEGARDÉES',
|
|
440
481
|
'sessions.empty': 'Aucune session sauvegardée pour ce projet.',
|
|
441
|
-
'sessions.item': '{date} · {agents} agent(s)',
|
|
482
|
+
'sessions.item': '{name}{date} · {agents} agent(s)',
|
|
442
483
|
'sessions.hint': 'Restaure avec /session <n> ou /session latest. Les nouveaux lancements démarrent vierges par défaut.',
|
|
443
484
|
'diff.title': '± DIFFS EN DIRECT — {total} modification(s) au total (4 dernières affichées)',
|
|
444
485
|
'diff.empty': 'Aucune modification de fichier pour le moment.',
|
|
@@ -454,7 +495,7 @@ const fr = {
|
|
|
454
495
|
'help.l2d': ' pour tous).',
|
|
455
496
|
'help.l3': 'Les agents voient mutuellement leurs statuts et leurs diffs avant chaque action : ils co-éditent les mêmes fichiers sans se bloquer et sans casser le travail des autres.',
|
|
456
497
|
'help.states': "États : 🔨 travaille · 👂 écoute les autres agents (double bordure) · 🧠 réfléchit · ✋ attend ton approbation · ⏹ stop. Sons : 1 bip = agent lancé/terminé, 2 bips = approbation requise (/sound off pour couper).",
|
|
457
|
-
'help.keys': 'Esc : revenir à la vue agents · Tab : complétion · ↑/↓ : historique · Ctrl+V : coller une image',
|
|
498
|
+
'help.keys': 'Esc : revenir à la vue agents · Tab : complétion · PgUp/PgDn : scroll hub/focus · ↑/↓ : suggestions, historique ou scroll selon la vue · Ctrl+V : coller une image',
|
|
458
499
|
'cmd.ask': 'Agent ask : répond et conseille sans modifier',
|
|
459
500
|
'cmd.task': 'Agent task : exécute, modifie, valide, résume',
|
|
460
501
|
'cmd.agents': 'Vue panneaux agents (temps réel)',
|
|
@@ -488,9 +529,11 @@ const fr = {
|
|
|
488
529
|
'cmd.model': 'Afficher/changer le modèle de la session ([provider:]modèle)',
|
|
489
530
|
'cmd.sessions': 'Lister les sessions sauvegardées de ce projet',
|
|
490
531
|
'cmd.session': 'Restaurer une session sauvegardée par numéro, ou latest',
|
|
491
|
-
'cmd.doctor': '
|
|
532
|
+
'cmd.doctor': 'Lancer les diagnostics locaux de readiness',
|
|
492
533
|
'cmd.settings': 'Réglages globaux — providers, clefs API, langue, défauts (persistés)',
|
|
493
534
|
'cmd.ssettings': 'Réglages de session — modèle, approbations, son (cette session)',
|
|
535
|
+
'cmd.project': 'Changer de dossier projet ou rouvrir le choix de dossier',
|
|
536
|
+
'cmd.wizard': 'Relancer le wizard de configuration',
|
|
494
537
|
'cmd.approvals': 'Approbations shell : ask, auto-safe ou yolo (cette session)',
|
|
495
538
|
'cmd.sound': 'Repères sonores (cette session)',
|
|
496
539
|
'cmd.save': 'Sauvegarder la session maintenant (avec un nom optionnel)',
|
|
@@ -504,7 +547,7 @@ const fr = {
|
|
|
504
547
|
'm.usageAsk': 'Usage : /ask [Nom:] <question> [--model=m] — conseil uniquement, aucune modification.',
|
|
505
548
|
'm.usageSpawn': 'Usage : /task [Nom:] <tâche> [--model=m]',
|
|
506
549
|
'm.usageAt': 'Usage : @Agent <message> (ou @all <message>)',
|
|
507
|
-
'm.broadcast': '✉ Instruction
|
|
550
|
+
'm.broadcast': '✉ Instruction envoyée à {n} agent(s) actif(s).',
|
|
508
551
|
'm.sent': '✉ Instruction envoyée à {target}.',
|
|
509
552
|
'm.notFound': 'Agent introuvable : {target} (agents : {list})',
|
|
510
553
|
'm.none': 'aucun',
|
|
@@ -535,14 +578,15 @@ const fr = {
|
|
|
535
578
|
'm.focusHint': '🎯 focus {name} · tapez pour lui parler · PgUp/PgDn défilement · Échap pour sortir',
|
|
536
579
|
'm.usageRestore': 'Usage : /restore <agent> (après avoir chargé une session via /session)',
|
|
537
580
|
'm.restored': '⏪ {name} relancé avec sa conversation précédente.',
|
|
581
|
+
'm.noRestoredAgent': 'Aucun agent nommé « {name} » dans la session restaurée.',
|
|
538
582
|
'm.noConversation': 'Aucune conversation sauvegardée pour « {name} » dans la session restaurée.',
|
|
539
583
|
'm.conflict': '⚠ {path} : collisions répétées entre agents — pensez à arbitrer (@agent ou /focus).',
|
|
540
584
|
'status.bar': '⚡ {agents} agent(s) · {active} actif(s) · {cost}',
|
|
541
585
|
'cmd.plan': "Agent plan : présente son plan, ne modifie qu'après votre accord",
|
|
542
|
-
'cmd.issue': 'lance un agent sur une issue GitHub (
|
|
586
|
+
'cmd.issue': 'lance un agent sur une issue GitHub (gh, repo GitHub et auth requis)',
|
|
543
587
|
'cmd.undo': "annule la dernière modification de fichier de l'agent",
|
|
544
|
-
'cmd.commit': 'git-commit
|
|
545
|
-
'cmd.autocommit': 'commit auto des fichiers de chaque agent quand il termine',
|
|
588
|
+
'cmd.commit': 'git-commit seulement les fichiers touchés par un agent (ou tous)',
|
|
589
|
+
'cmd.autocommit': 'commit auto session-only des fichiers de chaque agent quand il termine',
|
|
546
590
|
'm.usagePlan': "Usage : /plan [Nom:] <tâche> — l'agent présente son plan et attend votre accord avant de modifier.",
|
|
547
591
|
'm.usageIssue': 'Usage : /issue <numéro> — lance un agent sur cette issue GitHub (CLI gh requise).',
|
|
548
592
|
'm.ghMissing': '✗ CLI gh introuvable. Installez-la (https://cli.github.com) puis `gh auth login`.',
|
|
@@ -582,14 +626,34 @@ const fr = {
|
|
|
582
626
|
'm.copyNone': "Aucun résultat d'agent à copier.",
|
|
583
627
|
'm.copyDone': 'Dernier résultat de {name} copié.',
|
|
584
628
|
'm.unknown': 'Commande inconnue : {cmd} — tape /help',
|
|
629
|
+
'm.projectActive': 'Des agents sont actifs. Sauvegarde/arrête-les d’abord, ou relance avec /project [dossier] --force.',
|
|
630
|
+
'm.wizardActive': 'Des agents sont actifs. Sauvegarde/arrête-les d’abord, ou relance avec /wizard --force.',
|
|
585
631
|
'm.imagesIgnored': "Note : les images jointes ne sont prises en compte qu'au lancement d'un nouvel agent.",
|
|
586
632
|
'm.sessionRestored': '📂 Session du {date} restaurée.',
|
|
587
633
|
'm.usageSession': 'Usage : /sessions pour lister, puis /session <n> ou /session latest',
|
|
588
634
|
'm.sessionLoaded': '📂 Session du {date} chargée.',
|
|
635
|
+
'm.sessionActive': 'Des agents sont actifs. Sauvegarde/arrête-les d’abord, ou relance avec /session <n|latest> --force.',
|
|
636
|
+
'm.sessionRestoreHint': 'Lance /restore <agent> pour relancer une conversation agent sauvegardée.',
|
|
589
637
|
'm.missingProvider': 'Aucun provider configuré. Ouvre /settings → Ajouter un provider, ou relance une première config.',
|
|
590
|
-
'm.missingKey': 'Le provider {name} n’a pas de clef API. Utilise /
|
|
638
|
+
'm.missingKey': 'Le provider {name} n’a pas de clef API. Utilise /settings → Providers → Clef API.',
|
|
591
639
|
'm.missingModel': 'Le provider {name} n’a pas de modèle par défaut. Utilise /settings → Modèles du provider.',
|
|
592
640
|
'm.doctorOk': '✓ Configuration prête : {pm}. Changements : /settings · modèle temporaire : /model [provider:]modèle',
|
|
641
|
+
'm.doctorReport': 'Doctor\n{lines}',
|
|
642
|
+
'm.doctorNoProvider': '✗ Aucun provider configuré. Ouvre /settings → Add a provider.',
|
|
643
|
+
'm.doctorProvider': '• Provider : {provider}:{model}',
|
|
644
|
+
'm.doctorKeyMissing': '✗ Clef API manquante. Ouvre /settings → Providers → Clef API.',
|
|
645
|
+
'm.doctorKeyOk': '✓ Clef API présente.',
|
|
646
|
+
'm.doctorKeySkipped': '✓ Clef API non requise pour ce provider local.',
|
|
647
|
+
'm.doctorModelMissing': '✗ Modèle manquant ou encore sur le placeholder. Choisis un vrai modèle dans /settings ou /model.',
|
|
648
|
+
'm.doctorModelOk': '✓ Modèle prêt : {model}',
|
|
649
|
+
'm.doctorEndpointOk': '✓ Endpoint local joignable : {url}',
|
|
650
|
+
'm.doctorEndpointFail': '⚠ Endpoint local non joignable : {url}',
|
|
651
|
+
'm.doctorAttachOk': '✓ Socket attach disponible.',
|
|
652
|
+
'm.doctorAttachMissing': '⚠ Socket attach pas encore lancé.',
|
|
653
|
+
'm.doctorGitOk': '✓ CLI git trouvé.',
|
|
654
|
+
'm.doctorGitMissing': '⚠ CLI git introuvable.',
|
|
655
|
+
'm.doctorGhOk': '✓ CLI gh trouvé pour /issue.',
|
|
656
|
+
'm.doctorGhMissing': '⚠ CLI gh introuvable ; /issue nécessite gh et une auth GitHub.',
|
|
593
657
|
'm.spawnFail': "Impossible de lancer l'agent : aucun provider/modèle utilisable. Configure-en un via /settings.",
|
|
594
658
|
'set.title': '⚙ RÉGLAGES — globaux (persistés dans ~/.parallel/config.json)',
|
|
595
659
|
'sset.title': '⚙ RÉGLAGES DE SESSION — cette session uniquement (globaux : /settings)',
|
|
@@ -605,8 +669,13 @@ const fr = {
|
|
|
605
669
|
'set.sound': 'Son par défaut : {state}',
|
|
606
670
|
'set.back': '← Retour',
|
|
607
671
|
'set.saved': '✓ Enregistré dans ~/.parallel/config.json',
|
|
672
|
+
'set.sessionProviderReady': '✓ {name} est prêt pour cette session seulement.',
|
|
673
|
+
'set.setupScope.title': 'Utiliser {name} seulement maintenant, ou le sauvegarder globalement ?',
|
|
674
|
+
'set.setupScope.session': 'Utiliser pour cette session seulement',
|
|
675
|
+
'set.setupScope.global': 'Sauvegarder globalement',
|
|
608
676
|
'set.chooseProvider': 'Choisis un provider',
|
|
609
677
|
'set.chooseModel': 'Modèle ({name}) — choisis ou tape un nom selon la doc du provider',
|
|
678
|
+
'set.modelPlaceholder': 'Choisis ou tape d’abord un vrai nom de modèle. `your-model-here` est seulement un placeholder.',
|
|
610
679
|
'sset.model': 'Modèle de session : {pm}',
|
|
611
680
|
'sset.approvals': 'Approbations shell (session) : {mode}',
|
|
612
681
|
'sset.sound': 'Son (session) : {state}',
|
|
@@ -658,9 +727,12 @@ const fr = {
|
|
|
658
727
|
'set.newSkillName': 'Nom du skill (un modèle .md sera créé dans ~/.parallel/skills)',
|
|
659
728
|
'set.newSpecialistName': 'Nom du spécialiste (un modèle .md sera créé dans ~/.parallel/specialists)',
|
|
660
729
|
// provider-pick section headers
|
|
661
|
-
'wiz.provider.section.configured': '
|
|
662
|
-
'wiz.provider.section.
|
|
663
|
-
'wiz.provider.section.
|
|
730
|
+
'wiz.provider.section.configured': 'Providers configurés',
|
|
731
|
+
'wiz.provider.section.western': 'Occidental',
|
|
732
|
+
'wiz.provider.section.chinese': 'Chinois',
|
|
733
|
+
'wiz.provider.section.gateways': 'Passerelles',
|
|
734
|
+
'wiz.provider.section.inference': 'Inférence',
|
|
735
|
+
'wiz.provider.section.local': 'Modèles locaux',
|
|
664
736
|
'wiz.provider.customDetail': 'Configurer manuellement',
|
|
665
737
|
'wiz.provider.ollamaDetail': 'Local — pas de clef API requise',
|
|
666
738
|
'wiz.provider.ollama.checking': 'Vérification de Ollama sur localhost:11434…',
|
|
@@ -675,6 +747,8 @@ const fr = {
|
|
|
675
747
|
'set.providers.back': 'Retour',
|
|
676
748
|
'set.providerDetail.title': '{name}',
|
|
677
749
|
'set.providerDetail.key': 'Définir la clef API',
|
|
750
|
+
'set.providerDetail.clearKey': 'Effacer la clef API',
|
|
751
|
+
'set.providerDetail.endpoint': 'Endpoint',
|
|
678
752
|
'set.providerDetail.models': 'Gérer les modèles',
|
|
679
753
|
'set.providerDetail.pricing': 'Tarifs',
|
|
680
754
|
'set.providerDetail.setDefault': 'Définir par défaut',
|
|
@@ -724,6 +798,10 @@ const es = {
|
|
|
724
798
|
'wiz.provider.name.ph': 'ej.: openrouter, mistral, ollama…',
|
|
725
799
|
'wiz.provider.url.title': 'URL base (endpoint compatible con OpenAI)',
|
|
726
800
|
'wiz.provider.url.ph': 'ej.: https://openrouter.ai/api/v1',
|
|
801
|
+
'wiz.provider.endpoint.title': 'Revisar endpoint de {name}',
|
|
802
|
+
'wiz.provider.endpoint.model': 'Modelo: {model}',
|
|
803
|
+
'wiz.provider.endpoint.use': 'Usar este endpoint',
|
|
804
|
+
'wiz.provider.endpoint.edit': 'Editar endpoint',
|
|
727
805
|
'wiz.provider.model.title': 'Nombre del modelo — exactamente como en la documentación del proveedor',
|
|
728
806
|
'wiz.provider.model.ph': 'ej.: deepseek-chat, gpt-4o-mini, qwen2.5-coder…',
|
|
729
807
|
'wiz.provider.key.title': 'Clave API para {name}',
|
|
@@ -766,7 +844,7 @@ const es = {
|
|
|
766
844
|
'notes.empty': 'Aún no se han intercambiado notas.',
|
|
767
845
|
'sessions.title': '📂 SESIONES GUARDADAS',
|
|
768
846
|
'sessions.empty': 'Aún no hay sesiones guardadas para este proyecto.',
|
|
769
|
-
'sessions.item': '{date} · {agents} agente(s)',
|
|
847
|
+
'sessions.item': '{name}{date} · {agents} agente(s)',
|
|
770
848
|
'sessions.hint': 'Restaura una con /session <n> o /session latest. Los nuevos lanzamientos empiezan vacíos por defecto.',
|
|
771
849
|
'diff.title': '± DIFFS EN VIVO — {total} cambio(s) en total (últimos 4 mostrados)',
|
|
772
850
|
'diff.empty': 'Sin cambios de archivos por ahora.',
|
|
@@ -782,7 +860,7 @@ const es = {
|
|
|
782
860
|
'help.l2d': ' para todos).',
|
|
783
861
|
'help.l3': 'Los agentes ven los estados y diffs de los demás antes de cada acción: co-editan los mismos archivos sin bloquearse y sin romper el trabajo ajeno.',
|
|
784
862
|
'help.states': 'Estados: 🔨 trabajando · 👂 escuchando a otros agentes (borde doble) · 🧠 pensando · ✋ esperando tu aprobación · ⏹ stop. Sonidos: 1 bip = agente lanzado/terminado, 2 bips = aprobación requerida (/sound off para silenciar).',
|
|
785
|
-
'help.keys': 'Esc: volver a la vista de agentes · Tab: autocompletar · ↑/↓: historial · Ctrl+V: pegar imagen',
|
|
863
|
+
'help.keys': 'Esc: volver a la vista de agentes · Tab: autocompletar · PgUp/PgDn: scroll hub/focus · ↑/↓: sugerencias, historial o scroll de vista · Ctrl+V: pegar imagen',
|
|
786
864
|
'cmd.ask': 'Agente ask: responde y aconseja sin editar',
|
|
787
865
|
'cmd.task': 'Agente task: ejecuta, edita, valida y resume',
|
|
788
866
|
'cmd.agents': 'Vista de paneles de agentes (tiempo real)',
|
|
@@ -816,9 +894,11 @@ const es = {
|
|
|
816
894
|
'cmd.model': 'Mostrar/cambiar el modelo de la sesión ([proveedor:]modelo)',
|
|
817
895
|
'cmd.sessions': 'Listar las sesiones guardadas de este proyecto',
|
|
818
896
|
'cmd.session': 'Restaurar una sesión guardada por número, o latest',
|
|
819
|
-
'cmd.doctor': '
|
|
897
|
+
'cmd.doctor': 'Ejecutar diagnósticos locales de readiness',
|
|
820
898
|
'cmd.settings': 'Ajustes globales — proveedores, claves API, idioma, valores por defecto (persistentes)',
|
|
821
899
|
'cmd.ssettings': 'Ajustes de sesión — modelo, aprobaciones, sonido (solo esta sesión)',
|
|
900
|
+
'cmd.project': 'Cambiar carpeta del proyecto o reabrir selector de carpeta',
|
|
901
|
+
'cmd.wizard': 'Relanzar el asistente de configuración',
|
|
822
902
|
'cmd.approvals': 'Aprobaciones shell: ask, auto-safe o yolo (esta sesión)',
|
|
823
903
|
'cmd.sound': 'Señales sonoras (esta sesión)',
|
|
824
904
|
'cmd.save': 'Guardar la sesión ahora (con un nombre opcional)',
|
|
@@ -832,7 +912,7 @@ const es = {
|
|
|
832
912
|
'm.usageAsk': 'Uso: /ask [Nombre:] <pregunta> [--model=m] — solo asesoría, sin ediciones.',
|
|
833
913
|
'm.usageSpawn': 'Uso: /task [Nombre:] <tarea> [--model=m]',
|
|
834
914
|
'm.usageAt': 'Uso: @Agente <mensaje> (o @all <mensaje>)',
|
|
835
|
-
'm.broadcast': '✉ Instrucción
|
|
915
|
+
'm.broadcast': '✉ Instrucción enviada a {n} agente(s) activo(s).',
|
|
836
916
|
'm.sent': '✉ Instrucción enviada a {target}.',
|
|
837
917
|
'm.notFound': 'Agente no encontrado: {target} (agentes: {list})',
|
|
838
918
|
'm.none': 'ninguno',
|
|
@@ -863,14 +943,15 @@ const es = {
|
|
|
863
943
|
'm.focusHint': '🎯 foco {name} · escribe para hablarle · PgUp/PgDn desplazamiento · Esc para salir',
|
|
864
944
|
'm.usageRestore': 'Uso: /restore <agente> (tras cargar una sesión con /session)',
|
|
865
945
|
'm.restored': '⏪ {name} relanzado con su conversación anterior.',
|
|
946
|
+
'm.noRestoredAgent': 'No hay ningún agente llamado "{name}" en la sesión restaurada.',
|
|
866
947
|
'm.noConversation': 'No hay conversación guardada para "{name}" en la sesión restaurada.',
|
|
867
948
|
'm.conflict': '⚠ {path}: colisiones repetidas entre agentes — considera arbitrar (@agente o /focus).',
|
|
868
949
|
'status.bar': '⚡ {agents} agente(s) · {active} activo(s) · {cost}',
|
|
869
950
|
'cmd.plan': 'Agente plan: presenta su plan, solo edita tras tu aprobación',
|
|
870
|
-
'cmd.issue': 'lanza un agente sobre una issue de GitHub (requiere
|
|
951
|
+
'cmd.issue': 'lanza un agente sobre una issue de GitHub (requiere gh, repo GitHub y auth)',
|
|
871
952
|
'cmd.undo': 'revierte el último cambio de archivo del agente',
|
|
872
|
-
'cmd.commit': 'git-commit de
|
|
873
|
-
'cmd.autocommit': 'commit automático de
|
|
953
|
+
'cmd.commit': 'git-commit solo de archivos tocados por un agente (o todos)',
|
|
954
|
+
'cmd.autocommit': 'commit automático session-only de archivos de cada agente al terminar',
|
|
874
955
|
'm.usagePlan': 'Uso: /plan [Nombre:] <tarea> — el agente presenta su plan y espera tu aprobación antes de editar.',
|
|
875
956
|
'm.usageIssue': 'Uso: /issue <número> — lanza un agente sobre esa issue de GitHub (requiere la CLI gh).',
|
|
876
957
|
'm.ghMissing': '✗ CLI gh no encontrada. Instálala (https://cli.github.com) y ejecuta `gh auth login`.',
|
|
@@ -910,14 +991,34 @@ const es = {
|
|
|
910
991
|
'm.copyNone': 'No hay resultado de agente que copiar.',
|
|
911
992
|
'm.copyDone': 'Último resultado de {name} copiado.',
|
|
912
993
|
'm.unknown': 'Comando desconocido: {cmd} — escribe /help',
|
|
994
|
+
'm.projectActive': 'Hay agentes activos. Guarda/deténlos primero, o vuelve a ejecutar con /project [carpeta] --force.',
|
|
995
|
+
'm.wizardActive': 'Hay agentes activos. Guarda/deténlos primero, o vuelve a ejecutar con /wizard --force.',
|
|
913
996
|
'm.imagesIgnored': 'Nota: las imágenes adjuntas solo se tienen en cuenta al lanzar un agente nuevo.',
|
|
914
997
|
'm.sessionRestored': '📂 Sesión del {date} restaurada.',
|
|
915
998
|
'm.usageSession': 'Uso: /sessions para listar, luego /session <n> o /session latest',
|
|
916
999
|
'm.sessionLoaded': '📂 Sesión del {date} cargada.',
|
|
1000
|
+
'm.sessionActive': 'Hay agentes activos. Guárdalos/deténlos primero, o vuelve a ejecutar con /session <n|latest> --force.',
|
|
1001
|
+
'm.sessionRestoreHint': 'Ejecuta /restore <agente> para relanzar una conversación guardada.',
|
|
917
1002
|
'm.missingProvider': 'No hay proveedor configurado. Abre /settings → Añadir proveedor, o reinicia con configuración inicial.',
|
|
918
|
-
'm.missingKey': 'El proveedor {name} no tiene clave API. Usa /
|
|
1003
|
+
'm.missingKey': 'El proveedor {name} no tiene clave API. Usa /settings → Providers → Clave API.',
|
|
919
1004
|
'm.missingModel': 'El proveedor {name} no tiene modelo por defecto. Usa /settings → Modelos del proveedor.',
|
|
920
1005
|
'm.doctorOk': '✓ Configuración lista: {pm}. Cambios: /settings · modelo temporal: /model [proveedor:]modelo',
|
|
1006
|
+
'm.doctorReport': 'Doctor\n{lines}',
|
|
1007
|
+
'm.doctorNoProvider': '✗ No hay proveedor configurado. Abre /settings → Add a provider.',
|
|
1008
|
+
'm.doctorProvider': '• Proveedor: {provider}:{model}',
|
|
1009
|
+
'm.doctorKeyMissing': '✗ Falta la clave API. Abre /settings → Providers → Clave API.',
|
|
1010
|
+
'm.doctorKeyOk': '✓ Clave API presente.',
|
|
1011
|
+
'm.doctorKeySkipped': '✓ Este proveedor local no requiere clave API.',
|
|
1012
|
+
'm.doctorModelMissing': '✗ Falta el modelo o sigue usando el placeholder. Elige un modelo real en /settings o /model.',
|
|
1013
|
+
'm.doctorModelOk': '✓ Modelo listo: {model}',
|
|
1014
|
+
'm.doctorEndpointOk': '✓ Endpoint local accesible: {url}',
|
|
1015
|
+
'm.doctorEndpointFail': '⚠ Endpoint local no accesible: {url}',
|
|
1016
|
+
'm.doctorAttachOk': '✓ Socket attach disponible.',
|
|
1017
|
+
'm.doctorAttachMissing': '⚠ Socket attach aún no está activo.',
|
|
1018
|
+
'm.doctorGitOk': '✓ CLI git encontrado.',
|
|
1019
|
+
'm.doctorGitMissing': '⚠ CLI git no encontrado.',
|
|
1020
|
+
'm.doctorGhOk': '✓ CLI gh encontrado para /issue.',
|
|
1021
|
+
'm.doctorGhMissing': '⚠ CLI gh no encontrado; /issue necesita gh y auth de GitHub.',
|
|
921
1022
|
'm.spawnFail': 'No se puede lanzar el agente: ningún provider/modelo utilizable. Configura uno con /settings.',
|
|
922
1023
|
'set.title': '⚙ AJUSTES — globales (persistentes en ~/.parallel/config.json)',
|
|
923
1024
|
'sset.title': '⚙ AJUSTES DE SESIÓN — solo esta sesión (globales: /settings)',
|
|
@@ -933,8 +1034,13 @@ const es = {
|
|
|
933
1034
|
'set.sound': 'Sonido por defecto: {state}',
|
|
934
1035
|
'set.back': '← Volver',
|
|
935
1036
|
'set.saved': '✓ Guardado en ~/.parallel/config.json',
|
|
1037
|
+
'set.sessionProviderReady': '✓ {name} está listo solo para esta sesión.',
|
|
1038
|
+
'set.setupScope.title': '¿Usar {name} solo ahora o guardarlo globalmente?',
|
|
1039
|
+
'set.setupScope.session': 'Usar solo en esta sesión',
|
|
1040
|
+
'set.setupScope.global': 'Guardar globalmente',
|
|
936
1041
|
'set.chooseProvider': 'Elige un proveedor',
|
|
937
1042
|
'set.chooseModel': 'Modelo ({name}) — elige o escribe un nombre según la doc del proveedor',
|
|
1043
|
+
'set.modelPlaceholder': 'Elige o escribe primero un modelo real. `your-model-here` es solo un placeholder.',
|
|
938
1044
|
'sset.model': 'Modelo de sesión: {pm}',
|
|
939
1045
|
'sset.approvals': 'Aprobaciones shell (sesión): {mode}',
|
|
940
1046
|
'sset.sound': 'Sonido (sesión): {state}',
|
|
@@ -986,9 +1092,12 @@ const es = {
|
|
|
986
1092
|
'set.newSkillName': 'Nombre del skill (se creará una plantilla .md en ~/.parallel/skills)',
|
|
987
1093
|
'set.newSpecialistName': 'Nombre del especialista (se creará una plantilla .md en ~/.parallel/specialists)',
|
|
988
1094
|
// provider-pick section headers
|
|
989
|
-
'wiz.provider.section.configured': '
|
|
990
|
-
'wiz.provider.section.
|
|
991
|
-
'wiz.provider.section.
|
|
1095
|
+
'wiz.provider.section.configured': 'Proveedores configurados',
|
|
1096
|
+
'wiz.provider.section.western': 'Occidental',
|
|
1097
|
+
'wiz.provider.section.chinese': 'Chino',
|
|
1098
|
+
'wiz.provider.section.gateways': 'Pasarelas',
|
|
1099
|
+
'wiz.provider.section.inference': 'Inferencia',
|
|
1100
|
+
'wiz.provider.section.local': 'Modelos locales',
|
|
992
1101
|
'wiz.provider.customDetail': 'Configurar manualmente',
|
|
993
1102
|
'wiz.provider.ollamaDetail': 'Local — no requiere clave API',
|
|
994
1103
|
'wiz.provider.ollama.checking': 'Comprobando Ollama en localhost:11434…',
|
|
@@ -1003,6 +1112,8 @@ const es = {
|
|
|
1003
1112
|
'set.providers.back': 'Volver',
|
|
1004
1113
|
'set.providerDetail.title': '{name}',
|
|
1005
1114
|
'set.providerDetail.key': 'Establecer clave API',
|
|
1115
|
+
'set.providerDetail.clearKey': 'Borrar clave API',
|
|
1116
|
+
'set.providerDetail.endpoint': 'Endpoint',
|
|
1006
1117
|
'set.providerDetail.models': 'Gestionar modelos',
|
|
1007
1118
|
'set.providerDetail.pricing': 'Precios',
|
|
1008
1119
|
'set.providerDetail.setDefault': 'Establecer como predeterminado',
|
|
@@ -1052,6 +1163,10 @@ const zh = {
|
|
|
1052
1163
|
'wiz.provider.name.ph': '例如 openrouter、mistral、ollama…',
|
|
1053
1164
|
'wiz.provider.url.title': '基础 URL(OpenAI 兼容端点)',
|
|
1054
1165
|
'wiz.provider.url.ph': '例如 https://openrouter.ai/api/v1',
|
|
1166
|
+
'wiz.provider.endpoint.title': '检查 {name} 端点',
|
|
1167
|
+
'wiz.provider.endpoint.model': '模型:{model}',
|
|
1168
|
+
'wiz.provider.endpoint.use': '使用此端点',
|
|
1169
|
+
'wiz.provider.endpoint.edit': '编辑端点',
|
|
1055
1170
|
'wiz.provider.model.title': '模型名称 — 与提供商文档中的写法完全一致',
|
|
1056
1171
|
'wiz.provider.model.ph': '例如 deepseek-chat、gpt-4o-mini、qwen2.5-coder…',
|
|
1057
1172
|
'wiz.provider.key.title': '{name} 的 API 密钥',
|
|
@@ -1094,7 +1209,7 @@ const zh = {
|
|
|
1094
1209
|
'notes.empty': '尚未交换任何便签。',
|
|
1095
1210
|
'sessions.title': '📂 已保存会话',
|
|
1096
1211
|
'sessions.empty': '此项目暂无已保存会话。',
|
|
1097
|
-
'sessions.item': '{date} · {agents} 个智能体',
|
|
1212
|
+
'sessions.item': '{name}{date} · {agents} 个智能体',
|
|
1098
1213
|
'sessions.hint': '用 /session <n> 或 /session latest 恢复。新的启动默认从空会话开始。',
|
|
1099
1214
|
'diff.title': '± 实时差异 — 共 {total} 处修改(显示最近 4 处)',
|
|
1100
1215
|
'diff.empty': '暂无文件修改。',
|
|
@@ -1110,7 +1225,7 @@ const zh = {
|
|
|
1110
1225
|
'help.l2d': ' 发给所有)。',
|
|
1111
1226
|
'help.l3': '每次行动前,智能体都能看到彼此的状态和差异:它们共同编辑同一批文件,互不阻塞,也不破坏彼此的工作。',
|
|
1112
1227
|
'help.states': '状态:🔨 工作中 · 👂 倾听其他智能体(双边框)· 🧠 思考中 · ✋ 等待你的批准 · ⏹ 停止。声音:1 声 = 智能体启动/完成,2 声 = 需要批准(/sound off 静音)。',
|
|
1113
|
-
'help.keys': 'Esc:返回智能体视图 · Tab:补全 ·
|
|
1228
|
+
'help.keys': 'Esc:返回智能体视图 · Tab:补全 · PgUp/PgDn:hub/focus 滚动 · ↑/↓:建议、历史或视图滚动 · Ctrl+V:粘贴图片',
|
|
1114
1229
|
'cmd.ask': 'Ask 智能体:只回答和建议,不编辑',
|
|
1115
1230
|
'cmd.task': 'Task 智能体:执行、编辑、验证并总结',
|
|
1116
1231
|
'cmd.agents': '智能体面板视图(实时)',
|
|
@@ -1144,9 +1259,11 @@ const zh = {
|
|
|
1144
1259
|
'cmd.model': '显示/更改会话模型([提供商:]模型)',
|
|
1145
1260
|
'cmd.sessions': '列出此项目的已保存会话',
|
|
1146
1261
|
'cmd.session': '按编号或 latest 恢复已保存会话',
|
|
1147
|
-
'cmd.doctor': '
|
|
1262
|
+
'cmd.doctor': '运行本地就绪诊断',
|
|
1148
1263
|
'cmd.settings': '全局设置 — 提供商、API 密钥、语言、默认值(持久化)',
|
|
1149
1264
|
'cmd.ssettings': '会话设置 — 模型、批准、声音(仅本会话)',
|
|
1265
|
+
'cmd.project': '更改项目文件夹或重新打开文件夹选择器',
|
|
1266
|
+
'cmd.wizard': '重新启动设置向导',
|
|
1150
1267
|
'cmd.approvals': 'Shell 批准:ask、auto-safe 或 yolo(本会话)',
|
|
1151
1268
|
'cmd.sound': '声音提示(本会话)',
|
|
1152
1269
|
'cmd.save': '立即保存会话(可附加名称)',
|
|
@@ -1160,7 +1277,7 @@ const zh = {
|
|
|
1160
1277
|
'm.usageAsk': '用法:/ask [名称:] <问题> [--model=m] — 仅建议,不修改。',
|
|
1161
1278
|
'm.usageSpawn': '用法:/task [名称:] <任务> [--model=m]',
|
|
1162
1279
|
'm.usageAt': '用法:@智能体 <消息>(或 @all <消息>)',
|
|
1163
|
-
'm.broadcast': '✉
|
|
1280
|
+
'm.broadcast': '✉ 指令已发送给 {n} 个活动智能体。',
|
|
1164
1281
|
'm.sent': '✉ 指令已发送给 {target}。',
|
|
1165
1282
|
'm.notFound': '找不到智能体:{target}(现有:{list})',
|
|
1166
1283
|
'm.none': '无',
|
|
@@ -1191,14 +1308,15 @@ const zh = {
|
|
|
1191
1308
|
'm.focusHint': '🎯 聚焦 {name} · 直接输入与它对话 · PgUp/PgDn 滚动 · Esc 退出',
|
|
1192
1309
|
'm.usageRestore': '用法:/restore <代理>(先用 /session 加载会话)',
|
|
1193
1310
|
'm.restored': '⏪ {name} 已带着之前的对话重新启动。',
|
|
1311
|
+
'm.noRestoredAgent': '恢复的会话中没有名为「{name}」的代理。',
|
|
1194
1312
|
'm.noConversation': '恢复的会话中没有「{name}」的已保存对话。',
|
|
1195
1313
|
'm.conflict': '⚠ {path}:代理之间反复冲突 — 建议你介入仲裁(@代理 或 /focus)。',
|
|
1196
1314
|
'status.bar': '⚡ {agents} 个代理 · {active} 个活跃 · {cost}',
|
|
1197
1315
|
'cmd.plan': 'Plan 智能体:先给出计划,你批准后才开始修改',
|
|
1198
|
-
'cmd.issue': '基于 GitHub issue 启动代理(需要 gh
|
|
1316
|
+
'cmd.issue': '基于 GitHub issue 启动代理(需要 gh、GitHub 仓库和登录)',
|
|
1199
1317
|
'cmd.undo': '撤销该代理最近一次文件修改',
|
|
1200
|
-
'cmd.commit': '
|
|
1201
|
-
'cmd.autocommit': '
|
|
1318
|
+
'cmd.commit': '仅提交某个代理(或全部)改动过的文件',
|
|
1319
|
+
'cmd.autocommit': '会话内自动提交每个代理完成时改动过的文件',
|
|
1202
1320
|
'm.usagePlan': '用法:/plan [名称:] <任务> — 代理先呈现计划,获得你的批准后才开始修改。',
|
|
1203
1321
|
'm.usageIssue': '用法:/issue <编号> — 基于该 GitHub issue 启动代理(需要 gh CLI)。',
|
|
1204
1322
|
'm.ghMissing': '✗ 未找到 gh CLI。请安装(https://cli.github.com)并执行 `gh auth login`。',
|
|
@@ -1238,14 +1356,34 @@ const zh = {
|
|
|
1238
1356
|
'm.copyNone': '没有可复制的已完成智能体输出。',
|
|
1239
1357
|
'm.copyDone': '已复制 {name} 的最新结果。',
|
|
1240
1358
|
'm.unknown': '未知命令:{cmd} — 输入 /help',
|
|
1359
|
+
'm.projectActive': '仍有活动智能体。请先保存/停止,或使用 /project [文件夹] --force。',
|
|
1360
|
+
'm.wizardActive': '仍有活动智能体。请先保存/停止,或使用 /wizard --force。',
|
|
1241
1361
|
'm.imagesIgnored': '注意:附加的图片仅在启动新智能体时生效。',
|
|
1242
1362
|
'm.sessionRestored': '📂 已恢复 {date} 的会话。',
|
|
1243
1363
|
'm.usageSession': '用法:先用 /sessions 列出,然后 /session <n> 或 /session latest',
|
|
1244
1364
|
'm.sessionLoaded': '📂 已加载 {date} 的会话。',
|
|
1365
|
+
'm.sessionActive': '仍有活动代理。请先保存/停止,或使用 /session <n|latest> --force。',
|
|
1366
|
+
'm.sessionRestoreHint': '运行 /restore <代理> 重新启动已保存的代理对话。',
|
|
1245
1367
|
'm.missingProvider': '未配置提供商。打开 /settings → 添加提供商,或重新进行首次配置。',
|
|
1246
|
-
'm.missingKey': '提供商 {name} 没有 API 密钥。使用 /
|
|
1368
|
+
'm.missingKey': '提供商 {name} 没有 API 密钥。使用 /settings → Providers → API 密钥。',
|
|
1247
1369
|
'm.missingModel': '提供商 {name} 没有默认模型。使用 /settings → 提供商模型。',
|
|
1248
1370
|
'm.doctorOk': '✓ 配置就绪:{pm}。修改:/settings · 临时模型:/model [提供商:]模型',
|
|
1371
|
+
'm.doctorReport': 'Doctor\n{lines}',
|
|
1372
|
+
'm.doctorNoProvider': '✗ 未配置提供商。打开 /settings → Add a provider。',
|
|
1373
|
+
'm.doctorProvider': '• 提供商:{provider}:{model}',
|
|
1374
|
+
'm.doctorKeyMissing': '✗ 缺少 API 密钥。打开 /settings → Providers → API 密钥。',
|
|
1375
|
+
'm.doctorKeyOk': '✓ API 密钥已设置。',
|
|
1376
|
+
'm.doctorKeySkipped': '✓ 此本地提供商不需要 API 密钥。',
|
|
1377
|
+
'm.doctorModelMissing': '✗ 模型缺失或仍是占位符。请在 /settings 或 /model 选择真实模型。',
|
|
1378
|
+
'm.doctorModelOk': '✓ 模型就绪:{model}',
|
|
1379
|
+
'm.doctorEndpointOk': '✓ 本地端点可访问:{url}',
|
|
1380
|
+
'm.doctorEndpointFail': '⚠ 本地端点不可访问:{url}',
|
|
1381
|
+
'm.doctorAttachOk': '✓ attach socket 可用。',
|
|
1382
|
+
'm.doctorAttachMissing': '⚠ attach socket 尚未运行。',
|
|
1383
|
+
'm.doctorGitOk': '✓ 找到 git CLI。',
|
|
1384
|
+
'm.doctorGitMissing': '⚠ 未找到 git CLI。',
|
|
1385
|
+
'm.doctorGhOk': '✓ 找到 gh CLI,可用于 /issue。',
|
|
1386
|
+
'm.doctorGhMissing': '⚠ 未找到 gh CLI;/issue 需要 gh 和 GitHub 登录。',
|
|
1249
1387
|
'm.spawnFail': '无法启动智能体:没有可用的 provider/模型。请通过 /settings 配置。',
|
|
1250
1388
|
'set.title': '⚙ 设置 — 全局(持久化于 ~/.parallel/config.json)',
|
|
1251
1389
|
'sset.title': '⚙ 会话设置 — 仅本会话(全局设置:/settings)',
|
|
@@ -1261,8 +1399,13 @@ const zh = {
|
|
|
1261
1399
|
'set.sound': '默认声音:{state}',
|
|
1262
1400
|
'set.back': '← 返回',
|
|
1263
1401
|
'set.saved': '✓ 已保存到 ~/.parallel/config.json',
|
|
1402
|
+
'set.sessionProviderReady': '✓ {name} 仅在本会话中可用。',
|
|
1403
|
+
'set.setupScope.title': '仅现在使用 {name},还是全局保存?',
|
|
1404
|
+
'set.setupScope.session': '仅用于本会话',
|
|
1405
|
+
'set.setupScope.global': '全局保存',
|
|
1264
1406
|
'set.chooseProvider': '选择提供商',
|
|
1265
1407
|
'set.chooseModel': '模型({name})— 选择或按提供商文档输入名称',
|
|
1408
|
+
'set.modelPlaceholder': '请先选择或输入真实模型名。`your-model-here` 只是占位符。',
|
|
1266
1409
|
'sset.model': '会话模型:{pm}',
|
|
1267
1410
|
'sset.approvals': 'Shell 批准(会话):{mode}',
|
|
1268
1411
|
'sset.sound': '声音(会话):{state}',
|
|
@@ -1314,9 +1457,12 @@ const zh = {
|
|
|
1314
1457
|
'set.newSkillName': '技能名称(将在 ~/.parallel/skills 创建 .md 模板)',
|
|
1315
1458
|
'set.newSpecialistName': '专家名称(将在 ~/.parallel/specialists 创建 .md 模板)',
|
|
1316
1459
|
// provider-pick section headers
|
|
1317
|
-
'wiz.provider.section.configured': '
|
|
1318
|
-
'wiz.provider.section.
|
|
1319
|
-
'wiz.provider.section.
|
|
1460
|
+
'wiz.provider.section.configured': '已配置的提供商',
|
|
1461
|
+
'wiz.provider.section.western': '西方',
|
|
1462
|
+
'wiz.provider.section.chinese': '中文',
|
|
1463
|
+
'wiz.provider.section.gateways': '网关',
|
|
1464
|
+
'wiz.provider.section.inference': '推理',
|
|
1465
|
+
'wiz.provider.section.local': '本地模型',
|
|
1320
1466
|
'wiz.provider.customDetail': '手动配置',
|
|
1321
1467
|
'wiz.provider.ollamaDetail': '本地 — 无需 API 密钥',
|
|
1322
1468
|
'wiz.provider.ollama.checking': '正在检查 Ollama(localhost:11434)…',
|
|
@@ -1331,6 +1477,8 @@ const zh = {
|
|
|
1331
1477
|
'set.providers.back': '返回',
|
|
1332
1478
|
'set.providerDetail.title': '{name}',
|
|
1333
1479
|
'set.providerDetail.key': '设置 API 密钥',
|
|
1480
|
+
'set.providerDetail.clearKey': '清除 API 密钥',
|
|
1481
|
+
'set.providerDetail.endpoint': '端点',
|
|
1334
1482
|
'set.providerDetail.models': '管理模型',
|
|
1335
1483
|
'set.providerDetail.pricing': '定价',
|
|
1336
1484
|
'set.providerDetail.setDefault': '设为默认',
|
package/dist/index.js
CHANGED
|
@@ -6,7 +6,7 @@ import path from 'node:path';
|
|
|
6
6
|
import { render } from 'ink';
|
|
7
7
|
import { App } from './ui/App.js';
|
|
8
8
|
import { Controller } from './controller.js';
|
|
9
|
-
import { loadConfig, setConfigHome } from './config.js';
|
|
9
|
+
import { loadConfig, providerReady, setConfigHome } from './config.js';
|
|
10
10
|
import { setLang } from './i18n.js';
|
|
11
11
|
const argv = process.argv.slice(2);
|
|
12
12
|
function takeFlagValue(flag) {
|
|
@@ -44,13 +44,16 @@ Usage:
|
|
|
44
44
|
auto-approved commands, summary (or JSON) on stdout — for CI
|
|
45
45
|
|
|
46
46
|
Environment variables:
|
|
47
|
-
PARALLEL_API_KEY
|
|
48
|
-
PARALLEL_MODEL Default model
|
|
47
|
+
PARALLEL_API_KEY API key for the default provider
|
|
48
|
+
PARALLEL_MODEL Default model
|
|
49
49
|
PARALLEL_BASE_URL OpenAI-compatible endpoint
|
|
50
|
+
PARALLEL_NO_ALT_SCREEN=1 Disable the alternate terminal screen.
|
|
50
51
|
|
|
51
52
|
Inside the TUI:
|
|
52
53
|
<task> + Enter Launch agent N+1 — even while the others are working
|
|
53
54
|
@a1 <message> Real-time instruction to an agent (@all for everyone)
|
|
55
|
+
/project [folder] Change project folder or reopen the folder picker
|
|
56
|
+
/wizard Relaunch the setup wizard
|
|
54
57
|
/help All commands
|
|
55
58
|
`);
|
|
56
59
|
process.exit(0);
|
|
@@ -104,8 +107,8 @@ if (headless) {
|
|
|
104
107
|
// No human in the loop: commands are auto-approved.
|
|
105
108
|
ctl.setSessionApprovalMode('yolo');
|
|
106
109
|
const provider = ctl.sessionProvider();
|
|
107
|
-
if (!provider || !provider
|
|
108
|
-
console.error('Headless mode needs a
|
|
110
|
+
if (!provider || !providerReady(provider)) {
|
|
111
|
+
console.error('Headless mode needs a ready provider and model. Run `parallel` interactively once, or set PARALLEL_API_KEY / PARALLEL_MODEL.');
|
|
109
112
|
process.exit(1);
|
|
110
113
|
}
|
|
111
114
|
// Agent questions cannot be asked: auto-answer with the recommended option.
|