Files

64 lines
5.7 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Thesisly 研迹
论文索引与阅读前端:Next.js App Router + TypeScript + Tailwind CSS;shadcn/ui Button组合模式基于Radix Slot与CVA,Lucide提供图标,Sonner提供复制/退出等反馈。不配置CI/CD,不部署,不创建新的业务后端。
各项目拥有独立的账户和登录会话。Foundry Core 按 `project` 分别保存和校验这些记录;各项目仅复用 Google 身份验证配置、回调处理和认证实现。
## 本地开发
用户允许本地 dev,暂不执行本地 build。开发预览已启动并完成桌面/手机浏览器检查:
```sh
pnpm install
cp .env.example .env.local
pnpm dev
```
本地地址:`http://localhost:17322`。可匿名浏览论文;真实登录前先按[身份接入](docs/auth-integration.md)注册项目。没有账户时auth/me本地返回401,不向后端发送空token。
```sh
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契约](docs/paper-api.md)。本机和浏览器不直连服务器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响应仍为合成数据。另已在真实库上检查桌面/手机首页、简介、领域和全文搜索、超时后缩小搜索恢复。Google和Slack真实登录均已到达后端,用户分别确认刷新、新标签保持及退出正常;邮件实际投递与验证未实测。生产构建按用户要求未执行。前端目录为 `/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 跳转与取消回调通过,Google/Slack真实身份及会话检查已由服务端观察和用户实测确认;邮件投递未实测。研究 API 的新代码尚未合入或部署正式后端。本阶段不触发CI,交付使用Gitea [skip ci]提交与PR标记并核对运行记录;本地build未执行,不采用SQLite sidecar,也不需要FOUNDRY_RESEARCH_DATABASE。
## Endoleap 参考
已核对 [Endoleap 主线 README](https://gitea.entroia.com/Zayden-Jung/Endoleap/src/branch/main/README.md)(blob `358824763e09811a85f8986526e93dda406fdb93`):沿用 App Router、同源身份代理、PKCE、HttpOnly Cookie、Core 控制的30天闲置/90天绝对会话期限与共享第三方回调。Thesisly 使用独立端口17322、项目键thesisly及服务端环境变量;不复制 Endoleap 的品牌、Canvas 功能或部署流程。浏览器表单测试不代表真实 Google/Slack 登录成功。