5.4 KiB
Thesisly 研迹
论文索引与阅读前端:Next.js App Router + TypeScript + Tailwind CSS;shadcn/ui Button组合模式基于Radix Slot与CVA,Lucide提供图标,Sonner提供复制/退出等反馈。不配置CI/CD,不部署,不创建新的业务后端。
本地开发
用户允许本地 dev,暂不执行本地 build。开发预览已启动并完成桌面/手机浏览器检查:
pnpm install
cp .env.example .env.local
pnpm dev
本地地址:http://localhost:17322。可匿名浏览论文;真实登录前先按身份接入注册项目。没有账户时auth/me本地返回401,不向后端发送空token。
pnpm typecheck
pnpm test
# 自动启动并清理隔离的样本dev,使用系统Chrome,不改预览配置
pnpm test:browser
# 自动启动并清理隔离 dev 副本及模拟 Core,使用系统 Chrome
pnpm test:session
页面
/:论文列表、标题/作者/摘要搜索、领域过滤、收录顺序/标题排序与分页。/papers/{id}:原始摘要、作者、日期、来源元数据、引用复制与原文链接。/login:Google/Slack OAuth入口及邮箱注册登录。/auth/callback:一次性凭据兑换与邮箱验证。/about:数据范围与主题说明。- 空结果、404、加载中与数据服务错误均有对应状态。
默认Vignelli,顶部可切换Editorial/Tufte;仅主题偏好存于localStorage,绝不保存认证token。英文品牌已确定为 Thesisly;中文名为研迹,Gitea 仓库为 Zayden-Jung/Thesisly,尚未注册域名或商标。
数据与后端
src/data/papers.json来自既有Paper Atlas的2026-11-06T13:58:30Z各表20行导出,按paper_id关联来源,保留标题、作者、摘要和metadata。首页显式标注“样本”;20条都是历史记录,不冒充热门或最新论文。
PAPER_API_ORIGIN为空使用样本;配置后只访问远程HTTP接口,错误会明确显示,不能静默退回样本。正在实现的共享后端接口见论文API契约。本机和浏览器不直连服务器SQLite、不保存数据库密码。
项目级技能
.agents/skills/ui-craft-editorial与其依赖ui-craft来自educlopez/ui-craft;.agents/skills/beautiful-article来自ConardLi/garden-skills。后者已包含theme-profiles/vignelli.md和tufte.md,不是两个单独上游skill。阅读页主题按这些authoring profiles在应用CSS中适配,不声称是ReActicle运行时。完整Beautiful Article harness仅在另行生成单篇HTML时应用。
当前验证边界
类型检查与16项测试已通过:除了Cookie/样本策略,测试直接调用生产认证代理,覆盖兑换、登录/邮件验证、续期、退出、错误、凭据隔离与请求限制。它们使用进程内模拟的Core响应,不代表真实OAuth成功,也不需要启动Next.js或编译。
12项隔离样本模式桌面/手机浏览器测试已通过,覆盖搜索、分页、空结果、文章摘要与引用复制、三种主题持久化、登录/注册表单和404恢复;截图用于人工核对布局;样本dev运行在17323,不占用17322预览。另有7项浏览器会话测试,使用隔离的实际Next dev副本和生产代理连接模拟Core,验证刷新/新标签恢复、HttpOnly Cookie、跨标签退出、故障重试、失效清理、Google/Slack模拟PKCE和邮箱验证的一次性兑换。测试不复制.env,不访问真实账户,结束后清理副本;新增2项隔离浏览器回归验证搜索错误恢复及异常数据处理,合计9项隔离浏览器测试通过;这些测试的Core响应仍为合成数据。另已在真实库上检查桌面/手机首页、简介、领域和全文搜索、超时后缩小搜索恢复。真实OAuth尚未验收,生产构建按用户要求未执行。前端目录为 /Users/zzyang/thesisly,远程已连接 Zayden-Jung/Thesisly,main 仅有用户授权的空初始化提交;论文 HTTP API 已纳入本目标,由代理在 Foundry Core 的 codex/research-api 分支实现。
当前后端依赖
论文库已完成 PostgreSQL 迁移及独立验收。当前本地忽略配置通过 SSH 回环隧道连接 ECS 上的临时 Core(真实库已验证3,526,999篇);浏览器不持有数据库连接串。临时 Core 仅启用真实论文只读连接,账户仍访问正式 Core。宽泛全文计数可能超时,页面会保留搜索表单并提示缩小范围,不显示伪造总数或退回样本。
用户已配置 Thesisly 的 FOUNDRY_PROJECTS,正式 Core 已通过仅配置重载生效,原有项目保留;Google/Slack 跳转与取消回调通过,真实账户登录仍待用户授权验收。研究 API 的新代码尚未合入或部署正式后端。本阶段不触发CI,交付使用Gitea [skip ci]提交与PR标记并核对运行记录;本地build未执行,不采用SQLite sidecar,也不需要FOUNDRY_RESEARCH_DATABASE。
Endoleap 参考
已核对 Endoleap 主线 README(blob 358824763e09811a85f8986526e93dda406fdb93):沿用 App Router、同源身份代理、PKCE、HttpOnly Cookie、Core 控制的30天闲置/90天绝对会话期限与共享第三方回调。Thesisly 使用独立端口17322、项目键thesisly及服务端环境变量;不复制 Endoleap 的品牌、Canvas 功能或部署流程。浏览器表单测试不代表真实 Google/Slack 登录成功。