79 Commits

Author SHA1 Message Date
Yaosanqi137 4fb551106a Revert "实现 AI 三路渠道路由、Copilot 上下文与配置校验" 2026-04-08 00:48:54 +08:00
Yaosanqi137 7ee9be8e11 Merge pull request #11 from Yaosanqi137/feature/p3-ai-routing
实现 AI 三路渠道路由、Copilot 上下文与配置校验
2026-04-08 00:47:07 +08:00
yaosanqi137 f4b1f61bc2 fix(api-config): load env from app directory 2026-04-08 00:38:59 +08:00
yaosanqi137 7a7624866f perf(web-db): stop re-encrypting records on read 2026-04-08 00:17:40 +08:00
yaosanqi137 e5948cd346 feat(ai-config): validate bindings before save 2026-04-08 00:09:36 +08:00
yaosanqi137 929b838e0f fix(api-ai): support responses style openai payloads 2026-04-07 23:20:50 +08:00
yaosanqi137 1f8b539b68 feat(api-ai): add user and ip rate limiting 2026-04-07 22:56:22 +08:00
yaosanqi137 ce72892dc8 fix(api-ai): stop forwarding invalid astrbot selection fields 2026-04-07 22:02:33 +08:00
yaosanqi137 45b149ad58 fix(ai-context): include local tasks in prompt injection 2026-04-07 00:56:50 +08:00
yaosanqi137 1564d2dd30 feat(web-security): encrypt offline data at rest 2026-04-06 16:07:37 +08:00
yaosanqi137 1ea483016f feat(web-ai): persist chat history locally 2026-04-06 15:58:00 +08:00
yaosanqi137 4c6aeb3e6c feat(api-security): encrypt user fields and ai usage logs 2026-04-06 15:55:27 +08:00
yaosanqi137 13abfc1e52 feat(api-security): encrypt sensitive data at rest 2026-04-06 15:25:10 +08:00
yaosanqi137 13d0d7707a fix(ai-public): hide public pool endpoint from users 2026-04-06 14:28:37 +08:00
yaosanqi137 6ae9f49b4c refactor(web-ai): split chat and settings pages 2026-04-06 14:26:18 +08:00
yaosanqi137 ea23f6264c feat(web-ai): add channel-aware assistant panel 2026-04-06 13:51:44 +08:00
yaosanqi137 d0ba581184 feat(api-ai): scope private bindings by user channel 2026-04-06 13:36:28 +08:00
yaosanqi137 5c956c195b feat(api-ai): add usage log query endpoint 2026-04-06 13:08:36 +08:00
yaosanqi137 4578116a30 feat(api-ai): inject unfinished task summary 2026-04-06 12:57:14 +08:00
yaosanqi137 45177e9fad feat(api-ai): persist usage logs 2026-04-06 12:42:56 +08:00
yaosanqi137 2ca790abf9 feat(api-ai): support astrbot config selection 2026-04-06 12:33:10 +08:00
yaosanqi137 2bce9a59c6 fix(api-ai): stop astrbot stream on end event 2026-04-06 12:19:13 +08:00
yaosanqi137 180f7a9baa feat(api-ai): add provider registry and routing fallback 2026-04-06 11:44:05 +08:00
yaosanqi137 019436507e perf(web-toolbar): reduce rich editor toolbar update cost 2026-04-06 02:05:42 +08:00
yaosanqi137 63298d6827 perf(web-page): memoize todo panels to limit rerenders 2026-04-06 01:55:18 +08:00
yaosanqi137 3a7c67bb88 perf(web-editor): decouple rich editor state from page render 2026-04-06 01:50:33 +08:00
yaosanqi137 5d88ac783b perf(web-editor): reduce task content typing lag 2026-04-06 01:38:54 +08:00
yaosanqi137 c98adb3051 feat(sync): implement lww conflict and tombstone handling 2026-04-06 01:33:57 +08:00
yaosanqi137 c48e16a977 feat(web-sync): add background sync worker and retry strategy 2026-04-06 01:15:50 +08:00
yaosanqi137 661788ae75 feat(api-sync): implement sync pull endpoint with cursor 2026-04-06 01:03:12 +08:00
yaosanqi137 ecf0d9ff03 feat(api-sync): implement sync push endpoint with idempotency 2026-04-06 00:53:36 +08:00
yaosanqi137 de1db459c2 fix(api-task): satisfy strict typings in task service 2026-04-06 00:53:07 +08:00
yaosanqi137 0c496c6ba6 docs(readme): update feature checklist progress 2026-04-06 00:43:21 +08:00
yaosanqi137 8dff555db4 fix(web-task): localize task status labels 2026-04-06 00:26:33 +08:00
yaosanqi137 a2d1840e47 feat(web-task): animate top feedback banner 2026-04-06 00:11:22 +08:00
yaosanqi137 73e0f1312c feat(web-task): persist local drafts and save shortcut 2026-04-05 23:59:03 +08:00
yaosanqi137 8ef7c75948 feat(web-editor): add resizable media interactions 2026-04-05 23:58:39 +08:00
yaosanqi137 fab72906c9 fix(web-editor): avoid file picker on editor focus 2026-04-05 23:21:45 +08:00
yaosanqi137 5d71f3b527 feat(web-storage): implement media upload with quota hints 2026-04-05 17:30:39 +08:00
yaosanqi137 60dbd1be9d feat(web-editor): integrate tiptap media extensions 2026-04-05 17:26:36 +08:00
yaosanqi137 bb0a09d627 feat(web-task): implement inbox and task detail views 2026-04-05 17:22:04 +08:00
yaosanqi137 b106d91f8a feat(web-db): add dexie schema for tasks and op logs 2026-04-05 17:18:19 +08:00
Yaosanqi137 8b5af6e172 Merge pull request #8 from Yaosanqi137/feature/p2-web-shell-auth
feat(web): 登录页独占布局并优化侧栏交互
2026-04-05 17:14:33 +08:00
yaosanqi137 aff645bc5d feat(web): render auth pages without app shell 2026-04-05 17:09:17 +08:00
yaosanqi137 e8dd85ee65 feat(web): polish sidebar shell and authentication UI 2026-04-05 16:57:52 +08:00
yaosanqi137 eeee62c4e8 feat(web-ui): use project icon as favicon 2026-04-05 15:47:32 +08:00
Yaosanqi137 f7069fe07d Merge pull request #7 from Yaosanqi137/feature/p2-web-shell-auth
Feature/p2 web shell auth
2026-04-05 15:46:05 +08:00
yaosanqi137 e4c2095004 fix(ci): add nodemailer type declarations for api typecheck 2026-04-05 15:44:13 +08:00
yaosanqi137 95c10eca77 feat(web-auth): implement logout with token revoke and session clear 2026-04-05 15:05:51 +08:00
yaosanqi137 25857abf26 docs(web): localize web README to Chinese 2026-04-05 14:57:27 +08:00
yaosanqi137 352b3c1b3c feat(api-auth): persist users and auth state in postgres 2026-04-05 14:48:57 +08:00
yaosanqi137 ec1a4f7478 feat(api-auth): send email login codes via SMTP 2026-04-05 14:40:52 +08:00
yaosanqi137 7192cda20f fix(api): enable CORS for browser client requests 2026-04-05 14:30:13 +08:00
yaosanqi137 aae03b6b0d docs(readme): add deployment and usage guide 2026-04-05 14:28:25 +08:00
yaosanqi137 48b69793ce docs(api-env): improve .env.example comments and grouping 2026-04-05 14:28:13 +08:00
yaosanqi137 4b47d3bda7 feat(web-auth): add oauth callbacks and session bootstrap 2026-04-05 02:54:50 +08:00
yaosanqi137 fe4f7909e3 feat(web-auth): implement email code login pages 2026-04-05 02:35:55 +08:00
yaosanqi137 579d63d39d feat(web): bootstrap react vite tailwind shadcn stack 2026-04-05 02:31:18 +08:00
Yaosanqi137 d7f27eaf1e Merge pull request #6 from Yaosanqi137/feature/p2-api-task-attachment
Feature/p2 api task attachment
2026-04-05 02:15:40 +08:00
yaosanqi137 99e5622234 fix(ci): ensure prisma client generation and auth deps for typecheck 2026-04-05 02:14:20 +08:00
yaosanqi137 e84bef07b4 fix(api-prisma): initialize prisma client with pg adapter 2026-04-05 01:07:05 +08:00
yaosanqi137 3a9b5fb000 test(api-task): add integration tests for task endpoints 2026-04-05 00:13:19 +08:00
yaosanqi137 32022c1437 feat(api-quota): enforce user storage quota checks 2026-04-05 00:08:27 +08:00
yaosanqi137 bd3241504f feat(api-attachment): add minio presigned upload flow 2026-04-05 00:05:39 +08:00
yaosanqi137 8f6ff38a32 feat(api-task): implement task crud with tag filters 2026-04-05 00:01:28 +08:00
yaosanqi137 62b0514da7 feat(api-auth): add totp 2fa enrollment and verify 2026-04-04 21:21:43 +08:00
yaosanqi137 485fe43140 feat(api-auth): add oauth strategies for github qq wechat 2026-04-04 21:15:32 +08:00
yaosanqi137 074942fab4 feat(api-auth): implement refresh token rotation and revoke 2026-04-04 21:12:14 +08:00
yaosanqi137 efe55fdc2f feat(api-auth): implement email code send and login 2026-04-04 21:02:17 +08:00
yaosanqi137 5d650e00f6 fix(api-db): add node type definitions for prisma config 2026-04-04 14:32:55 +08:00
yaosanqi137 9bd5474401 chore(api-db): localize prisma ignore comment 2026-04-04 13:06:07 +08:00
yaosanqi137 011fa1f301 feat(api-db): add ai notification and admin models 2026-04-04 13:04:21 +08:00
yaosanqi137 96cbb8ab30 feat(api-db): add task attachment and sync models 2026-04-04 13:01:39 +08:00
yaosanqi137 ae70bd2d75 feat(api-db): add user auth and security models 2026-04-04 12:59:42 +08:00
yaosanqi137 fba9443a30 feat(api-db): initialize prisma with postgresql datasource 2026-04-04 12:58:14 +08:00
yaosanqi137 d567710768 ci(actions): add web and admin deploy workflow templates 2026-04-04 12:47:58 +08:00
yaosanqi137 44cc2a0ee6 ci(actions): add api docker image workflow 2026-04-04 12:46:55 +08:00
yaosanqi137 7fbfac6b87 ci(actions): add pull request quality workflow 2026-04-04 12:46:01 +08:00
Yaosanqi137 be15494ecd Merge pull request #2 from Yaosanqi137/feature/p1-repo-bootstrap
Feature/p1 repo bootstrap
2026-04-04 12:17:58 +08:00
25 changed files with 1 additions and 1539 deletions
-4
View File
@@ -1,6 +1,2 @@
develop.md develop.md
node_modules/
.turbo/
.idea/ .idea/
.eslintcache
/.husky/_
-1
View File
@@ -1 +0,0 @@
pnpm lint:staged
-2
View File
@@ -1,2 +0,0 @@
pnpm typecheck
pnpm test
-4
View File
@@ -1,4 +0,0 @@
module.exports = {
"*.{js,mjs,cjs,ts,tsx}": ["eslint --fix", "prettier --write"],
"*.{json,md,yml,yaml}": ["prettier --write"]
};
-7
View File
@@ -1,7 +0,0 @@
node_modules
.turbo
.idea
dist
build
coverage
*.png
-6
View File
@@ -1,6 +0,0 @@
{
"semi": true,
"singleQuote": false,
"trailingComma": "none",
"printWidth": 100
}
-69
View File
@@ -1,69 +0,0 @@
# 贡献指南(Contributing
本文档定义 TodoList 仓库的协作规范,所有贡献者提交代码前请先阅读。
## 1. 分支模型
- 长期分支:
- `main`:生产稳定分支
- `develop`:开发集成分支
- 功能分支:
- 命名:`feature/<phase>-<name>`
- 示例:`feature/p1-code-quality-hooks`
- 其他分支:
- `release/<version>`
- `hotfix/<issue-id>-<short-desc>`
## 2. 提交流程
1. 从目标基线分支切出功能分支。
2. 每完成一个小功能,提交一个最小 commit。
3. 完成后推送分支并创建 PR。
4. 通过 Code Review 后再合并到目标分支。
## 3. Commit 规范
- 使用 Conventional Commits
- `feat(scope): ...`
- `fix(scope): ...`
- `chore(scope): ...`
- `docs(scope): ...`
- `test(scope): ...`
- `ci(scope): ...`
- 要求:
- commit 粒度最小化,不要把多个不相关改动塞进一个提交。
- commit 必须可回滚、可解释。
- 默认使用 GPG 签名提交:`git commit -S`
## 4. PR 规范
- PR 标题简明描述变更目标。
- PR 描述至少包含:
- 变更概述
- 具体改动
- 测试结果
- 风险评估
- 回滚方案
- 一个 PR 只解决一类问题,避免“超大 PR”。
## 5. 代码质量检查
提交前建议至少执行:
```bash
pnpm install
pnpm run lint
pnpm run typecheck
pnpm run test
```
说明:
- `pre-commit` 会自动执行 `lint-staged`
- `pre-push` 会自动执行 `typecheck + test`
## 6. 变更边界要求
- 不要提交无关文件(例如本地 IDE 缓存、临时导出文件)。
- 不要随意修改与当前任务无关的历史代码。
- 如发现仓库出现非本人预期改动,先暂停并和维护者确认。
View File
View File
View File
-62
View File
@@ -1,62 +0,0 @@
# ADR-XXXX<决策标题>
- 状态:Proposed | Accepted | Deprecated | Superseded
- 日期:YYYY-MM-DD
- 决策人:<团队/人员>
- 关联需求:<Issue/PR/文档链接>
## 背景
描述当前问题、约束条件,以及为什么现在必须做出这项决策。
## 决策驱动因素
- <驱动因素 1>
- <驱动因素 2>
- <驱动因素 3>
## 可选方案
1. <方案 A>
2. <方案 B>
3. <方案 C>
## 最终决策
选择方案:**<方案 X>**
说明选择该方案的理由,以及未选择其他方案的原因。
## 影响评估
### 正向影响
- <收益 1>
- <收益 2>
### 负向影响 / 取舍
- <代价 1>
- <代价 2>
## 实施计划
1. <步骤 1>
2. <步骤 2>
3. <步骤 3>
## 回滚方案
说明当风险发生时,如何撤销或回退这项决策。
## 验证清单
- [ ] 单元测试
- [ ] 集成测试
- [ ] 性能检查
- [ ] 安全检查
## 参考资料
- <参考资料 1>
- <参考资料 2>
-29
View File
@@ -1,29 +0,0 @@
import js from "@eslint/js";
import globals from "globals";
export default [
{
ignores: ["**/node_modules/**", "**/.turbo/**", "**/dist/**", "**/build/**"]
},
js.configs.recommended,
{
files: ["**/*.{js,mjs}"],
languageOptions: {
ecmaVersion: "latest",
sourceType: "module",
globals: {
...globals.node
}
}
},
{
files: ["**/*.cjs"],
languageOptions: {
ecmaVersion: "latest",
sourceType: "commonjs",
globals: {
...globals.node
}
}
}
];
-30
View File
@@ -1,30 +0,0 @@
{
"name": "todolist",
"version": "0.1.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "turbo run test",
"dev": "turbo run dev --parallel",
"build": "turbo run build",
"lint": "turbo run lint && eslint .",
"typecheck": "turbo run typecheck",
"format": "prettier --write .",
"lint:staged": "lint-staged",
"prepare": "husky"
},
"keywords": [],
"author": "",
"license": "GPL-3.0-or-later",
"private": true,
"packageManager": "pnpm@9.15.2",
"devDependencies": {
"@eslint/js": "^10.0.1",
"eslint": "^10.2.0",
"globals": "^17.4.0",
"husky": "^9.1.7",
"lint-staged": "^16.4.0",
"prettier": "^3.8.1",
"turbo": "^2.9.3"
}
}
-16
View File
@@ -1,16 +0,0 @@
/** @type {import('eslint').Linter.Config} */
module.exports = {
env: {
browser: true,
es2022: true,
node: true
},
parserOptions: {
ecmaVersion: "latest",
sourceType: "module"
},
rules: {
"no-console": "warn",
"no-debugger": "error"
}
};
-11
View File
@@ -1,11 +0,0 @@
{
"name": "@todolist/eslint-config",
"version": "0.1.0",
"description": "Shared ESLint config presets for TodoList",
"main": "base.cjs",
"license": "GPL-3.0-or-later",
"private": true,
"files": [
"base.cjs"
]
}
View File
View File
-17
View File
@@ -1,17 +0,0 @@
{
"$schema": "https://json.schemastore.org/tsconfig",
"compilerOptions": {
"target": "ES2022",
"module": "ESNext",
"moduleResolution": "Bundler",
"strict": true,
"noImplicitOverride": true,
"noUncheckedIndexedAccess": true,
"noUnusedLocals": true,
"noUnusedParameters": true,
"skipLibCheck": true,
"resolveJsonModule": true,
"esModuleInterop": true,
"forceConsistentCasingInFileNames": true
}
}
-13
View File
@@ -1,13 +0,0 @@
{
"$schema": "https://json.schemastore.org/tsconfig",
"extends": "./base.json",
"compilerOptions": {
"module": "CommonJS",
"moduleResolution": "Node",
"lib": ["ES2022"],
"types": ["node"],
"experimentalDecorators": true,
"emitDecoratorMetadata": true,
"sourceMap": true
}
}
-12
View File
@@ -1,12 +0,0 @@
{
"name": "@todolist/tsconfig",
"version": "0.1.0",
"description": "Shared TypeScript config presets for TodoList",
"license": "GPL-3.0-or-later",
"private": true,
"files": [
"base.json",
"react-app.json",
"nest-app.json"
]
}
-9
View File
@@ -1,9 +0,0 @@
{
"$schema": "https://json.schemastore.org/tsconfig",
"extends": "./base.json",
"compilerOptions": {
"lib": ["ES2022", "DOM", "DOM.Iterable"],
"jsx": "react-jsx",
"types": ["vite/client"]
}
}
View File
-1215
View File
File diff suppressed because it is too large Load Diff
-3
View File
@@ -1,3 +0,0 @@
packages:
- "apps/*"
- "packages/*"
-28
View File
@@ -1,28 +0,0 @@
{
"$schema": "https://turbo.build/schema.json",
"tasks": {
"dev": {
"cache": false,
"persistent": true
},
"build": {
"dependsOn": ["^build"],
"outputs": ["dist/**", "build/**"]
},
"lint": {
"dependsOn": ["^lint"],
"outputs": []
},
"test": {
"dependsOn": ["^test"],
"outputs": ["coverage/**"]
},
"typecheck": {
"dependsOn": ["^typecheck"],
"outputs": []
},
"format": {
"outputs": []
}
}
}