Merge branch 'yongxu-dev' into devlop
# Conflicts: # miniprogram/pages/profile-edit/profile-edit.js # miniprogram/pages/profile-edit/profile-edit.wxml # miniprogram/pages/settings/settings.js # miniprogram/utils/ruleEngine.js # soul-admin/src/pages/distribution/DistributionPage.tsx # soul-admin/src/pages/users/UsersPage.tsx # soul-api/.env.production # soul-api/.gitignore # soul-api/internal/handler/db_ckb_leads.go # soul-api/internal/handler/miniprogram.go # soul-api/internal/handler/referral.go # 开发文档/1、需求/archive/链接人与事-存客宝同步-需求规划.md # 开发文档/1、需求/archive/链接人与事-实现方案.md
This commit is contained in:
0
.cursor/agent/安全工程师/evolution/.gitkeep
Normal file
0
.cursor/agent/安全工程师/evolution/.gitkeep
Normal file
32
.cursor/agent/安全工程师/evolution/2026-03-20-挖矿与服务器Skills.md
Normal file
32
.cursor/agent/安全工程师/evolution/2026-03-20-挖矿与服务器Skills.md
Normal file
@@ -0,0 +1,32 @@
|
||||
# 挖矿病毒排查与服务器操作 Skills 创建
|
||||
|
||||
**日期**:2026-03-20
|
||||
|
||||
## 背景
|
||||
|
||||
基于 agent 记录(3b9e0fa0、bc781e1b、1c1a81c3 等)中挖矿病毒排查经验,以及本地部署脚本(devloy.py、master.py、soul-admin/deploy.py、Cunkebao/miner_guard_install.py 等),将经验吸收转化为 Skills。
|
||||
|
||||
## 新增 Skills
|
||||
|
||||
### 1. security-miner-guard
|
||||
|
||||
- **路径**:`.cursor/skills/security-miner-guard/SKILL.md`
|
||||
- **触发词**:挖矿病毒、xmrig、服务器被入侵、miner_guard、安全排查、杀挖矿
|
||||
- **内容**:挖矿病毒特征、入侵链路、排查脚本、加固建议、miner_guard 安装与检查
|
||||
|
||||
### 2. security-server-ops
|
||||
|
||||
- **路径**:`.cursor/skills/security-server-ops/SKILL.md`
|
||||
- **触发词**:部署、服务器操作、SSH、宝塔、devloy、master、Cunkebao 部署
|
||||
- **内容**:服务器索引、部署脚本索引、环境变量一览、常用操作(不含明文密码)
|
||||
|
||||
## 配置更新
|
||||
|
||||
- `paths.py`:新增 `AGENT_SECURITY`、`ROLE_TO_AGENT["安全工程师"]`
|
||||
- `老板分身-索引.mdc`:经验自动收集推断增加「挖矿/安全/服务器操作→安全工程师」
|
||||
- `soul-project-boundary.mdc`:按语义触发词增加安全工程师及对应 Skills
|
||||
|
||||
## 安全提醒
|
||||
|
||||
- Skills 中**不写入明文密码**,仅说明配置来源(环境变量、脚本 get_cfg())
|
||||
- 建议将 master.py、devloy.py 等中的默认密码迁移到环境变量
|
||||
26
.cursor/agent/安全工程师/evolution/2026-03-20-管理端部署触发词.md
Normal file
26
.cursor/agent/安全工程师/evolution/2026-03-20-管理端部署触发词.md
Normal file
@@ -0,0 +1,26 @@
|
||||
# 管理端部署触发词约定
|
||||
|
||||
**日期**:2026-03-20
|
||||
|
||||
## 场景
|
||||
|
||||
用户说「管理端帮我部署到xx环境」时,安全工程师应语义化解析 xx,直接执行对应部署脚本。
|
||||
|
||||
## 解决方案
|
||||
|
||||
- **触发词**:管理端帮我部署到xx环境(语义化,理解意图即可)
|
||||
- **脚本映射**:
|
||||
- 含「正式」「线上」「生产」→ `cd soul-admin && python master.py`(正式环境,/www/wwwroot/self/soul-admin)
|
||||
- 含「测试」「dev」→ `cd soul-admin && python deploy.py`(测试环境,/www/wwwroot/self/soul-admin-dev)
|
||||
|
||||
## soul-admin 部署脚本
|
||||
|
||||
| 脚本 | 环境 | 目标目录 | 构建命令 |
|
||||
|------|------|----------|----------|
|
||||
| master.py | 正式 | soul-admin | pnpm build |
|
||||
| deploy.py | 测试 | soul-admin-dev | pnpm run build:dev |
|
||||
|
||||
## 已升级 Skills
|
||||
|
||||
1. **security-server-ops**:何时使用表、2.2 soul-admin 脚本索引、4.4/4.5 常用操作
|
||||
2. **soul-project-boundary**:按场景触发词表新增
|
||||
18
.cursor/agent/安全工程师/evolution/2026-03-20-部署API触发词.md
Normal file
18
.cursor/agent/安全工程师/evolution/2026-03-20-部署API触发词.md
Normal file
@@ -0,0 +1,18 @@
|
||||
# 部署 API 触发词约定
|
||||
|
||||
**日期**:2026-03-20
|
||||
|
||||
## 场景
|
||||
|
||||
用户说「帮我部署api到线上」时,安全工程师应直接执行部署脚本,无需再询问或选择。
|
||||
|
||||
## 解决方案
|
||||
|
||||
- **触发词**:帮我部署api到线上
|
||||
- **动作**:直接执行 `cd soul-api && python master.py`
|
||||
- **脚本**:`soul-api/master.py`(soul-api 正式环境部署)
|
||||
|
||||
## 已升级 Skills
|
||||
|
||||
1. **security-server-ops**:何时使用表新增该触发词,明确直接执行命令
|
||||
2. **soul-project-boundary**:按场景触发词表新增,加载 security-server-ops 后执行
|
||||
9
.cursor/agent/安全工程师/evolution/索引.md
Normal file
9
.cursor/agent/安全工程师/evolution/索引.md
Normal file
@@ -0,0 +1,9 @@
|
||||
# 安全工程师 经验索引
|
||||
|
||||
> 挖矿病毒排查、服务器加固、部署与运维相关经验。
|
||||
|
||||
| 日期 | 摘要 | 文件 |
|
||||
|------|------|------|
|
||||
| 2026-03-20 | 挖矿病毒排查经验转化为 Skills;服务器操作 Skill 创建 | 2026-03-20-挖矿与服务器Skills.md |
|
||||
| 2026-03-20 | 「帮我部署api到线上」→ 执行 soul-api/master.py | 2026-03-20-部署API触发词.md |
|
||||
| 2026-03-20 | 「管理端帮我部署到xx环境」→ 语义化解析,正式→master.py,测试→deploy.py | 2026-03-20-管理端部署触发词.md |
|
||||
41
.cursor/agent/小程序开发工程师/evolution/2026-03-19-原生按钮覆盖定位.md
Normal file
41
.cursor/agent/小程序开发工程师/evolution/2026-03-19-原生按钮覆盖定位.md
Normal file
@@ -0,0 +1,41 @@
|
||||
# 原生按钮覆盖定位,避免样式干扰
|
||||
|
||||
**日期**:2026-03-19
|
||||
**场景**:小程序中需在头像、图片等区域触发 `open-type="chooseAvatar"` 等原生能力,用 `<button>` 包裹会导致原生样式(灰色矩形、边框等)影响界面。
|
||||
|
||||
**方案**:**不用 button 包裹**,改为 **button 绝对定位覆盖** 在目标区域上方。
|
||||
|
||||
## 正确结构
|
||||
|
||||
```html
|
||||
<!-- 外层:position: relative 作为定位参考 -->
|
||||
<view class="avatar-wrap">
|
||||
<!-- 实际展示内容:头像、徽章等 -->
|
||||
<view class="avatar-inner">...</view>
|
||||
<view class="vip-badge">VIP</view>
|
||||
<!-- 透明 button 覆盖在上方,同级而非包裹 -->
|
||||
<button class="avatar-overlay-btn" open-type="chooseAvatar" bindchooseavatar="onChooseAvatar"></button>
|
||||
</view>
|
||||
```
|
||||
|
||||
```css
|
||||
.avatar-wrap { position: relative; }
|
||||
.avatar-overlay-btn {
|
||||
position: absolute; top: 0; left: 0;
|
||||
width: 130rpx; height: 130rpx; /* 与头像一致 */
|
||||
padding: 0; margin: 0;
|
||||
background: transparent; border: none;
|
||||
}
|
||||
.avatar-overlay-btn::after { border: none; }
|
||||
```
|
||||
|
||||
## 要点
|
||||
|
||||
- **同级关系**:button 与展示元素是 sibling,不是 parent-child
|
||||
- **绝对定位**:`position: absolute` 覆盖在目标区域上,不参与文档流
|
||||
- **透明无内容**:button 仅负责点击事件,样式完全透明
|
||||
- **适用**:chooseAvatar、open-type 等需 button 触发的原生能力
|
||||
|
||||
## 升级 Skill
|
||||
|
||||
已写入 `miniprogram-dev` SKILL §12。
|
||||
39
.cursor/agent/小程序开发工程师/evolution/2026-03-20-手机号登录与公用组件.md
Normal file
39
.cursor/agent/小程序开发工程师/evolution/2026-03-20-手机号登录与公用组件.md
Normal file
@@ -0,0 +1,39 @@
|
||||
# 手机号一键登录与登录弹窗公用组件
|
||||
|
||||
> 日期:2026-03-20 | 角色:小程序开发工程师
|
||||
|
||||
## 问题与场景
|
||||
|
||||
1. **getPhoneNumber 不弹窗**:点击手机号登录按钮时,无法弹出手机号选择界面,也无法获取手机号
|
||||
2. **登录弹窗重复**:read、my、gift-pay/detail 三处各自维护一套登录弹窗,逻辑重复、维护成本高
|
||||
3. **登录后手机号未同步**:手机号登录后若响应中 user.phone 为空,本地 userInfo 未更新
|
||||
|
||||
## 解决方案
|
||||
|
||||
### 1. getPhoneNumber 必须与隐私协议耦合
|
||||
|
||||
- **open-type**:`open-type="getPhoneNumber|agreePrivacyAuthorization"`(基础库 2.32.3+)
|
||||
- **onNeedPrivacyAuthorization**:app.js 中需将使用 getPhoneNumber 的页面加入支持列表,否则会 `resolve({ event: 'disagree' })` 导致获取失败
|
||||
- **支持页面**:avatar-nickname、profile-edit、read、my、gift-pay/detail、index、settings
|
||||
- **隐私弹窗**:当 onNeedPrivacyAuthorization 触发时,页面需有 `showPrivacyModal` + `<button open-type="agreePrivacyAuthorization">` 供用户同意
|
||||
|
||||
### 2. 登录弹窗公用组件
|
||||
|
||||
- **组件路径**:`components/login-modal/`
|
||||
- **使用方式**:`<login-modal show="{{showLoginModal}}" desc="..." showPrivacyModal="{{showPrivacyModal}}" showCancel="{{true}}" bind:close="..." bind:success="..." bind:privacyagree="..." />`
|
||||
- **适用页面**:read、my、gift-pay/detail
|
||||
- **app.json**:全局注册 `"login-modal": "/components/login-modal/login-modal"`
|
||||
|
||||
### 3. 登录后手机号同步
|
||||
|
||||
- **loginWithPhone 后**:若 `user.phone` 为空,调用 `_syncPhoneFromProfileAfterLogin(userId)` 从 profile 拉取最新
|
||||
- **checkLoginStatus 恢复缓存时**:若 `userInfo.phone` 为空,调用 `_refreshUserInfoIfPhoneEmpty()` 静默刷新
|
||||
|
||||
## 管理后台配置
|
||||
|
||||
- **隐私保护指引**:小程序管理后台 → 设置 → 用户隐私保护指引,必须声明「收集你选择的手机号」
|
||||
- **主体限制**:个人主体小程序无法使用 getPhoneNumber
|
||||
|
||||
## 升级 Skill
|
||||
|
||||
- miniprogram-dev SKILL §8 补充 getPhoneNumber 耦合与 onNeedPrivacyAuthorization 页面支持
|
||||
@@ -13,3 +13,5 @@
|
||||
| 2026-03-14 | 我的页设置入口隐藏;资料修改引导场景梳理(登录后、@某人、找伙伴、链接卡若) | [2026-03-14.md](./2026-03-14.md) |
|
||||
| 2026-03-16 | 编辑资料页分享名片:转发/朋友圈特殊处理,Canvas 绘制封面,标题「昵称+为您分享名片」 | [2026-03-16.md](./2026-03-16.md) |
|
||||
| 2026-03-17 | 代付美团式:读页→代付页→分享;详情页双态(发起人/好友);目录 loading、最新新增 5 条折叠 | [2026-03-17.md](./2026-03-17.md) |
|
||||
| 2026-03-19 | 原生按钮覆盖定位:chooseAvatar 等用绝对定位 overlay 覆盖,禁止 button 包裹,避免原生样式影响 | [2026-03-19-原生按钮覆盖定位.md](./2026-03-19-原生按钮覆盖定位.md) |
|
||||
| 2026-03-20 | 手机号一键登录与公用组件:getPhoneNumber 耦合 agreePrivacyAuthorization;login-modal 组件;登录后手机号同步 | [2026-03-20-手机号登录与公用组件.md](./2026-03-20-手机号登录与公用组件.md) |
|
||||
|
||||
@@ -53,6 +53,10 @@
|
||||
| 2026-03-17 | 后端、团队 | 架构/最佳实践 | api-dev SKILL | Redis 缓存:parts/hot/recommended/stats/config/章节 content;容灾回退 DB;OSS 上传;/health 返回 database/redis 状态 |
|
||||
| 2026-03-18 | 小程序、团队 | 业务规则/最佳实践 | - | 分享链路兼容好友/朋友圈 singlePage:单页模式能力降级(不支付/不自动领取),引导点击底部“前往小程序”进入完整版 |
|
||||
| 2026-03-18 | 产品、后端、管理端、测试 | 文档归档/需求口径 | - | 文档归档整理:以《以界面定需求》为基准,各角色重整“功能需求+验收口径+风险点”并写入各自经验库;补齐《项目落地推进表》 |
|
||||
| 2026-03-19 | 小程序 | 最佳实践 | miniprogram-dev SKILL §11 | 原生按钮覆盖定位:chooseAvatar 等用绝对定位 overlay 覆盖,禁止 button 包裹,避免原生样式影响(灰色矩形等) |
|
||||
| 2026-03-20 | 安全工程师 | 触发词约定 | security-server-ops、soul-project-boundary | 「帮我部署api到线上」→ 直接执行 soul-api/master.py |
|
||||
| 2026-03-20 | 安全工程师 | 触发词约定 | security-server-ops、soul-project-boundary | 「管理端帮我部署到xx环境」→ 语义化解析:正式→master.py,测试→deploy.py |
|
||||
| 2026-03-20 | 小程序 | 最佳实践 | miniprogram-dev SKILL §8 | 手机号登录:getPhoneNumber 需耦合 agreePrivacyAuthorization;onNeedPrivacyAuthorization 支持页面;登录弹窗公用组件 login-modal |
|
||||
|
||||
---
|
||||
|
||||
@@ -63,4 +67,4 @@
|
||||
|
||||
---
|
||||
|
||||
**最后更新**:2026-03-18
|
||||
**最后更新**:2026-03-20
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
|
||||
## 项目总结
|
||||
|
||||
Soul 创业派对产品定位:面向创业者的社区/工具型小程序。核心需求文档在 `开发文档/1、需求/需求汇总.md`,项目推进表在 `开发文档/10、项目管理/项目落地推进表.md`,临时需求/分析在 `临时需求池/`。
|
||||
Soul 创业派对产品定位:面向创业者的社区/工具型小程序。核心需求文档在 `开发文档/1、需求/`(按日期命名,以最新为主;见 `1、需求/索引.md`),项目推进表在 `开发文档/10、项目管理/项目落地推进表.md`,临时需求/分析在 `临时需求池/`。
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -31,9 +31,11 @@ Soul 创业派对全项目架构与约定:路由隔离(miniprogram/admin/db
|
||||
| 2026-03-17 | 性能优化与 Redis 缓存方案落地:Redis 容灾回退 DB、OSS 上传容灾;/health 返回 database/redis 状态 | 已完成 |
|
||||
| 2026-03-18 | 吸收经验:分享进入链路需兼容朋友圈 singlePage;单页模式不执行支付/自动领取等强动作并引导“前往小程序” | 已完成 |
|
||||
| 2026-03-18 | 会议:超级个体开通后自动创建@人统一走 Person;幂等键绑定 userId;默认资料 flags 后端输出 | 已完成 |
|
||||
| 2026-03-20 | 「帮我部署api到线上」→ 安全工程师执行 soul-api/master.py;security-server-ops、soul-project-boundary 触发词升级 | 已完成 |
|
||||
| 2026-03-20 | 「管理端帮我部署到xx环境」→ 语义化解析:正式/线上/生产→master.py,测试/dev→deploy.py;soul-admin 部署脚本索引 | 已完成 |
|
||||
|
||||
> **格式说明**:每次架构级讨论后在此追加一行,日期格式 YYYY-MM-DD
|
||||
|
||||
---
|
||||
|
||||
**最后更新**:2026-03-18
|
||||
**最后更新**:2026-03-20
|
||||
|
||||
@@ -41,9 +41,11 @@
|
||||
| 2026-03-17 | 会议收尾:源码优化 5 项全部完成;开发环境测试通过 | 已完成 |
|
||||
| 2026-03-18 | 吸收经验:分享链路需兼容好友/朋友圈 singlePage;单页模式能力降级并引导“前往小程序”进入完整版 | 已完成 |
|
||||
| 2026-03-18 | 会议:支付超级个体前/开通后资料默认校验,跳转 avatar-nickname 引导页(仅头像+昵称) | 已完成 |
|
||||
| 2026-03-19 | 吸收经验:原生按钮覆盖定位,chooseAvatar 用绝对定位 overlay 覆盖头像,禁止 button 包裹,已升级 SKILL §11 | 已完成 |
|
||||
| 2026-03-20 | 手机号一键登录:getPhoneNumber 耦合 agreePrivacyAuthorization;onNeedPrivacyAuthorization 支持 read/my/gift-pay/index/settings;登录弹窗公用组件 components/login-modal;登录后手机号同步 _syncPhoneFromProfileAfterLogin | 已完成 |
|
||||
|
||||
> **格式说明**:每次开发后在此追加一行,日期格式 YYYY-MM-DD,状态用:已完成 / 进行中 / 待续 / 搁置
|
||||
|
||||
---
|
||||
|
||||
**最后更新**:2026-03-18
|
||||
**最后更新**:2026-03-20
|
||||
|
||||
Reference in New Issue
Block a user