Files
Pine daf3532120 refactor: 工作区多仓库结构定版 + 总设计文档迁根目录
- 总设计文档迁至根目录(云超服一体化架构设计方案.md,figures/ 随迁)
- 设计文档补充 §十二 各代码项目工作原理
- code 六个子项目转独立仓库(组织 Pine),移出根跟踪、保留文件夹
- CLAUDE.md 补充主项目/子项目约束(分别提交、同步全子项目)
2026-08-23 22:47:22 +08:00

106 lines
7.3 KiB
XML
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1000 800" width="1000" height="800" font-family="'PingFang SC','Microsoft YaHei','Noto Sans SC',system-ui,sans-serif">
<defs>
<marker id="ah" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse">
<path d="M0,0 L10,5 L0,10 z" fill="#4f46e5"/>
</marker>
<marker id="ah-teal" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse">
<path d="M0,0 L10,5 L0,10 z" fill="#0d9488"/>
</marker>
<filter id="shadow" x="-8%" y="-8%" width="120%" height="130%">
<feDropShadow dx="0" dy="2" stdDeviation="3" flood-color="#0f172a" flood-opacity="0.10"/>
</filter>
</defs>
<rect x="0" y="0" width="1000" height="800" fill="#fbfcfe"/>
<text x="500" y="38" text-anchor="middle" font-size="22" font-weight="700" fill="#0f172a">统一身份 · 多端互通</text>
<text x="500" y="62" text-anchor="middle" font-size="13" fill="#64748b">账号密码 / 手机号 / 微信 → 同一个身份 → 数据全部归属 user_id</text>
<!-- 三种登录 -->
<g filter="url(#shadow)">
<rect x="70" y="90" width="260" height="90" rx="12" fill="#ffffff" stroke="#16a34a" stroke-width="2"/>
<text x="92" y="118" font-size="15" font-weight="700" fill="#15803d">桌面 / 管理端</text>
<text x="92" y="142" font-size="12" fill="#334155">账号密码 + select-identity</text>
<text x="92" y="162" font-size="11" fill="#64748b">智能体桌面 · admin管理平台</text>
</g>
<g filter="url(#shadow)">
<rect x="370" y="90" width="260" height="90" rx="12" fill="#ffffff" stroke="#16a34a" stroke-width="2"/>
<text x="392" y="118" font-size="15" font-weight="700" fill="#15803d">web业务</text>
<text x="392" y="142" font-size="12" fill="#334155">手机号 + 验证码</text>
<text x="392" y="162" font-size="11" fill="#64748b">/auth/send-code · phone-login</text>
</g>
<g filter="url(#shadow)">
<rect x="670" y="90" width="260" height="90" rx="12" fill="#ffffff" stroke="#16a34a" stroke-width="2"/>
<text x="692" y="118" font-size="15" font-weight="700" fill="#15803d">小程序</text>
<text x="692" y="142" font-size="12" fill="#334155">微信 wx.login</text>
<text x="692" y="162" font-size="11" fill="#64748b">getPhoneNumber 一键绑号</text>
</g>
<!-- 三端 → 身份域 -->
<line x1="200" y1="180" x2="200" y2="260" stroke="#4f46e5" stroke-width="2" marker-end="url(#ah)"/>
<line x1="500" y1="180" x2="500" y2="260" stroke="#4f46e5" stroke-width="2" marker-end="url(#ah)"/>
<line x1="800" y1="180" x2="800" y2="260" stroke="#4f46e5" stroke-width="2" marker-end="url(#ah)"/>
<!-- 身份域 -->
<g filter="url(#shadow)">
<rect x="70" y="260" width="860" height="170" rx="14" fill="#eef2ff" stroke="#6366f1" stroke-width="2"/>
<text x="92" y="292" font-size="17" font-weight="700" fill="#4338ca">核心服务端 · 身份域(PineAgentsServer</text>
<text x="92" y="316" font-size="12" fill="#4f46e5">同一账号 = 同一个 user_id,可挂多个端口身份</text>
<rect x="90" y="336" width="255" height="80" rx="10" fill="#ffffff" stroke="#a5b4fc" stroke-width="1.5"/>
<text x="108" y="360" font-size="13" font-weight="700" fill="#4338ca">users</text>
<text x="108" y="382" font-size="11" fill="#4f46e5">username / phone / 微信 openid</text>
<text x="108" y="400" font-size="11" fill="#4f46e5">密码哈希 + 加盐</text>
<rect x="365" y="336" width="255" height="80" rx="10" fill="#ffffff" stroke="#a5b4fc" stroke-width="1.5"/>
<text x="383" y="360" font-size="13" font-weight="700" fill="#4338ca">user_identities</text>
<text x="383" y="382" font-size="11" fill="#4f46e5">一账号多端口身份</text>
<text x="383" y="400" font-size="11" fill="#4f46e5">port / role / sub_role / region</text>
<rect x="640" y="336" width="270" height="80" rx="10" fill="#ffffff" stroke="#a5b4fc" stroke-width="1.5"/>
<text x="658" y="360" font-size="13" font-weight="700" fill="#4338ca">select-identity</text>
<text x="658" y="382" font-size="11" fill="#4f46e5">按身份签发 token</text>
<text x="658" y="400" font-size="11" fill="#4f46e5">角色 / 权限 / 数据范围即时生效</text>
</g>
<!-- 身份域 → 端口 -->
<line x1="500" y1="430" x2="500" y2="500" stroke="#4f46e5" stroke-width="2" marker-end="url(#ah)"/>
<text x="514" y="472" font-size="11" fill="#4f46e5" font-weight="600" paint-order="stroke" stroke="#fff" stroke-width="3">选择身份</text>
<!-- 七端口 -->
<g filter="url(#shadow)">
<rect x="70" y="500" width="860" height="72" rx="12" fill="#ffffff" stroke="#818cf8" stroke-width="1.5"/>
<text x="92" y="524" font-size="12" font-weight="700" fill="#6366f1">七端口</text>
</g>
<g font-size="11.5" fill="#4338ca" font-weight="600">
<rect x="170" y="512" width="86" height="46" rx="8" fill="#eef2ff" stroke="#c7d2fe" stroke-width="1"/>
<text x="213" y="539" text-anchor="middle">opc_member</text>
<rect x="264" y="512" width="70" height="46" rx="8" fill="#eef2ff" stroke="#c7d2fe" stroke-width="1"/>
<text x="299" y="539" text-anchor="middle">operator</text>
<rect x="342" y="512" width="82" height="46" rx="8" fill="#eef2ff" stroke="#c7d2fe" stroke-width="1"/>
<text x="383" y="539" text-anchor="middle">government</text>
<rect x="432" y="512" width="72" height="46" rx="8" fill="#eef2ff" stroke="#c7d2fe" stroke-width="1"/>
<text x="468" y="539" text-anchor="middle">enterprise</text>
<rect x="512" y="512" width="66" height="46" rx="8" fill="#eef2ff" stroke="#c7d2fe" stroke-width="1"/>
<text x="545" y="539" text-anchor="middle">provider</text>
<rect x="586" y="512" width="60" height="46" rx="8" fill="#eef2ff" stroke="#c7d2fe" stroke-width="1"/>
<text x="616" y="539" text-anchor="middle">carrier</text>
<rect x="654" y="512" width="70" height="46" rx="8" fill="#eef2ff" stroke="#c7d2fe" stroke-width="1"/>
<text x="689" y="539" text-anchor="middle">investor</text>
<rect x="732" y="512" width="78" height="46" rx="8" fill="#eef2ff" stroke="#c7d2fe" stroke-width="1"/>
<text x="771" y="539" text-anchor="middle">developer</text>
</g>
<!-- 端口 → 业务数据 -->
<line x1="500" y1="572" x2="500" y2="650" stroke="#0d9488" stroke-width="2" marker-end="url(#ah-teal)"/>
<text x="514" y="618" font-size="11" fill="#0d9488" font-weight="600" paint-order="stroke" stroke="#fff" stroke-width="3">以身份访问业务</text>
<!-- 业务数据 -->
<g filter="url(#shadow)">
<rect x="70" y="650" width="860" height="100" rx="14" fill="#f0fdf4" stroke="#16a34a" stroke-width="2"/>
<text x="92" y="680" font-size="16" font-weight="700" fill="#15803d">业务数据 · 全部归属 user_id</text>
<text x="92" y="706" font-size="12" fill="#334155">课程报名 · 测评结果 · 算力额度 · 入驻申请 · 财务流水 · 工商代办 · 政策申报</text>
<text x="92" y="728" font-size="11" fill="#64748b">→ 同一人在智能体桌面 / 管理平台 / web业务 / 小程序 / 官网 / 大屏任意一端操作,数据落在同一身份上</text>
</g>
<text x="500" y="785" text-anchor="middle" font-size="11" fill="#94a3b8">大屏 = 园区账号(carrier 身份);官网 = 公开访问;均复用同一身份体系(六端共用)。</text>
</svg>