Skip to content

Commit 52b808e

Browse files
gcmsgclaude
andcommitted
feat: add server re-register broadcast, dashboard reinstall button
Server: - BroadcastNotification sends re_register to all connected agents on startup - TypeReRegister notification type constant Dashboard: - Reinstall Agent button with modal showing keypair backup + reinstall steps - Platform-specific plugin reinstall prompts (OpenClaw/IronClaw/PicoClaw/nanobot) - i18n translations for all 8 languages - metadata field added to ProviderAgent type Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1 parent e47cc45 commit 52b808e

File tree

13 files changed

+179
-0
lines changed

13 files changed

+179
-0
lines changed

cmd/peerclawd/main.go

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -598,6 +598,22 @@ func main() {
598598
"http", cfg.Server.HTTPAddr,
599599
)
600600

601+
// Broadcast re-register notification to agents that reconnected before server was ready.
602+
if sigHub != nil {
603+
go func() {
604+
time.Sleep(5 * time.Second)
605+
payload, _ := json.Marshal(map[string]string{
606+
"type": "re_register",
607+
"severity": "info",
608+
"title": "Server restarted",
609+
"body": "Please re-register to restore your agent record.",
610+
})
611+
sigHub.BroadcastNotification(context.Background(), payload)
612+
logger.Info("broadcast re-register notification to connected agents",
613+
"connected", sigHub.ConnectedAgents())
614+
}()
615+
}
616+
601617
// Wait for shutdown signal.
602618
sigCh := make(chan os.Signal, 1)
603619
signal.Notify(sigCh, syscall.SIGINT, syscall.SIGTERM)

internal/notification/store.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ const (
1818
TypeAgentOffline NotificationType = "agent_offline"
1919
TypeAgentDegraded NotificationType = "agent_degraded"
2020
TypeSDKOutdated NotificationType = "sdk_outdated"
21+
TypeReRegister NotificationType = "re_register"
2122
)
2223

2324
// Severity represents the severity level of a notification.

internal/signaling/ws.go

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -418,6 +418,24 @@ func (h *Hub) DeliverEnvelope(ctx context.Context, agentID string, envPayload js
418418
return nil
419419
}
420420

421+
// BroadcastNotification sends a notification to all connected agents.
422+
func (h *Hub) BroadcastNotification(ctx context.Context, payload json.RawMessage) {
423+
h.mu.RLock()
424+
defer h.mu.RUnlock()
425+
for agentID, conn := range h.conns {
426+
msg := signaling.SignalMessage{
427+
Type: signaling.MessageTypeNotification,
428+
From: "server",
429+
To: agentID,
430+
Payload: payload,
431+
}
432+
data, _ := json.Marshal(msg)
433+
if err := conn.Write(ctx, websocket.MessageText, data); err != nil {
434+
h.logger.Debug("broadcast failed", "agent_id", agentID, "error", err)
435+
}
436+
}
437+
}
438+
421439
// ConnectedAgents returns the number of currently connected agents.
422440
func (h *Hub) ConnectedAgents() int {
423441
h.mu.RLock()

web/app/src/hooks/use-provider.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ export interface ProviderAgent {
3939
last_heartbeat?: string
4040
reputation_score?: number
4141
sdk_version?: string
42+
metadata?: Record<string, string>
4243
review_summary?: {
4344
average_rating: number
4445
total_reviews: number

web/app/src/i18n/locales/ar.json

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -665,5 +665,16 @@
665665
"agent_degraded": "أداء الوكيل منخفض",
666666
"sdk_outdated": "إصدار SDK قديم"
667667
}
668+
},
669+
"reinstall": {
670+
"title": "إعادة تثبيت Agent SDK",
671+
"button": "إعادة تثبيت Agent",
672+
"prompt": "أحتاج إلى إعادة تثبيت PeerClaw Agent SDK لـ \"{{agent_name}}\" (المعرف: {{agent_id}}).\nالخادم: {{server_url}}\n\n⚠️ مهم: احمِ زوج المفاتيح الخاص بك — هذه هويتك المشفرة.\n\n## الخطوة 1: نسخ احتياطي لزوج المفاتيح\n\n```bash\ncp ~/.peerclaw/agent.key ~/.peerclaw/agent.key.bak\nls -la ~/.peerclaw/agent.key.bak # التحقق من وجود النسخة الاحتياطية\n```\n\n## الخطوة 2: إعادة تثبيت PeerClaw CLI\n\n```bash\ncurl -fsSL {{server_url}}/install.sh | sh\npeerclaw version # التحقق من التثبيت\n```\n\n## الخطوة 3: التحقق من الإعدادات\n\n```bash\npeerclaw config show\n```\n\nتأكد أن `keypair_path` يشير إلى ملف المفتاح الموجود (`~/.peerclaw/agent.key`).\nإذا كانت الإعدادات مفقودة، استعدها:\n\n```bash\nmkdir -p ~/.peerclaw\ncat > ~/.peerclaw/config.yaml << 'CONF'\nagent_id: {{agent_id}}\nserver: {{server_url}}\nkeypair_path: ~/.peerclaw/agent.key\nCONF\n```\n\n## الخطوة 4: استعادة زوج المفاتيح إذا لزم الأمر\n\nإذا تم حذف `~/.peerclaw/agent.key` أثناء إعادة التثبيت:\n\n```bash\ncp ~/.peerclaw/agent.key.bak ~/.peerclaw/agent.key\nchmod 600 ~/.peerclaw/agent.key\n```\n\n## الخطوة 5: إرسال heartbeat لتأكيد الاسترداد\n\n```bash\npeerclaw agent heartbeat {{agent_id}} --status online\n```\n\nيجب أن ترى: `Heartbeat sent for agent {{agent_id}}`",
673+
"prompt_openclaw": "\n\n## الخطوة 6: إعادة تثبيت إضافة OpenClaw\n\n```bash\nnpm install @peerclaw/openclaw-plugin@latest\n```\n\nأعد تشغيل OpenClaw لتفعيل الإضافة المحدثة.",
674+
"prompt_ironclaw": "\n\n## الخطوة 6: إعادة تثبيت إضافة IronClaw\n\n```bash\ncurl -fsSL -o peerclaw.wasm https://github.com/peerclaw/ironclaw-plugin/releases/latest/download/peerclaw_ironclaw_plugin.wasm\nironclaw extension install ./peerclaw.wasm\n```\n\nأعد تشغيل IronClaw لتفعيل الإضافة المحدثة.",
675+
"prompt_picoclaw": "\n\n## الخطوة 6: إعادة تثبيت إضافة PicoClaw\n\n```bash\ngo get github.com/peerclaw/picoclaw-plugin@latest\n```\n\nأعد بناء وكيل PicoClaw لتضمين الإضافة المحدثة.",
676+
"prompt_nanobot": "\n\n## الخطوة 6: إعادة تثبيت إضافة nanobot\n\n```bash\npip install --upgrade git+https://github.com/peerclaw/nanobot-plugin.git\n```\n\nأعد تشغيل nanobot لتفعيل الإضافة المحدثة.",
677+
"copyPrompt": "نسخ النص",
678+
"copied": "تم النسخ"
668679
}
669680
}

web/app/src/i18n/locales/en.json

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -627,6 +627,17 @@
627627
"footer": {
628628
"copyright": "PeerClaw {{year}}. Open Source."
629629
},
630+
"reinstall": {
631+
"title": "Reinstall Agent SDK",
632+
"button": "Reinstall Agent",
633+
"prompt": "I need to reinstall the PeerClaw Agent SDK for \"{{agent_name}}\" (ID: {{agent_id}}).\nServer: {{server_url}}\n\n⚠️ IMPORTANT: Protect your agent keypair — this is your cryptographic identity.\n\n## Step 1: Backup your keypair\n\n```bash\ncp ~/.peerclaw/agent.key ~/.peerclaw/agent.key.bak\nls -la ~/.peerclaw/agent.key.bak # verify backup exists\n```\n\n## Step 2: Reinstall the PeerClaw CLI\n\n```bash\ncurl -fsSL {{server_url}}/install.sh | sh\npeerclaw version # verify installation\n```\n\n## Step 3: Verify your configuration\n\n```bash\npeerclaw config show\n```\n\nConfirm that `keypair_path` points to your existing key file (`~/.peerclaw/agent.key`).\nIf the config is missing, restore it:\n\n```bash\nmkdir -p ~/.peerclaw\ncat > ~/.peerclaw/config.yaml << 'CONF'\nagent_id: {{agent_id}}\nserver: {{server_url}}\nkeypair_path: ~/.peerclaw/agent.key\nCONF\n```\n\n## Step 4: Restore keypair if needed\n\nIf `~/.peerclaw/agent.key` was deleted during reinstall:\n\n```bash\ncp ~/.peerclaw/agent.key.bak ~/.peerclaw/agent.key\nchmod 600 ~/.peerclaw/agent.key\n```\n\n## Step 5: Send a heartbeat to confirm recovery\n\n```bash\npeerclaw agent heartbeat {{agent_id}} --status online\n```\n\nYou should see: `Heartbeat sent for agent {{agent_id}}`",
634+
"prompt_openclaw": "\n\n## Step 6: Reinstall OpenClaw plugin\n\n```bash\nnpm install @peerclaw/openclaw-plugin@latest\n```\n\nRestart OpenClaw to activate the updated plugin.",
635+
"prompt_ironclaw": "\n\n## Step 6: Reinstall IronClaw plugin\n\n```bash\ncurl -fsSL -o peerclaw.wasm https://github.com/peerclaw/ironclaw-plugin/releases/latest/download/peerclaw_ironclaw_plugin.wasm\nironclaw extension install ./peerclaw.wasm\n```\n\nRestart IronClaw to activate the updated plugin.",
636+
"prompt_picoclaw": "\n\n## Step 6: Reinstall PicoClaw plugin\n\n```bash\ngo get github.com/peerclaw/picoclaw-plugin@latest\n```\n\nRebuild your PicoClaw agent to include the updated plugin.",
637+
"prompt_nanobot": "\n\n## Step 6: Reinstall nanobot plugin\n\n```bash\npip install --upgrade git+https://github.com/peerclaw/nanobot-plugin.git\n```\n\nRestart nanobot to activate the updated plugin.",
638+
"copyPrompt": "Copy Prompt",
639+
"copied": "Copied"
640+
},
630641
"notFound": {
631642
"description": "The page you're looking for doesn't exist.",
632643
"backHome": "Back to Home"

web/app/src/i18n/locales/es.json

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -665,5 +665,16 @@
665665
"agent_degraded": "Agente degradado",
666666
"sdk_outdated": "SDK desactualizado"
667667
}
668+
},
669+
"reinstall": {
670+
"title": "Reinstalar Agent SDK",
671+
"button": "Reinstalar Agent",
672+
"prompt": "Necesito reinstalar el PeerClaw Agent SDK para \"{{agent_name}}\" (ID: {{agent_id}}).\nServidor: {{server_url}}\n\n⚠️ IMPORTANTE: Protege tu par de claves — esta es tu identidad criptográfica.\n\n## Paso 1: Respaldar tu par de claves\n\n```bash\ncp ~/.peerclaw/agent.key ~/.peerclaw/agent.key.bak\nls -la ~/.peerclaw/agent.key.bak # verificar que el respaldo existe\n```\n\n## Paso 2: Reinstalar PeerClaw CLI\n\n```bash\ncurl -fsSL {{server_url}}/install.sh | sh\npeerclaw version # verificar instalación\n```\n\n## Paso 3: Verificar la configuración\n\n```bash\npeerclaw config show\n```\n\nConfirma que `keypair_path` apunta a tu archivo de claves existente (`~/.peerclaw/agent.key`).\nSi la configuración no existe, restáurala:\n\n```bash\nmkdir -p ~/.peerclaw\ncat > ~/.peerclaw/config.yaml << 'CONF'\nagent_id: {{agent_id}}\nserver: {{server_url}}\nkeypair_path: ~/.peerclaw/agent.key\nCONF\n```\n\n## Paso 4: Restaurar par de claves si es necesario\n\nSi `~/.peerclaw/agent.key` fue eliminado durante la reinstalación:\n\n```bash\ncp ~/.peerclaw/agent.key.bak ~/.peerclaw/agent.key\nchmod 600 ~/.peerclaw/agent.key\n```\n\n## Paso 5: Enviar heartbeat para confirmar la recuperación\n\n```bash\npeerclaw agent heartbeat {{agent_id}} --status online\n```\n\nDeberías ver: `Heartbeat sent for agent {{agent_id}}`",
673+
"prompt_openclaw": "\n\n## Paso 6: Reinstalar plugin de OpenClaw\n\n```bash\nnpm install @peerclaw/openclaw-plugin@latest\n```\n\nReinicia OpenClaw para activar el plugin actualizado.",
674+
"prompt_ironclaw": "\n\n## Paso 6: Reinstalar plugin de IronClaw\n\n```bash\ncurl -fsSL -o peerclaw.wasm https://github.com/peerclaw/ironclaw-plugin/releases/latest/download/peerclaw_ironclaw_plugin.wasm\nironclaw extension install ./peerclaw.wasm\n```\n\nReinicia IronClaw para activar el plugin actualizado.",
675+
"prompt_picoclaw": "\n\n## Paso 6: Reinstalar plugin de PicoClaw\n\n```bash\ngo get github.com/peerclaw/picoclaw-plugin@latest\n```\n\nReconstruye tu agente PicoClaw para incluir el plugin actualizado.",
676+
"prompt_nanobot": "\n\n## Paso 6: Reinstalar plugin de nanobot\n\n```bash\npip install --upgrade git+https://github.com/peerclaw/nanobot-plugin.git\n```\n\nReinicia nanobot para activar el plugin actualizado.",
677+
"copyPrompt": "Copiar Prompt",
678+
"copied": "Copiado"
668679
}
669680
}

web/app/src/i18n/locales/fr.json

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -665,5 +665,16 @@
665665
"agent_degraded": "Agent dégradé",
666666
"sdk_outdated": "SDK obsolète"
667667
}
668+
},
669+
"reinstall": {
670+
"title": "Réinstaller Agent SDK",
671+
"button": "Réinstaller Agent",
672+
"prompt": "Je dois réinstaller le PeerClaw Agent SDK pour \"{{agent_name}}\" (ID : {{agent_id}}).\nServeur : {{server_url}}\n\n⚠️ IMPORTANT : Protégez votre paire de clés — c'est votre identité cryptographique.\n\n## Étape 1 : Sauvegarder votre paire de clés\n\n```bash\ncp ~/.peerclaw/agent.key ~/.peerclaw/agent.key.bak\nls -la ~/.peerclaw/agent.key.bak # vérifier que la sauvegarde existe\n```\n\n## Étape 2 : Réinstaller PeerClaw CLI\n\n```bash\ncurl -fsSL {{server_url}}/install.sh | sh\npeerclaw version # vérifier l'installation\n```\n\n## Étape 3 : Vérifier la configuration\n\n```bash\npeerclaw config show\n```\n\nConfirmez que `keypair_path` pointe vers votre fichier de clés existant (`~/.peerclaw/agent.key`).\nSi la configuration est manquante, restaurez-la :\n\n```bash\nmkdir -p ~/.peerclaw\ncat > ~/.peerclaw/config.yaml << 'CONF'\nagent_id: {{agent_id}}\nserver: {{server_url}}\nkeypair_path: ~/.peerclaw/agent.key\nCONF\n```\n\n## Étape 4 : Restaurer la paire de clés si nécessaire\n\nSi `~/.peerclaw/agent.key` a été supprimé pendant la réinstallation :\n\n```bash\ncp ~/.peerclaw/agent.key.bak ~/.peerclaw/agent.key\nchmod 600 ~/.peerclaw/agent.key\n```\n\n## Étape 5 : Envoyer un heartbeat pour confirmer la récupération\n\n```bash\npeerclaw agent heartbeat {{agent_id}} --status online\n```\n\nVous devriez voir : `Heartbeat sent for agent {{agent_id}}`",
673+
"prompt_openclaw": "\n\n## Étape 6 : Réinstaller le plugin OpenClaw\n\n```bash\nnpm install @peerclaw/openclaw-plugin@latest\n```\n\nRedémarrez OpenClaw pour activer le plugin mis à jour.",
674+
"prompt_ironclaw": "\n\n## Étape 6 : Réinstaller le plugin IronClaw\n\n```bash\ncurl -fsSL -o peerclaw.wasm https://github.com/peerclaw/ironclaw-plugin/releases/latest/download/peerclaw_ironclaw_plugin.wasm\nironclaw extension install ./peerclaw.wasm\n```\n\nRedémarrez IronClaw pour activer le plugin mis à jour.",
675+
"prompt_picoclaw": "\n\n## Étape 6 : Réinstaller le plugin PicoClaw\n\n```bash\ngo get github.com/peerclaw/picoclaw-plugin@latest\n```\n\nReconstruisez votre agent PicoClaw pour inclure le plugin mis à jour.",
676+
"prompt_nanobot": "\n\n## Étape 6 : Réinstaller le plugin nanobot\n\n```bash\npip install --upgrade git+https://github.com/peerclaw/nanobot-plugin.git\n```\n\nRedémarrez nanobot pour activer le plugin mis à jour.",
677+
"copyPrompt": "Copier le Prompt",
678+
"copied": "Copié"
668679
}
669680
}

web/app/src/i18n/locales/ja.json

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -665,5 +665,16 @@
665665
"agent_degraded": "エージェント性能低下",
666666
"sdk_outdated": "SDKが古いバージョン"
667667
}
668+
},
669+
"reinstall": {
670+
"title": "Agent SDK の再インストール",
671+
"button": "Agent を再インストール",
672+
"prompt": "「{{agent_name}}」(ID: {{agent_id}})の PeerClaw Agent SDK を再インストールする必要があります。\nサーバー: {{server_url}}\n\n⚠️ 重要:キーペアを保護してください——これはあなたの暗号化 ID です。\n\n## ステップ 1:キーペアのバックアップ\n\n```bash\ncp ~/.peerclaw/agent.key ~/.peerclaw/agent.key.bak\nls -la ~/.peerclaw/agent.key.bak # バックアップの存在を確認\n```\n\n## ステップ 2:PeerClaw CLI の再インストール\n\n```bash\ncurl -fsSL {{server_url}}/install.sh | sh\npeerclaw version # インストールを確認\n```\n\n## ステップ 3:設定の確認\n\n```bash\npeerclaw config show\n```\n\n`keypair_path` が既存のキーファイル(`~/.peerclaw/agent.key`)を指していることを確認してください。\n設定がない場合は復元します:\n\n```bash\nmkdir -p ~/.peerclaw\ncat > ~/.peerclaw/config.yaml << 'CONF'\nagent_id: {{agent_id}}\nserver: {{server_url}}\nkeypair_path: ~/.peerclaw/agent.key\nCONF\n```\n\n## ステップ 4:キーペアの復元(必要な場合)\n\n再インストール中に `~/.peerclaw/agent.key` が削除された場合:\n\n```bash\ncp ~/.peerclaw/agent.key.bak ~/.peerclaw/agent.key\nchmod 600 ~/.peerclaw/agent.key\n```\n\n## ステップ 5:ハートビートを送信して回復を確認\n\n```bash\npeerclaw agent heartbeat {{agent_id}} --status online\n```\n\n次のように表示されるはずです:`Heartbeat sent for agent {{agent_id}}`",
673+
"prompt_openclaw": "\n\n## ステップ 6:OpenClaw プラグインの再インストール\n\n```bash\nnpm install @peerclaw/openclaw-plugin@latest\n```\n\nOpenClaw を再起動してプラグインを有効化してください。",
674+
"prompt_ironclaw": "\n\n## ステップ 6:IronClaw プラグインの再インストール\n\n```bash\ncurl -fsSL -o peerclaw.wasm https://github.com/peerclaw/ironclaw-plugin/releases/latest/download/peerclaw_ironclaw_plugin.wasm\nironclaw extension install ./peerclaw.wasm\n```\n\nIronClaw を再起動してプラグインを有効化してください。",
675+
"prompt_picoclaw": "\n\n## ステップ 6:PicoClaw プラグインの再インストール\n\n```bash\ngo get github.com/peerclaw/picoclaw-plugin@latest\n```\n\nPicoClaw エージェントを再ビルドしてプラグインを含めてください。",
676+
"prompt_nanobot": "\n\n## ステップ 6:nanobot プラグインの再インストール\n\n```bash\npip install --upgrade git+https://github.com/peerclaw/nanobot-plugin.git\n```\n\nnanobot を再起動してプラグインを有効化してください。",
677+
"copyPrompt": "プロンプトをコピー",
678+
"copied": "コピー済み"
668679
}
669680
}

web/app/src/i18n/locales/pt.json

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -665,5 +665,16 @@
665665
"agent_degraded": "Agente degradado",
666666
"sdk_outdated": "SDK desatualizado"
667667
}
668+
},
669+
"reinstall": {
670+
"title": "Reinstalar Agent SDK",
671+
"button": "Reinstalar Agent",
672+
"prompt": "Preciso reinstalar o PeerClaw Agent SDK para \"{{agent_name}}\" (ID: {{agent_id}}).\nServidor: {{server_url}}\n\n⚠️ IMPORTANTE: Proteja seu par de chaves — esta é sua identidade criptográfica.\n\n## Passo 1: Fazer backup do par de chaves\n\n```bash\ncp ~/.peerclaw/agent.key ~/.peerclaw/agent.key.bak\nls -la ~/.peerclaw/agent.key.bak # verificar se o backup existe\n```\n\n## Passo 2: Reinstalar o PeerClaw CLI\n\n```bash\ncurl -fsSL {{server_url}}/install.sh | sh\npeerclaw version # verificar instalação\n```\n\n## Passo 3: Verificar a configuração\n\n```bash\npeerclaw config show\n```\n\nConfirme que `keypair_path` aponta para seu arquivo de chaves existente (`~/.peerclaw/agent.key`).\nSe a configuração estiver faltando, restaure-a:\n\n```bash\nmkdir -p ~/.peerclaw\ncat > ~/.peerclaw/config.yaml << 'CONF'\nagent_id: {{agent_id}}\nserver: {{server_url}}\nkeypair_path: ~/.peerclaw/agent.key\nCONF\n```\n\n## Passo 4: Restaurar par de chaves se necessário\n\nSe `~/.peerclaw/agent.key` foi excluído durante a reinstalação:\n\n```bash\ncp ~/.peerclaw/agent.key.bak ~/.peerclaw/agent.key\nchmod 600 ~/.peerclaw/agent.key\n```\n\n## Passo 5: Enviar heartbeat para confirmar a recuperação\n\n```bash\npeerclaw agent heartbeat {{agent_id}} --status online\n```\n\nVocê deve ver: `Heartbeat sent for agent {{agent_id}}`",
673+
"prompt_openclaw": "\n\n## Passo 6: Reinstalar plugin do OpenClaw\n\n```bash\nnpm install @peerclaw/openclaw-plugin@latest\n```\n\nReinicie o OpenClaw para ativar o plugin atualizado.",
674+
"prompt_ironclaw": "\n\n## Passo 6: Reinstalar plugin do IronClaw\n\n```bash\ncurl -fsSL -o peerclaw.wasm https://github.com/peerclaw/ironclaw-plugin/releases/latest/download/peerclaw_ironclaw_plugin.wasm\nironclaw extension install ./peerclaw.wasm\n```\n\nReinicie o IronClaw para ativar o plugin atualizado.",
675+
"prompt_picoclaw": "\n\n## Passo 6: Reinstalar plugin do PicoClaw\n\n```bash\ngo get github.com/peerclaw/picoclaw-plugin@latest\n```\n\nReconstrua seu agente PicoClaw para incluir o plugin atualizado.",
676+
"prompt_nanobot": "\n\n## Passo 6: Reinstalar plugin do nanobot\n\n```bash\npip install --upgrade git+https://github.com/peerclaw/nanobot-plugin.git\n```\n\nReinicie o nanobot para ativar o plugin atualizado.",
677+
"copyPrompt": "Copiar Prompt",
678+
"copied": "Copiado"
668679
}
669680
}

0 commit comments

Comments
 (0)