gjm
|
877938c82c
|
chore: 记忆新增「改完记忆自动同步」约定
用户 2026-09-27 明确要求:以后改完记忆自动同步到仓库,不需要提醒。
- 新增 feedback_memory_sync.md 记录该要求与执行细节
- MEMORY.md 索引补一行
|
2026-09-27 20:30:43 +08:00 |
|
gjm
|
ad4854fdb3
|
chore: 固定 .ai-memory 用 LF 换行符
core.autocrlf=true 会让 clone 时把记忆文件转成 CRLF,导致「记忆目录 <-> 仓库」
逐字节比对始终有噪音。加 .gitattributes 指定 .ai-memory/*.md 使用 eol=lf。
|
2026-09-27 20:28:29 +08:00 |
|
gjm
|
6c5770b754
|
chore: 新增 .ai-memory 记忆备份,换机器可恢复
CodeBuddy 的记忆原本只存在本机用户目录(不进版本控制),换机器即丢失。
把 5 个记忆文件备份进仓库,clone 后让助手「从 .ai-memory/ 导入记忆」即可恢复。
- README 说明用途、导入方法与维护约定
- CODEBUDDY.md 补充同步约定(改完记忆须同步本目录)
- 内容仅含基础设施信息(IP/域名/用户名),无任何密码或密钥
|
2026-09-27 20:27:45 +08:00 |
|
gjm
|
f167550957
|
feat: 新增 /admin 只读授权管理后台
- admin.py:HTTP Basic Auth + 服务端渲染单页,概览统计 / 用户与当前授权 /
最近使用记录 / 会话令牌 / 扫码场景五个区块
- ADMIN_PASSWORD 为空时返回 503 而非放行,避免漏配密码导致全库数据公开
- 不引模板引擎与 CDN,所有入库文本经 html.escape;令牌只显示首尾便于比对
- config.py / .env.example 新增 ADMIN_USER / ADMIN_PASSWORD
- wechat.py 挂载 admin.router;CODEBUDDY.md 补充文档
|
2026-09-27 20:03:59 +08:00 |
|
gjm
|
3a8adda365
|
docs: 更新 CODEBUDDY.md 架构章节至阶段 2 现状
- 项目概述补充 /auth、/usage 与 MySQL 已接入
- 架构补齐 db.py / wechat_api.py / auth.py / usage.py / sql/schema.sql
- 新增「授权与扣减状态机」与「数据库」两节:互斥原则、惰性激活、
免费授权幂等、积分扣减的 SET 求值顺序、session 校验、日志节流
- 约定补充:新增对外路由需同步加 Nginx location 块
|
2026-09-27 15:18:43 +08:00 |
|
gjm
|
cfb2a36c87
|
feat: 阶段 2 - /usage/consume、pending 授权惰性激活
- usage.py: POST /usage/consume,事务内校验会话(严格 device_id)、
激活 pending、按 time/points 分支扣减;失败返回 ok:false + reason
- 积分扣减用条件 UPDATE 原子完成,status 赋值写在自减之前
(MySQL SET 从左到右求值,否则 IF 读到已减 1 的值,判空差 1)
- 时间授权 usage_logs 按 (user_id, device_id) 60 秒节流;积分每次必写
- auth.py: 新增 activate_pending_authorization(),失效 active 后
FIFO 激活 pending,时间授权按原时长从当前时刻重新锚定
- get_status/handle_scan 接入惰性激活;get_status 改事务包裹
- _get_active_authorization/_serialize_authorization 改公开供 usage 复用
- config/.env.example: 新增 USAGE_LOG_THROTTLE_SECONDS
|
2026-09-27 15:00:02 +08:00 |
|
gjm
|
a798fbad60
|
fix: need_purchase 时微信回复文案不再误报"授权成功"
handle_scan() 原先只返回场景是否绑定成功,导致无可用授权的用户扫码后
微信里收到"授权成功"、而 MFC 轮询拿到 need_purchase,提示不一致。
改为返回 authorized / need_purchase / invalid 三种结果,与 /auth/status
的 status 取值保持一致,wechat.py 据此选择回复文案。
|
2026-09-26 23:58:20 +08:00 |
|
gjm
|
ab1f2e68d3
|
chore: .gitignore 忽略 .env.* 备份文件,保留 .env.example
.env.bak.* 由部署时备份 .env 产生,含明文数据库密码,需排除在版本控制外。
|
2026-09-26 23:43:45 +08:00 |
|
gjm
|
3790821ce0
|
feat: 阶段 1 最小闭环 - 建表 SQL、/wechat 事件、/auth 接口、首次关注免费授权
- sql/schema.sql: users/authorizations/auth_scenes/usage_logs + sessions 建表
- db.py: aiomysql 连接池,lifespan 内初始化与释放
- wechat_api.py: access_token 缓存 + 临时二维码创建
- auth.py: /auth/create_scene、/auth/status,handle_scan 事务内幂等处理扫码
- wechat.py: 接入 DB 生命周期,处理 subscribe/SCAN 事件;移除多余的 openid query 参数
- 首次关注赠送 7 天免费授权,has_claimed_free 条件更新保证幂等
- config.py/.env.example: 新增 FREE_AUTH_DAYS/SCENE_TTL_SECONDS/SESSION_TTL_HOURS
|
2026-09-26 22:25:02 +08:00 |
|
gjm
|
a2185104ad
|
Add FastAPI wechat app: config, wechat handler, run scripts, requirements, env template
|
2026-09-25 20:58:11 +08:00 |
|
gjm
|
b193b29e3a
|
Merge branch 'main' of https://github.com/LittleGuo/wx-scan-authorize
|
2026-09-25 20:11:55 +08:00 |
|
gjm
|
d37f6696b6
|
init
|
2026-09-25 20:08:51 +08:00 |
|