JupyterLite WebMCP מכניס סוכן למחברת חיה ומאפשר לו לערוך תאים, להריץ קוד ולסקור שינויים בזמן אמת

הבעיה: המחברת חיה בדפדפן, לא בדיסק
מדעני נתונים עובדים בתוך טאב דפדפן, וכמעט שום דבר ממה שחשוב במחברת שלהם לא קיים על הדיסק. התא שהרגע הקלדת ולא שמרת. האחד-עשר תווים שסימנת עם העכבר כי הם נראים לא נכון. הקרנל שמחזיק את ה-DataFrame בזיכרון. הגרף שעלה רק כי הרצת תאים בסדר מסוים. כדי לקבל עזרה מ-AI היום יש שתי עסקאות גרועות: העתק-הדבק לחלון צ'אט, המודל רואה צילום מת, מחזיר טקסט, ואתה מקליד אותו מחדש; או לחבר אינטגרציית MCP בצד שרת, היא קוראת בתים של .ipynb מהדיסק, כלומר קוראת קובץ שלא תואם את מה שאתה רואה על המסך, ודורשת שרת Jupyter, הרשאות ותשתית. ב-JupyterLite בכלל אין שרת לדבר איתו.
למה WebMCP הוא האופציה היחידה כאן
המצב שחשוב קיים רק בתוך טאב הדפדפן. אין בקאנד שמחזיק אותו, אז אין לשרת MCP קונבנציונלי מה להתחבר אליו. WebMCP כאן אינו האופציה הנוחה, הוא האופציה היחידה. את הכלי בנו אליסון קולמן (Allison Coleman) וחואן מנדוזה (Juan Mendoza), והוא מציע הדגמה חיה ומאגר קוד פתוח.
22 כלים שעובדים על המצב המקומי של הטאב
כל 22 הכלים הרשומים פועלים על מצב מקומי-טאב: מודל NotebookPanel החי כולל עריכות שמעולם לא נשמרו לדיסק; התא הנוכחי של האדם, הסמן ובחירת הטקסט המדויקת; קרנל Pyodide/WebAssembly המשותף לאדם ולסוכן; מנהל תוכן מגובה IndexedDB; ושיחות סקירה משורשרות המאוחסנות במטא-דאטה של המחברת עצמה. שום דבר מזה לא עובר פרוקסי ולא משוכפל לשירות חיצוני.
חוויית משתמש: המחברת הופכת לממשק
כל זרימת עבודה קיימת של AI-מחברת מדביקה משטח שני על הראשון: פאנל צ'אט, חלון נפרד, תא מועתק שאתה מקליד מחדש ידנית. WebMCP מאפשר לסוכן לפעול בתוך הטאב שהאדם כבר מסתכל עליו, כך שהמחברת עצמה נעשית הממשק במקום תמליל צ'אט שמתאר אותה. התא הממוקד מקבל טבעת עדינה, תג inline עוקב אחר מצב (Reading Applying Running Done, או Failed עם שגיאה מובנית), כפתור diff פותח את ההבדל המדויק לפני/אחרי, וכל פלט שהסוכן ייצר מסומן בחותמת זמן במקומו. האדם לעולם לא צריך לשאול "מה עשית הרגע?", המסמך עונה על זה בשידור חי.
שיתוף פעולה דו-כיווני בלי העתקות צל
הצבעה היא דו-כיוונית: סמן טקסט עם העכבר ואמור "תקן רק את מה שסימנתי", הסוכן קורא את תת-המחרוזת המדויקת. קרנל אחד, מסמך אחד: הסוכן מריץ תאים על הקרנל שכבר טעון בנתונים שלך, בלי עותק צל בשום מקום. האדם תמיד מנצח בקונפליקט: כל כלי משנה דורש hash מקור מקריאה קודמת, וכתיבה מיושנת נדחית עם שגיאה מובנית, לעולם לא נדרסת בשקט. המחברת נשארת הרשומה: הסוכן לא יכול להריץ קוד שרירותי, רק תאים שכבר קיימים ונראים לעין. הבעלים מחליט מה הסוכן רשאי לגעת, פר תא ופר מחברת, כתיבה, קריאה, או מוסתר לגמרי. הדף לא מזריק בקשות הרשאה משלו; חוויית ההרשאה נשארת בלקוח WebMCP.
מצב סקירה: שינויים ממתינים לאישור לפני שמתבצעים
הופכים את פאנל הסוכן מ-Direct ל-Propose ו-jupyter_update_cell מפסיק ליישם בשיחה: השינוי מועמד כ-diff בר-סקירה inline, מתחת לתא היעד, עם כפתורי Accept ו-Deny, קריאת הכלי לא נפתרת עד שאתה מחליט. Accept מיישם את העריכה דרך אותו נתיב קוד ש-Direct משתמש בו, כך שעדיין יש רק מקום אחד שבו מקור של תא נכתב אי-פעם. Deny מחזיר סיבה שהקלדת, כתוצאה רגילה המקודדת PROPOSAL_DENIED במקום שגיאה, כך שהתור הבא של הסוכן יודע למה, לא רק שנאמר לו לא.