Manage orchestration skills per host (#3451)

* feat(skills): manage orchestration skills per host

Agent skills execute on the daemon host, so their bundle, selection, and filesystem convergence must share that owner. Preserve the existing install semantics while letting every capable client manage the selected host and migrating the legacy desktop preference once.

* fix(client): keep skill management internal

Keep host skill management on the low-level daemon client used by the app. Do not expose daemon settings or the desktop-only compatibility migration through the shared Paseo API handed to plugins.

* fix(e2e): declare skills fixture dependencies

Use Playwright's required destructuring form for the test-scoped daemon sandbox fixture so CI can collect the real-host skills suite.

* test(skills): use native managed paths

Assert fixed skill targets relative to the daemon user's real home with platform-native path joining so the ownership contract holds on Windows and POSIX hosts.
This commit is contained in:
Mohamed Boudra
2026-08-18 09:51:46 +02:00
committed by GitHub
parent eb3591cee8
commit 4108960709
71 changed files with 2225 additions and 2598 deletions
+42 -39
View File
@@ -1,4 +1,4 @@
import type { TranslationResources } from "./en";
import { en, type TranslationResources } from "./en";
import { pluginSettings } from "./plugin-settings";
export const ar: TranslationResources = {
@@ -1298,13 +1298,6 @@ export const ar: TranslationResources = {
statusFailed: "غير قادر على التحقق من حالة تثبيت CLI.",
installFailed: "غير قادر على تثبيت PaseoCLI.",
},
skills: {
statusFailed: "غير قادر على التحقق من حالة مهارات التنسيق.",
installFailed: "غير قادر على تثبيت مهارات التنسيق.",
updateFailed: "غير قادر على تحديث مهارات التنسيق.",
uninstallFailed: "غير قادر على إلغاء تثبيت مهارات التنسيق.",
saveSelectionFailed: "غير قادر على حفظ اختيار مهارات التنسيق.",
},
},
},
rootError: {
@@ -2081,47 +2074,16 @@ export const ar: TranslationResources = {
title: "التكامل",
docs: {
cli: "مستندات CLI",
skills: "وثائق المهارات",
openCli: "افتح وثائق CLI",
openSkills: "فتح وثائق المهارات",
},
commandLine: {
title: "سطر الأوامر",
description: "وكلاء التحكم والبرنامج النصي من المحطة الطرفية الخاصة بك",
},
skills: {
title: "مهارات التنسيق",
description: "قم بتعليم عملائك كيفية التنسيق من خلال CLI",
updateAvailable: "التحديث متاح",
updateTitle: "تحديث مهارات Paseo ؟",
updateFallback: "مزامنة المهارات المجمعة لجهازك.",
uninstallTitle: "إلغاء تثبيت مهارات Paseo ؟",
uninstallMessage: "يزيل جميع مهارات تنسيق Paseo من ~/.agents ، ~/.claude ، ~/.codex.",
choose: "اختيار المهارات",
chooseAll: "كل المهارات",
chooseAllHint: "أبقِ جميع المهارات المرفقة مثبتة، بما فيها ما يُضاف لاحقًا.",
chooseList: "المهارات المرفقة",
chooseEmpty: "لا تتضمن هذه النسخة أي مهارات.",
removeTitle: "إزالة المهارات غير المحددة؟",
removeMessage:
"سيتم حذف {{skills}} من ~/.agents و~/.claude و~/.codex. كما يُحذف كل ما أضفته داخل مجلدات المهارات تلك.",
saveFailed: "تعذر حفظ اختيار المهارات.",
},
actions: {
install: "ثَبَّتَ",
installing: "جارٍ التثبيت...",
installed: "تم التثبيت",
update: "تحديث",
working: "عمل...",
remove: "إزالة",
uninstall: "إلغاء التثبيت",
save: "حفظ",
saving: "جارٍ الحفظ...",
},
operations: {
add: "أضف مهارة",
update: "تحديث المهارة",
delete: "حذف المهارة",
},
},
permissions: {
@@ -2191,6 +2153,47 @@ export const ar: TranslationResources = {
rowTitle: "إقران جهاز",
rowHint: "امسح رمز QR ضوئيًا أو انسخ رابطًا لتوصيل هاتفك بهذا المضيف",
},
skills: {
...en.settings.host.skills,
sectionTitle: "مهارات التنسيق",
title: "مهارات التنسيق",
description: "قم بتعليم عملائك كيفية التنسيق من خلال CLI",
updateAvailable: "التحديث متاح",
updateTitle: "تحديث مهارات Paseo ؟",
updateFallback: "مزامنة المهارات المجمعة لجهازك.",
uninstallTitle: "إلغاء تثبيت مهارات Paseo ؟",
uninstallMessage: "يزيل جميع مهارات تنسيق Paseo من ~/.agents ، ~/.claude ، ~/.codex.",
choose: "اختيار المهارات",
chooseAll: "كل المهارات",
chooseAllHint: "أبقِ جميع المهارات المرفقة مثبتة، بما فيها ما يُضاف لاحقًا.",
chooseList: "المهارات المرفقة",
chooseEmpty: "لا تتضمن هذه النسخة أي مهارات.",
removeTitle: "إزالة المهارات غير المحددة؟",
removeMessage:
"سيتم حذف {{skills}} من ~/.agents و~/.claude و~/.codex. كما يُحذف كل ما أضفته داخل مجلدات المهارات تلك.",
saveFailed: "تعذر حفظ اختيار المهارات.",
statusFailed: "غير قادر على التحقق من حالة مهارات التنسيق.",
updateFailed: "غير قادر على تحديث مهارات التنسيق.",
uninstallFailed: "غير قادر على إلغاء تثبيت مهارات التنسيق.",
saveSelectionFailed: "غير قادر على حفظ اختيار مهارات التنسيق.",
actions: {
install: "ثَبَّتَ",
installing: "جارٍ التثبيت...",
installed: "تم التثبيت",
update: "تحديث",
working: "عمل...",
remove: "إزالة",
uninstall: "إلغاء التثبيت",
save: "حفظ",
saving: "جارٍ الحفظ...",
cancel: "يلغي",
},
operations: {
add: "أضف مهارة",
update: "تحديث المهارة",
delete: "حذف المهارة",
},
},
orchestration: {
title: "التنسيق",
unavailable: "اتصل بهذا المضيف لإدارة التنسيق",