Remove problematic telegram package - #2
Merged
Conversation
Co-authored-by: amirbiron <amirbiron@gmail.com>
Contributor
|
Cursor Agent can help with this pull request. Just |
amirbiron
marked this pull request as ready for review
August 6, 2025 00:36
This was referenced Oct 18, 2025
This was referenced Nov 3, 2025
Closed
Closed
This was referenced Jan 5, 2026
This was referenced Feb 10, 2026
Closed
amirbiron
pushed a commit
that referenced
this pull request
Jul 19, 2026
מימוש דפדפן הריפו ב-MCP (קריאה בלבד, אדמין בלבד), לפי סעיף 13 במסמך התכנון: - 4 כלים חדשים מעל ה-Repo Sync Engine הקיים (ללא לוגיקת persistence חדשה): codekeeper_list_repos / list_repo_tree (עימוד+סינון) / get_repo_file (מעטפת יציבה: ok/binary/too_large + not_found/path_denied) / search_repo (snippets). - שער אדמין fail-closed: require_admin ב-auth.py (config.ADMIN_USER_IDS בלבד, בלי מפלט CHATOPS_ALLOW_ALL_IF_NO_ADMINS; רשימה ריקה = אף אחד) בגוף כל כלי, ו-AdminAwareFastMCP שמסתיר את הכלים מ-tools/list ללא-אדמין (הסתרה = UX, החסימה האמיתית בגוף). - מדיניות סינון סודות מחייבת (repo_policy.py): חסימה/השמטה/דילוג של .env*, *.pem, id_rsa* וכו' בכל שלושת המשטחים; נרמול נתיבים case-insensitive על נתיב מלא ו-basename; fail-closed על שגיאה פנימית; הרחבה דרך MCP_REPO_DENYLIST_EXTRA. - תקרות שרת + clamp (repo_handlers.py): limit 50/200, per_page 200/1000, max_results 50/100, תקציב פלט 256KB עם truncated. - הערת הביקורת של המשתמש #1: אינדקס unique ל-repo_metadata נוצר כחלק מהפאזה — גם ב-scripts/create_repo_indexes.py וגם best-effort באתחול ה-backend. - הערת הביקורת של המשתמש #2: כשל קריאה בזמן sync פעיל מחזיר {"error": "sync_in_progress", "retry_after": 30} (בדיקת sync_jobs.running) — כדי שהמודל הקורא יחזור אחרי המתנה ולא יסיק שהקובץ לא קיים. - תיעוד: README (כולל הערת פריסה — דיסק פר-שירות ב-Render + REPO_MIRROR_PATH), environment-variables.rst + config_inspector (MCP_REPO_DENYLIST_EXTRA חדש), ועדכון סטטוס פאזה ד' במסמך התכנון (כולל retry_after וסגירת פער 6). טסטים: 61 חדשים (policy/backend/handlers/require_admin/visibility) — 145 עוברים סה"כ; black/ruff/flake8 נקי; אומת גם שער האדמין בשרשרת המלאה. עיינתי בתיעוד: https://amirbiron.github.io/CodeBot/ Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01WNFuSyshwpRcxozVZEui5K
27 tasks
amirbiron
added a commit
that referenced
this pull request
Jul 20, 2026
* feat(mcp): implement Phase D — admin-only repo-browser tools מימוש דפדפן הריפו ב-MCP (קריאה בלבד, אדמין בלבד), לפי סעיף 13 במסמך התכנון: - 4 כלים חדשים מעל ה-Repo Sync Engine הקיים (ללא לוגיקת persistence חדשה): codekeeper_list_repos / list_repo_tree (עימוד+סינון) / get_repo_file (מעטפת יציבה: ok/binary/too_large + not_found/path_denied) / search_repo (snippets). - שער אדמין fail-closed: require_admin ב-auth.py (config.ADMIN_USER_IDS בלבד, בלי מפלט CHATOPS_ALLOW_ALL_IF_NO_ADMINS; רשימה ריקה = אף אחד) בגוף כל כלי, ו-AdminAwareFastMCP שמסתיר את הכלים מ-tools/list ללא-אדמין (הסתרה = UX, החסימה האמיתית בגוף). - מדיניות סינון סודות מחייבת (repo_policy.py): חסימה/השמטה/דילוג של .env*, *.pem, id_rsa* וכו' בכל שלושת המשטחים; נרמול נתיבים case-insensitive על נתיב מלא ו-basename; fail-closed על שגיאה פנימית; הרחבה דרך MCP_REPO_DENYLIST_EXTRA. - תקרות שרת + clamp (repo_handlers.py): limit 50/200, per_page 200/1000, max_results 50/100, תקציב פלט 256KB עם truncated. - הערת הביקורת של המשתמש #1: אינדקס unique ל-repo_metadata נוצר כחלק מהפאזה — גם ב-scripts/create_repo_indexes.py וגם best-effort באתחול ה-backend. - הערת הביקורת של המשתמש #2: כשל קריאה בזמן sync פעיל מחזיר {"error": "sync_in_progress", "retry_after": 30} (בדיקת sync_jobs.running) — כדי שהמודל הקורא יחזור אחרי המתנה ולא יסיק שהקובץ לא קיים. - תיעוד: README (כולל הערת פריסה — דיסק פר-שירות ב-Render + REPO_MIRROR_PATH), environment-variables.rst + config_inspector (MCP_REPO_DENYLIST_EXTRA חדש), ועדכון סטטוס פאזה ד' במסמך התכנון (כולל retry_after וסגירת פער 6). טסטים: 61 חדשים (policy/backend/handlers/require_admin/visibility) — 145 עוברים סה"כ; black/ruff/flake8 נקי; אומת גם שער האדמין בשרשרת המלאה. עיינתי בתיעוד: https://amirbiron.github.io/CodeBot/ Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01WNFuSyshwpRcxozVZEui5K * fix(mcp): repo tools review — input normalization, honest search totals, index dup-guard תיקוני code review על מימוש פאזה ד' (כל שלושת הממצאים תקפים): - list_tree: נרמול הגנתי של page/per_page גם בשכבת ה-backend (ה-handler כבר עושה clamp, אבל המתודה ציבורית): קלט לא-מספרי ⇒ ברירת מחדל, רצפה של 1, ותקרת TREE_PER_PAGE_MAX — הערכים המנורמלים משמשים גם לחיתוך וגם בתשובה (בלי slicing שלילי ובלי ValueError). - search: total משקף עכשיו את מספר ההתאמות המותרות לאחר סינון המדיניות (ולא את ה-total הגולמי של המנוע שכולל נתיבים חסומים), ו-truncated נדלק גם כשקיימות התאמות מותרות מעבר ל-max_results (בנוסף לקיטום תקציב-הבייטים ולדגל המנוע). - create_repo_indexes.py: בדיקת כפילויות repo_name (aggregation) לפני יצירת ה-unique index — כפילות מדווחת ומדלגת במקום להפיל את הסקריפט באמצע ריצת שאר האינדקסים. טסטים: עודכן test_search_caps_filters_and_snippets (total+truncated), נוספו טסט אי-קיטום מתחת לתקרה וטסט נרמול קלט לעץ. 147 עוברים; black/ruff/flake8 נקי. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01WNFuSyshwpRcxozVZEui5K * feat(mcp): auto-refresh local repo mirrors — no cron, no extra service הפיכת עדכון ה-mirrors בשירות ה-MCP לאוטומטי לגמרי, באותו דפוס כמו הוובאפ (thread רקע דמון בתוך אותו שירות — לא cron ולא שירות Render נוסף): - mcp_server/repo_autosync.py: לולאת רענון שמנצלת את מה שכבר קורה — הוובאפ מקבל את ה-webhook מ-GitHub ואחרי כל sync כותב last_synced_sha ל-Mongo המשותף. הלולאה משווה את ה-SHA המקומי ומריצה fetch כשיש סטייה; ריפו שקיים ב-repo_metadata אך חסר בדיסק המקומי משוכפל אוטומטית מ-repo_url (init_mirror אידמפוטנטי) — אין יותר initial_import ידני בצד ה-MCP. - זרימה: merge ל-main → webhook לוובאפ → SHA ב-Mongo → ה-MCP מזהה ומושך. - בזמן clone/fetch מקומי הכלים מחזירים sync_in_progress+retry_after (is_refreshing משולב ב-RepoBackend._sync_running לצד תור ה-jobs של הוובאפ). - שליטה: MCP_REPO_AUTOSYNC (ברירת מחדל פעיל, 0 מכבה), MCP_REPO_AUTOSYNC_INTERVAL (ברירת מחדל 300ש', רצפה 30). מותנע מ-create_app עם עטיפת שגיאות — כשל בהתנעה לא מפיל את השירות. - תיעוד: README (זרימה + ENV: צריך GITHUB_TOKENS לפרטיים, לא צריך GITHUB_WEBHOOK_SECRET ב-MCP), environment-variables.rst + config_inspector. טסטים: 10 חדשים ל-refresh_once (clone-חסר, דילוג SHA-זהה, fetch על סטייה/חוסר ודאות, בליעת שגיאות + ניקוי דגל, is_refreshing בזמן פעולה, kill-switch, רצפת interval) + טסט backend ל-sync_in_progress ברענון מקומי. 157 עוברים; לינט נקי. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01WNFuSyshwpRcxozVZEui5K * docs(mcp): add full MCP server page to the docs site עמוד תיעוד חדש docs/mcp-server.rst (משולב ב-toctree תחת האינטגרציות): - מה זה נותן + ארכיטקטורה בקצרה (in-process, user_id מהטוקן, Smart Projection). - טבלאות כל 12 הכלים — 8 כלי משתמש + 4 כלי אדמין (דפדפן הריפו). - אימות והרשאות: PAT/OAuth מאוחדים, שכבות read/write/אדמין. - הפעלה צעד-אחר-צעד: שירות Render → מצב PAT → מצב OAuth (כולל אילו ENV על איזה שירות) → דפדפן הריפו (דיסק, ADMIN_USER_IDS, GITHUB_TOKENS; בלי webhook secret). - חיבור משלושת הלקוחות (Claude.ai / Code / Desktop) עם פקודות מוכנות להעתקה. - autosync (זרימת merge→webhook→SHA→fetch), מדיניות סינון הסודות, התנהגות sync_in_progress/retry_after, עקרונות אבטחה, וטבלת פתרון תקלות. בנוסף: תיקון docstring ב-database/collections_manager.py (get_tags_metadata) — רשימת ההגדרות השבורה הייתה שתי האזהרות היחידות בבניית Sphinx; אחרי התיקון הבנייה כולה על 0 אזהרות (חובה לפי מדיניות ה-RTD fail_on_warning). אומת: בנייה מלאה exit 0 עם 0 אזהרות; doc8 נקי על העמוד החדש. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01WNFuSyshwpRcxozVZEui5K * fix(mcp): redact credentials in autosync failure logs (defense-in-depth) ממצא ביקורת: לוגי הכשל של autosync מדפיסים message שמגיע מתלות חיצונית (init_mirror/fetch_updates) ועלול להכיל URL של git עם טוקן. אימות מול הקוד: המנוע עצמו כבר מסנן את ה-stderr במקור (_run_git_command → _sanitize_output, כולל ה-URL עם הטוקן), כך שלא נמצאה דליפה חיה בנתיבים הקיימים — אבל אנחנו מלוגגים ערכים מתלות duck-typed, ולפי CLAUDE.md אסור שסודות יגיעו ללוגים בכלל. לכן נוסף helper משותף `_redact`: - מסיר credentials מ-userinfo של URL (https://user:token@host → https://***@host) - מסיר צורות טוקן של GitHub (ghp_/gho_/ghu_/ghs_/ghr_/github_pat_) - fail-closed: שגיאה פנימית ⇒ placeholder, לעולם לא הטקסט הגולמי - מוחל על שני אתרי הלוג (clone failed / fetch failed) טסטים: יחידה ל-_redact (URL עם credentials, טוקן חשוף, שימור אבחון תקין, None) + טסט caplog שמוכיח שנתיב הכשל לא מדליף טוקן ללוג. 159 עוברים; לינט נקי. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01WNFuSyshwpRcxozVZEui5K --------- Co-authored-by: Claude <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Remove
telegram==0.0.1fromrequirements.txtto fix CI/CD dependency installation failures.The
telegram==0.0.1package was causingerror: invalid command 'bdist_wheel'during CI/CD dependency installation. It is an old, unofficial package that is not needed and conflicts withpython-telegram-bot, which is the correct dependency. Removing it resolves the build issue and avoids conflicts.