浅念
|
8f2a73c5d4
|
feat(site-import): 抓取编排与内存任务表
crawler:BFS ≤10 页(深度 ≤2)+ 入口双重门(非 html 零页/SPA 空壳)+
薄子页跳过 + CSS/logo 15s 追抓(MIME+魔数双验 ≤2MB → base64 data URL)
+ 总文本 <1K 内容不足 + 主色默认 #066fc0 回退;logo 相对路径对入口绝对化。
task:(slug, task_id) 联合索引内存表 + 30 分钟惰性清理 + 强引用防 GC +
全平台并发 ≤2(复活同占名额)+ 频控 3 次/15min(新建与 retry 同计,
SlidingWindowCounter 同款独立实例)+ 7 分钟总超时兜底(生成段超时标
generate 可 retry=generate 复活不重抓)+ 内容不足三触发失败文案映射。
conftest 增 autouse 复位夹具(任务表/频控单例跨测试隔离)。
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-20 20:57:50 +08:00 |
|
浅念
|
2e40901d26
|
docs: Task6 消费方备忘(build签名/超时语义/es降级)
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-20 20:26:03 +08:00 |
|
浅念
|
57a9d3f344
|
fix(site-import): specs_published 严格 is True 判定(字符串false防静默错分支)
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-20 20:25:40 +08:00 |
|
浅念
|
e924b3a6a4
|
feat(site-import): 两段生成器与数字校验器
Task 5:app/platform/site_import/generator.py——AI 两段(行业分析/
内容填槽,GEN1/GEN2 系统提示含数据边界声明与 JSON 严格指令)+
数字校验器(全半角/单位/千分位/波浪号归一比对,违例剔除+孤立单位
清理)+ spec §4 草稿组装(占位符填槽/出厂默认兜底/规格公开分支/
模板残留剔除/墙尾巴三语 es 降级 null)。create_provider 加可选
max_tokens 透传(默认 None 既有调用零影响);MAX_TOKENS_TARGET=8192
(Task 1 探针结论)。AI 调用 wait_for 120s 包裹,超时不吃重试预算。
测试 38 条(provider 全 fake),全量 774 passed + 2 skipped。
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-20 20:10:16 +08:00 |
|
浅念
|
255c273f6b
|
docs: Task5 消费方备忘(占位符实数/双填/语言分统称)
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-20 19:44:33 +08:00 |
|
浅念
|
70e1355489
|
feat(site-import): 行为骨架模板与 few-shot 语料
- template/ 四件套:system/extractor/evaluator 骨架 + placeholders.json 占位符清单
(system 15 个占位符,固定段与 jiancai 原文逐字一致——行级来源审计 0 缺失)
- fewshot/ 语料摘录:yotaienergys/televicsic 两生产租户四件套行业化片段
(10592 字节 ≤18000 上限),README 含来源声明与数据治理记档
- tests/test_site_import_template.py:行业残留黑名单/占位符对称/红线锚点/
行级来源/fewshot 尺寸与用途段守卫,7 条
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-20 19:35:08 +08:00 |
|
浅念
|
74c2915f25
|
fix(site-import): extract 清洗未闭合块/style 守卫/logo 日期钉位
评审收口三项:clean_html 配对块清理后兜底删 EOF 未闭合块(>500KB
截断防 script/style 泄漏误判 is_thin,顺序钉死配对先行);style 属性
正则补 \s 守卫(data-style 不参与配色计数);FIXTURE_WP 旧日期 logo
前置使日期优先真被甄别(首现即胜的伪绿不再成立)。
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-20 19:06:57 +08:00 |
|
浅念
|
c44aad6abd
|
docs: Task6 消费方备忘(默认色/入口去重/截断兜底)
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-20 19:00:44 +08:00 |
|
浅念
|
00614876d8
|
feat(site-import): HTML 清洗与抽取纯函数
spec §3.1 Task 3:clean_html(去 script/style/nav/footer/header/注释 +
空白折叠 + 8K 截断)、extract_color(内联 style+CSS 合并计数,白黑灰
排除,平票首现)、extract_logo_url(/YYYY/MM/ 日期新者胜出)、
extract_contacts(wa.me 归一 E164 + mailto)、find_residue(模板残留
清单)、discover_links(同源绝对化去锚去询,关键词稳定排前)、is_thin。
零新依赖(stdlib regex),纯函数无 IO,15 测试钉位。
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-20 18:51:04 +08:00 |
|
浅念
|
2a2485fc07
|
fix(site-import): BLOCKED_NETS 补 v6 未指定/组播/保留段与 NAT64
- ::/128(v6 版 0.0.0.0,此前两层防线均放行)+ 224.0.0.0/4(组播)
+ 240.0.0.0/4(保留/广播,含 255.255.255.255)+ 64:ff9b::/96(NAT64)
+ 198.18.0.0/15(基准段)
- 测试 +9:六段参数化钉位、http://[::]/x URL 层拒绝、重定向协议切换
(302→ftp://)第二跳拦截、DNS rebinding 端到端(真实 client 仅打桩
getaddrinfo 返 10.x,证明连接层校验先于连接发生)
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-20 18:37:05 +08:00 |
|
浅念
|
9f556ebe95
|
feat(site-import): SSRF 连接层校验 fetch 原语
- ValidatingBackend:connect_tcp 处 anyio.getaddrinfo 解析→禁段校验→
只连已验 IP 字面量(anyio 对 IP 字面量跳过 DNS,闭合 rebinding TOCTOU;
TLS/SNI 由 httpcore 以原 hostname 包,证书校验不受影响)
- 双层防线:fetch URL 层预检(scheme/host/端口白名单+IP 字面量禁段)
+ 连接层逐跳 DNS 后校验;手动重定向 ≤5 跳每跳重校验
- 私有口(_pool 替换/AnyIOStream/异常映射)由版本探针测试钉位
- tests/test_safe_fetch.py 29 条:禁段参数化/连接层拒绝/重定向私网拦截/
上限边界/请求真实路由经校验后端(anyio 层打桩离线全链路)
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-20 18:17:19 +08:00 |
|
浅念
|
0d6a82ba14
|
feat(glm): max_tokens 可选透传(site-import 前置)
max_tokens 探针结论: 8192 可用(glm-4-flash 实测 max_tokens=8192 调用成功返回,finish_reason=stop;Task 5 可按 8192 取值)
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-20 17:23:36 +08:00 |
|
浅念
|
29953b9fc8
|
docs: site-import 计划评审收口(6 硬伤+8 建议)
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-20 16:57:55 +08:00 |
|
浅念
|
196df2dea7
|
docs: 网站自动导入实施计划(10 任务 5 批)
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-20 16:46:49 +08:00 |
|
浅念
|
45b0ff6891
|
docs: site-import spec 复审建议四项(测试覆盖/时间口径/max_tokens 目标值/非 HTML 入口映射)
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-20 16:37:03 +08:00 |
|
浅念
|
2942a8d511
|
docs: site-import spec 新视角评审收口(7 硬伤+9 建议:品牌四件生成路径/审核页墙尾巴区/POST 限流/超时对齐/anyio/模型上限/空值兜底等)
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-20 16:33:53 +08:00 |
|
浅念
|
0fe12b261c
|
docs: site-import spec 用户终审九项补强(主色排除/logo 格式/总超时/retry形状/联合索引/JSON容错/内容不足/UX细节/中文关键词)
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-20 16:22:37 +08:00 |
|
浅念
|
f29f4bc3d6
|
docs: site-import spec 终审两个文案 nit(API 数/retry 语义引 §3.3)
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-20 16:16:58 +08:00 |
|
浅念
|
13e6c06c4d
|
docs: site-import spec 评审收口(403 语义/es 尾巴/SSRF 连接层实现细节/GC 坑等)
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-20 16:14:48 +08:00 |
|
浅念
|
ff5095168e
|
docs: 网站自动导入知识库设计 spec
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-20 16:02:32 +08:00 |
|
浅念
|
6b6f35d64f
|
chore(deploy): compose 宿主端口 env 化(APP_HOST/APP_PORT,默认 127.0.0.1:8018)
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-20 09:54:19 +08:00 |
|
浅念
|
f6a8d51aa0
|
chore: 收口——终审 Minor 2 注释修正 + 各 Batch 完成记档
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-19 20:00:48 +08:00 |
|
浅念
|
9315dba228
|
docs(deploy): 共享域名模式部署工件
模板:共享域名 server 块注释示例(kefu.example.com 占位,WS 升级头
落 regex location ^/t/[a-z0-9-]+/ws/——路径模式 WS 真实路径带 /t 前缀);
XFF 追加式语义注记(登录限流取末段,勿改覆盖式);--root-path 禁用
边界(root_path 前移 raw_path,路径前缀解析永不命中)。
手册:§3.6 共享域名模式(概念/零 DNS 接入流程/地址形态表/无尾斜杠
404 语义/部署注记三条);§6.5 加租户补共享域名零反代路径;1Panel
注记补 ws.conf regex 形态。
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-19 19:44:46 +08:00 |
|
浅念
|
e1eae007b4
|
feat(admin): 创建向导域名可跳过(纯路径模式租户)
步骤②本就无强制域名校验(validateWizardStep 只门控步骤 0/2,
提交侧 filter(Boolean) 空列表即 domains:[],后端 default_factory=list
默认空)——本次只补文案引导:ElStep 标题加(可跳过)、步骤内 tip 写明
留空即共享域名路径模式租户(嵌入代码在配置中心-品牌与外观生成)、
头注释同步。向导无摘要步骤,域名数 0 展示属正常,均无需改动。
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-19 19:37:35 +08:00 |
|
浅念
|
5813fc91c7
|
feat(admin): 嵌入代码双形态 + shared_widget_domain 平台键
- 后端 GET /api/platform/settings/widget-domain:读平台设置键
shared_widget_domain(settings_store 内存快照,PUT settings 后热刷新
即时可见);platform_user 两种角色可读(超管配置/租户管理员生成嵌入
代码——与 settings CRUD 的 require_super 不同,非密钥无敏感面);
空串/非字符串视同未配置 → null
- config/center 嵌入卡双形态(spec 2026-10-19 §5):域名形态 +
共享域名形态(/t/<slug>/static/widget.js,路径前缀即租户标识);
可用性规则(两料齐双形态/无域名仅共享/共享未配仅域名/都无引导文案)
与生效态回退;data-site 两形态通用
- normalizeSharedDomain 主机名字符集校验(拒引号/尖括号/空格——防
配置侧把恶意字符注入生成的 script src 串)+ buildEmbedCode 纯函数,
vitest 6 例钉位
- 平台设置页新增「共享域名」组(shared_widget_domain 推荐键,表驱动
渲染自动生效);settings API 模块加 getWidgetDomain
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-19 19:24:56 +08:00 |
|
浅念
|
f938118fee
|
feat(limits): 限流器过期键周期清扫(内存上限铁律)
LoginLimiter._fails 与 rate_limit._buckets 只增不删——懒清理只覆盖被
回访的键,扫号换 IP/设备轮换产生的键永不被回访 → 进程长跑缓慢累积。
两处各加 sweep()(全表清「全部时间戳均已出窗」的键,窗沿 <= 与既有
保留判据 t > now - W 同沿),main.lifespan 起周期任务(300s loop)
启动创建/关停取消(cancel 后 await 落地,不留 pending task)。
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-19 18:59:22 +08:00 |
|
浅念
|
4f58398ac2
|
feat(auth): 登录限流 IP 取 XFF 末段(防首段轮换伪造)
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-19 18:40:47 +08:00 |
|
浅念
|
a1dc1ff7a3
|
feat(chat): 页面级 basePath 引导(路径模式静态面)
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-19 18:28:22 +08:00 |
|
浅念
|
0baa9ab2ed
|
feat(widget): 脚本地址自推导 basePath(路径模式端点前缀)
spec 2026-10-19 §4: 路径模式(/t/<slug>/static/widget.js)下从 script.src
剥尾推导 basePath,brand/avatar 三分支/WS 四处端点构造统一加前缀;
Host 模式 indexOf 命中在 0 → basePath="" 端点零变化。
test_theme_static.py 头像锚定守卫随构造更新(wsBase + basePath + …,
语义不变:绝对锚定 + 禁相对路径)。
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-19 18:13:49 +08:00 |
|
浅念
|
3862577143
|
test: 路径模式全链与限流隔离钉位
Task 3:TestPathPrefixRouting 追加 5 用例——
- chat REST 全链(建会话/resume/公开历史,全程 /t/ 前缀 + 未知 Host)
- 限流隔离:同 IP 同设备双租户独立计数(打满 jiancai 30 上限 429,
auto 消息通路仍 200——Task 2 桶键含 slug 的验收钉位)
- _PREFIX_RE.groupindex == {}(TENANT_SLUG_RE 派生捕获组漂移守护)
- WS 停用租户路径模式 1013(Host 未知,1013 只能出自路径分支)
- 双层前缀 /t/a/t/b 仅剥一层(剩余路径无路由 → 路由层 JSON 404)
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-19 17:51:46 +08:00 |
|
浅念
|
9b97eafa1c
|
feat(middleware): /t/<slug>/ 路径前缀解析(与 Host 模式共存)
- TenantHostMiddleware 增路径前缀分支:raw_path 直判 slug 段(未编码
[a-z0-9-],%61uto/大写/点号不匹配落 Host 解析);仅带尾斜杠形态剥离;
path 定长切割(保留前缀尾斜杠为剩余路径领头斜杠),raw_path 按解码
path 重编码重算(非长度截断),orig_path 留痕;未知 404/ws 1008、
停用 503/ws 1013 与 Host 模式同语义
- _PREFIX_RE 字符类取自 registry.TENANT_SLUG_RE(掐 ^$ 锚)单一事实源;
tenant_routes 的 SLUG_RE 换源同常量别名 import(删本地定义与 import re)
- 评审折入:registry 空 sites 分支注释纠正为生产可达(DB 源全站点停用
合法状态),test_registry 用例 docstring 同步;conftest ADMIN_PASSWORD
注释补硬编码登录用例警示
- 新增 TestPathPrefixRouting 13 用例(全链/拒绝族/停用/site 覆盖/豁免
优先/direct-ASGI 改写钉位/WS 双例/路径优先)
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-19 17:27:01 +08:00 |
|
浅念
|
6fc43c1f1c
|
fix(tests): conftest 钉 ADMIN_PASSWORD 出厂值——测试对本地 .env 封闭
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-19 16:52:36 +08:00 |
|
浅念
|
e08a675363
|
feat(registry): resolve_by_slug 路径模式解析 + TENANT_SLUG_RE 常量上提
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-19 16:36:13 +08:00 |
|
浅念
|
85627901d0
|
docs: 计划评审收口(TDD 判别用例/实测锚点/签名对齐/拼接安全四防线)
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-19 16:21:36 +08:00 |
|
浅念
|
1c91870c76
|
docs: 单域名多租户实施计划(11 任务 4 批)
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-19 15:55:35 +08:00 |
|
浅念
|
e0e49144d4
|
docs: spec 用户终审两处补强(空串 XFF 回退/无尾斜杠措辞)
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-19 15:48:01 +08:00 |
|
浅念
|
5e289b9eb6
|
docs: spec 终审收尾(§1 末段一词/§3.1 raw_path 直判为准)
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-19 15:27:37 +08:00 |
|
浅念
|
b4c03181ce
|
docs: spec 评审收口(XFF 取末段纠偏/raw_path 重算/清扫范围修正)
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-19 15:23:00 +08:00 |
|
浅念
|
5b7c828777
|
docs: 单域名多租户(路径前缀路由)+ 上线收口项设计 spec
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-19 15:10:13 +08:00 |
|
浅念
|
6d6d8a8e32
|
chore: Batch 4 收口——终审 Minor 处置记档 + WallAdvanced 注释修正
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-14 21:56:02 +08:00 |
|
浅念
|
1df1fc7922
|
fix(admin): 重建 watch 补 slug 源(防缺组租户切换草稿泄漏)
c6bd542 拆分后的分组 watch 只盯组 props 引用——seed 租户快照可能缺组
(如无 ai/contact/misc 组),两家租户都缺时切租户该组 prop 走
undefined→undefined 引用不变、watch 不触发,上一家租户的草稿留在当前
租户界面(dirty 也残留)。旧的全量耦合顺带防住了它,拆分后暴露。
修复:六个 pane 的重建 watch 源统一加 () => props.slug 兜底——slug 变化
即强制重建(缺组时空槽归位、dirty 归 false);单卡保存路径不受影响
(组引用照常换新触发)。覆盖 CredsPane 三卡 + WallPane / PromptsPane /
ContactFormPane / EngineFormPane / MiscFormPane(均已声明 slug prop,
index.vue 挂载处均已传 activeSlug,零接线改动)。
顺手:CredsPane 测试态注释仍提已删除的 resetAll → 改提三卡 watch;
计划文档 Task 15 段落末补 Batch 1 遗留打磨项处置注记(色列宽度/头像
提示样式经 Task 16 走查目检后定夺)。
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-14 21:40:29 +08:00 |
|
浅念
|
c6bd54229d
|
fix(admin): CredsPane 单卡保存不再联动重置兄弟卡
旧 array-source watch 盯 [emailGroup, pushGroup, aiGroup] 三元数组——任一
组引用变化即 resetAll 三卡齐重建:单卡保存(如 email)后父层 onPaneSaved
换整份快照引用,push/ai 卡上未保存的编辑被静默丢弃(Task 14 评审挂账)。
改为三表各自 watch 本组 props 引用:父层保存回写是 {...snapshot, [group]:
config} 展开——只有被保存组引用换新,兄弟组引用不动 → 只重建该卡;切租户/
回滚时快照先置 null 再整份换新,三组引用齐变 → 三卡全量重置(行为保持)。
resetAll 相应拆为 resetEmailCard / resetPushCard / resetAiCard(备注/错误/
测试态随所属卡重置)。
自查两场景:改 email 保存 → push 草稿与 dirty 均保留;切租户 → 三卡齐重置。
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-14 21:23:18 +08:00 |
|
浅念
|
f92a4be139
|
polish(admin): 各页空态与文案轻量打磨
- 会话列表/推送日志表空态给动作指引(empty-text,不再落 Element 默认「暂无数据」)
- 统计六图空态文案经 useChart 新增 emptyText 参数下发「暂无数据——产生会话后展示分析」
(textContent 替代 innerHTML,缺省值不变,其余消费方零影响)
- 平台设置存储总览空表指引「暂无设置项——从上方推荐键开始」
- 租户详情站点表空态指引「暂无站点——点右上角「新建站点」创建」
- CredsPane 邮件测试 hint 的字面 **已保存** 星号改 <b>(模板不吃 markdown)
- 品牌预览卡右侧副标去掉与新增副标题重复的「本地简化」字样
- 仪表盘/租户列表/会话页既有 ElEmpty 已是动作指引文案,核对后无需改动
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-14 21:21:53 +08:00 |
|
浅念
|
914bd49128
|
docs: Batch 3 完成记档
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-14 21:16:10 +08:00 |
|
浅念
|
26dc93bc31
|
fix(admin): 头像上传基线只回写持久化字段(防脏检测假阴性)
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-14 21:14:23 +08:00 |
|
浅念
|
e2aa166701
|
fix(admin): 脏保护三缺陷(brand 丢弃空操作/头像假脏/取消高亮错位)
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-14 21:08:57 +08:00 |
|
浅念
|
edf58ce0a0
|
feat(admin): 未保存离开保护(Batch 3 收口)
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-14 20:42:18 +08:00 |
|
浅念
|
250ffdfa53
|
feat(admin): contact/engine/misc 表单 pane + JsonGroup 退役
Task 13(feature/config-ux Batch 3):contact/engine/misc 三组从通用
JSON 整组编辑退役为专用表单卡——ContactFormPane(双开关 + 模板语言)、
EngineFormPane(限流数值 + context_seed_keys 高级折叠)、MiscFormPane
(国名 → 区号行编辑),共用新 KeyValueEditor 行编辑器(直改 reactive
rows,与 ScenarioCard 同契约);JsonGroupPane.vue 删除,model.ts 通用
JSON 组区块(JsonGroupKey/jsonGroupDraft/parseJsonGroupDraft/
JSON_GROUP_FIELDS)与对应测试一并退役;rowsToRecord/recordToRows 补
JSDoc(Task 12 评审折入)。
vitest 182 passed(185 − 3 旧 JSON 组用例);vue-tsc + vite build 零错误。
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-14 20:23:26 +08:00 |
|
浅念
|
4dd74d6682
|
feat(admin): contact/engine/misc 表单映射纯函数
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-14 20:03:09 +08:00 |
|
浅念
|
8b430565d6
|
feat(admin): PromptsPane 重组(company_facts 主面+引擎级折叠)
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-14 19:50:03 +08:00 |
|