feat(scripts): כפתור "הרץ" מ-UI לסקריפטי read-only (קטגוריה B #4) #283
Reference in New Issue
Block a user
Delete Branch "worktree-scripts-run-ui"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
מה ולמה
הפריט האחרון מדוח-הנאמנות: המוקאפ
16-scriptsמציג כפתור "הרץ"; הקוד הציג "מקור" בלבד. הכרעת חיים: להוסיף הרצה-מ-UI, רק לסקריפטי read-only/audit, argv-קבוע, בלי--apply. שימוש-חוזר בגשר-המארח הקיים (court-fetch) — שיכפול דפוס/adapter-migration.אבטחה (הליבה)
mcp-server/.../services/script_runner.py(מקור-אמת יחיד, stdlib-only):name → argv קבוע ובטוח. 5 סקריפטים מאומתים read-only:leak_guard.py·check_undefined_names.py·storage_leak_tripwire.py·audit_training_corpus.py·audit_corpus_integrity.py --no-notify.court_fetch_service/server.py):POST /run-script— Bearer-auth (COURT_FETCH_SHARED_SECRETהקיים), ולידציית-allowlist,create_subprocess_exec(ללא shell), timeout 600s, audit-log. מתעלם מכל ארגומנט מהבקשה — ה-argv נלקח אך-ורק מה-allowlist (אין הזרקת--apply).web/app.py):POST /api/scripts/{name}/runproxy לגשר + pre-check allowlist; הרחבת/api/scripts/catalogבשדהrunnable_scripts.scripts/page.tsx+lib/api/scripts.ts): כפתור "הרץ" (ירוק) רק לשורות-runnable,window.confirmלפני הרצה, ודיאלוג-פלט (exit-code + stdout/stderr). שאר השורות — "מקור" בלבד.שער-עיצוב
מוקאפ
16-scriptsעודכן עם כפתור "הרץ" + באנר-הסבר + דיאלוג-פלט, ואושר ע"י חיים.Invariants
leak_guardעובר; אין סמלי-פלטפורמה בשכבת-האינטליגנציה (הערה תוקנה).בדיקות
py_compile✓ ·leak_guard(קבצי-backend) exit 0 ✓ · smoke:build_argv('leak_guard.py')→argv תקין,build_argv('renumber_cases.py')→None (חסום) ✓ ·tsc --noEmit✓ ·eslint✓.⚠️ Deploy דו-שלבי
server.py+ המודול החדש) רץ על המארח דרך pm2 — דורשgit pullבעותק-המארח +pm2 restart legal-court-fetch-service(צעד ידני). עד אזPOST /run-scriptיחזיר 404 וה-UI יציג שגיאת-גשר.web/app.py+ web-ui) — Coolify deploy רגיל.npm run api:typesאחרי שה-openapi החי כולל את ה-endpoint.🤖 Generated with Claude Code
הרצת-סקריפט-מ-UI ב-/scripts, רק לסקריפטי קריאה-בלבד/אודיט, דרך גשר-המארח הקיים (court-fetch) — שיכפול דפוס /adapter-migration. אבטחה: - allowlist בצד-המארח (services/script_runner.py, מקור-אמת יחיד): name→argv קבוע ובטוח. 5 סקריפטים מאומתים: leak_guard, check_undefined_names, storage_leak_tripwire, audit_training_corpus, audit_corpus_integrity --no-notify. - הגשר (court_fetch_service/server.py): endpoint POST /run-script, Bearer-auth, ולידציית-allowlist, create_subprocess_exec (ללא shell), timeout 600s, audit-log; מתעלם מארגומנטים מהבקשה (argv מה-allowlist בלבד). - קונטיינר (web/app.py): POX /api/scripts/{name}/run proxy ל-גשר + pre-check allowlist; הרחבת /api/scripts/catalog ב-runnable_scripts. - UI: כפתור "הרץ" (ירוק) רק לשורות-runnable + דיאלוג-פלט (exit-code+stdout); שאר השורות "מקור" בלבד. confirm לפני הרצה. מאושר דרך שער-העיצוב (מוקאפ 16-scripts עודכן עם כפתור "הרץ"). G12: leak_guard עובר (אין סמלי-פלטפורמה בשכבת-האינטליגנציה). Deploy דו-שלבי: גשר-המארח דורש git pull בעותק-המארח + pm2 restart legal-court-fetch-service; הקונטיינר נפרס דרך Coolify כרגיל. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>