Pascal Editor: ویرایشگر سهبعدی ساختمان، متنباز و local-first
خلاصهٔ کاملتر
Pascal Editor یه ادیتور سهبعدی ساختمانِ متنباز و local-first هست، یعنی دادهها اول روی سیستم خودت نگه داشته میشن. با React Three Fiber (یعنی نوشتن صحنهٔ Three.js به شکل کامپوننت React) و WebGPU ساخته شده. هم توی مرورگر اجرا میشه هم از CLI. ایجنتهای هوش مصنوعی هم از طریق MCP (یه پروتکل استاندارد برای وصل کردن ابزار به مدلهای هوش مصنوعی) بهش وصل میشن. تیم سازنده یه دموی آنلاین از نسخهٔ بعدی به اسم Pascal Next هم گذاشته که هنوز جزو نسخهٔ متنباز نیست.
برای اجرای محلی، Node.js نسخهٔ 22.13 یا بالاتر لازمه و دستور npx @pascal-app/cli editor کافیه. CLI ادیتور و یه سرویس MCP احراز هویتشده رو توی پسزمینه بالا میاره و پروژهها رو توی ~/.pascal/data/pascal.db نگه میداره. برای وصل کردن ایجنت هم دستور pascal mcp connect هست. محدودیتش اینه که برای هر سرویس محلی فقط باید یه کلاینت ایجنت فعال باشه.
دو تا agent skill هم ارائه شده: pascal-3d برای راهاندازی امن MCP و کار روی صحنه، و furniture-fit که بررسی میکنه یه مبلمان توی فضا جا میشه یا نه، بدون اینکه ادعای بررسی ارتفاع یا مسیر باز شدن در رو بکنه. کاربرای Claude Code میتونن همینو بهصورت plugin نصب کنن که هم سرور محلی و هم سرور میزبانیشده رو با خودش میاره. سرور محلی به حساب کاربری یا API key نیاز نداره و پروژهها رو خودکار آپلود نمیکنه. Codex هم از همین ریپو plugin رو نصب میکنه.
ریپو یه monorepo با Turborepo هست. @pascal-app/core اسکیمای نودها و state صحنه رو با Zustand نگه میداره، @pascal-app/viewer رندر سهبعدی رو انجام میده، @pascal-app/editor ابزارهای ویرایش رو داره، و @pascal-app/mcp ابزارهای صحنه رو در اختیار ایجنتها میذاره. state صحنه توی IndexedDB ذخیره میشه و undo/redo تا ۵۰ قدم با Zundo پشتیبانی میشه.
مدل داده جالبه: نودها مثل Site و Building و Level و Wall بهجای یه درخت تودرتو، توی یه دیکشنری صاف (Record) نگه داشته میشن و رابطهٔ پدر و فرزند با parentId مشخص میشه. وقتی یه نود عوض میشه، اون نود dirty علامت میخوره. بعد Systemها که توی حلقهٔ رندر (useFrame) اجرا میشن فقط geometry همون نودها رو دوباره میسازن:
useScene.getState().updateNode(wallId, { thickness: 0.2 })
// → wallId added to dirtyNodes
// → WallSystem regenerates geometry next frame
// → wallId removed from dirtyNodesیعنی با هر تغییر کل صحنه دوباره حساب نمیشه و فقط قسمت تغییرکرده آپدیت میشه. یه registry هم ID هر نود رو به آبجکت Three.js ش وصل میکنه تا Systemها بدون گشتن توی کل scene graph بهش برسن. برخورد اشیا و اعتبارسنجی جایگذاری هم با spatialGridManager انجام میشه.
نکات کلیدی:
- متنباز، local-first و ساختهشده با React Three Fiber و WebGPU هست.
- اجرای محلی با npx @pascal-app/cli editor و Node.js 22.13 به بالا انجام میشه.
- ایجنتها از طریق MCP وصل میشن و برای Claude Code و Codex پلاگین آماده هست.
- برای هر سرویس محلی فقط یه کلاینت ایجنت فعال مجازه.
- نودها توی دیکشنری صاف ذخیره میشن و فقط نودهای dirty هر فریم دوباره ساخته میشن.
- undo/redo تا ۵۰ قدم با Zundo انجام میشه و state صحنه توی IndexedDB ذخیره میشه.




