DSH reserves the entire DSH_ prefix for host bootstrap settings: dsh-app-boot (BOOTSTRAP_PREFIXES) throws on the first DSH_* name it finds in a .env file, rejects the whole file, and `dsh web` aborts before any plugin loads. A user who pointed this plugin at their OpenPencil install the way DSH teaches — DSH_OPENPENCIL_BINARY in ~/.dsh/.env or the working directory's .env — took the host down instead. Reported as issue #6, which also correctly identified it as a structural, family-wide trap: ~20 variables across 7 plugins. All user-facing overrides take the DSHPLUGIN_ prefix: BINARY, DESKTOP, JIAN, EDITOR_BINARY, EDITOR_WEB_BUNDLE_DIR, EDITOR_CANVASKIT_DIR, VIEWER_ASSET_DIR and VIEWER_SOURCE, in code and in all 15 READMEs. The reporter proposed dropping the prefix entirely; DSHPLUGIN_ keeps a greppable family namespace without matching the literal DSH_ rule, and avoids handing generic names to a user's environment. DSHP_ was rejected as one keystroke from the fatal prefix. DSH_OPENPENCIL_SOURCE_ROOT keeps its name: verify-platform-packages.mjs already accepts the unprefixed OPENPENCIL_SOURCE_ROOT beside it. Several of these name executables the plugin launches, so moving them out of the reserved namespace makes them settable from a WORKING-DIRECTORY .env — a file that arrives with a clone. That is a deliberate, documented consequence of the family-wide rule, and part of what we are raising upstream. - src/plugin-env.ts: the shared reader. The new name wins BY PRESENCE, not truthiness — an empty new value means "no override" and must not resurrect a stale legacy value — then the legacy name. A legacy name warns once per process, printing names and precedence, never the value (a filesystem path). - Legacy names are read through all of 0.x and removed in the first 1.0.0 prerelease. Reading them cannot make them work in a .env file, which is why the warning says REPLACE the old assignment rather than add the new one. NOT VERIFIED — this repository does not currently build. It still imports APIs that DSH 0.1.5 removed (JsonValue from dsh-tools, DetailsToolOwnerProps, Session.events): 10 TS errors, identical before and after this change and none in the files it touches. With noEmitOnError set, tsc emits nothing, so the existing test suites run against a stale September 6 build and cannot say anything about this change. The 0.1.5 migration has to land before this is released; the sibling plugins are already migrated and their equivalents of this change are verified. Claude-Session: https://claude.ai/code/session_01Bnf63EbDp8SMUxWr6pnHHd
43 KiB
DSH OpenPencil
ปลั๊กอิน DeepSeek Harness สำหรับ OpenPencil — ดูตัวอย่าง ตรวจสอบ และแก้ไขเอกสาร .op จริงภายในบทสนทนา
พรีวิวหลายเฟรมที่แม่นยำ • แคนวาสแบบอินเทอร์แอกทีฟ • โปรแกรมแก้ไขแบบจัดการ • เครื่องมือออกแบบสำหรับ Agent โดยเฉพาะ
npm: @zseven-w/dsh-openpencil · เวอร์ชันปลั๊กอินปัจจุบัน: 0.1.0-rc.7 · ทดสอบถึง DSH 0.1.1-rc.2
English · 简体中文 · 繁體中文 · 日本語 · 한국어 · Français · Español · Deutsch · Português · Русский · हिन्दी · Türkçe · ไทย · Tiếng Việt · Bahasa Indonesia
พรีวิวหลายเฟรม .op ที่แม่นยำ พร้อมแคนวาสแบบอินเทอร์แอกทีฟและเวิร์กเบนช์โปรแกรมแก้ไขแบบจัดการ
ทำไมต้อง DSH OpenPencil
DSH OpenPencil เชื่อมต่อ DeepSeek Harness เข้ากับ OpenPencil เพื่อให้ Agent ขับเคลื่อนแคนวาสออกแบบจริงที่แก้ไขได้และโต้ตอบได้ แทนที่จะส่งกลับเป็นเพียงรูปภาพที่ถูกสร้างขึ้น
🖼️ พรีวิวหลายเฟรมที่แม่นยำตัวส่งออกแบบ headless ของ OpenPencil ที่ติดตั้งไว้จะเรนเดอร์พรีวิวที่ตรงตามงานออกแบบ: เฟรมระดับบนสุดเฟรมแรกเป็น PNG ขนาดใหญ่ที่เล่นซ้ำได้อย่างปลอดภัย พร้อมแถบภาพขนาดย่อที่เลื่อนแนวนอนได้ คลิกเพื่อเลือก และปุ่มนำทางก่อนหน้า/ถัดไปสำหรับเอกสารหลายเฟรม |
🗺️ แคนวาสแบบอินเทอร์แอกทีฟคำสั่ง "Open interactive canvas" จะโหลด OpenPencil Web SDK แบบอ่านอย่างเดียวแบบ lazy พร้อมการแพน ซูม และจัดให้พอดี — ตรวจสอบหน้าใด ๆ โหนดที่ซ้อนกัน หรือหน้าที่ไม่ได้ใช้งานได้โดยไม่ต้องออกจากบทสนทนา |
✏️ โปรแกรมแก้ไขแบบจัดการเมื่อตั้งค่า |
🤖 เครื่องมือออกแบบสำหรับ Agent โดยเฉพาะเครื่องมือจัดการแคนวาสโดยตรงห้าตัวและเครื่องมือ |
🔐 การอนุญาตแบบกำหนดด้วยความสามารถสิทธิ์ภาพและเอกสารเป็นความสามารถที่ลงนามและผูกกับแฮช เมตาดาต้าในเบราว์เซอร์ไม่เปิดเผยพาธของโฮสต์ตามอำเภอใจ และความสามารถพรีวิว/แก้ไขที่ลงนามจะไม่เข้าไปในผลลัพธ์เครื่องมือหลักหรือบริบทของโมเดล |
⚡ ความปลอดภัยแบบ Transactionalเอกสารใน pipeline เต็มรูปแบบจะคงเป็น draft ส่วนตัวที่ยังไม่เผยแพร่จนกว่าจะผ่าน quality gate ทั้งหมดของ native runtime และ DSH การเผยแพร่จะไม่เขียนทับพาธที่มีอยู่ และการยกเลิกหรือ batch ที่ล้มเหลวจะไม่ทิ้ง target ว่างไว้ |
🌍 ตามรูปลักษณ์และความรู้สึกของ DSHการ์ดเครื่องมือและโปรแกรมแก้ไขแบบจัดการเป็นไปตามภาษา จีน/อังกฤษ และธีมสว่าง/มืดของ DSH โดยไม่ต้องโหลดเซสชันการแก้ไขใหม่ |
🎯 เวิร์กโฟลว์ครบวงจรเดียว"ความต้องการ → private live canvas ใน sidebar → semantic batches สองชุดพร้อม exact PNG สำหรับผู้ใช้ → deterministic quality gates ของ native/DSH → เผยแพร่แบบ atomic" — วงจรที่ครบถ้วนภายใน DSH |
ติดตั้งลงใน DSH
DSH เป็นแพ็กเกจแยกต่างหาก ถ้ายังไม่มีให้ติดตั้งหนึ่งครั้ง:
npm install -g @deepseek-ai/dsh@latest
จากนั้นเพิ่มปลั๊กอินเข้าโปรไฟล์แล้วเริ่มเว็บแอป:
dsh plugin --profile web add @zseven-w/dsh-openpencil@next
dsh web
สำหรับการพัฒนาในเครื่อง ให้ build checkout นี้ เชื่อม path แบบ absolute เข้ากับโปรไฟล์ Web แล้วรีสตาร์ท DSH ทั้งหมด:
pnpm run build
dsh plugin --profile web add link:/absolute/path/to/dsh-openpencil
dsh web
dependency แบบ link: ทำให้ผลการ build ครั้งถัดไปมองเห็นได้โดยตรงจาก checkout นี้ แต่ต้องรีสตาร์ท DSH ทั้งหมดหลังเปลี่ยน dependency ของโปรไฟล์ เพราะโปรไฟล์ Web ที่ให้มาไม่ได้ hot-reload bundle ฝั่ง host โดยค่าเริ่มต้น
ไม่อยากติดตั้ง DSH แบบ global? รันสองขั้นตอนเดียวกันผ่าน pnpm dlx:
pnpm dlx --package=@deepseek-ai/dsh@latest dsh plugin --profile web add @zseven-w/dsh-openpencil@next
pnpm dlx --package=@deepseek-ai/dsh@latest dsh web
ปลั๊กอิน OpenPencil เป็นแบบสาธารณะและไม่ต้องใช้ npm token หาก DSH prerelease เองต้องมีการยืนยันตัวตนของ registry ให้เก็บข้อมูลรับรองนั้นไว้ใน npm config ระดับผู้ใช้หรือชั่วคราวนอก checkout ที่เก็บนี้ตั้งใจไม่ให้มีข้อมูลรับรอง registry ใด ๆ
เครื่องมือออกแบบ
| เครื่องมือ | หน้าที่ |
|---|---|
openpencil_new |
เส้นทางด่วนที่เข้ากันได้สำหรับงานง่าย: รันสคริปต์ QuickJS batch_design แบบ transactional หนึ่งชุด เผยแพร่เมื่อ target ยังไม่มีเท่านั้น และคืน presentation ที่แก้ไขได้ สำหรับงาน production ควรใช้ pipeline เต็มรูปแบบด้านล่าง |
openpencil_pipeline_begin |
เริ่ม draft ส่วนตัวของเซสชันพร้อม root เพียงตัวเดียว เปิด live canvas เดียวกันใน sidebar ทันที และคง target .op ไว้โดยยังไม่เผยแพร่ |
openpencil_pipeline_context |
โหลด guideline, style, theme หรือรายละเอียด UI kit แบบจำกัดเพียงหนึ่งรายการเมื่อ begin contract ขาดจริงเท่านั้น ไม่ใช่ startup refresh loop |
openpencil_pipeline_batch |
รันสคริปต์สร้างแบบ QuickJS โดยตรงได้สูงสุดสองชุด แต่ละ transaction ที่สำเร็จเพียงพยายามแสดง exact PNG ให้ผู้ใช้ เมื่อเครื่องมือคืนผลให้ทำตาม next ทันที |
openpencil_pipeline_inspect |
ให้ manual diagnostic เฉพาะเมื่อผู้ใช้ร้องขออย่างชัดเจน การสร้างตามปกติจะไม่ใช้เป็นขั้นตอน preview หรือให้โมเดลตรวจภาพ |
openpencil_pipeline_finish |
รัน deterministic gates ของ native และ DSH เรนเดอร์ exact PNG หลัง finalization และเผยแพร่แบบ atomic ด้วย createIfAbsent อนุญาต U-only repair หนึ่งครั้งและ finish ครั้งสุดท้ายเฉพาะเมื่อผลเป็น needs_correction, canContinue: true, มี repairTargets ครบและไม่ว่าง และ omitted: 0; ผลอื่นที่ยังไม่เผยแพร่ถือเป็น terminal |
openpencil_pipeline_abort |
ทิ้ง draft ที่ยังไม่เผยแพร่โดยไม่สร้างไฟล์ target |
openpencil_create |
ใช้โปรแกรม batch_design แบบ transactional เพื่อสร้างหรือจัดโครงสร้างโหนดใหม่บนแคนวาสสดที่มีอยู่ |
openpencil_edit |
แก้ไขโหนดที่ระบุชัดเจนหรือโหนดเดียวที่ผู้ใช้เลือก |
openpencil_render |
สร้างสแนปช็อต .op แบบ immutable และอ้างอิงตามเนื้อหา แล้วเรนเดอร์เฟรมระดับบนสุดทุกเฟรมบนหน้าที่ใช้งานอยู่ — รองรับ scale และ editable แบบไม่บังคับ |
openpencil_selection |
อ่านโหนดที่เลือกอยู่จริงในแคนวาสของโปรแกรมแก้ไขสด |
เวิร์กโฟลว์การออกแบบของ Agent
สำหรับการสร้างตามปกติให้ใช้เส้นทางสั้นแบบตายตัว: openpencil_pipeline_begin → openpencil_pipeline_batch แบบ QuickJS โดยตรงสองครั้ง → openpencil_pipeline_finish หนึ่งครั้ง Begin สร้าง root เพียงตัวเดียวและเปิด private live canvas ใน sidebar ทันที โดยพาธ workspace ที่ขอจะยังไม่มีอยู่จนกว่าการเผยแพร่จะสำเร็จ หลัง begin หรือ batch สำเร็จแต่ละครั้ง ให้เรียกขั้นตอนถัดไปทันทีโดยไม่มีคำบรรยาย การวางแผน การเปรียบเทียบ การตรวจสอบ หรือเครื่องมือที่ไม่เกี่ยวข้อง ค่าเริ่มต้นคือใช้ image เพียงหนึ่งรายการทั้ง design และแต่ละ Hero/Product/Art/Media frame มี primary visual เพียงหนึ่งอย่าง ห้ามวาง image คู่กับ placeholder icon
batch ที่สำเร็จทั้งสองชุดจะพยายามแสดง exact PNG preview ให้ผู้ใช้ เมื่อเครื่องมือคืนผลให้ทำตาม next ทันที หาก next รายงาน previewUnavailable แสดงว่าสคริปต์ commit ลง live canvas แล้ว ห้ามรัน batch ซ้ำ และห้ามเรียก openpencil_pipeline_inspect หรือ read_image โดย openpencil_pipeline_inspect ใช้เฉพาะ diagnostic ที่ผู้ใช้ร้องขออย่างชัดเจน
Finish รัน native finalization, lint, contrast และ layout checks ของ OpenPencil พร้อม deterministic quality gates ของ DSH แล้วเรนเดอร์ exact final PNG และเผยแพร่ target แบบ atomic ใน healthy call เดียว อนุญาต repair เฉพาะเมื่อผลมี stage: "needs_correction", canContinue: true, repairTargets ที่ครบและไม่ว่างพร้อม omitted: 0 และทุก target มี operation: "U", nodeId ที่ตรงและไม่ว่าง และ patch ที่ไม่ว่าง ให้นำ target ทั้งหมดไปใช้พร้อมกันใน U-only batch เพียงหนึ่งครั้ง แล้วเรียก finish ครั้งสุดท้ายอีกหนึ่งครั้งโดยไม่มีคำบรรยาย ผลอื่นที่ยังไม่เผยแพร่ error หรือ canContinue: false ถือเป็น terminal: รายงานครั้งเดียวและห้าม retry, inspect, อ่าน image/context, abort หรือสร้าง draft ใหม่ หาก gate ล้มเหลวหรือเรียก openpencil_pipeline_abort จะไม่สร้าง target exact final PNG และ live editor ใน published result เป็น authoritative อยู่แล้ว ให้คืนผลและจบทันที sidebar จะ auto-open เฉพาะเมื่อ idle และยังมี แก้ไขแคนวาส สำหรับสลับอย่างชัดเจนเสมอ
ภายใน DSH service เดิมที่ยังทำงานอยู่ เมื่อเปลี่ยน browser หรือ reload จะสามารถกู้ strictly parsed durable publication จาก openpencil_new หรือ openpencil_pipeline_finish กลับมาเป็น exact PNG พร้อม action แก้ไขแคนวาส ที่ชัดเจน การ์ดประวัติจะไม่ auto-open sidebar ผู้ใช้ต้องคลิก action นี้เอง openpencil_render แบบประวัติทั่วไปยังคง read-only และ connection ที่ไม่ใช่ loopback จะไม่ได้รับ editor grant
skill openpencil-design ที่บันเดิลมายังคงเป็นคู่มือด้าน scripting และคุณภาพ ส่วน runtime แบบจัดการไม่ขึ้นกับไบนารีเดสก์ท็อป openpencil_new ยังคงเป็นเส้นทางด่วนแบบ single-batch ที่เข้ากันได้ แต่งานสร้างระดับ production ควรเลือก pipeline เต็มรูปแบบ
ใช้ openpencil_create และ openpencil_edit เฉพาะกับแคนวาสสดที่มีอยู่เท่านั้น การแก้ไขของทั้งคู่จะยังไม่ถูกบันทึกจนกว่าผู้ใช้จะกดบันทึกในโปรแกรมแก้ไข
สินทรัพย์ Web Viewer
DSH ให้บริการเฉพาะ client.js สำหรับปลั๊กอินฝั่งไคลเอนต์ ดังนั้น OpenPencil ESM SDK, WASM และ CanvasKit จึงถูกจัดเตรียมเป็นสินทรัพย์ same-origin อย่างชัดเจน:
pnpm run sync:viewer-assets
คำสั่ง sync จะเลือกใช้ checkout ../openpencil ที่อยู่ข้างเคียง (การพัฒนาท้องถิ่น) เป็นอันดับแรก และใช้ submodule vendor/openpencil ที่ vendor ไว้เป็นตัวสำรอง (CI และการ clone ใหม่) ใช้ OPENPENCIL_ROOT หรือ --openpencil-root เพื่อแทนที่ ไลบรารีสินทรัพย์ที่ build ไว้ล่วงหน้าทั้งหมดสามารถเลือกได้ด้วย DSHPLUGIN_OPENPENCIL_VIEWER_SOURCE และการค้นหาตอนรันสามารถแทนที่ได้ด้วย DSHPLUGIN_OPENPENCIL_VIEWER_ASSET_DIR
สินทรัพย์ viewer จะถูกโหลดแบบ lazy หลังจากผู้ใช้เปิดแคนวาสเท่านั้น หากสินทรัพย์ไม่มีหรือไม่ถูกต้อง พรีวิว PNG ยังคงใช้งานได้ และจะไม่มีการแสดงปุ่มแคนวาส
โปรแกรมแก้ไขแบบจัดการ
เซสชันที่แก้ไขได้ใช้ managed web host ของ OpenPencil — สถาปัตยกรรมเดียวกับที่ op-vscode ใช้ ปลั๊กอินจะเริ่ม host ก็ต่อเมื่อมีการกระทำของผู้ใช้ที่ได้รับอนุญาต เก็บโทเค็น daemon ไว้ในหน่วยความจำ ตรวจสอบ source และ origin ของ iframe และปิดโพรเซสเมื่อเซสชันของโปรแกรมแก้ไขสิ้นสุด พื้นผิวตัวแก้ไขจะถูกเลือกแบบค่อยเป็นค่อยไป: รายละเอียดเครื่องมือแบบเนทีฟเมื่อ host ประกาศจุดเชื่อมต่อนั้น มิฉะนั้นจะใช้เวิร์กเบนช์ด้านขวาของปลั๊กอินพร้อมการปรับขนาดและปุ่มเต็มหน้าจอ
การเริ่มทำงานใช้ listening handshake ที่ปลอดภัยสำหรับ mount ที่ช้า โดยจะเริ่ม probe ความพร้อมหลังจาก host ที่มากับแพ็กเกจประกาศ address ที่ bind แล้วเท่านั้น ไม่ต้องติดตั้ง OpenPencil เดสก์ท็อป
การติดตั้งรุ่นเผยแพร่จะเลือกแพ็กเกจที่ตรงกับ OS/CPU ปัจจุบันจากแพ็กเกจแพลตฟอร์มเนทีฟหกแพ็กเกจ ได้แก่ darwin-arm64, darwin-x64, linux-arm64, linux-x64, win32-arm64 และ win32-x64 โดยแพ็กเกจ Linux ทั้งสองใช้ glibc แพ็กเกจรากประกาศแพ็กเกจเหล่านี้เป็น optionalDependencies แบบระบุเวอร์ชันตรงตัว เพื่อให้ตัวจัดการแพ็กเกจเลือกตัวแปรที่ถูกต้อง (เช่น @zseven-w/dsh-openpencil-darwin-arm64) แพ็กเกจนี้จัดส่ง op-host-web-server, เว็บบันเดิลของโปรแกรมแก้ไข และ CanvasKit ที่เข้าชุดกันเป็น runtime เดียว ดังนั้นโปรแกรมแก้ไขแบบจัดการจึงไม่ต้องพึ่ง /Applications/OpenPencil.app, openpencil-desktop ใน PATH หรือ checkout ซอร์สของ OpenPencil
หาก DSH โหลดซ้ำหรือยกเลิกการโหลดปลั๊กอินในขณะที่แคนวาสยังไม่บันทึก host จะเก็บร่างกู้คืนในเครื่องแบบ opaque ไว้นานสูงสุดเจ็ดวัน การเปิด source เดียวกันซ้ำจะถามก่อนกู้คืนลงในแคนวาสสด การกู้คืนจะไม่เขียนทับไฟล์ .op จนกว่าผู้ใช้จะบันทึกอย่างชัดเจน
แพ็กเกจอย่างเป็นทางการสำหรับทั้งหกแพลตฟอร์มจะได้รับการฉีด endpoint bootstrap สำหรับการทำงานร่วมกันในจีนและทั่วโลกระหว่าง build release ที่ได้รับการป้องกัน และค่าที่ฉีดจะถูกตรวจสอบก่อนเผยแพร่ สำหรับ build ที่สร้างเองในเครื่องโดยไม่มีการฉีดนี้ สามารถ override bootstrap ก่อนเริ่ม DSH ด้วย OPENPENCIL_COLLAB_BOOTSTRAP_URL=https://<your-host>/api/v1/collaboration/bootstrap โดยค่าต้องใช้ https และ path ต้องเป็น /api/v1/collaboration/bootstrap อย่างเคร่งครัด
การซิงค์แคนวาสข้ามอุปกรณ์กำหนดให้ทั้ง runtime เนทีฟของ PC/DSH และแอปมือถืออัปเดตเป็นสาย release เดียวกันของ OpenPencil ที่มีการแก้ไขคิวการทำงานร่วมกันปัจจุบัน การใช้แอปมือถือรุ่นเก่าร่วมกับ runtime PC รุ่นใหม่กว่าอาจยังเห็นเคอร์เซอร์ระยะไกล แต่ไม่ได้รับ commit ของแคนวาส
เมื่อพัฒนาจาก repository นี้ ก่อนเริ่ม DSH ให้ build Web bundle ของโปรแกรมแก้ไขก่อน ตามด้วย native host แล้วจึง stage runtime ชุดที่ตรงกัน
pnpm run build:editor-web จะเรียก WASM bundle gate ที่ OpenPencil รองรับอย่างเป็นทางการ โดยต้องมี Bash, Cargo/Rust พร้อม target wasm32-unknown-unknown, CLI wasm-bindgen, wasm-opt จาก Binaryen, Node.js และ gzip; CanvasKit ไม่ต้องใช้ EMSDK Web build จะไม่ใช้ตัวแปร build ของ bootstrap สำหรับการทำงานร่วมกัน ก่อนเรียก pnpm run build:editor-runtime ต้องตั้งค่าทั้ง OPENPENCIL_BUILD_COLLAB_BOOTSTRAP_URL_CN และ OPENPENCIL_BUILD_COLLAB_BOOTSTRAP_URL_GLOBAL ตัวแปรเหล่านี้ใช้เฉพาะกับ native Cargo build ซึ่งจะ fail closed หากขาดตัวใดตัวหนึ่ง หลังจากทั้งสอง build สำเร็จแล้ว ให้ stage runtime ด้วยคำสั่งสุดท้าย
pnpm run build:editor-web
pnpm run build:editor-runtime
pnpm run stage:editor-runtime
การ override runtime โดยระบุเองจะยอมรับเฉพาะเมื่อให้ครบทั้งชุดที่ตรงกัน:
DSHPLUGIN_OPENPENCIL_EDITOR_BINARYสำหรับop-host-web-server;DSHPLUGIN_OPENPENCIL_EDITOR_WEB_BUNDLE_DIRสำหรับเว็บบันเดิลของโปรแกรมแก้ไขที่ build แล้ว;DSHPLUGIN_OPENPENCIL_EDITOR_CANVASKIT_DIRสำหรับสินทรัพย์ CanvasKit
การให้เพียงบางรายการถือเป็นการกำหนดค่าที่ไม่ถูกต้อง ปลั๊กอินจะไม่ผสม path ที่กำหนดเองกับสินทรัพย์ runtime ที่มากับแพ็กเกจ
การบันทึกใช้แฮช source แบบ optimistic การแทนที่แบบ atomic และความสามารถของผู้สืบทอด หาก source เปลี่ยนแปลงนอกโปรแกรมแก้ไข ปลั๊กอินจะรายงานความขัดแย้งแทนที่จะเขียนทับ
เมตาดาต้าของผลลัพธ์
ผลลัพธ์ที่โมเดลมองเห็นยังคงเป็น JSON ธรรมดา presentationMeta.$dshOpenPencil สำหรับเบราว์เซอร์เท่านั้นถือสิทธิ์แบบเพิ่มเติมสำหรับ:
image: พาธ PNG, URL พรีวิว/ดาวน์โหลด และความกว้าง/ความสูงจริง;frames: เฟรมระดับบนสุดทุกเฟรมที่เรนเดอร์อย่างแม่นยำตามลำดับหน้าที่ใช้งานอยู่ รวมถึง node id/name/index และ URL PNG ที่ลงนาม;document: พาธการกระทำ source พร้อม URL สแนปช็อตแบบ immutable, ขนาดไบต์ และ SHA-256;viewer: URL SDK/WASM/CanvasKit แบบมีรุ่นเมื่อเชื่อมต่อเส้นทางสินทรัพย์;editor: ความสามารถเปิด/รีเฟรชแบบจำกัดขอบเขตเมื่อeditable: trueได้รับอนุญาต
ผลลัพธ์ยังบันทึก renderer, rendererBinary, fidelity และคำเตือนใด ๆ ข้อความ schema-v1 ที่เป็น PNG เท่านั้นยังคงเรนเดอร์ได้
DSH 0.1.1-rc.2 จะไม่คงเมตาดาต้าการนำเสนอในเบราว์เซอร์สำหรับเครื่องมือที่ซ้อนอยู่ใต้ PTC/Code Mode ปลั๊กอินจะกู้คืน projection แบบ UI-only นั้นผ่าน endpoint แบบ same-origin ที่ผูกกับเซสชัน: เบราว์เซอร์ส่งเฉพาะ session id, call id และ SHA-256 ของเอกสารแบบ immutable ในขณะที่ host แก้ไขผลลัพธ์ฉบับหลักจากบันทึกเซสชัน DSH ที่ทนทาน และใช้ marker ในโพรเซสอายุสั้นเพื่ออนุญาตการแก้ไขสดล่าสุดเท่านั้น ความสามารถพรีวิว/แก้ไขที่ลงนามจะไม่เข้าไปในผลลัพธ์เครื่องมือหลักหรือบริบทของโมเดล durable history ของ openpencil_render ทั่วไปยังคง read-only ส่วน strictly parsed durable publication จาก openpencil_new หรือ openpencil_pipeline_finish จะได้รับ editor grant ได้เฉพาะผ่าน loopback และหลังผู้ใช้คลิกอย่างชัดเจนเท่านั้น การ auto-open sidebar สงวนไว้สำหรับ recent trusted live results
สำหรับการเล่นซ้ำแบบจำกัดขอบเขต การกู้คืนเมตาดาต้าแบบซ้อนยอมรับเฟรมระดับบนสุดสูงสุด 128 เฟรม ผลลัพธ์ Code Mode ที่ใหญ่กว่ายังคงเข้าถึงได้ผ่าน canonical JSON fallback
ข้อจำกัดปัจจุบัน
- การแก้ไขต่อเนื่องบนแคนวาสที่มีอยู่ต้องมีโปรแกรมแก้ไขแบบจัดการที่เปิดไว้แล้ว การเปลี่ยนแปลงจะยังไม่ถูกบันทึกจนกว่าผู้ใช้จะเรียกใช้การบันทึก
- แคนวาส Web SDK แบบน้ำหนักเบาเป็นแบบอ่านอย่างเดียว การแก้ไขเต็มรูปแบบใช้พื้นผิวโปรแกรมแก้ไขแบบจัดการแยกต่างหาก บน DSH
0.1.1-rc.2ปลั๊กอินใช้เวิร์กเบนช์ด้านขวาที่ปรับขนาดได้พร้อมตัวเลือกเต็มหน้าจอ - แกลเลอรีที่แม่นยำครอบคลุมเฟรมระดับบนสุดบนหน้าที่ใช้งานอยู่ แคนวาสแบบอินเทอร์แอกทีฟยังคงเป็นวิธีตรวจสอบหน้าที่ไม่ได้ใช้งานและโหนดที่ซ้อนกัน
- แคชการเรนเดอร์และสแนปช็อตยังต้องมีนโยบายการเก็บรักษาระดับผลิตภัณฑ์
โครงสร้างโปรเจกต์
dsh-openpencil/
├── src/ Plugin sources (TypeScript)
│ ├── index.ts Host plugin entry — Cordis service, tools, assets
│ ├── tool.ts / design-tools.ts / new-tool.ts Host-side design tools
│ ├── renderer.ts Exact OpenPencil renderer + Jian fallback
│ ├── editor-host.ts / editor-recovery.ts Managed editor lifecycle + drafts
│ ├── viewer-assets.ts Web SDK / WASM / CanvasKit asset staging
│ ├── mcp-client.ts OpenPencil MCP connection
│ └── client/ Browser client — React workbench, gallery, selection dock
├── lib/ Compiled output (published to npm)
├── scripts/ Build helpers — viewer asset sync, client build, host tests
├── tests/ Node test suites (client, host API, MCP, viewer assets)
├── docs/images/ Documentation screenshots
├── vendor/openpencil/ OpenPencil checkout (git submodule — viewer asset source)
├── cordis.patch.yml DSH bundle patch that mounts the plugin
├── tsconfig.json Host / Node TypeScript config
└── tsconfig.client.json Browser client TypeScript config
Build และตรวจสอบ
pnpm run sync:viewer-assets
pnpm run build
pnpm run test:viewer-assets
pnpm run test:client
pnpm run test:host /absolute/path/to/design.op 375 1091
การ build ต้องใช้ Node 24.11 ขึ้นไปและ pnpm แพ็กเกจ host/client ของ DSH เป็น peer dependencies ที่มาจากโปรไฟล์ DSH เป้าหมาย เครื่องมือ build ถูกแก้ไขจาก dev dependencies ในเครื่อง, checkout DSH ที่ลิงก์อยู่ หรือ DSH source bundle ที่ติดตั้งไว้; DSH_SOURCE_ROOT สามารถเลือก source checkout ได้อย่างชัดเจน ล็อกไฟล์จะตรึงเครื่องมือ build สาธารณะแบบ standalone เมื่อสภาพแวดล้อมนั้นถูกจัดเตรียมแยกต่างหาก
สำหรับ DSH prerelease ส่วนตัว ให้เก็บข้อมูลรับรอง npm ที่ออกให้ไว้นอกที่เก็บนี้ (เช่นใน .npmrc ระดับผู้ใช้หรือชั่วคราว) และรันเวอร์ชันที่ต้องการโดยตรง:
pnpm dlx --package=@deepseek-ai/dsh@latest dsh web
ห้าม commit .npmrc, NPM_TOKEN หรือข้อมูลรับรอง registry ที่คัดลอกมา ที่เก็บนี้ละเว้นการกำหนดค่า npm ในเครื่องตามค่าเริ่มต้น
test:host ทำการเรนเดอร์ที่แม่นยำจริง ตรวจสอบเรขาคณิต PNG IHDR และ SHA-256 ทดสอบความสามารถภาพ/เอกสารแบบ immutable ผ่าน HTTP และตรวจสอบว่าสินทรัพย์ viewer อนุญาตได้ ขนาดที่คาดหวังขึ้นอยู่กับฟิกซ์เจอร์แต่ละชุด
ระบบนิเวศ
DSH OpenPencil คือปลั๊กอิน DeepSeek Harness สำหรับ OpenPencil — เครื่องมือออกแบบเวกเตอร์แบบ AI-native โอเพนซอร์สตัวแรกของโลก — และเป็นส่วนหนึ่งของตระกูล ZSeven-W เครื่องมือแบบ AI-native ที่เขียนด้วย Rust บริสุทธิ์
| โปรเจกต์ | คำอธิบาย |
|---|---|
| OpenPencil | เครื่องมือออกแบบที่ปลั๊กอินนี้ขับเคลื่อน — การสร้าง prompt-to-canvas, ทีม agent แบบทำงานพร้อมกัน, ไฟล์ .op แบบ design-as-code และ MCP server ในตัว พรีวิวที่แม่นยำ แคนวาสแบบอินเทอร์แอกทีฟ และโปรแกรมแก้ไขแบบจัดการที่นี่ขับเคลื่อนโดย OpenPencil เอง |
| agent-rs | รันไทม์ async แบบ Rust บริสุทธิ์สำหรับส่งมอบ LLM agent — รองรับหลายผู้ให้บริการ, มีความสามารถใช้เครื่องมือแบบ end-to-end, การอนุญาตแบบมีโครงสร้าง, MCP จริง, unsafe เป็นศูนย์ ขับเคลื่อนรันไทม์ agent ในตัวของ OpenPencil |
| jian | เฟรมเวิร์ก UI แบบ GPU-Skia และ Rust บริสุทธิ์ — วิดเจ็ต เลย์เอาต์ อีเวนต์ และ hot reload ในสแตกเดียว เป็นเฟรมเวิร์ก UI ของ OpenPencil และเป็นที่มาของตัวเรนเดอร์ fallback ของปลั๊กอินนี้ |
| Zode | ผู้ช่วยเขียนโค้ดแบบ AI-native โอเพนซอร์สสำหรับเทอร์มินัลของคุณ — อ่านโค้ดของคุณ รันคำสั่ง และขับเคลื่อน OpenPencil ผ่าน MCP |
| noema | ระบบหน่วยความจำแบบ local-first ที่ไม่ใช่เวกเตอร์สำหรับ coding agent — หน่วยความจำที่ทนทานในรูปไฟล์ที่ตรวจสอบได้ ทำงานได้ข้ามรันไทม์ |
| openpencil-skill | ปลั๊กอินทักษะ LLM ที่สอน AI agent วิธีออกแบบด้วย op — คู่หูของปลั๊กอิน DSH นี้ |
ปลั๊กอิน DSH อื่นในตระกูลเดียวกัน:
- DSH Android — อีมูเลเตอร์ Android หรืออุปกรณ์ผ่าน USB แบบสดภายในบทสนทนา ขับเคลื่อนทั้งหมดผ่าน adb
- DSH Crew — มอบหมายงานให้เอเจนต์ DSH จาก Claude Code / Codex
- DSH iOS — iOS Simulator ที่ทำงานจริง — และ iPhone ที่ต่อผ่าน USB — ภายในบทสนทนา
- DSH Noema — หน่วยความจำระยะยาวสำหรับ DSH
การมีส่วนร่วม
ยินดีต้อนรับการมีส่วนร่วม! Fork และ clone สร้าง branch รัน pnpm run build และชุดทดสอบ commit ด้วย Conventional Commits และเปิด PR ไปที่ main
ชุมชน
ชุมชนที่ได้รับการยอมรับ: LINUX DO
สัญญาอนุญาต
MIT — ลิขสิทธิ์ (c) 2026 ZSeven-W
คอมโพเนนต์ของบุคคลที่สามระบุไว้ใน THIRD_PARTY_NOTICES.md

