Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@ name: CI

on:
push:
branches: [main]
branches: [main, develop]
pull_request:
branches: [main]
branches: [main, develop]

jobs:
lint:
Expand Down
18 changes: 18 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,23 @@
# Changelog

## v0.8.1 — 2026-02-24
### ✨ New
- **Telegram group link in info banner** — Clickable TG icon + group invite link with i18n support (#16)
- **DEVOPLOG.md** — R&D lifecycle tracking for staging/production changes (#20)

### 🔧 Fixed
- **TG icon rendering** — Replace emoji with proper SVG icon, make TG group link clickable (#17)
- **Subtitle Twitter links** — @mentions in subtitle now link to Twitter profiles (#18)
- **ClawHub metadata alignment** — SKILL.md credentials declared, TESTING.md HttpOnly note, README/SKILL.md consistency (#25)

### 🏗️ Infrastructure
- **CI pipeline** — GitHub Actions for lint + security audit on PRs (#2, #9)
- **PR template & CONTRIBUTING.md** — Standardized contribution workflow (#3)
- **Health endpoint** — `GET /api/health` for CI readiness checks (#4)
- **Feedback webhook config** — `FEEDBACK_LARK_WEBHOOK` in .env.example (#5)
- **Dev process docs** — Full PROCESS.md workflow (#7)
- **Security hardening** — SSRF protection, OAuth state validation, API key handling (#1)

## v0.7.0 — 2026-02-22
### ✨ New
- **Dark/Light mode toggle** — Sun/moon toggle in header, persists in localStorage
Expand Down
26 changes: 26 additions & 0 deletions CHANGELOG.zh.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,31 @@
# 更新日志

## v0.8.1 — 2026-02-24
### ✨ 新增
- **Telegram 群组链接** — Info banner 增加可点击 TG 图标 + 群邀请链接,支持中英文 (#16)
- **DEVOPLOG.md** — 研发全生命周期追踪(开发/staging/production)(#20)

### 🔧 修复
- **TG 图标渲染** — emoji 替换为 SVG 图标,群链接可点击 (#17)
- **副标题 Twitter 链接** — @提及 现在链接到 Twitter 个人页 (#18)
- **ClawHub 元数据对齐** — SKILL.md 凭证声明、TESTING.md HttpOnly 说明、README/SKILL.md 一致性 (#25)

### 🏗️ 基础设施
- **CI 流水线** — GitHub Actions lint + 安全审计 (#2, #9)
- **PR 模板 & 贡献指南** — 标准化贡献流程 (#3)
- **健康检查** — `GET /api/health` 端点 (#4)
- **反馈 Webhook 配置** — .env.example 增加 `FEEDBACK_LARK_WEBHOOK` (#5)
- **开发流程文档** — 完整 PROCESS.md 工作流 (#7)
- **安全加固** — SSRF 防护、OAuth state 校验、API key 处理 (#1)

## v0.7.0 — 2026-02-22
### ✨ 新增
- **深色/浅色模式切换** — Header 日/月图标,localStorage 持久化
- **README 视频演示** — demo.mp4 作为 GitHub Release 资源嵌入

### 🔧 修复
- README 视频在 GitHub 上自动播放(Release 资源 URL 替代相对路径)

## v0.6.0 — 2026-02-22
### ✨ 新增
- **Source 软删除** — 删除 Source 标记 `is_deleted` 而非硬删,避免 Pack 僵尸复活
Expand Down
27 changes: 27 additions & 0 deletions DEVOPLOG.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
# DevOp Log

Development and operations log for ClawFeed. Records the full R&D lifecycle — feature development, staging validation, production release, and infrastructure changes.

## 2026-02-24 — v0.8.1 (TG hotfix + subtitle links)

**Status:** Staging verified ✅ | Production: pending merge

**Changes:**
- #16 — TG group link button + info banner (i18n)
- #17 — Replace airplane emoji with Telegram SVG icon + clickable TG group link
- #18 — Subtitle @mentions link to Twitter profiles (Jessie@ZylosAI, Lisa@OpenClaw)

**Docs/PRD (no runtime impact):**
- #8 — ClawMark Digest embed PRD
- #9 — CI trigger fix for develop branch
- #10 — Source personalization PRD
- #11 — Feedback system PRD (retroactive)

**Staging validation:**
- Validated by: Kevin
- Date: 2026-02-24
- Result: OK

**Infrastructure:**
- Staging/production environment isolation implemented (independent directories + databases)
- Staging auto-deploy configured (develop branch, 60s polling)
28 changes: 22 additions & 6 deletions SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,19 @@

AI-powered news digest tool. Automatically generates structured summaries (4H/daily/weekly/monthly) from Twitter and RSS feeds.

## Credentials & Dependencies

ClawFeed runs in **read-only mode** with zero credentials — browse digests, view feeds, switch languages. Authentication features (bookmarks, sources, packs) require additional credentials.

| Credential | Purpose | Required |
|-----------|---------|----------|
| `GOOGLE_CLIENT_ID` | Google OAuth login | For auth features |
| `GOOGLE_CLIENT_SECRET` | Google OAuth login | For auth features |
| `SESSION_SECRET` | Session cookie encryption | For auth features |
| `API_KEY` | Digest creation endpoint protection | For write API |

**Runtime dependency:** SQLite via `better-sqlite3` (native addon, bundled). No external database server required.

## Setup

```bash
Expand All @@ -20,12 +33,15 @@ npm start

Configure in `.env` file:

| Variable | Description | Default |
|----------|-------------|---------|
| `DIGEST_PORT` | Server port | 8767 |
| `GOOGLE_CLIENT_ID` | OAuth client ID (optional) | - |
| `GOOGLE_CLIENT_SECRET` | OAuth secret (optional) | - |
| `SESSION_SECRET` | Session encryption key | - |
| Variable | Description | Required | Default |
|----------|-------------|----------|---------|
| `DIGEST_PORT` | Server port | No | 8767 |
| `GOOGLE_CLIENT_ID` | Google OAuth client ID | For auth | - |
| `GOOGLE_CLIENT_SECRET` | Google OAuth client secret | For auth | - |
| `SESSION_SECRET` | Session cookie encryption key | For auth | - |
| `API_KEY` | Digest creation API key | For write API | - |
| `AI_DIGEST_DB` | SQLite database path | No | `data/digest.db` |
| `ALLOWED_ORIGINS` | CORS allowed origins | No | localhost |

## API Server

Expand Down
38 changes: 33 additions & 5 deletions docs/PROCESS.md
Original file line number Diff line number Diff line change
Expand Up @@ -60,12 +60,40 @@
- 涉及 DB schema 变更必须写 migration 文件
- 开发完成后提 PR(目标分支:`develop`)

### 5. Code Review
### 5. Code Review(PR Review 流程)

- **Lisa review**(Codex 自动审查 + 手动检查)
- 检查项:代码质量、安全性、是否符合 PRD 设计
- Kevin 有兴趣也可以看
- Review 通过后 merge 到 `develop`
每个 PR 必须经过以下完整流程:

```
Proposer 提 PR → Lisa review + approve → Kevin review
┌─────────┴─────────┐
│ │
有意见 → comment 无意见 → merge
Proposer 修改
Lisa re-review + re-approve
Kevin 最终 merge
```

**详细步骤:**

1. **Proposer 提交 PR**(目标分支:`develop`)
2. **Lisa review**:Codex 自动审查 + 手动检查(代码质量、安全性、是否符合 PRD)
3. **Lisa approve** PR
4. **Kevin review**:
- 无意见 → 直接 merge
- 有意见 → 在 PR 里 comment
5. **Proposer 按 Kevin 评论修改**,push 新 commit
6. **Lisa re-review + re-approve**(Branch Protection 设置了 dismiss stale reviews,新 commit 会自动撤销之前的 approve)
7. **Kevin 确认修改,merge PR**

**规则:**
- 每次 push 新 commit 后,Lisa 必须重新 review + approve
- Kevin 是唯一有 merge 权限的人
- PRD 类 PR 和代码类 PR 遵循相同流程

### 6. Staging 自测

Expand Down
7 changes: 5 additions & 2 deletions docs/TESTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -209,11 +209,14 @@ bash test/setup.sh && bash test/e2e.sh; bash test/teardown.sh

### 切换用户

> **仅限本地开发环境。** 以下方法用于在 localhost 上快速切换测试用户,不适用于 staging 或 production。

先运行 `bash test/setup.sh`,然后用浏览器开发者工具设置 cookie:

```javascript
// DevTools Console(需要先登录一次获取 non-HttpOnly cookie)
// 或者临时在 server.mjs 去掉 HttpOnly 标记
// DevTools Console — 仅限 localhost 开发环境
// 测试用户的 session cookie 由 setup.sh 直接写入 SQLite,
// 需要通过 DevTools Application 面板手动设置 cookie 值
document.cookie = 'session=test-sess-alice; path=/; max-age=86400';
location.reload();
```
Expand Down
83 changes: 83 additions & 0 deletions docs/prd/clawmark-digest-embed.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
# ClawMark 嵌入 ClawFeed PRD

## 背景

ClawFeed 在 staging 环境测试时,测试人员发现 bug 需要手动截图、描述问题、发到群里。流程低效且容易丢失上下文(当前页面 URL、截图、操作路径等)。

ClawMark(kevinho/clawmark)是已开源的反馈/标注组件,提供 Fab 插件(浮动操作按钮)。将 ClawMark 嵌入 ClawFeed 应用,让测试人员可以直接在页面上提交 bug 报告,附带自动采集的上下文信息。

## 方案

### 设计

在 ClawFeed 所有页面嵌入 ClawMark Fab 插件(浮动按钮),点击后弹出反馈表单。

#### 用户交互流程

1. 用户在 ClawFeed 任意页面看到右下角浮动按钮
2. 点击按钮 → 弹出反馈表单
3. 填写:bug 描述 + 可选截图/标注
4. 提交 → 反馈数据存入 ClawMark 后端
5. 可选:提交后通知到 Lark 群(复用已有的 FEEDBACK_LARK_WEBHOOK)

#### 技术实现

1. **ClawMark server 部署**:独立进程部署(Kevin 确认),域名由 Lisa 配置(如 clawmark.kevinhe.io)。使用 kevinho/clawmark 仓库自带的 Express + SQLite 后端。
2. **前端嵌入**:在 ClawFeed 的 HTML 模板中引入 ClawMark SDK(`<script>` 标签),初始化 Fab 插件,指向 ClawMark server
3. **自动采集**:当前页面 URL、浏览器 UA、用户登录状态(如有)自动附带在反馈中
4. **线上服务化**:ClawMark server 作为通用服务运行,不仅服务 ClawFeed,其他项目也可接入(开源集成 vs 在线集成)

#### 环境策略

- **Staging**:默认启用 Fab 按钮(测试环境,鼓励提 bug)
- **Production**:可通过环境变量 `CLAWMARK_ENABLED=true/false` 控制是否显示

#### 配置

新增环境变量:
- `CLAWMARK_ENABLED` — 是否启用 ClawMark(default: true for staging, false for production)
- `CLAWMARK_SERVER_URL` — ClawMark 后端地址

### 影响范围

- ClawFeed HTML 模板 — 新增 `<script>` 引用 + 初始化代码
- `.env.example` — 新增 CLAWMARK_ENABLED、CLAWMARK_SERVER_URL
- `src/server.mjs` — 渲染 HTML 时注入 ClawMark 配置(环境变量传到前端)

不影响:digest API、marks API、sources、packs、subscriptions、feed 输出、认证逻辑。

## 验收标准

1. [ ] ClawFeed 页面右下角显示 ClawMark 浮动按钮
2. [ ] 点击按钮弹出反馈表单
3. [ ] 填写描述并提交成功
4. [ ] 提交的反馈包含当前页面 URL
5. [ ] 提交后可选通知到 Lark 群
6. [ ] `CLAWMARK_ENABLED=false` 时按钮不显示
7. [ ] 不影响 ClawFeed 已有功能(digest 列表、登录、sources)
8. [ ] 移动端浮动按钮正常显示且不遮挡主要内容

## 测试用例

| # | 场景 | 步骤 | 预期结果 |
|---|------|------|----------|
| 1 | Fab 按钮可见 | 打开 ClawFeed 任意页面 | 右下角可见浮动按钮 |
| 2 | 提交反馈 | 点击按钮 → 填写描述 → 提交 | 提交成功,表单关闭 |
| 3 | 自动采集 URL | 在 /digests 页面提交反馈 | 反馈数据中包含当前页面 URL |
| 4 | Lark 通知 | 提交反馈(配置了 FEEDBACK_LARK_WEBHOOK) | Lark 群收到通知 |
| 5 | 环境开关 - 关 | 设置 CLAWMARK_ENABLED=false → 打开页面 | 按钮不显示 |
| 6 | 环境开关 - 开 | 设置 CLAWMARK_ENABLED=true → 打开页面 | 按钮显示 |
| 7 | 不影响已有功能 | 嵌入 ClawMark 后访问 digest 列表、登录、sources | 所有功能正常 |
| 8 | 移动端 | 手机浏览器打开 ClawFeed | 浮动按钮可见、可点击、不遮挡内容 |
| 9 | ClawMark 服务不可用 | ClawMark server 关闭 → 打开 ClawFeed | ClawFeed 正常加载,Fab 按钮可能不可用但不影响主功能 |
| 10 | 空描述提交 | 点击按钮 → 不填内容 → 点提交 | 提示必须填写描述 |

## 回滚方案

设置 `CLAWMARK_ENABLED=false` 即可关闭,无需回滚代码。无数据库变更。

## 负责人

- 开发:Jessie
- 测试:Lisa
- 审批:Kevin
Loading
Loading