159 Commits

Author SHA1 Message Date
浅念 5e024b814b fix(server): v2入口加固——page_id孤代理/NaN区间值拒绝,共享ISO解析
Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-09-18 11:53:02 +08:00
浅念 8459e6fa13 feat(server): ingest v2事件级归属+session_resume+stay区间并集重算+响应明细契约
Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-09-18 11:14:06 +08:00
浅念 d8999035c9 feat(server): schema v2契约——session_resume白名单/Event归属与区间字段/会话resume_of/request_id
Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-09-18 10:38:20 +08:00
浅念 5881046a2d feat(server): URL清洗三轨制+共享测试向量(D08)
Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-09-18 10:15:42 +08:00
浅念 73af568c3f docs: define键改点链形式(esbuild成员表达式替换实测约束)+spec同步slug安全线32口径
Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-09-18 09:55:29 +08:00
浅念 1f39fe9e1b docs: 阶段A计划吸收审查修正——__BUILD_ID__测试期define与ambient声明、slug安全线32并补33-64向量、保留字/resolveJsonModule/null防御
Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-09-18 09:50:13 +08:00
浅念 03b8b60dd8 docs: 采集底座修复阶段A实现计划(12任务:server清洗/契约/ingest→SDK骨架/PageSession/区间停留/传输/接线→部署)
Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-09-18 09:39:43 +08:00
浅念 8526ba5a97 docs: 阶段A spec 吸收审查修正——幂等约束已存在/sent_at已有/stay_ms重算式与v1v2混合解释
Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-09-18 09:31:49 +08:00
浅念 01cf26aabf docs: 采集底座修复阶段A设计文档(归属快照/区间停留/清洗三轨制/契约升级)
Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-09-18 09:25:56 +08:00
浅念 28fad05031 feat(admin): 侧栏隐藏系统名文字只留K标,全局系统名改为客迹
Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-09-17 18:16:40 +08:00
浅念 8a3003bf4a feat(admin): 侧栏/顶栏logo换成客迹K标(裁自品牌logo,浅深背景通用)
Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-09-17 18:05:13 +08:00
浅念 8aea3d8916 feat(admin): 登录表单恢复Art Design Pro原版样式(紧凑40px/左对齐/无图标),左侧保留品牌区
Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-09-17 17:16:54 +08:00
浅念 803fc3d611 feat(admin): 登录表单按验收反馈精简——去标签/去底部文案/滑块与输入框等高
Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-09-17 17:14:04 +08:00
浅念 d7121640f5 fix(admin): 登录样式构建修复——flex-cc换核心工具类,注册/忘记密码页补固定浅色
Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-09-17 16:47:30 +08:00
浅念 b9eaa5a32a feat(admin): 登录表单区对齐客迹V1——移除账号下拉/注册/忘记密码入口,固定浅色
Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-09-17 16:30:19 +08:00
浅念 8c5c913b1a chore(admin): 入库登录页品牌区素材(白字logo+深蓝背景图)
Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-09-17 16:22:54 +08:00
浅念 d7e250e1fb feat(admin): 登录左侧品牌区重做为客迹V1深蓝视觉
Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-09-17 16:19:34 +08:00
浅念 8841c85c20 feat(admin): 登录页i18n文案对齐客迹V1
Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-09-17 16:13:45 +08:00
浅念 433721f8c0 docs: 登录页客迹V1实现计划——吸收审查建议(滑块文字色硬编码、统一56px、移除明文密码)
Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-09-17 16:10:41 +08:00
浅念 8a88bbacb9 docs: spec 吸收审查建议——rememberPwd改保持登录、色值归属修正、暗色滑块条件删除、补英文文案
Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-09-17 15:50:31 +08:00
浅念 b8dc17d2a6 docs: 登录页客迹视觉V1对齐设计文档
Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-09-17 15:46:28 +08:00
浅念 62aee34827 feat(admin): 渠道徽章显示渠道词——付费广告/AI引用等一目了然
Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-09-17 15:08:47 +08:00
浅念 35f7b55946 fix: 趋势改实时聚合+DailyStat自愈回写,摆脱cron依赖
Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-09-17 14:17:08 +08:00
浅念 8f20d8d9a2 feat(admin): 数据总览按客迹视觉V1重做(周期卡/趋势双线/渠道条形/最近访问)
Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-09-17 12:18:37 +08:00
浅念 132e2feb75 fix: 来源冲突比较升级为广告家族归一(meta/google/bing/yandex 家族)
Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-09-17 11:23:02 +08:00
浅念 aba9e8eb26 chore: exports 目录不入库
Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-09-16 22:32:21 +08:00
浅念 22d89a3f42 feat: 移动端设备信息最大化采集(型号/UA-CH/视口/方向/触点/内存/网络/深浅色)
SDK:buildEnvContext 同步扩展 12 键(dpr/viewport/orientation/maxTouchPoints/
deviceMemory/languages/colorScheme/standalone/network downlink·rtt·saveData/
微信版本),逐键 try/catch 静默缺则不挂;新增 collectHighEntropyHints(UA-CH
model/platformVersion/architecture/bitness),init 后 Promise.race 2s 超时
异步并入 __ctk_ctx——批次 context flush 时读取,不阻塞首屏。

后端:Visitor 加 device_model/env_extra(迁移 0005);ingest 首批快照
EXTENDED_ENV_KEYS 白名单(值截 100),非首批不覆盖、唯 device_model 空且
本批有值时补填一次(晚到 hints);列表/详情 API 随行输出。

前端:详情访问环境卡设备行升级显示型号(手机 · Pixel 7),追加像素比/
视口/屏幕方向/触点/内存/网络质量/深浅色/微信版本行(env_extra 逐键判空,
旧数据整块不显示);列表设备列主行拼型号(手机·Pixel 7)。

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-09-16 19:12:20 +08:00
浅念 7f2a746f66 fix: 排序作用于组内事件+时间线限高滚动+UTM别名归一消冲突误报
- attribution.py:新增 _canon 归一(小写/去协议与域名后缀/别名表 fb→facebook、百度→baidu 等/仅留字母数字汉字),
  冲突判定改为两路各自归一后比较——同源升级 combined 并在 detail 记 utm_source 原文,仍不同才 conflict
- detail.vue:orderedDays 组内会话/事件同步翻转(desc=组与组内都最新在前,asc=都最早在前);
  .tl-body 限高 calc(100vh - 380px) 卡内滚动,日期组头随内容滚动
- test_attribution.py:+4 用例(fb↔facebook、chatgpt.com↔ChatGPT、google↔facebook 仍冲突、百度↔baidu)

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-09-16 18:39:02 +08:00
浅念 50faa73cf9 feat(admin): 访客详情页按客迹视觉V1重设计(头部卡/统计卡/时间线/来源证据三口径/访问环境)
Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-09-16 18:19:31 +08:00
浅念 008d9277d8 feat: 来源组合显示——徽章/识别卡拼装落地页·国家·语言(搜索意图线索)
Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-09-16 17:43:37 +08:00
浅念 f9c8c354ae feat(admin): 来源归因展示——渠道徽章/筛选/来源识别卡/渠道构成图
- 类型:VisitorRow 补 channel/platform/variant/search_term/resolution,新增
  AttributionInfo/AttributionBlock,详情响应带 attribution 块;dashboard
  响应补 channels(ChannelItem)
- 工具:CHANNEL_LABELS 八渠道元数据 + channelBadge 徽章串(搜索词/标签/
  冲突后缀,未归因回 —)
- 访客列表:首触来源列升级渠道徽章(first_source 进 tooltip 兜底),
  筛选栏加渠道下拉(channel= 枚举)
- 访客详情:首触来源升级来源识别卡(渠道徽章/平台/国家站/搜索词显著
  展示,label_only/conflict 诚实标注,冲突并列两路证据文本渲染),
  无归因旧数据降级原 first_source 口径
- 总览:来源饼图改渠道构成(标签/颜色按渠道绑定 CHANNEL_LABELS),
  下方保留平台明细小表(原 sources 域名口径)

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-09-16 17:19:31 +08:00
浅念 64d5daf921 feat(sdk): page_view 增加 nav_type/prerendering 来源信号(预渲染=AI搜索指纹)
Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-09-16 17:09:22 +08:00
浅念 59de51c062 feat: 来源归因规则引擎(渠道/AI/搜索词/诚实状态/历史重算)
- constants 规则库 v1:AI/引擎/社交域名表、搜索词参数白名单、付费点击参数、
  应用内 UA 标记、CHANNELS 枚举;page_view 白名单开 nav_type/prerendering
- services/attribution.classify 纯函数:付费>AI>引擎>社交>referral 分层,
  UTM 证据叠加(combined/conflict/label_only),应用内 UA 叠加/兜底,
  引擎 TLD 国家 variant,搜索词白名单提取(Google 恒空不虚构)
- SourceClassification 派生表(迁移 0004):first_touch/session_entry 双 scope,
  rule_version 可追溯
- ingest 增量 best-effort:首访客/新会话时分类落库(savepoint+静默,
  失败不影响采集);validation 对 page_view referrer 完整 URL 参数清洗+截500
- recompute_attribution 命令:全量/按站幂等重算
- API:访客列表归因五字段+channel 筛选、详情 attribution 块(含最近5会话入口)、
  dashboard channels 聚合(sources 原口径保留);TS VisitorListParams 加 channel
- 测试 97 → 124(引擎20 + 集成/接口7)

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-09-16 17:03:15 +08:00
浅念 8bde9b5b4b docs: 记录正式采集开始日期与 IP 截断期限(2026-09-16/2027-03-15)
Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-09-16 16:43:16 +08:00
浅念 21ca43248a feat: 原始上报数据存储(raw_batch 表/脱敏/访客关联/详情页 Tab/30天清理)
Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-09-16 15:42:06 +08:00
浅念 1cadee16bd feat(admin): 后台瘦身——数据总览为默认页/精简菜单/顶栏去演示组件
- 默认页:HOME_PAGE_PATH 指向 /tracker/dashboard,登录/根路径/logo 点击统一落数据总览
- 菜单:tracker 路由扁平为顶级三项(数据总览/访客管理/站点管理),访客详情保持 hidden;
  移除模板演示路由(工作台/分析页、结果页、异常页、系统管理 mock 页),直达返回 404;
  system 仅保留隐藏的个人中心路由供头像菜单使用
- 顶栏:配置化停用通知铃铛/快捷入口/全局搜索(含 Ctrl+K)/聊天窗口,保留主题/语言/全屏/设置与头像菜单
- worktab:命中 catch-all 404 的遗留标签视为无效自动清理(如旧"工作台"标签)

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-09-16 15:15:52 +08:00
浅念 58659b0ec9 feat: 访客列表站点归属显示与筛选
Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-09-16 14:33:39 +08:00
浅念 15ad3fb200 fix: nginx XFF 改透传——双层代理下追加自身会掩盖真实客户端IP(生产踩坑修复)
Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-09-16 14:18:25 +08:00
浅念 403b8516b0 chore: 采集平台对外端口改为 8018(用户指定)
Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-09-16 11:09:03 +08:00
浅念 5f5e64205e docs: 部署指南明确单站点架构——compose 映射 8080,1Panel 建一个反代网站(前后端 SDK 同域共用)
Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-09-16 10:18:59 +08:00
浅念 fe3fcfab07 chore: 入库需求基线文档与验收截图,忽略会话临时产物(终审卫生项)
Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-09-15 22:13:00 +08:00
浅念 1e39aa122f docs: M1 验收记录(本地全栈 A 部分 8/8,用户项清单)
Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-09-15 22:03:24 +08:00
浅念 7ed55c8a8d chore: Docker/Nginx 部署产物与 1Panel 指南
Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-09-15 21:32:20 +08:00
浅念 1cb199e99e fix(admin): 详情页时间线兜底/事件组件抽取/失败态区分/换访客清理
- timelineSessionSource 查不到会话摘要时改显示 —:无事实依据不做
  "直接访问"断言(sessionSourceText 内的直接访问是后端同口径语义,保留)
- 抽取 EventTimeline 子组件(components/EventTimeline.vue):
  轨迹 Tab 与会话抽屉的 page_view/page_stay/其他三分支事件行模板
  去重为单一实现,两处各一行引用;stay-line/title-line 样式随迁
- 时间线失败态三分支:有数据渲染分组 / 请求结束且无数据对象提示
  "时间线加载失败" / 成功但窗口内无事件提示"暂无访问轨迹"
- ensureLoad 换访客时同步清 detail,与 timeline/抽屉清理对齐,
  防旧访客 ID 在 loading 遮罩下闪现

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-09-15 21:21:20 +08:00
浅念 ea561c974a feat(admin): 访客详情跨天时间线
- 覆写 detail.vue 占位:档案卡(ID/在线/地理/IP/语言时区/设备/首触来源 utm 标签/
  落地页截断 tooltip)+ 统计 4 项 + 轨迹/会话 Tab
- 轨迹 Tab:按日倒序分组(日期头含会话数)、会话块(时间·来源·active_ms 求和停留)、
  el-timeline 事件行(page_view/page_stay 独立条目/sdk_loaded 图标区分)、
  7/30/90 天切换(reqSeq 守卫)、truncated 提示条、空态
- 会话 Tab:全量会话表,行点击开抽屉看单会话事件序列(getSession)
- keepAlive:onMounted/onActivated/query-watch 三入口统一 ensureLoad,
  loadedVid 去重(query 清空时重置令牌),切访客必刷新
- 顺车 Minor:formatStay 注释与代码对齐;useTable 背对背 if 改 if/else

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-09-15 21:05:52 +08:00
浅念 ba31670095 docs: Task20 注记——来源筛选无 API 支持,M1 以显示爬虫替代
Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-09-15 20:16:27 +08:00
浅念 99d2a300ba feat(admin): 访客列表页
- 访客管理页:useTable 分页表(后端固定 20/页,paginationKey 映射 page,
  size 不发送),列含 截断 ID+复制 / 国旗 emoji+国家·省市 / 设备主行+os·browser
  小字 / 首访·最近访问(共享 formatDateTime,上海时间直显)/ 访问次数 /
  活跃天数 / 总停留 formatStay / 首触·最近来源 / 在线绿点;行点击进详情路由
- 筛选栏:关键词(visitor_id/IP 前缀)回车或查询触发、设备下拉、国家精确、
  在线开关(online='1' 哨兵)、日期范围 date_from/date_to、显示爬虫开关
  (默认排除);筛选变化重置 page=1,分页切换保留筛选
- 共享工具提取 admin/src/utils/tracker:formatDateTime/formatStay/countryFlag,
  site 页改引用;formatStay 智能省略(0 单位不显示,全 0 显示 0秒)
- 红线:无 v-html,访客数据不绑 href/src;加载/空态齐全(错误态走请求层统一 toast)

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-09-15 19:58:23 +08:00
浅念 3c54ad69c1 fix(admin): useTable 请求竞态守卫(旧请求不清 loading/不写错误态)
- fetchData 加请求序号令牌 fetchSeq:请求被新请求取代后,旧响应不再
  改动任何状态——修复两类竞态:旧请求取消分支把 loading 提前清成 idle、
  旧请求失败分支把新请求在途数据清空并置 error
- 与 dashboard reqSeq 修法同口径(id===seq 才写数据/清 loading),
  供访客列表等分页筛选页复用

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-09-15 19:58:14 +08:00
浅念 5b3297337e fix: 总览筛选竞态守卫 + 时间戳统一上海时间序列化
- dashboard loadOverview 加请求令牌:快速切换站点时丢弃过期响应,
  防旧数据覆盖与旧 finally 提前清 loading
- 后端序列化统一 timezone.localtime:sites.created_at 与 visitors 的
  first/last_seen_at、会话 started/ended_at、时间线事件 time——
  USE_TZ 下 isoformat() 是 UTC,与上海自然日口径同屏矛盾(差 8 小时)
- 站点弹窗域名加轻量主机名正则校验与实时提示(拦含空格等垃圾输入)

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-09-15 18:57:41 +08:00
浅念 3eb703b4ac docs: Task20 执行约定(keepAlive 响应/语义刷新/共享工具/时区/竞态守卫)
Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-09-15 18:48:32 +08:00