Start Endor purpose discussion with object operation comparison
Verify and deploy Tabularium / verify-and-deploy (push) Successful in 5m27s

This commit is contained in:
2026-10-28 02:41:29 +08:00
parent 2bfdc2d35a
commit 4c2618ec59
6 changed files with 520 additions and 0 deletions
+320
View File
@@ -0,0 +1,320 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
width="1800" height="1290" viewBox="0 0 1800 1290">
<defs>
</defs>
<title>Endor 的意义:从访问程序到操作对象的对比示意</title>
<rect x="0" y="0" width="1800" height="1290" fill="#fcfdfb" />
<text x="40" y="43" font-size="14" fill="#2d8b77" font-family="ui-sans-serif, system-ui, -apple-system, PingFang SC, Microsoft YaHei, sans-serif" font-weight="600" text-anchor="start">ENDOR / WHY OBJECTS</text>
<text x="40" y="90" font-size="31" fill="#233b38" font-family="ui-sans-serif, system-ui, -apple-system, PingFang SC, Microsoft YaHei, sans-serif" font-weight="600" text-anchor="start">从程序入口,到对象的操作权</text>
<text x="40" y="123" font-size="16" fill="#6d817c" font-family="ui-sans-serif, system-ui, -apple-system, PingFang SC, Microsoft YaHei, sans-serif" font-weight="400" text-anchor="start">一对概念图:改变用户与 AI 接触系统的基本单位。</text>
<text x="40" y="181" font-size="20" fill="#467fb4" font-family="ui-sans-serif, system-ui, -apple-system, PingFang SC, Microsoft YaHei, sans-serif" font-weight="600" text-anchor="start">01</text>
<text x="95" y="181" font-size="24" fill="#233b38" font-family="ui-sans-serif, system-ui, -apple-system, PingFang SC, Microsoft YaHei, sans-serif" font-weight="600" text-anchor="start">以程序为入口</text>
<text x="135" y="225" font-size="13" fill="#6d817c" font-family="ui-sans-serif, system-ui, -apple-system, PingFang SC, Microsoft YaHei, sans-serif" font-weight="600" text-anchor="middle">OS</text>
<text x="585" y="225" font-size="14" fill="#6d817c" font-family="ui-sans-serif, system-ui, -apple-system, PingFang SC, Microsoft YaHei, sans-serif" font-weight="500" text-anchor="middle">进程区 · 圆圈为进程中的对象</text>
<text x="1100" y="225" font-size="14" fill="#6d817c" font-family="ui-sans-serif, system-ui, -apple-system, PingFang SC, Microsoft YaHei, sans-serif" font-weight="600" text-anchor="middle">程序</text>
<text x="1615" y="225" font-size="14" fill="#6d817c" font-family="ui-sans-serif, system-ui, -apple-system, PingFang SC, Microsoft YaHei, sans-serif" font-weight="600" text-anchor="middle">用户入口</text>
<rect x="95" y="393" width="80" height="13" rx="3" fill="white" stroke="#6d817c" stroke-width="1.6" />
<circle cx="105" cy="399" r="1.5" fill="#6d817c" />
<path d="M118,399 L160,399" stroke="#6d817c" stroke-width="1.2" />
<rect x="95" y="411" width="80" height="13" rx="3" fill="white" stroke="#6d817c" stroke-width="1.6" />
<circle cx="105" cy="417" r="1.5" fill="#6d817c" />
<path d="M118,417 L160,417" stroke="#6d817c" stroke-width="1.2" />
<rect x="95" y="429" width="80" height="13" rx="3" fill="white" stroke="#6d817c" stroke-width="1.6" />
<circle cx="105" cy="435" r="1.5" fill="#6d817c" />
<path d="M118,435 L160,435" stroke="#6d817c" stroke-width="1.2" />
<text x="135" y="479" font-size="24" fill="#233b38" font-family="ui-sans-serif, system-ui, -apple-system, PingFang SC, Microsoft YaHei, sans-serif" font-weight="600" text-anchor="middle">OS</text>
<path d="M178,414 L250,414 L250,286 L300,286" fill="none" stroke="#467fb4" stroke-width="1.5" stroke-linejoin="round" />
<path d="M250,414 L250,545 L300,545" fill="none" stroke="#467fb4" stroke-width="1.5" stroke-linejoin="round" />
<path d="M250,414 L300,414" fill="none" stroke="#467fb4" stroke-width="1.5" stroke-linejoin="round" />
<rect x="300" y="237" width="570" height="98" rx="12" fill="#f7f9fb" stroke="#dce8e3" stroke-width="1.3" />
<text x="315" y="259" font-size="11" fill="#6d817c" font-family="ui-sans-serif, system-ui, -apple-system, PingFang SC, Microsoft YaHei, sans-serif" font-weight="400" text-anchor="start">2 个进程</text>
<rect x="465.0" y="271" width="112" height="53" rx="7" fill="white" stroke="#c6d8e7" stroke-width="1.3" />
<circle cx="527.8856869054117" cy="289.51556817425404" r="3" fill="#eff6f1" stroke="#467fb4" stroke-width="1.2" />
<circle cx="500.1311620521237" cy="295.9437078032061" r="3" fill="#eff6f1" stroke="#467fb4" stroke-width="1.2" />
<circle cx="528.4694281351696" cy="304.19663100787545" r="3" fill="#eff6f1" stroke="#467fb4" stroke-width="1.2" />
<circle cx="545.2257905070056" cy="284.86354307243175" r="3" fill="#eff6f1" stroke="#467fb4" stroke-width="1.2" />
<circle cx="512.8395929861817" cy="301.7848623630043" r="3" fill="#eff6f1" stroke="#467fb4" stroke-width="1.2" />
<circle cx="558.4953794068069" cy="305.45114668445717" r="3" fill="#eff6f1" stroke="#467fb4" stroke-width="1.2" />
<rect x="593.0" y="271" width="112" height="53" rx="7" fill="white" stroke="#c6d8e7" stroke-width="1.3" />
<circle cx="622.2600795843929" cy="285.4724824206013" r="3" fill="#eff6f1" stroke="#467fb4" stroke-width="1.2" />
<circle cx="686.6240754073244" cy="293.01457481123975" r="3" fill="#eff6f1" stroke="#467fb4" stroke-width="1.2" />
<circle cx="669.8927773437662" cy="302.48867938350753" r="3" fill="#eff6f1" stroke="#467fb4" stroke-width="1.2" />
<circle cx="641.7470166904725" cy="301.93547598694647" r="3" fill="#eff6f1" stroke="#467fb4" stroke-width="1.2" />
<circle cx="674.6642898195142" cy="290.04256453095377" r="3" fill="#eff6f1" stroke="#467fb4" stroke-width="1.2" />
<circle cx="613.7822249944802" cy="296.6300025694239" r="3" fill="#eff6f1" stroke="#467fb4" stroke-width="1.2" />
<path d="M870,286 L999,286" fill="none" stroke="#467fb4" stroke-width="1.5" stroke-linejoin="round" />
<path d="M992.791035540545,289.2324542287904 L999,286" stroke="#467fb4" stroke-width="1.5" />
<path d="M992.791035540545,282.7675457712096 L999,286" stroke="#467fb4" stroke-width="1.5" />
<rect x="1000" y="253" width="200" height="66" rx="12" fill="white" stroke="#bdcfdc" stroke-width="1.3" />
<path d="M1013,271 L1187,271" fill="none" stroke="#467fb4" stroke-width="1" stroke-linejoin="round" />
<text x="1100" y="300" font-size="20" fill="#233b38" font-family="ui-sans-serif, system-ui, -apple-system, PingFang SC, Microsoft YaHei, sans-serif" font-weight="600" text-anchor="middle">程序 A</text>
<path d="M1568,414 L1400,414 L1400,286 L1202,286" fill="none" stroke="#467fb4" stroke-width="1.5" stroke-linejoin="round" />
<path d="M1208.208964459455,282.7675457712096 L1202,286" stroke="#467fb4" stroke-width="1.5" />
<path d="M1208.208964459455,289.2324542287904 L1202,286" stroke="#467fb4" stroke-width="1.5" />
<rect x="300" y="365" width="570" height="98" rx="12" fill="#f7f9fb" stroke="#dce8e3" stroke-width="1.3" />
<text x="315" y="387" font-size="11" fill="#6d817c" font-family="ui-sans-serif, system-ui, -apple-system, PingFang SC, Microsoft YaHei, sans-serif" font-weight="400" text-anchor="start">4 个进程</text>
<rect x="337.0" y="399" width="112" height="53" rx="7" fill="white" stroke="#c6d8e7" stroke-width="1.3" />
<circle cx="414.95706673134356" cy="413.7934966632993" r="3" fill="#eff6f1" stroke="#467fb4" stroke-width="1.2" />
<circle cx="392.42632817771585" cy="425.03360239226737" r="3" fill="#eff6f1" stroke="#467fb4" stroke-width="1.2" />
<circle cx="427.6052928919578" cy="428.30554233806214" r="3" fill="#eff6f1" stroke="#467fb4" stroke-width="1.2" />
<circle cx="351.3878096857894" cy="419.77249415848434" r="3" fill="#eff6f1" stroke="#467fb4" stroke-width="1.2" />
<circle cx="375.25969828064393" cy="434.16937699059594" r="3" fill="#eff6f1" stroke="#467fb4" stroke-width="1.2" />
<circle cx="413.5347395061487" cy="433.01965322485904" r="3" fill="#eff6f1" stroke="#467fb4" stroke-width="1.2" />
<circle cx="350.05633544275605" cy="432.6190698595255" r="3" fill="#eff6f1" stroke="#467fb4" stroke-width="1.2" />
<circle cx="360.6186715959506" cy="426.423184589406" r="3" fill="#eff6f1" stroke="#467fb4" stroke-width="1.2" />
<circle cx="362.3813970272861" cy="414.1220206842223" r="3" fill="#eff6f1" stroke="#467fb4" stroke-width="1.2" />
<rect x="465.0" y="399" width="112" height="53" rx="7" fill="white" stroke="#c6d8e7" stroke-width="1.3" />
<circle cx="539.8327896734723" cy="435.4215044709351" r="3" fill="#eff6f1" stroke="#467fb4" stroke-width="1.2" />
<circle cx="547.9187251420635" cy="425.799034002706" r="3" fill="#eff6f1" stroke="#467fb4" stroke-width="1.2" />
<circle cx="548.1395158195207" cy="414.5192338469785" r="3" fill="#eff6f1" stroke="#467fb4" stroke-width="1.2" />
<circle cx="500.0532698225937" cy="431.5731409504863" r="3" fill="#eff6f1" stroke="#467fb4" stroke-width="1.2" />
<circle cx="519.3596152658905" cy="423.60219078259445" r="3" fill="#eff6f1" stroke="#467fb4" stroke-width="1.2" />
<circle cx="554.1151436014677" cy="436.51951740453956" r="3" fill="#eff6f1" stroke="#467fb4" stroke-width="1.2" />
<circle cx="497.2064422298786" cy="416.77433508842165" r="3" fill="#eff6f1" stroke="#467fb4" stroke-width="1.2" />
<circle cx="563.8888376651161" cy="429.8155307287805" r="3" fill="#eff6f1" stroke="#467fb4" stroke-width="1.2" />
<circle cx="533.3012485338932" cy="412.38198705959894" r="3" fill="#eff6f1" stroke="#467fb4" stroke-width="1.2" />
<rect x="593.0" y="399" width="112" height="53" rx="7" fill="white" stroke="#c6d8e7" stroke-width="1.3" />
<circle cx="667.3539674128009" cy="423.67041826702916" r="3" fill="#eff6f1" stroke="#467fb4" stroke-width="1.2" />
<circle cx="671.467206924587" cy="435.2373988639302" r="3" fill="#eff6f1" stroke="#467fb4" stroke-width="1.2" />
<circle cx="649.4190476073823" cy="429.8281790878021" r="3" fill="#eff6f1" stroke="#467fb4" stroke-width="1.2" />
<circle cx="684.2150646553147" cy="434.3342243503158" r="3" fill="#eff6f1" stroke="#467fb4" stroke-width="1.2" />
<circle cx="606.7431103327139" cy="436.3764047162614" r="3" fill="#eff6f1" stroke="#467fb4" stroke-width="1.2" />
<circle cx="689.4698365110778" cy="420.7782782545091" r="3" fill="#eff6f1" stroke="#467fb4" stroke-width="1.2" />
<circle cx="613.4388708710361" cy="413.86491573403794" r="3" fill="#eff6f1" stroke="#467fb4" stroke-width="1.2" />
<circle cx="639.253552038217" cy="422.1141571211235" r="3" fill="#eff6f1" stroke="#467fb4" stroke-width="1.2" />
<circle cx="617.9147780001593" cy="428.88811598375906" r="3" fill="#eff6f1" stroke="#467fb4" stroke-width="1.2" />
<rect x="721.0" y="399" width="112" height="53" rx="7" fill="white" stroke="#c6d8e7" stroke-width="1.3" />
<circle cx="762.2049921238785" cy="431.203131155485" r="3" fill="#eff6f1" stroke="#467fb4" stroke-width="1.2" />
<circle cx="741.4046847183567" cy="424.09276301489035" r="3" fill="#eff6f1" stroke="#467fb4" stroke-width="1.2" />
<circle cx="796.8167628684483" cy="427.9630888652282" r="3" fill="#eff6f1" stroke="#467fb4" stroke-width="1.2" />
<circle cx="778.1700576571152" cy="413.50488131157846" r="3" fill="#eff6f1" stroke="#467fb4" stroke-width="1.2" />
<circle cx="773.2969958733763" cy="429.4863037940392" r="3" fill="#eff6f1" stroke="#467fb4" stroke-width="1.2" />
<circle cx="808.7567792990671" cy="433.9110131442703" r="3" fill="#eff6f1" stroke="#467fb4" stroke-width="1.2" />
<circle cx="734.2331776573338" cy="414.8939435161147" r="3" fill="#eff6f1" stroke="#467fb4" stroke-width="1.2" />
<circle cx="810.1493511035201" cy="413.54228479350843" r="3" fill="#eff6f1" stroke="#467fb4" stroke-width="1.2" />
<path d="M870,414 L999,414" fill="none" stroke="#467fb4" stroke-width="1.5" stroke-linejoin="round" />
<path d="M992.791035540545,417.2324542287904 L999,414" stroke="#467fb4" stroke-width="1.5" />
<path d="M992.791035540545,410.7675457712096 L999,414" stroke="#467fb4" stroke-width="1.5" />
<rect x="1000" y="381" width="200" height="66" rx="12" fill="white" stroke="#bdcfdc" stroke-width="1.3" />
<path d="M1013,399 L1187,399" fill="none" stroke="#467fb4" stroke-width="1" stroke-linejoin="round" />
<text x="1100" y="428" font-size="20" fill="#233b38" font-family="ui-sans-serif, system-ui, -apple-system, PingFang SC, Microsoft YaHei, sans-serif" font-weight="600" text-anchor="middle">程序 B</text>
<path d="M1568,414 L1400,414 L1400,414 L1202,414" fill="none" stroke="#467fb4" stroke-width="1.5" stroke-linejoin="round" />
<path d="M1208.208964459455,410.7675457712096 L1202,414" stroke="#467fb4" stroke-width="1.5" />
<path d="M1208.208964459455,417.2324542287904 L1202,414" stroke="#467fb4" stroke-width="1.5" />
<rect x="300" y="496" width="570" height="98" rx="12" fill="#f7f9fb" stroke="#dce8e3" stroke-width="1.3" />
<text x="315" y="518" font-size="11" fill="#6d817c" font-family="ui-sans-serif, system-ui, -apple-system, PingFang SC, Microsoft YaHei, sans-serif" font-weight="400" text-anchor="start">3 个进程</text>
<rect x="401.0" y="530" width="112" height="53" rx="7" fill="white" stroke="#c6d8e7" stroke-width="1.3" />
<circle cx="494.17052988442265" cy="550.3502474376123" r="3" fill="#eff6f1" stroke="#467fb4" stroke-width="1.2" />
<circle cx="468.4212051581178" cy="550.5494370557157" r="3" fill="#eff6f1" stroke="#467fb4" stroke-width="1.2" />
<circle cx="483.1105373949327" cy="560.4402199923313" r="3" fill="#eff6f1" stroke="#467fb4" stroke-width="1.2" />
<circle cx="422.76254756897305" cy="567.3722453201873" r="3" fill="#eff6f1" stroke="#467fb4" stroke-width="1.2" />
<circle cx="454.0492722241546" cy="557.0628182045474" r="3" fill="#eff6f1" stroke="#467fb4" stroke-width="1.2" />
<circle cx="430.49397713533114" cy="543.2354309195578" r="3" fill="#eff6f1" stroke="#467fb4" stroke-width="1.2" />
<circle cx="439.04905404759046" cy="560.1296428897069" r="3" fill="#eff6f1" stroke="#467fb4" stroke-width="1.2" />
<circle cx="446.1046348975978" cy="547.1855584383559" r="3" fill="#eff6f1" stroke="#467fb4" stroke-width="1.2" />
<circle cx="494.87831557057973" cy="564.6457808751745" r="3" fill="#eff6f1" stroke="#467fb4" stroke-width="1.2" />
<rect x="529.0" y="530" width="112" height="53" rx="7" fill="white" stroke="#c6d8e7" stroke-width="1.3" />
<circle cx="627.8597034644577" cy="550.8511739974005" r="3" fill="#eff6f1" stroke="#467fb4" stroke-width="1.2" />
<circle cx="556.5200211525689" cy="555.4955386652432" r="3" fill="#eff6f1" stroke="#467fb4" stroke-width="1.2" />
<circle cx="572.946241382255" cy="551.8269886017624" r="3" fill="#eff6f1" stroke="#467fb4" stroke-width="1.2" />
<circle cx="611.1182608360198" cy="551.9287050312614" r="3" fill="#eff6f1" stroke="#467fb4" stroke-width="1.2" />
<circle cx="622.0836098070262" cy="568.1079304962501" r="3" fill="#eff6f1" stroke="#467fb4" stroke-width="1.2" />
<circle cx="556.9352451724928" cy="566.7382716580069" r="3" fill="#eff6f1" stroke="#467fb4" stroke-width="1.2" />
<circle cx="584.6846827770254" cy="551.6481398265827" r="3" fill="#eff6f1" stroke="#467fb4" stroke-width="1.2" />
<rect x="657.0" y="530" width="112" height="53" rx="7" fill="white" stroke="#c6d8e7" stroke-width="1.3" />
<circle cx="681.9198789733946" cy="558.4550168143227" r="3" fill="#eff6f1" stroke="#467fb4" stroke-width="1.2" />
<circle cx="698.4509347188177" cy="564.4034349955626" r="3" fill="#eff6f1" stroke="#467fb4" stroke-width="1.2" />
<circle cx="713.8187639573046" cy="553.8948289801409" r="3" fill="#eff6f1" stroke="#467fb4" stroke-width="1.2" />
<circle cx="725.6638223507293" cy="545.7078107262648" r="3" fill="#eff6f1" stroke="#467fb4" stroke-width="1.2" />
<circle cx="706.2604423577988" cy="543.068725886668" r="3" fill="#eff6f1" stroke="#467fb4" stroke-width="1.2" />
<circle cx="738.1587789441303" cy="555.393428479262" r="3" fill="#eff6f1" stroke="#467fb4" stroke-width="1.2" />
<path d="M870,545 L999,545" fill="none" stroke="#467fb4" stroke-width="1.5" stroke-linejoin="round" />
<path d="M992.791035540545,548.2324542287904 L999,545" stroke="#467fb4" stroke-width="1.5" />
<path d="M992.791035540545,541.7675457712096 L999,545" stroke="#467fb4" stroke-width="1.5" />
<rect x="1000" y="512" width="200" height="66" rx="12" fill="white" stroke="#bdcfdc" stroke-width="1.3" />
<path d="M1013,530 L1187,530" fill="none" stroke="#467fb4" stroke-width="1" stroke-linejoin="round" />
<text x="1100" y="559" font-size="20" fill="#233b38" font-family="ui-sans-serif, system-ui, -apple-system, PingFang SC, Microsoft YaHei, sans-serif" font-weight="600" text-anchor="middle">程序 C</text>
<path d="M1568,414 L1400,414 L1400,545 L1202,545" fill="none" stroke="#467fb4" stroke-width="1.5" stroke-linejoin="round" />
<path d="M1208.208964459455,541.7675457712096 L1202,545" stroke="#467fb4" stroke-width="1.5" />
<path d="M1208.208964459455,548.2324542287904 L1202,545" stroke="#467fb4" stroke-width="1.5" />
<circle cx="1615" cy="394" r="13" fill="#f1f6f3" stroke="#2d8b77" stroke-width="1.8" />
<path d="M1590,437 Q1590,413,1615,413 Q1640,413,1640,437 Z" fill="none" stroke="#2d8b77" stroke-width="1.8" />
<text x="1615" y="471" font-size="18" fill="#233b38" font-family="ui-sans-serif, system-ui, -apple-system, PingFang SC, Microsoft YaHei, sans-serif" font-weight="600" text-anchor="middle">用户</text>
<text x="1394" y="611" font-size="15" fill="#467fb4" font-family="ui-sans-serif, system-ui, -apple-system, PingFang SC, Microsoft YaHei, sans-serif" font-weight="400" text-anchor="middle">界面 / Web / API</text>
<text x="300" y="640" font-size="16" fill="#6d817c" font-family="ui-sans-serif, system-ui, -apple-system, PingFang SC, Microsoft YaHei, sans-serif" font-weight="400" text-anchor="start">用户通过程序提供的入口访问功能;对象的组织与操作通常藏在程序内部。</text>
<text x="40" y="709" font-size="20" fill="#2d8b77" font-family="ui-sans-serif, system-ui, -apple-system, PingFang SC, Microsoft YaHei, sans-serif" font-weight="600" text-anchor="start">02</text>
<text x="95" y="709" font-size="24" fill="#233b38" font-family="ui-sans-serif, system-ui, -apple-system, PingFang SC, Microsoft YaHei, sans-serif" font-weight="600" text-anchor="start">以对象为操作单位</text>
<rect x="40" y="742" width="1410" height="421" rx="18" fill="#f8fbf8" stroke="#a9cbbd" stroke-width="1.3" />
<rect x="64" y="758" width="162" height="36" rx="5" fill="#eaf3ec" stroke="none" stroke-width="1.3" />
<text x="145" y="783" font-size="21" fill="#2d8b77" font-family="ui-sans-serif, system-ui, -apple-system, PingFang SC, Microsoft YaHei, sans-serif" font-weight="600" text-anchor="middle">Endor OS</text>
<text x="135" y="837" font-size="13" fill="#6d817c" font-family="ui-sans-serif, system-ui, -apple-system, PingFang SC, Microsoft YaHei, sans-serif" font-weight="600" text-anchor="middle">OS</text>
<text x="415" y="837" font-size="14" fill="#6d817c" font-family="ui-sans-serif, system-ui, -apple-system, PingFang SC, Microsoft YaHei, sans-serif" font-weight="600" text-anchor="middle">少量进程</text>
<rect x="95" y="940" width="80" height="13" rx="3" fill="white" stroke="#6d817c" stroke-width="1.6" />
<circle cx="105" cy="946" r="1.5" fill="#6d817c" />
<path d="M118,946 L160,946" stroke="#6d817c" stroke-width="1.2" />
<rect x="95" y="958" width="80" height="13" rx="3" fill="white" stroke="#6d817c" stroke-width="1.6" />
<circle cx="105" cy="964" r="1.5" fill="#6d817c" />
<path d="M118,964 L160,964" stroke="#6d817c" stroke-width="1.2" />
<rect x="95" y="976" width="80" height="13" rx="3" fill="white" stroke="#6d817c" stroke-width="1.6" />
<circle cx="105" cy="982" r="1.5" fill="#6d817c" />
<path d="M118,982 L160,982" stroke="#6d817c" stroke-width="1.2" />
<text x="135" y="1026" font-size="24" fill="#233b38" font-family="ui-sans-serif, system-ui, -apple-system, PingFang SC, Microsoft YaHei, sans-serif" font-weight="600" text-anchor="middle">OS</text>
<path d="M178,961 L270,961 L270,886 L335,886" fill="none" stroke="#2d8b77" stroke-width="1.5" stroke-linejoin="round" />
<path d="M270,961 L335,961" fill="none" stroke="#2d8b77" stroke-width="1.5" stroke-linejoin="round" />
<path d="M270,961 L270,1036 L335,1036" fill="none" stroke="#2d8b77" stroke-width="1.5" stroke-linejoin="round" />
<rect x="335" y="864" width="160" height="44" rx="7" fill="white" stroke="#bdd5c8" stroke-width="1.3" />
<text x="415" y="892" font-size="15" fill="#6d817c" font-family="ui-sans-serif, system-ui, -apple-system, PingFang SC, Microsoft YaHei, sans-serif" font-weight="400" text-anchor="middle">进程</text>
<path d="M495,886 L555,886 L555,961 L615,961" fill="none" stroke="#2d8b77" stroke-width="1.2" stroke-linejoin="round" />
<path d="M608.791035540545,964.2324542287904 L615,961" stroke="#2d8b77" stroke-width="1.2" />
<path d="M608.791035540545,957.7675457712096 L615,961" stroke="#2d8b77" stroke-width="1.2" />
<rect x="335" y="939" width="160" height="44" rx="7" fill="white" stroke="#bdd5c8" stroke-width="1.3" />
<text x="415" y="967" font-size="15" fill="#6d817c" font-family="ui-sans-serif, system-ui, -apple-system, PingFang SC, Microsoft YaHei, sans-serif" font-weight="400" text-anchor="middle">进程</text>
<path d="M495,961 L555,961 L555,961 L615,961" fill="none" stroke="#2d8b77" stroke-width="1.2" stroke-linejoin="round" />
<path d="M608.791035540545,964.2324542287904 L615,961" stroke="#2d8b77" stroke-width="1.2" />
<path d="M608.791035540545,957.7675457712096 L615,961" stroke="#2d8b77" stroke-width="1.2" />
<rect x="335" y="1014" width="160" height="44" rx="7" fill="white" stroke="#bdd5c8" stroke-width="1.3" />
<text x="415" y="1042" font-size="15" fill="#6d817c" font-family="ui-sans-serif, system-ui, -apple-system, PingFang SC, Microsoft YaHei, sans-serif" font-weight="400" text-anchor="middle">进程</text>
<path d="M495,1036 L555,1036 L555,961 L615,961" fill="none" stroke="#2d8b77" stroke-width="1.2" stroke-linejoin="round" />
<path d="M608.791035540545,964.2324542287904 L615,961" stroke="#2d8b77" stroke-width="1.2" />
<path d="M608.791035540545,957.7675457712096 L615,961" stroke="#2d8b77" stroke-width="1.2" />
<rect x="615" y="807" width="805" height="322" rx="14" fill="white" stroke="#cbded1" stroke-width="1.3" />
<text x="644" y="845" font-size="25" fill="#233b38" font-family="ui-sans-serif, system-ui, -apple-system, PingFang SC, Microsoft YaHei, sans-serif" font-weight="600" text-anchor="start">Endorphin</text>
<text x="644" y="874" font-size="14" fill="#6d817c" font-family="ui-sans-serif, system-ui, -apple-system, PingFang SC, Microsoft YaHei, sans-serif" font-weight="400" text-anchor="start">对象运行与操作空间</text>
<path d="M1005.9753554809424,1082.3584457467405 L1069.2576469135852,1037.5936524182946" fill="none" stroke="#c8dcd2" stroke-width="1" stroke-linejoin="round" />
<path d="M1005.9753554809424,1082.3584457467405 L934.5136680095995,1047.2221490657453" fill="none" stroke="#c8dcd2" stroke-width="1" stroke-linejoin="round" />
<path d="M1005.9753554809424,1082.3584457467405 L963.4695377959008,1023.9566827818494" fill="none" stroke="#c8dcd2" stroke-width="1" stroke-linejoin="round" />
<path d="M1286.32078084885,1065.7813367126555 L1285.172895585035,1015.3818200318382" fill="none" stroke="#c8dcd2" stroke-width="1" stroke-linejoin="round" />
<path d="M1286.32078084885,1065.7813367126555 L1329.688894115931,1068.416245398557" fill="none" stroke="#c8dcd2" stroke-width="1" stroke-linejoin="round" />
<path d="M1269.0150969324723,904.0952759295178 L1321.7625533902572,878.324068502618" fill="none" stroke="#c8dcd2" stroke-width="1" stroke-linejoin="round" />
<path d="M1269.0150969324723,904.0952759295178 L1218.4707789172987,900.2214752860347" fill="none" stroke="#c8dcd2" stroke-width="1" stroke-linejoin="round" />
<path d="M1187.1773292408275,1033.1169631777461 L1233.421058916565,1037.0315005952061" fill="none" stroke="#c8dcd2" stroke-width="1" stroke-linejoin="round" />
<path d="M1187.1773292408275,1033.1169631777461 L1153.3128516666636,1066.6724907265352" fill="none" stroke="#c8dcd2" stroke-width="1" stroke-linejoin="round" />
<path d="M1187.1773292408275,1033.1169631777461 L1204.8130267638485,984.7803068126112" fill="none" stroke="#c8dcd2" stroke-width="1" stroke-linejoin="round" />
<path d="M1040.8651800778634,921.3738962948767 L1072.4650137587041,936.6134634806253" fill="none" stroke="#c8dcd2" stroke-width="1" stroke-linejoin="round" />
<path d="M1040.8651800778634,921.3738962948767 L1017.2557241239123,889.1066569977891" fill="none" stroke="#c8dcd2" stroke-width="1" stroke-linejoin="round" />
<path d="M928.1877507261845,979.9284735501436 L901.0731461758321,958.5498752189812" fill="none" stroke="#c8dcd2" stroke-width="1" stroke-linejoin="round" />
<path d="M928.1877507261845,979.9284735501436 L963.4695377959008,1023.9566827818494" fill="none" stroke="#c8dcd2" stroke-width="1" stroke-linejoin="round" />
<path d="M1069.2576469135852,1037.5936524182946 L1125.2595857289293,1086.2426003628736" fill="none" stroke="#c8dcd2" stroke-width="1" stroke-linejoin="round" />
<path d="M1069.2576469135852,1037.5936524182946 L1041.8946142328398,992.0866800927113" fill="none" stroke="#c8dcd2" stroke-width="1" stroke-linejoin="round" />
<path d="M1341.6955212166774,961.4853062628337 L1350.6374020970645,919.7783197021724" fill="none" stroke="#c8dcd2" stroke-width="1" stroke-linejoin="round" />
<path d="M1341.6955212166774,961.4853062628337 L1305.9895850396374,961.550578163642" fill="none" stroke="#c8dcd2" stroke-width="1" stroke-linejoin="round" />
<path d="M1341.6955212166774,961.4853062628337 L1378.2992917107053,997.5085614531345" fill="none" stroke="#c8dcd2" stroke-width="1" stroke-linejoin="round" />
<path d="M873.3057513129057,995.9399089853287 L862.947858917312,1070.0613456614692" fill="none" stroke="#c8dcd2" stroke-width="1" stroke-linejoin="round" />
<path d="M873.3057513129057,995.9399089853287 L901.0731461758321,958.5498752189812" fill="none" stroke="#c8dcd2" stroke-width="1" stroke-linejoin="round" />
<path d="M873.3057513129057,995.9399089853287 L899.4893757181419,1036.2672469233219" fill="none" stroke="#c8dcd2" stroke-width="1" stroke-linejoin="round" />
<path d="M862.947858917312,1070.0613456614692 L899.4893757181419,1036.2672469233219" fill="none" stroke="#c8dcd2" stroke-width="1" stroke-linejoin="round" />
<path d="M862.947858917312,1070.0613456614692 L934.5136680095995,1047.2221490657453" fill="none" stroke="#c8dcd2" stroke-width="1" stroke-linejoin="round" />
<path d="M1101.1314454255335,871.5773079107781 L1072.4650137587041,936.6134634806253" fill="none" stroke="#c8dcd2" stroke-width="1" stroke-linejoin="round" />
<path d="M1101.1314454255335,871.5773079107781 L1122.5478206023454,921.0686177875347" fill="none" stroke="#c8dcd2" stroke-width="1" stroke-linejoin="round" />
<path d="M1125.2595857289293,1086.2426003628736 L1153.3128516666636,1066.6724907265352" fill="none" stroke="#c8dcd2" stroke-width="1" stroke-linejoin="round" />
<path d="M851.1665327454965,871.2107213379553 L945.0210034407902,862.298346470862" fill="none" stroke="#c8dcd2" stroke-width="1" stroke-linejoin="round" />
<path d="M851.1665327454965,871.2107213379553 L877.4536173613674,929.0084719415464" fill="none" stroke="#c8dcd2" stroke-width="1" stroke-linejoin="round" />
<path d="M851.1665327454965,871.2107213379553 L921.7811801161563,914.0938766220703" fill="none" stroke="#c8dcd2" stroke-width="1" stroke-linejoin="round" />
<path d="M1233.421058916565,1037.0315005952061 L1204.8130267638485,984.7803068126112" fill="none" stroke="#c8dcd2" stroke-width="1" stroke-linejoin="round" />
<path d="M1233.421058916565,1037.0315005952061 L1259.3359043140567,988.4225115708887" fill="none" stroke="#c8dcd2" stroke-width="1" stroke-linejoin="round" />
<path d="M901.0731461758321,958.5498752189812 L877.4536173613674,929.0084719415464" fill="none" stroke="#c8dcd2" stroke-width="1" stroke-linejoin="round" />
<path d="M1041.8946142328398,992.0866800927113 L1072.4650137587041,936.6134634806253" fill="none" stroke="#c8dcd2" stroke-width="1" stroke-linejoin="round" />
<path d="M1170.5026865771372,894.4234672834388 L1218.4707789172987,900.2214752860347" fill="none" stroke="#c8dcd2" stroke-width="1" stroke-linejoin="round" />
<path d="M1170.5026865771372,894.4234672834388 L1193.52313000347,923.9720975731512" fill="none" stroke="#c8dcd2" stroke-width="1" stroke-linejoin="round" />
<path d="M1204.8130267638485,984.7803068126112 L1259.3359043140567,988.4225115708887" fill="none" stroke="#c8dcd2" stroke-width="1" stroke-linejoin="round" />
<path d="M991.002663466047,922.8502898825709 L961.7632286687649,891.3253698086938" fill="none" stroke="#c8dcd2" stroke-width="1" stroke-linejoin="round" />
<path d="M991.002663466047,922.8502898825709 L1017.2557241239123,889.1066569977891" fill="none" stroke="#c8dcd2" stroke-width="1" stroke-linejoin="round" />
<path d="M961.7632286687649,891.3253698086938 L1003.9257961494347,852.8809976635227" fill="none" stroke="#c8dcd2" stroke-width="1" stroke-linejoin="round" />
<path d="M961.7632286687649,891.3253698086938 L945.0210034407902,862.298346470862" fill="none" stroke="#c8dcd2" stroke-width="1" stroke-linejoin="round" />
<path d="M961.7632286687649,891.3253698086938 L921.7811801161563,914.0938766220703" fill="none" stroke="#c8dcd2" stroke-width="1" stroke-linejoin="round" />
<path d="M1072.4650137587041,936.6134634806253 L1122.5478206023454,921.0686177875347" fill="none" stroke="#c8dcd2" stroke-width="1" stroke-linejoin="round" />
<path d="M1321.7625533902572,878.324068502618 L1350.6374020970645,919.7783197021724" fill="none" stroke="#c8dcd2" stroke-width="1" stroke-linejoin="round" />
<path d="M1321.7625533902572,878.324068502618 L1346.1397229416468,853.6325297420726" fill="none" stroke="#c8dcd2" stroke-width="1" stroke-linejoin="round" />
<path d="M1321.7625533902572,878.324068502618 L1378.8702765369462,871.2335490464415" fill="none" stroke="#c8dcd2" stroke-width="1" stroke-linejoin="round" />
<path d="M1350.6374020970645,919.7783197021724 L1378.8702765369462,871.2335490464415" fill="none" stroke="#c8dcd2" stroke-width="1" stroke-linejoin="round" />
<path d="M1259.3359043140567,988.4225115708887 L1285.172895585035,1015.3818200318382" fill="none" stroke="#c8dcd2" stroke-width="1" stroke-linejoin="round" />
<path d="M1259.3359043140567,988.4225115708887 L1305.9895850396374,961.550578163642" fill="none" stroke="#c8dcd2" stroke-width="1" stroke-linejoin="round" />
<path d="M899.4893757181419,1036.2672469233219 L934.5136680095995,1047.2221490657453" fill="none" stroke="#c8dcd2" stroke-width="1" stroke-linejoin="round" />
<path d="M1003.9257961494347,852.8809976635227 L945.0210034407902,862.298346470862" fill="none" stroke="#c8dcd2" stroke-width="1" stroke-linejoin="round" />
<path d="M1003.9257961494347,852.8809976635227 L1017.2557241239123,889.1066569977891" fill="none" stroke="#c8dcd2" stroke-width="1" stroke-linejoin="round" />
<path d="M1346.1397229416468,853.6325297420726 L1378.8702765369462,871.2335490464415" fill="none" stroke="#c8dcd2" stroke-width="1" stroke-linejoin="round" />
<path d="M1349.853733555985,1041.5369754087315 L1378.2992917107053,997.5085614531345" fill="none" stroke="#c8dcd2" stroke-width="1" stroke-linejoin="round" />
<path d="M1349.853733555985,1041.5369754087315 L1329.688894115931,1068.416245398557" fill="none" stroke="#c8dcd2" stroke-width="1" stroke-linejoin="round" />
<path d="M945.0210034407902,862.298346470862 L921.7811801161563,914.0938766220703" fill="none" stroke="#c8dcd2" stroke-width="1" stroke-linejoin="round" />
<path d="M934.5136680095995,1047.2221490657453 L963.4695377959008,1023.9566827818494" fill="none" stroke="#c8dcd2" stroke-width="1" stroke-linejoin="round" />
<path d="M1285.172895585035,1015.3818200318382 L1305.9895850396374,961.550578163642" fill="none" stroke="#c8dcd2" stroke-width="1" stroke-linejoin="round" />
<path d="M1285.172895585035,1015.3818200318382 L1329.688894115931,1068.416245398557" fill="none" stroke="#c8dcd2" stroke-width="1" stroke-linejoin="round" />
<path d="M1218.4707789172987,900.2214752860347 L1193.52313000347,923.9720975731512" fill="none" stroke="#c8dcd2" stroke-width="1" stroke-linejoin="round" />
<path d="M1305.9895850396374,961.550578163642 L1378.2992917107053,997.5085614531345" fill="none" stroke="#c8dcd2" stroke-width="1" stroke-linejoin="round" />
<path d="M877.4536173613674,929.0084719415464 L921.7811801161563,914.0938766220703" fill="none" stroke="#c8dcd2" stroke-width="1" stroke-linejoin="round" />
<circle cx="1005.9753554809424" cy="1082.3584457467405" r="5" fill="white" stroke="#2d8b77" stroke-width="1.2" />
<circle cx="1286.32078084885" cy="1065.7813367126555" r="5" fill="white" stroke="#2d8b77" stroke-width="1.2" />
<circle cx="1269.0150969324723" cy="904.0952759295178" r="5" fill="white" stroke="#2d8b77" stroke-width="1.2" />
<circle cx="1187.1773292408275" cy="1033.1169631777461" r="5" fill="white" stroke="#2d8b77" stroke-width="1.2" />
<circle cx="1040.8651800778634" cy="921.3738962948767" r="5" fill="white" stroke="#2d8b77" stroke-width="1.2" />
<circle cx="928.1877507261845" cy="979.9284735501436" r="5" fill="white" stroke="#2d8b77" stroke-width="1.2" />
<circle cx="1069.2576469135852" cy="1037.5936524182946" r="5" fill="white" stroke="#2d8b77" stroke-width="1.2" />
<circle cx="1341.6955212166774" cy="961.4853062628337" r="7" fill="#e5f1e8" stroke="#2d8b77" stroke-width="1.8" />
<circle cx="873.3057513129057" cy="995.9399089853287" r="5" fill="white" stroke="#2d8b77" stroke-width="1.2" />
<circle cx="862.947858917312" cy="1070.0613456614692" r="5" fill="white" stroke="#2d8b77" stroke-width="1.2" />
<circle cx="1101.1314454255335" cy="871.5773079107781" r="5" fill="white" stroke="#2d8b77" stroke-width="1.2" />
<circle cx="1125.2595857289293" cy="1086.2426003628736" r="5" fill="white" stroke="#2d8b77" stroke-width="1.2" />
<circle cx="851.1665327454965" cy="871.2107213379553" r="5" fill="white" stroke="#2d8b77" stroke-width="1.2" />
<circle cx="1233.421058916565" cy="1037.0315005952061" r="5" fill="white" stroke="#2d8b77" stroke-width="1.2" />
<circle cx="1153.3128516666636" cy="1066.6724907265352" r="5" fill="white" stroke="#2d8b77" stroke-width="1.2" />
<circle cx="901.0731461758321" cy="958.5498752189812" r="5" fill="white" stroke="#2d8b77" stroke-width="1.2" />
<circle cx="1041.8946142328398" cy="992.0866800927113" r="5" fill="white" stroke="#2d8b77" stroke-width="1.2" />
<circle cx="1170.5026865771372" cy="894.4234672834388" r="5" fill="white" stroke="#2d8b77" stroke-width="1.2" />
<circle cx="1204.8130267638485" cy="984.7803068126112" r="5" fill="white" stroke="#2d8b77" stroke-width="1.2" />
<circle cx="991.002663466047" cy="922.8502898825709" r="5" fill="white" stroke="#2d8b77" stroke-width="1.2" />
<circle cx="961.7632286687649" cy="891.3253698086938" r="5" fill="white" stroke="#2d8b77" stroke-width="1.2" />
<circle cx="1072.4650137587041" cy="936.6134634806253" r="5" fill="white" stroke="#2d8b77" stroke-width="1.2" />
<circle cx="1321.7625533902572" cy="878.324068502618" r="5" fill="white" stroke="#2d8b77" stroke-width="1.2" />
<circle cx="1350.6374020970645" cy="919.7783197021724" r="7" fill="#e5f1e8" stroke="#2d8b77" stroke-width="1.8" />
<circle cx="1259.3359043140567" cy="988.4225115708887" r="5" fill="white" stroke="#2d8b77" stroke-width="1.2" />
<circle cx="1122.5478206023454" cy="921.0686177875347" r="5" fill="white" stroke="#2d8b77" stroke-width="1.2" />
<circle cx="899.4893757181419" cy="1036.2672469233219" r="5" fill="white" stroke="#2d8b77" stroke-width="1.2" />
<circle cx="1003.9257961494347" cy="852.8809976635227" r="5" fill="white" stroke="#2d8b77" stroke-width="1.2" />
<circle cx="1346.1397229416468" cy="853.6325297420726" r="7" fill="#e5f1e8" stroke="#2d8b77" stroke-width="1.8" />
<circle cx="1349.853733555985" cy="1041.5369754087315" r="7" fill="#e5f1e8" stroke="#2d8b77" stroke-width="1.8" />
<circle cx="945.0210034407902" cy="862.298346470862" r="5" fill="white" stroke="#2d8b77" stroke-width="1.2" />
<circle cx="1017.2557241239123" cy="889.1066569977891" r="5" fill="white" stroke="#2d8b77" stroke-width="1.2" />
<circle cx="934.5136680095995" cy="1047.2221490657453" r="5" fill="white" stroke="#2d8b77" stroke-width="1.2" />
<circle cx="1378.8702765369462" cy="871.2335490464415" r="7" fill="#e5f1e8" stroke="#2d8b77" stroke-width="1.8" />
<circle cx="1285.172895585035" cy="1015.3818200318382" r="5" fill="white" stroke="#2d8b77" stroke-width="1.2" />
<circle cx="1218.4707789172987" cy="900.2214752860347" r="5" fill="white" stroke="#2d8b77" stroke-width="1.2" />
<circle cx="1305.9895850396374" cy="961.550578163642" r="5" fill="white" stroke="#2d8b77" stroke-width="1.2" />
<circle cx="877.4536173613674" cy="929.0084719415464" r="5" fill="white" stroke="#2d8b77" stroke-width="1.2" />
<circle cx="921.7811801161563" cy="914.0938766220703" r="5" fill="white" stroke="#2d8b77" stroke-width="1.2" />
<circle cx="1378.2992917107053" cy="997.5085614531345" r="7" fill="#e5f1e8" stroke="#2d8b77" stroke-width="1.8" />
<circle cx="1193.52313000347" cy="923.9720975731512" r="5" fill="white" stroke="#2d8b77" stroke-width="1.2" />
<circle cx="963.4695377959008" cy="1023.9566827818494" r="5" fill="white" stroke="#2d8b77" stroke-width="1.2" />
<circle cx="1329.688894115931" cy="1068.416245398557" r="7" fill="#e5f1e8" stroke="#2d8b77" stroke-width="1.8" />
<text x="647" y="1000" font-size="17" fill="#2d8b77" font-family="ui-sans-serif, system-ui, -apple-system, PingFang SC, Microsoft YaHei, sans-serif" font-weight="600" text-anchor="start">对象</text>
<text x="647" y="1028" font-size="13" fill="#6d817c" font-family="ui-sans-serif, system-ui, -apple-system, PingFang SC, Microsoft YaHei, sans-serif" font-weight="400" text-anchor="start">可引用 · 可组合</text>
<text x="647" y="1053" font-size="13" fill="#6d817c" font-family="ui-sans-serif, system-ui, -apple-system, PingFang SC, Microsoft YaHei, sans-serif" font-weight="400" text-anchor="start">按权限操作</text>
<circle cx="1630" cy="868" r="13" fill="#f1f6f3" stroke="#2d8b77" stroke-width="1.8" />
<path d="M1605,911 Q1605,887,1630,887 Q1655,887,1655,911 Z" fill="none" stroke="#2d8b77" stroke-width="1.8" />
<text x="1630" y="945" font-size="18" fill="#233b38" font-family="ui-sans-serif, system-ui, -apple-system, PingFang SC, Microsoft YaHei, sans-serif" font-weight="600" text-anchor="middle">用户</text>
<rect x="1610" y="1030" width="40" height="36" rx="8" fill="#f5f1fa" stroke="#8a6ab4" stroke-width="1.3" />
<circle cx="1622" cy="1047" r="2" fill="#8a6ab4" />
<circle cx="1638" cy="1047" r="2" fill="#8a6ab4" />
<path d="M1622,1059 L1638,1059" fill="none" stroke="#8a6ab4" stroke-width="1.5" stroke-linejoin="round" />
<path d="M1630,1030 L1630,1020" fill="none" stroke="#8a6ab4" stroke-width="1.5" stroke-linejoin="round" />
<circle cx="1630" cy="1017" r="3" fill="white" stroke="#8a6ab4" />
<text x="1630" y="1112" font-size="18" fill="#8a6ab4" font-family="ui-sans-serif, system-ui, -apple-system, PingFang SC, Microsoft YaHei, sans-serif" font-weight="600" text-anchor="middle">AI</text>
<path d="M1597,888 C1505,790,1468.8702765369462,836.2335490464415,1378.8702765369462,871.2335490464415" fill="none" stroke="#2d8b77" stroke-width="1.7" opacity="0.85" />
<circle cx="1378.8702765369462" cy="871.2335490464415" r="10" fill="none" stroke="#2d8b77" stroke-width="1" opacity="0.6" />
<path d="M1597,888 C1505,835,1468.2992917107053,962.5085614531345,1378.2992917107053,997.5085614531345" fill="none" stroke="#2d8b77" stroke-width="1.7" opacity="0.85" />
<circle cx="1378.2992917107053" cy="997.5085614531345" r="10" fill="none" stroke="#2d8b77" stroke-width="1" opacity="0.6" />
<path d="M1597,888 C1505,880,1440.6374020970645,884.7783197021724,1350.6374020970645,919.7783197021724" fill="none" stroke="#2d8b77" stroke-width="1.7" opacity="0.85" />
<circle cx="1350.6374020970645" cy="919.7783197021724" r="10" fill="none" stroke="#2d8b77" stroke-width="1" opacity="0.6" />
<path d="M1597,888 C1505,925,1439.853733555985,1006.5369754087315,1349.853733555985,1041.5369754087315" fill="none" stroke="#2d8b77" stroke-width="1.7" opacity="0.85" />
<circle cx="1349.853733555985" cy="1041.5369754087315" r="10" fill="none" stroke="#2d8b77" stroke-width="1" opacity="0.6" />
<path d="M1597,1055 C1505,970,1436.1397229416468,818.6325297420726,1346.1397229416468,853.6325297420726" fill="none" stroke="#8a6ab4" stroke-width="1.7" opacity="0.85" />
<circle cx="1346.1397229416468" cy="853.6325297420726" r="10" fill="none" stroke="#8a6ab4" stroke-width="1" opacity="0.6" />
<path d="M1597,1055 C1505,1015,1431.6955212166774,926.4853062628337,1341.6955212166774,961.4853062628337" fill="none" stroke="#8a6ab4" stroke-width="1.7" opacity="0.85" />
<circle cx="1341.6955212166774" cy="961.4853062628337" r="10" fill="none" stroke="#8a6ab4" stroke-width="1" opacity="0.6" />
<path d="M1597,1055 C1505,1060,1419.688894115931,1033.416245398557,1329.688894115931,1068.416245398557" fill="none" stroke="#8a6ab4" stroke-width="1.7" opacity="0.85" />
<circle cx="1329.688894115931" cy="1068.416245398557" r="10" fill="none" stroke="#8a6ab4" stroke-width="1" opacity="0.6" />
<text x="1620" y="1196" font-size="16" fill="#2d8b77" font-family="ui-sans-serif, system-ui, -apple-system, PingFang SC, Microsoft YaHei, sans-serif" font-weight="400" text-anchor="middle">选择对象 · 发起操作</text>
<text x="40" y="1220" font-size="13" fill="#6d817c" font-family="ui-sans-serif, system-ui, -apple-system, PingFang SC, Microsoft YaHei, sans-serif" font-weight="400" text-anchor="start">进程数量仅作概念对比,不代表性能测量或固定部署要求。</text>
<text x="40" y="1253" font-size="14" fill="#6d817c" font-family="ui-sans-serif, system-ui, -apple-system, PingFang SC, Microsoft YaHei, sans-serif" font-weight="400" text-anchor="start">圆圈 = 对象 细线 = 对象关系 贝塞尔曲线 = 用户 / AI 对选定对象的操作</text>
<text x="1730" y="1253" font-size="13" fill="#6d817c" font-family="ui-sans-serif, system-ui, -apple-system, PingFang SC, Microsoft YaHei, sans-serif" font-weight="400" text-anchor="end">讨论草案</text>
</svg>

After

Width:  |  Height:  |  Size: 41 KiB

+7
View File
@@ -5,6 +5,13 @@ export type Section = {
symbol: string;
};
export function sectionFor(slug: string): Section {
if (slug.includes("endor-purpose"))
return {
group: "项目讨论",
label: "讨论草案",
symbol: "○",
description: "逐步讨论 Endor 的意义:从程序入口走向用户与 AI 的对象操作。",
};
if (slug.includes("endor-concepts"))
return {
group: "架构设计",
+42
View File
@@ -0,0 +1,42 @@
# Endor 的意义:从程序入口到对象操作
这篇文档用来逐步整理我们为什么要做 Endor。先记录一个切入点:**把对象的操作权交还给用户与 AI**。后续讨论可以在这里补充、修正,暂不把它写成一份已经定稿的项目宣言。
> **讨论草案**:以下是希望探索的系统组织方式。图中进程和对象的数量、对象关系与操作路径都是示意,不表示当前实现或性能测量。
## 一对图:我们希望改变什么
![从程序入口到对象操作的对比:上图中 OS 分出九个进程,按二、四、三个分为三组,对应三个程序;对象以进程内的随机小圆圈表示,用户通过程序入口访问。下图中 OS 只分出少量进程,承载 Endorphin 的对象关系网络,用户与 AI 用多条贝塞尔曲线直接指向选定对象;OS、进程区与 Endorphin 都位于 Endor OS 边界内](/figures/endor-purpose.svg)
### 第一张图:用户面对程序
从 OS 出发,许多进程组成不同的程序。每个程序可以对应不同数量的进程;图中分别画了两个、四个和三个。进程区里的许多小圆圈表示对象,它们散布在各进程中。
用户通常通过程序提供的界面访问能力,也可能通过 Web 或 API。这里想强调的是操作入口:用户先选择程序,再在程序提供的功能中寻找自己要做的事。图中的对象仍然存在,但通常隐藏在程序的组织和入口之后。
这是一种用于对照的简化视角,并不是说现有程序都无法开放对象或让外部系统组合能力。
### 第二张图:用户与 AI 面对对象
仍然从 OS 出发,但这次只画少量进程,用来承载 Endorphin。接下来展开的是许多相互连接的小圆圈:对象不再只作为程序内部的实现细节出现,而成为可以被引用、选择和操作的基本单位。
用户与 AI 的多条曲线分别指向部分对象,表达我们希望提供的能力:**在授权范围内,直接找到所需对象,对它们执行操作,并把不同对象的能力组合起来**。图中没有把所有对象都连向用户,因为操作权应当是有范围、可控制的。
OS、进程区与 Endorphin 被共同框在 **Endor OS** 的边界内。这是此处对整体系统的命名;是否涉及内核层面的替换、哪些职责由底层 OS 保留,尚未在这张概念图中定义。
## 先记录下来的主张
我们希望讨论的变化,是让用户与 AI 不必总以一个个程序为唯一操作入口,而能以对象及其关系来组织工作。程序仍可以承担展示、交互和专业工作流;对象则有机会成为跨这些入口引用和组合能力的共同单位。
“交还操作权”不是开放任意内存访问,也不是绕过权限。它需要对象能够被明确定位,需要操作接口与授权边界,也需要让用户知道一次操作改变了什么。这些能力怎样落地,还需要后续设计。
## 接下来慢慢整理
- **对象是什么**:哪些东西应该成为可操作对象,身份和生命周期如何定义?
- **操作权是什么**:读取、修改、调用、组合与委托分别意味着什么,怎样授予和撤销?
- **AI 如何参与**:如何发现对象能力、请求授权,并让操作结果可以检查?
- **程序的位置**:Tessera、Web 与其他程序如何成为同一对象世界的不同入口?
- **运行边界**:对象跨进程、设备、自部署和平台运行时,哪些语义需要保持一致?
- **怎样验证意义**:用什么具体工作流说明这种组织方式给用户带来的变化?
本文先保留这些问题,随讨论逐项展开。[系统架构](/docs/00-endor-concepts-draft)讨论部署与存储,[节点与对象挂载](/docs/02-mounting-draft)讨论运行位置和挂载边界;这里关注的是它们最终为什么值得做。
Binary file not shown.

After

Width:  |  Height:  |  Size: 95 KiB

+5
View File
@@ -3,6 +3,7 @@ from pathlib import Path
import drawsvg as draw
from .architecture import build_architecture
from .deployment import build_deployment
from .purpose import build_purpose
def main() -> None:
@@ -41,3 +42,7 @@ def main() -> None:
deployment = output.parent / "endor-deployment.svg"
build_deployment(deployment)
print(f"Generated {deployment.relative_to(root)}")
purpose = output.parent / "endor-purpose.svg"
build_purpose(purpose)
print(f"Generated {purpose.relative_to(root)}")
+146
View File
@@ -0,0 +1,146 @@
"""Paired concept views: application entry points versus authorized object operations."""
from pathlib import Path
import math
import random
import drawsvg as d
from .architecture import INK, GREEN, BLUE, PURPLE, MUTED, LINE, FONT
def build_purpose(output: Path) -> None:
svg = d.Drawing(1800, 1290)
svg.append_title('Endor 的意义:从访问程序到操作对象的对比示意')
svg.append(d.Rectangle(0,0,1800,1290,fill='#fcfdfb'))
rng = random.Random(20261028)
def text(s,x,y,size=16,color=INK,weight='400',anchor='start'):
svg.append(d.Text(s,size,x,y,fill=color,font_family=FONT,font_weight=weight,text_anchor=anchor))
def box(x,y,w,h,fill='white',stroke=LINE,r=12):
svg.append(d.Rectangle(x,y,w,h,rx=r,fill=fill,stroke=stroke,stroke_width=1.3))
def wire(points,color=GREEN,arrow=False,dash=None,width=1.5):
p=d.Path(fill='none',stroke=color,stroke_width=width,stroke_linejoin='round',stroke_dasharray=dash)
p.M(*points[0])
for pt in points[1:]: p.L(*pt)
svg.append(p)
if arrow:
x,y=points[-1]; px,py=points[-2]; a=math.atan2(y-py,x-px)
for sign in [-1,1]:
svg.append(d.Line(x-7*math.cos(a+sign*.48),y-7*math.sin(a+sign*.48),x,y,stroke=color,stroke_width=width))
def objects(x,y,w,h,count,color=GREEN,r=3.5):
points=[]
while len(points)<count:
px,py=x+rng.uniform(12,w-12),y+rng.uniform(12,h-12)
if all(math.hypot(px-qx,py-qy)>r*3.7 for qx,qy in points): points.append((px,py))
for px,py in points:
svg.append(d.Circle(px,py,r,fill='#eff6f1',stroke=color,stroke_width=1.2))
return points
def os(x,y):
for dy in [-21,-3,15]:
svg.append(d.Rectangle(x-40,y+dy,80,13,rx=3,fill='white',stroke=MUTED,stroke_width=1.6))
svg.append(d.Circle(x-30,y+dy+6,1.5,fill=MUTED))
svg.append(d.Line(x-17,y+dy+6,x+25,y+dy+6,stroke=MUTED,stroke_width=1.2))
text('OS',x,y+65,24,INK,'600','middle')
def person(x,y,ai=False):
if ai:
box(x-20,y-25,40,36,'#f5f1fa',PURPLE,8)
for dx in [-8,8]: svg.append(d.Circle(x+dx,y-8,2,fill=PURPLE))
wire([(x-8,y+4),(x+8,y+4)],PURPLE)
wire([(x,y-25),(x,y-35)],PURPLE)
svg.append(d.Circle(x,y-38,3,fill='white',stroke=PURPLE))
else:
svg.append(d.Circle(x,y-20,13,fill='#f1f6f3',stroke=GREEN,stroke_width=1.8))
svg.append(d.Path(fill='none',stroke=GREEN,stroke_width=1.8).M(x-25,y+23).Q(x-25,y-1,x,y-1).Q(x+25,y-1,x+25,y+23).Z())
text('AI' if ai else '用户',x,y+57,18,PURPLE if ai else INK,'600','middle')
text('ENDOR / WHY OBJECTS',40,43,14,GREEN,'600')
text('从程序入口,到对象的操作权',40,90,31,INK,'600')
text('一对概念图:改变用户与 AI 接触系统的基本单位。',40,123,16,MUTED)
# Panel one: unequal groups of processes map to application boundaries.
text('01',40,181,20,BLUE,'600')
text('以程序为入口',95,181,24,INK,'600')
text('OS',135,225,13,MUTED,'600','middle')
text('进程区 · 圆圈为进程中的对象',585,225,14,MUTED,'500','middle')
text('程序',1100,225,14,MUTED,'600','middle')
text('用户入口',1615,225,14,MUTED,'600','middle')
os(135,414)
wire([(178,414),(250,414),(250,286),(300,286)],BLUE)
wire([(250,414),(250,545),(300,545)],BLUE)
wire([(250,414),(300,414)],BLUE)
for row,(count,cy) in enumerate([(2,286),(4,414),(3,545)]):
box(300,cy-49,570,98,'#f7f9fb')
text(f'{count} 个进程',315,cy-27,11,MUTED)
pw=112
start=585-(count*pw+(count-1)*16)/2
for i in range(count):
px=start+i*(pw+16)
box(px,cy-15,pw,53,'white','#c6d8e7',7)
objects(px,cy-14,pw,50,6+rng.randrange(4),BLUE,r=3)
wire([(870,cy),(999,cy)],BLUE,arrow=True)
box(1000,cy-33,200,66,'white','#bdcfdc')
wire([(1013,cy-15),(1187,cy-15)],BLUE,width=1)
text(f'程序 {chr(65+row)}',1100,cy+14,20,INK,'600','middle')
wire([(1568,414),(1400,414),(1400,cy),(1202,cy)],BLUE,arrow=True)
person(1615,414)
text('界面 / Web / API',1394,611,15,BLUE,anchor='middle')
text('用户通过程序提供的入口访问功能;对象的组织与操作通常藏在程序内部。',300,640,16,MUTED)
# Panel two: OS, a small process pool and Endorphin belong to Endor OS.
text('02',40,709,20,GREEN,'600')
text('以对象为操作单位',95,709,24,INK,'600')
box(40,742,1410,421,'#f8fbf8','#a9cbbd',18)
box(64,758,162,36,'#eaf3ec','none',5)
text('Endor OS',145,783,21,GREEN,'600','middle')
text('OS',135,837,13,MUTED,'600','middle')
text('少量进程',415,837,14,MUTED,'600','middle')
os(135,961)
wire([(178,961),(270,961),(270,886),(335,886)],GREEN)
wire([(270,961),(335,961)],GREEN)
wire([(270,961),(270,1036),(335,1036)],GREEN)
for cy in [886,961,1036]:
box(335,cy-22,160,44,'white','#bdd5c8',7)
text('进程',415,cy+6,15,MUTED,anchor='middle')
wire([(495,cy),(555,cy),(555,961),(615,961)],GREEN,arrow=True,width=1.2)
box(615,807,805,322,'white','#cbded1',14)
text('Endorphin',644,845,25,INK,'600')
text('对象运行与操作空间',644,874,14,MUTED)
# Seeded randomness gives an organic network and reproducible repository assets.
nodes=[]
for i in range(43):
while True:
px,py=rng.uniform(845,1380),rng.uniform(843,1090)
if all(math.hypot(px-qx,py-qy)>33 for qx,qy in nodes): break
nodes.append((px,py))
edges=set()
for i,(px,py) in enumerate(nodes):
nearest=sorted((math.hypot(px-qx,py-qy),j) for j,(qx,qy) in enumerate(nodes) if j!=i)
for _,j in nearest[:2 if i%3 else 3]: edges.add(tuple(sorted((i,j))))
for i,j in sorted(edges): wire([nodes[i],nodes[j]],'#c8dcd2',width=1)
selected=sorted(range(len(nodes)),key=lambda i:nodes[i][0],reverse=True)[:7]
for i,(px,py) in enumerate(nodes):
svg.append(d.Circle(px,py,7 if i in selected else 5,
fill='#e5f1e8' if i in selected else 'white',
stroke=GREEN,stroke_width=1.8 if i in selected else 1.2))
text('对象',647,1000,17,GREEN,'600')
text('可引用 · 可组合',647,1028,13,MUTED)
text('按权限操作',647,1053,13,MUTED)
person(1630,888)
person(1630,1055,ai=True)
# Users/AI reach selected objects with explicit cubic Bezier curves.
for k,i in enumerate(selected):
px,py=nodes[i]
sy=888 if k<4 else 1055
color=GREEN if k<4 else PURPLE
control_y=790+k*45
svg.append(d.Path(fill='none',stroke=color,stroke_width=1.7,opacity=.85)
.M(1597,sy).C(1505,control_y,px+90,py-35,px,py))
svg.append(d.Circle(px,py,10,fill='none',stroke=color,stroke_width=1,opacity=.6))
text('选择对象 · 发起操作',1620,1196,16,GREEN,anchor='middle')
text('进程数量仅作概念对比,不代表性能测量或固定部署要求。',40,1220,13,MUTED)
text('圆圈 = 对象 细线 = 对象关系 贝塞尔曲线 = 用户 / AI 对选定对象的操作',40,1253,14,MUTED)
text('讨论草案',1730,1253,13,MUTED,anchor='end')
svg.save_svg(str(output))