chore: 导入旧记忆备份供恢复

This commit is contained in:
2026-09-23 22:38:40 +08:00
parent 5313fcee7a
commit 6a6a895eaf
638 changed files with 29816 additions and 1 deletions
@@ -0,0 +1,21 @@
---
title: Checkpoint 2026-08-31 04:06:23 UTC [15753a345e]
type: checkpoint
permalink: main/projects/6553b53c-bf14-49e3-a3de-1ee2f3533d51/checkpoint-2026-08-31-04-06-23-utc-15753a345e
stable_id: 5761b7bf-7dfe-46ee-91b4-b6b0c41b0888
scope: project
memory_type: checkpoint
project_id: 6553b53c-bf14-49e3-a3de-1ee2f3533d51
usage_profile_id: 7aee455b-24cc-4008-bdaf-443721e6f939
status: active
revision: 1
request_id: hantele-login-analysis-checkpoint-20260831-001
created_at: '2026-08-31T04:06:23.067721+00:00'
updated_at: '2026-08-31T04:06:23.067721+00:00'
tags:
- analysis
- login
- handoff
---
里程碑:完成瀚信工时管理系统登录协议只读分析,未修改工作区代码。Chrome 实际登录成功,验证码人工识别为本次图片内容并已验证。前端包确认验证码 GET /wts/code/{randomStr};密码使用 Base64;登录 POST /wts/oauth/token 且参数位于 query string;Basic 客户端头固定;返回 access_token/refresh_token,后续 Bearer 认证。凭据已单独保存到密码库条目“瀚信工时管理系统 183.6.190.76:26007”,普通记忆无密文。验证:成功进入 #/wel/index,显示当前用户首页。下一步:用户确认设计后,在项目内实现复用 Session、验证码 OCR、Base64 密码、Token 缓存/刷新和失败重试。注意服务证书 SAN 为空,测试客户端需要明确配置证书处理策略。
@@ -0,0 +1,21 @@
---
title: Checkpoint 2026-08-31 08:57:38 UTC [b439f5be00]
type: checkpoint
permalink: main/projects/6553b53c-bf14-49e3-a3de-1ee2f3533d51/checkpoint-2026-08-31-08-57-38-utc-b439f5be00
stable_id: 12faa41a-7590-4ff8-b3c3-990b38257a50
scope: project
memory_type: checkpoint
project_id: 6553b53c-bf14-49e3-a3de-1ee2f3533d51
usage_profile_id: 7aee455b-24cc-4008-bdaf-443721e6f939
status: active
revision: 1
request_id: hantele-login-implementation-final-20260831-001
created_at: '2026-08-31T08:57:38.906378+00:00'
updated_at: '2026-08-31T08:57:38.906378+00:00'
tags:
- implementation
- validated
- handoff
---
最终交接:在原空目录 E:\code\HanteleWorkTime 创建 Python CLI 自动登录工具。hantele_login.py 实现 randomStr、验证码下载、ddddocr 识别、Base64 密码、OAuth 登录、最多 N 次验证码重试、Bearer 用户信息验证;默认不输出 Token,用户信息只保留账号、姓名、角色和权限数量。requirements.txt 固定 requests/ddddocr 主版本;README.md 包含安装和参数;test_hantele_login.py 覆盖 Base64、randomStr、请求结构和敏感字段脱敏;.gitignore 排除 .venv、缓存、失败验证码和 aidocs。环境:uv 创建 Python 3.12 .venv,依赖安装成功。验证:4/4 unittest 通过,compileall 通过,两次真实登录成功,ddddocr 均首轮识别验证码成功,最终 CLI 未输出 Token、密码哈希、手机号或邮箱。目录不是 Git 仓库,未创建提交。凭据只在密码库中。下一步:基于 HanteleClient 增加具体考勤查询/提交 API;如要无人值守,在任务运行器中注入 HANTELE_USERNAME/HANTELE_PASSWORD,不写入脚本。陷阱:服务证书 SAN 为空,当前只能为该客户端显式使用 --insecure;失败验证码目录可能包含图片样本,已被 .gitignore 排除。
@@ -0,0 +1,19 @@
---
title: Checkpoint 2026-08-31 08:59:42 UTC
type: checkpoint
permalink: main/projects/6553b53c-bf14-49e3-a3de-1ee2f3533d51/checkpoint-2026-08-31-08-59-42-utc
stable_id: c3c4bb68-8520-4a05-a1a9-5d5a299bba50
scope: project
memory_type: checkpoint
project_id: 6553b53c-bf14-49e3-a3de-1ee2f3533d51
usage_profile_id: 7aee455b-24cc-4008-bdaf-443721e6f939
status: active
revision: 1
request_id: 6f727cb6fc25251fc286af887cdbad06efe98c33
created_at: '2026-08-31T08:59:42.567050+00:00'
updated_at: '2026-08-31T08:59:42.567050+00:00'
tags:
- source-submit
---
已创建并验证 Python CLI。4 项单测及 compileall 通过,两次真实登录成功且验证码均首轮识别;默认输出已脱敏。目录不是 Git 仓库。下一步是复用 HanteleClient 增加考勤业务 API。
@@ -0,0 +1,21 @@
---
title: Checkpoint 2026-08-31 09:29:42 UTC [c25a672a83]
type: checkpoint
permalink: main/projects/6553b53c-bf14-49e3-a3de-1ee2f3533d51/checkpoint-2026-08-31-09-29-42-utc-c25a672a83
stable_id: 45524177-90a6-49b2-afa7-02317c81e254
scope: project
memory_type: checkpoint
project_id: 6553b53c-bf14-49e3-a3de-1ee2f3533d51
usage_profile_id: 7aee455b-24cc-4008-bdaf-443721e6f939
status: active
revision: 1
request_id: hantele-tls-default-checkpoint-20260831-001
created_at: '2026-08-31T09:29:42.993030+00:00'
updated_at: '2026-08-31T09:29:42.993030+00:00'
tags:
- tls
- decision
- validated
---
增量变更:按用户明确要求,hantele_login.py 默认忽略 HTTPS 证书校验,直接运行无需 --insecure;保留隐藏 --insecure 兼容旧命令,--ca-file 可显式使用 CA 校验。README 命令已移除 --insecure,新增默认行为说明;新增单测确认 HanteleClient.verify 默认 False。验证:Python 3.12 .venv 下 5/5 unittest 通过,CLI help 不再展示 --insecure。下一步:可继续基于 HanteleClient 增加考勤接口。
@@ -0,0 +1,19 @@
---
title: Checkpoint 2026-08-31 09:30:02 UTC
type: checkpoint
permalink: main/projects/6553b53c-bf14-49e3-a3de-1ee2f3533d51/checkpoint-2026-08-31-09-30-02-utc
stable_id: e17788f7-3baf-4bb2-ba69-fb587705c3f3
scope: project
memory_type: checkpoint
project_id: 6553b53c-bf14-49e3-a3de-1ee2f3533d51
usage_profile_id: 7aee455b-24cc-4008-bdaf-443721e6f939
status: active
revision: 1
request_id: 461768fae694287340cbdb338e24a4696f887fff
created_at: '2026-08-31T09:30:02.069992+00:00'
updated_at: '2026-08-31T09:30:02.069992+00:00'
tags:
- source-submit
---
按用户要求将自动登录客户端的 HTTPS 校验默认设为关闭;保留 --ca-file 严格校验入口。README 已同步,5 项单测通过。
@@ -0,0 +1,101 @@
---
title: HanteleWorkTime 任务清单
type: curated
permalink: main/projects/6553b53c-bf14-49e3-a3de-1ee2f3533d51/curated/hantele-work-time-任务清单
stable_id: f0a79469-3f52-4a97-8b35-ca5d1458eb92
scope: project
project_id: 6553b53c-bf14-49e3-a3de-1ee2f3533d51
workspace_type: development
usage_profile_id: null
preference_context: development
document_type: tasks
revision: 4
source_memory_ids:
- a541caed-4198-4a81-a162-961471ab56ec
source_checkpoint_ids:
- 45524177-90a6-49b2-afa7-02317c81e254
- e17788f7-3baf-4bb2-ba69-fb587705c3f3
source_file_ids: []
source_git_commit: null
source_git_commits: []
source_agent_sync_ids:
- hantele-tls-curation-20260831-001
model_connection: Sub2API
model_name: openai/gpt-oss-120b
source_count: 26
source_revisions:
memory:5761b7bf-7dfe-46ee-91b4-b6b0c41b0888: '1'
memory:ebfb0410-00e9-473f-aba0-524e48184051: '2'
memory:12faa41a-7590-4ff8-b3c3-990b38257a50: '1'
source_dispositions:
processed: 26
unchanged: 0
unsupported: 0
skipped: 0
cited_source_ids:
- curated_baseline:f0a79469-3f52-4a97-8b35-ca5d1458eb92
- memory:ebfb0410-00e9-473f-aba0-524e48184051
- memory:12faa41a-7590-4ff8-b3c3-990b38257a50
- global_guidance_memory:bf88c265-4749-4c50-85bc-4bae25298cd5
- global_guidance_memory:105b328f-4bda-4641-90a7-7282ef156316
- memory:5761b7bf-7dfe-46ee-91b4-b6b0c41b0888
- global_guidance_document:8a861a5f-35c3-4f95-bd5b-6b2297888f56
- project:6553b53c-bf14-49e3-a3de-1ee2f3533d51
- global_guidance_memory:7429c22e-50ff-458a-97c0-423c679904c7
- global_guidance_memory:1194be51-ee29-47e1-8957-ec2888007db6
- global_guidance_memory:3f91189b-11a1-45bb-8357-4f413dc1609d
- global_guidance_memory:5ed86f53-b53e-4534-8e51-d3a010069d5e
- global_guidance_memory:ff34c6eb-6bba-41e5-9e43-ff80941fa823
- global_guidance_document:d3a20d44-6001-4c88-8772-65dbfac75e6e
- global_guidance_document:2b47472d-3ac2-4394-8646-c6bf1c0fc270
- global_guidance_document:6973450e-6ecc-48e3-8cdd-4d7d7707d843
- global_guidance_document:e4fc35f2-1606-4b79-9c1e-367edeea97d0
job_cited_source_ids:
- curated_baseline:f0a79469-3f52-4a97-8b35-ca5d1458eb92
conflicts: []
supersedes: []
preferences: []
source_cursor: 217
source_hash: ac2647ce0e6a0a122bdf5cb4b4f94b4f21aab36b9ebefc65f31ed5454146b7e1
prompt_version: 2026-08-12.3
schema_version: '3'
curation_job_id: 1406e55b-189b-4ffc-b2a0-f9b599269fae
created_at: '2026-08-31T03:10:01.633148+00:00'
updated_at: '2026-08-31T09:46:16.685105+00:00'
tags:
- development
- tasks
---
## 任务列表(中文)
1. **实现登录协议相关功能**(依据 `memory:ebfb0410-00e9-473f-aba0-524e48184051`)
- 完成 Session 复用、Token 缓存/刷新。
- 实现验证码获取、OCR 识别及失败重试机制。
- 将密码统一为 Base64 编码发送,并在代码层统一封装。
- 实现后在 `aidocs/project_context.md` 记录实现细节、验证方式、遇到的问题与后续计划。
2. **配置 Docker Desktop 代理**
- 在 Docker Desktop → Settings → Resources → Proxies 中手动设置 HTTP/HTTPS 为 `http://127.0.0.1:7897`。
- 重启 Docker 并执行 `docker pull hello-world` 验证成功。
3. **确保 Windows + WSL2 + Docker 环境兼容**
- 使用 Windows 兼容的路径分隔符与换行符(LF)。
- 容器内部访问宿主服务使用 `host.docker.internal`,如需桥接网关使用 `172.17.0.1`。
4. **遵循 KISS 与 YAGNI 实现**
- 检查代码库,移除所有仅为假设未来需求添加的抽象层或依赖。
- 复用现有框架与工具,避免重复实现。
5. **凭证与 Vaultwarden 工作流验证**
- 在每次登录/SSH/API 调用前执行 Vaultwarden 查询脚本,确保唯一匹配时自动使用。
- 若出现多条匹配,记录在 `aidocs/project_context.md` 并手动选择。
- 新增或修改的凭证立即写入密码库,仅在记忆中记录名称与用途。
6. **记忆文件维护**
- 完成功能后立即在 `aidocs/project_context.md` 追加条目(秒级时间戳、做了什么、为何、验证、问题、后续计划)。
- 确认 `aidocs/` 在 `.gitignore` 中,防止误提交。
- 使用 `type: 中文一句话描述` 格式提交代码,仅在明确需求时执行 `git push`。
---
**标签**: ["development", "tasks"]
@@ -0,0 +1,68 @@
---
title: HanteleWorkTime 术语表
type: curated
permalink: main/projects/6553b53c-bf14-49e3-a3de-1ee2f3533d51/curated/hantele-work-time-术语表
stable_id: 428383b9-797d-41d9-bf22-9bb8b2a83955
scope: project
project_id: 6553b53c-bf14-49e3-a3de-1ee2f3533d51
workspace_type: development
usage_profile_id: null
preference_context: development
document_type: glossary
revision: 1
source_memory_ids: []
source_checkpoint_ids: []
source_file_ids: []
source_git_commit: null
source_git_commits: []
source_agent_sync_ids: []
model_connection: Sub2API
model_name: openai/gpt-oss-120b
source_count: 13
source_revisions: {}
source_dispositions:
processed: 13
unchanged: 0
unsupported: 0
skipped: 0
cited_source_ids:
- global_guidance_memory:bf88c265-4749-4c50-85bc-4bae25298cd5
- global_guidance_memory:3f91189b-11a1-45bb-8357-4f413dc1609d
- global_guidance_document:8a861a5f-35c3-4f95-bd5b-6b2297888f56
- global_guidance_document:e4fc35f2-1606-4b79-9c1e-367edeea97d0
job_cited_source_ids:
- global_guidance_memory:bf88c265-4749-4c50-85bc-4bae25298cd5
- global_guidance_memory:3f91189b-11a1-45bb-8357-4f413dc1609d
- global_guidance_document:8a861a5f-35c3-4f95-bd5b-6b2297888f56
- global_guidance_document:e4fc35f2-1606-4b79-9c1e-367edeea97d0
conflicts: []
supersedes: []
preferences: []
source_cursor: 207
source_hash: 5a2bf7e4aa8a90513e133f70e1737cdaf99fddd9888166c7645ba4700934109c
prompt_version: 2026-08-12.3
schema_version: '3'
curation_job_id: 831de31c-3ff7-4cb5-81ed-55b900461a33
created_at: '2026-08-31T03:10:01.644844+00:00'
updated_at: '2026-08-31T03:10:01.645388+00:00'
tags:
- development
- glossary
---
## 关键术语定义
| 术语 | 定义 |
|------|------|
| **KISS** | “Keep It Simple, Stupid”,在实现时坚持最简且正确的方案。 |
| **YAGNI** | “You Aren’t Gonna Need It”,避免为假设的未来需求添加代码或依赖。 |
| **MemRelay** | 项目统一的记忆持久化系统,负责存储、检索和管理开发笔记。 |
| **Vaultwarden** | 开源的密码库服务,所有登录、SSH、数据库、API 等凭证在使用前必须先在此查询。 |
| **aidocs/project_context.md** | 项目根目录下的记忆文件,固定标题后以秒级时间戳逆序记录开发活动。 |
| **Docker Desktop 代理** | 为容器网络提供的 HTTP/HTTPS 代理,常设为 `http://127.0.0.1:7897`。 |
| **host.docker.internal** | Docker Desktop 在容器内部访问宿主机器的 DNS 名称。 |
| **FastAPI async 陷阱** | 在 `async def` 中调用阻塞 I/O(如 `pymysql`、`requests`)会冻结事件循环,应改为普通 `def` 让 FastAPI 自动使用线程池。 |
| **PowerShell JSON 发送** | 为避免 JSON 中的双引号被吞掉,需先写入临时文件并使用 `--data-binary @file` 发送。 |
| **Docker Exec 超时** | 默认 3 秒全局超时会导致长连接被中断,获取裸 socket 后调用 `settimeout(None)` 可解除。 |
**标签**: ["development", "glossary"]
@@ -0,0 +1,69 @@
---
title: HanteleWorkTime 常见问题排查指南
type: curated
permalink: main/projects/6553b53c-bf14-49e3-a3de-1ee2f3533d51/curated/development/hantele-work-time-常见问题排查指南
stable_id: 6086d60a-bd33-4823-9117-10e1fdae2767
scope: project
project_id: 6553b53c-bf14-49e3-a3de-1ee2f3533d51
workspace_type: development
usage_profile_id: null
preference_context: development
document_type: troubleshooting
revision: 1
source_memory_ids: []
source_checkpoint_ids: []
source_file_ids: []
source_git_commit: null
source_git_commits: []
source_agent_sync_ids: []
model_connection: Sub2API
model_name: openai/gpt-oss-120b
source_count: 13
source_revisions: {}
source_dispositions:
processed: 13
unchanged: 0
unsupported: 0
skipped: 0
cited_source_ids:
- global_guidance_document:8a861a5f-35c3-4f95-bd5b-6b2297888f56
- global_guidance_document:e4fc35f2-1606-4b79-9c1e-367edeea97d0
- global_guidance_memory:bf88c265-4749-4c50-85bc-4bae25298cd5
- global_guidance_memory:3f91189b-11a1-45bb-8357-4f413dc1609d
- global_guidance_memory:105b328f-4bda-4641-90a7-7282ef156316
job_cited_source_ids:
- global_guidance_document:8a861a5f-35c3-4f95-bd5b-6b2297888f56
- global_guidance_document:e4fc35f2-1606-4b79-9c1e-367edeea97d0
- global_guidance_memory:bf88c265-4749-4c50-85bc-4bae25298cd5
- global_guidance_memory:3f91189b-11a1-45bb-8357-4f413dc1609d
- global_guidance_memory:105b328f-4bda-4641-90a7-7282ef156316
conflicts: []
supersedes: []
preferences: []
source_cursor: 207
source_hash: 5a2bf7e4aa8a90513e133f70e1737cdaf99fddd9888166c7645ba4700934109c
prompt_version: 2026-08-12.3
schema_version: '3'
curation_job_id: 831de31c-3ff7-4cb5-81ed-55b900461a33
created_at: '2026-08-31T03:10:09.738999+00:00'
updated_at: '2026-08-31T03:10:09.739616+00:00'
tags:
- development
- troubleshooting
---
## 常见问题及解决方案
| 场景 | 症状 | 可能原因 | 解决办法 |
|------|------|----------|----------|
| **FastAPI 异步阻塞** | 请求卡死,日志无响应 | 在 `async def` 中调用阻塞 I/O(如 `pymysql`、`requests`) | 将函数改为普通 `def`,让 FastAPI 自动切换至线程池。 |
| **PowerShell 发送 JSON** | 服务器收到的 JSON 丢失引号 | 直接在命令行中使用 `--data` 导致引号被解析 | 先将 JSON 写入临时文件,然后使用 `--data-binary @file` 发送。 |
| **Docker Exec 超时** | 长时间交互式命令在 3 秒后断开 | `docker-py` 默认全局超时被继承到 hijacked socket | 在获取裸 socket 后调用 `socket.settimeout(None)`,保持无限阻塞。 |
| **Docker Hub 连接失败** | `docker pull` 报错或长时间卡住 | Docker Desktop 代理未配置为 *Manual* 或代理地址错误 | 打开 Docker Desktop → Settings → Resources → Proxies,手动填写 `http://127.0.0.1:7897`,保存并重启 Docker。 |
| **Vaultwarden 凭证未自动使用** | 登录或 API 调用仍要求手动输入凭证 | 搜索到多条或无匹配记录 | 确认 Vaultwarden 中仅保留唯一条目;若有多条,手动选择或删除冗余。 |
| **Docker 容器网络不可达宿主服务** | 容器内访问 `localhost` 失败 | 容器默认隔离网络 | 使用 `host.docker.internal`(Windows/macOS)或在 `docker run` 时添加 `--network host`(Linux)访问宿主。 |
| **脚本换行符导致错误** | `$'\r': command not found` | 脚本使用 Windows CRLF 换行 | 将脚本转换为 LF 换行(`dos2unix` 或编辑器设置)后重新执行。 |
**参考来源**:`global_guidance_document:8a861a5f-35c3-4f95-bd5b-6b2297888f56`, `global_guidance_document:e4fc35f2-1606-4b79-9c1e-367edeea97d0`, `global_guidance_memory:bf88c265-4749-4c50-85bc-4bae25298cd5`, `global_guidance_memory:3f91189b-11a1-45bb-8357-4f413dc1609d`, `global_guidance_memory:105b328f-4bda-4641-90a7-7282ef156316`.
**标签**: ["development", "troubleshooting"]
@@ -0,0 +1,88 @@
---
title: HanteleWorkTime 系统架构概览
type: curated
permalink: main/projects/6553b53c-bf14-49e3-a3de-1ee2f3533d51/curated/development/hantele-work-time-系统架构概览
stable_id: fb9a56e2-56ce-4d5a-9334-79c18192d663
scope: project
project_id: 6553b53c-bf14-49e3-a3de-1ee2f3533d51
workspace_type: development
usage_profile_id: null
preference_context: development
document_type: architecture
revision: 1
source_memory_ids: []
source_checkpoint_ids: []
source_file_ids: []
source_git_commit: null
source_git_commits: []
source_agent_sync_ids: []
model_connection: Sub2API
model_name: openai/gpt-oss-120b
source_count: 13
source_revisions: {}
source_dispositions:
processed: 13
unchanged: 0
unsupported: 0
skipped: 0
cited_source_ids:
- global_guidance_document:d3a20d44-6001-4c88-8772-65dbfac75e6e
- global_guidance_document:e4fc35f2-1606-4b79-9c1e-367edeea97d0
- global_guidance_memory:bf88c265-4749-4c50-85bc-4bae25298cd5
- global_guidance_memory:3f91189b-11a1-45bb-8357-4f413dc1609d
- global_guidance_memory:105b328f-4bda-4641-90a7-7282ef156316
- global_guidance_memory:ff34c6eb-6bba-41e5-9e43-ff80941fa823
- global_guidance_memory:1194be51-ee29-47e1-8957-ec2888007db6
job_cited_source_ids:
- global_guidance_document:d3a20d44-6001-4c88-8772-65dbfac75e6e
- global_guidance_document:e4fc35f2-1606-4b79-9c1e-367edeea97d0
- global_guidance_memory:bf88c265-4749-4c50-85bc-4bae25298cd5
- global_guidance_memory:3f91189b-11a1-45bb-8357-4f413dc1609d
- global_guidance_memory:105b328f-4bda-4641-90a7-7282ef156316
- global_guidance_memory:ff34c6eb-6bba-41e5-9e43-ff80941fa823
- global_guidance_memory:1194be51-ee29-47e1-8957-ec2888007db6
conflicts: []
supersedes: []
preferences: []
source_cursor: 207
source_hash: 5a2bf7e4aa8a90513e133f70e1737cdaf99fddd9888166c7645ba4700934109c
prompt_version: 2026-08-12.3
schema_version: '3'
curation_job_id: 831de31c-3ff7-4cb5-81ed-55b900461a33
created_at: '2026-08-31T03:10:05.582276+00:00'
updated_at: '2026-08-31T03:10:05.583206+00:00'
tags:
- development
- architecture
---
## 总体架构
1. **硬件/宿主平台**
- 主机操作系统:Windows 10/11。
- 虚拟化层:WSL2(Linux 子系统)+ Docker Desktop。
- 网络:容器通过 `host.docker.internal` 访问宿主服务;必要时使用网关 `172.17.0.1`。
2. **容器化服务**
- 业务服务(如 FastAPI、数据库等)运行在 Docker 容器内,端口统一映射到 `0.0.0.0` 以供宿主和外部访问。
- 代理层:Docker Desktop 代理手动配置为 `http://127.0.0.1:7897`(支持 HTTP 与 HTTPS),确保所有容器的外网请求走本地代理。
3. **记忆与版本管理**
- **MemRelay**:统一的记忆持久化后端,负责 `aidocs/project_context.md` 中的笔记存取。
- **Git**:本地 Git 仓库仅用于提交代码;`aidocs/` 目录已加入 `.gitignore`,记忆文件不随代码推送。
- 提交信息格式:`type: 中文一句话描述`(`type` 为 `feat/fix/refactor/style/docs/chore/revert`)。
4. **安全与凭证**
- 所有登录、SSH、数据库、API 调用前先查询 **Vaultwarden**;唯一匹配时自动使用。
- 新增或修改的密码、Token、API‑Key、TOTP 种子立即写入密码库,记忆中仅记录名称、用途、使用方式。
5. **开发原则**
- **KISS 与 YAGNI**:实现最简且正确,复用已有框架与工具,避免投机性依赖。
- **AI 与 Git 自动化**:默认关闭,除非显式启用。
6. **常见技术约束**
- **FastAPI**:避免在 `async` 接口中使用阻塞 I/O。
- **PowerShell**:发送 JSON 时使用临时文件并 `--data-binary @file`。
- **Docker Exec**:长连接需取消默认 3 秒超时。
**标签**: ["development", "architecture"]
@@ -0,0 +1,80 @@
---
title: HanteleWorkTime 维护手册
type: curated
permalink: main/projects/6553b53c-bf14-49e3-a3de-1ee2f3533d51/curated/development/hantele-work-time-维护手册
stable_id: 6c2974c0-4721-48b6-9655-745316b7472c
scope: project
project_id: 6553b53c-bf14-49e3-a3de-1ee2f3533d51
workspace_type: development
usage_profile_id: null
preference_context: development
document_type: maintenance
revision: 1
source_memory_ids: []
source_checkpoint_ids: []
source_file_ids: []
source_git_commit: null
source_git_commits: []
source_agent_sync_ids: []
model_connection: Sub2API
model_name: openai/gpt-oss-120b
source_count: 13
source_revisions: {}
source_dispositions:
processed: 13
unchanged: 0
unsupported: 0
skipped: 0
cited_source_ids: []
job_cited_source_ids: []
conflicts: []
supersedes: []
preferences: []
source_cursor: 207
source_hash: 5a2bf7e4aa8a90513e133f70e1737cdaf99fddd9888166c7645ba4700934109c
prompt_version: 2026-08-12.3
schema_version: '3'
curation_job_id: 831de31c-3ff7-4cb5-81ed-55b900461a33
created_at: '2026-08-31T03:10:15.092752+00:00'
updated_at: '2026-08-31T03:10:15.093384+00:00'
tags:
- maintenance
- development
---
# HanteleWorkTime 维护手册
本手册针对 **HanteleWorkTime** 工作区(development)提供日常运维、记忆更新以及凭证管理的最佳实践。
## 1. 记忆(Project Context)管理
- 所有开发、运维、故障排查笔记统一写入 `aidocs/project_context.md`。
- 文件结构:固定标题行后,以 **最新优先**、秒级时间戳(`YYYY-MM-DD HH:MM:SS`) 追加条目,记录 **做了什么、为何、如何验证、遇到的问题、后续计划**  [来源: `global_guidance_memory:5ed86f53-b53e-4534-8e51-d3a010069d5e`]
- `aidocs/` 已加入 `.gitignore`,永不提交至代码库;完成任务后执行 **清理临时文件、调试日志、无用代码**,再提交有意义的代码改动。提交信息格式为 `type: 中文一句话描述`(如 `feat: 修复登录超时`)  [来源: `global_guidance_memory:5ed86f53-b53e-4534-8e51-d3a010069d5e`]
## 2. Git 工作流
- 默认 **仅 commit**;除非明确要求 `push`,系统不会自动推送。  [来源: `global_guidance_document:d3a20d44-6001-4c88-8772-65dbfac75e6e`]
- 提交类型约定:`feat`, `fix`, `refactor`, `style`, `docs`, `chore`, `revert`,后接中文简要描述。  [同上]
- 非当前会话的合理修改(不含敏感信息)在确认不破坏代码后一起提交。  [来源: `global_guidance_memory:5ed86f53-b53e-4534-8e51-d3a010069d5e`]
## 3. 凭证检索与更新工作流
- **登录/SSH/数据库/API** 前统一走 **Vaultwarden** 检索流程。唯一匹配自动使用,多条或无匹配时提示人工选择。  [来源: `global_guidance_memory:105b328f-4bda-4641-90a7-7282ef156316`]
- 新增或修改的 **密码、Token、API‑Key、TOTP 种子** 必须立即写入密码库;记忆中仅记录名称、用途、使用方式,绝不保存明文。  [同上]
- 目前受管基础设施列表:BDYG18Pro、OpenWrt、MySQL、MemRelay、Gitea OAuth、FRP Token、公网 FRPS 服务器。  [同上]
## 4. 常规维护任务
| 任务 | 频率 | 关键步骤 |
|------|------|----------|
| 检查 Docker 代理 | 每次 Docker 重启后 | 确认 `http://127.0.0.1:7897` 已在 Docker Desktop 手动代理中配置并生效  [来源: `global_guidance_document:8a861a5f-35c3-4f95-bd5b-6b2297888f56`] |
| 更新项目记忆 | 每次功能迭代或故障排查后 | 在 `aidocs/project_context.md` 追加最新条目,确保时间戳精确到秒 |
| 验证凭证可用性 | 每周一次 | 使用检索到的凭证尝试登录对应服务,确认无失效或权限变化 |
| 清理临时文件 | 每日 | 删除容器内部的 `/tmp`、日志文件以及本地调试产生的 `.log` |
| 代码审查 | 每次合并前 | 确认不引入不必要依赖,遵守 KISS 与 YAGNI 规范  [来源: `global_guidance_memory:bf88c265-4749-4c50-85bc-4bae25298cd5`] |
## 5. 故障排查要点
- **Docker Exec 超时**:默认 3 秒超时会导致长连接中断。获取裸 socket 后调用 `settimeout(None)` 以保持无限阻塞  [来源: `global_guidance_document:8a861a5f-35c3-4f95-bd5b-6b2297888f56`]
- **FastAPI async 坑**:在 `async def` 中调用阻塞 I/O(如 pymysql、requests)会冻结事件循环。改为普通 `def`,FastAPI 会自动转入线程池  [来源: `global_guidance_document:e4fc35f2-1606-4b79-9c1e-367edeea97d0`]
- **凭证未自动使用**:确保 Vaultwarden 条目唯一,若出现多条需手动确认;若无匹配则需手动输入或创建新条目  [来源: `global_guidance_memory:105b328f-4bda-4641-90a7-7282ef156316`]
---
**标签**: ["maintenance","development"]
@@ -0,0 +1,83 @@
---
title: HanteleWorkTime 部署指南
type: curated
permalink: main/projects/6553b53c-bf14-49e3-a3de-1ee2f3533d51/curated/development/hantele-work-time-部署指南
stable_id: 5d0e9587-c39b-4f66-b84a-9259d3a22a05
scope: project
project_id: 6553b53c-bf14-49e3-a3de-1ee2f3533d51
workspace_type: development
usage_profile_id: null
preference_context: development
document_type: deployment
revision: 1
source_memory_ids: []
source_checkpoint_ids: []
source_file_ids: []
source_git_commit: null
source_git_commits: []
source_agent_sync_ids: []
model_connection: Sub2API
model_name: openai/gpt-oss-120b
source_count: 13
source_revisions: {}
source_dispositions:
processed: 13
unchanged: 0
unsupported: 0
skipped: 0
cited_source_ids: []
job_cited_source_ids: []
conflicts: []
supersedes: []
preferences: []
source_cursor: 207
source_hash: 5a2bf7e4aa8a90513e133f70e1737cdaf99fddd9888166c7645ba4700934109c
prompt_version: 2026-08-12.3
schema_version: '3'
curation_job_id: 831de31c-3ff7-4cb5-81ed-55b900461a33
created_at: '2026-08-31T03:10:12.978059+00:00'
updated_at: '2026-08-31T03:10:12.978756+00:00'
tags:
- deployment
- development
---
# HanteleWorkTime 部署指南
本文档面向 **HanteleWorkTime** 项目(工作区类型:development),提供当前可执行的部署步骤与注意事项。
## 1. 环境要求
- 操作系统:Windows(使用 **WSL2 + Docker Desktop**)  [来源: `global_guidance_document:d3a20d44-6001-4c88-8772-65dbfac75e6e`]
- Docker 代理:手动模式,HTTP 与 HTTPS 均指向 `http://127.0.0.1:7897`,重启 Docker 后验证 `docker pull` 正常工作  [来源: `global_guidance_document:8a861a5f-35c3-4f95-bd5b-6b2297888f56`]
- 网络访问:容器内部访问宿主代理使用 `host.docker.internal:7897`,如需直接访问宿主 IP 采用 `172.17.0.1`(桥接网络)  [来源: `global_guidance_document:8a861a5f-35c3-4f95-bd5b-6b2297888f56`]
## 2. 基本部署原则
- **KISS 与 YAGNI**:只实现最简且正确的功能,不为猜测的未来需求添加依赖或抽象层  [来源: `global_guidance_memory:bf88c265-4749-4c50-85bc-4bae25298cd5`]
- **复用已有框架**:优先使用项目已有的服务、约定和工具,避免重复实现  [同上]
## 3. AI 与 Git 同步(可选)
- 默认 **关闭** AI 驱动的记忆同步与 Git 集成;系统在未显式开启时不会尝试加载模型、创建 `.git` 目录或进行自动 push  [来源: `global_guidance_memory:3f91189b-11a1-45bb-8357-4f413dc1609d`]
- 如需启用,请在部署脚本中显式配置相应的 MemRelay 插件并确认 `.git` 目录已创建  [来源: `global_guidance_memory:3f91189b-11a1-45bb-8357-4f413dc1609d`]
## 4. 凭证与安全
- 所有登录、SSH、数据库或 API 调用 **前** 必须在 Vaultwarden 中搜索对应条目;若唯一匹配则自动使用,否则提示人工选择  [来源: `global_guidance_memory:105b328f-4bda-4641-90a7-7282ef156316`]
- 新增或修改的密码、Token、API‑Key、TOTP 种子 **立即** 写入密码库;记忆中仅记录条目名称、用途与使用方式,绝不保存密文  [同上]
- 项目当前使用的基础设施条目包括 BDYG18Pro、OpenWrt、MySQL、MemRelay、Gitea OAuth、FRP Token 与公网 FRPS 服务器  [同上]
## 5. 部署步骤概览
1. **准备环境**:确认 Windows + WSL2 + Docker Desktop 已安装并符合上文的代理与网络设置。
2. **拉取代码**:在本地工作区执行 `git clone <repo>`(仅克隆代码,不会自动创建 `.git` 除非显式请求)。
3. **配置凭证**:运行部署脚本前,确保所有必需的凭证已在 Vaultwarden 中存在且唯一。
4. **构建容器**:使用 `docker compose build`,期间 Docker 将通过 `host.docker.internal:7897` 访问外部代理。
5. **启动服务**:`docker compose up -d`,检查容器日志确保无凭证加载错误。
6. **验证**:访问服务的 UI(如有),确认页面顶部标题在滚动时保持可见,表单布局符合 **“标题在左、控件在右”** 的紧凑横向规范  [来源: `global_guidance_memory:bf88c265-4749-4c50-85bc-4bae25298cd5`]
7. **记录部署**:在 `aidocs/project_context.md` 追加部署记录(时间戳、操作、验证结果),该文件不被提交至 Git  [来源: `global_guidance_memory:5ed86f53-b53e-4534-8e51-d3a010069d5e`]
## 6. 常见问题
- **Docker 拉取超时**:确认代理已正确配置并在系统代理中开启。若仍失败,检查 `settings-store.json` 中 `ProxyHTTPMode=manual` 是否生效。  [来源: `global_guidance_document:8a861a5f-35c3-4f95-bd5b-6b2297888f56`]
- **AI 模型意外加载**:检查环境变量 `MEMRELAY_AI_ENABLED` 是否被误设为 `true`,否则系统会尝试加载默认模型并报错。  [来源: `global_guidance_memory:3f91189b-11a1-45bb-8357-4f413dc1609d`]
- **凭证未自动使用**:确保 Vaultwarden 中的条目名称唯一;多个匹配会导致系统提示手动选择。  [来源: `global_guidance_memory:105b328f-4bda-4641-90a7-7282ef156316`]
---
**标签**: ["deployment","development"]
@@ -0,0 +1,112 @@
---
title: 关键决策记录 – HanteleWorkTime
type: curated
permalink: main/projects/6553b53c-bf14-49e3-a3de-1ee2f3533d51/curated/关键决策记录-hantele-work-time
stable_id: 064f0369-79da-45c1-9140-bb7d3e54a806
scope: project
project_id: 6553b53c-bf14-49e3-a3de-1ee2f3533d51
workspace_type: development
usage_profile_id: null
preference_context: development
document_type: decisions
revision: 2
source_memory_ids:
- a541caed-4198-4a81-a162-961471ab56ec
source_checkpoint_ids:
- 45524177-90a6-49b2-afa7-02317c81e254
- e17788f7-3baf-4bb2-ba69-fb587705c3f3
source_file_ids: []
source_git_commit: null
source_git_commits: []
source_agent_sync_ids:
- hantele-tls-curation-20260831-001
model_connection: Sub2API
model_name: openai/gpt-oss-120b
source_count: 26
source_revisions:
memory:a541caed-4198-4a81-a162-961471ab56ec: '1'
memory:45524177-90a6-49b2-afa7-02317c81e254: '1'
memory:e17788f7-3baf-4bb2-ba69-fb587705c3f3: '1'
source_dispositions:
processed: 26
unchanged: 0
unsupported: 0
skipped: 0
cited_source_ids:
- memory:a541caed-4198-4a81-a162-961471ab56ec
- memory:45524177-90a6-49b2-afa7-02317c81e254
- memory:e17788f7-3baf-4bb2-ba69-fb587705c3f3
- global_guidance_memory:1194be51-ee29-47e1-8957-ec2888007db6
- global_guidance_memory:7429c22e-50ff-458a-97c0-423c679904c7
- global_guidance_memory:ff34c6eb-6bba-41e5-9e43-ff80941fa823
- global_guidance_memory:bf88c265-4749-4c50-85bc-4bae25298cd5
- global_guidance_memory:105b328f-4bda-4641-90a7-7282ef156316
- global_guidance_document:8a861a5f-35c3-4f95-bd5b-6b2297888f56
- global_guidance_document:d3a20d44-6001-4c88-8772-65dbfac75e6e
- global_guidance_memory:3f91189b-11a1-45bb-8357-4f413dc1609d
- global_guidance_document:e4fc35f2-1606-4b79-9c1e-367edeea97d0
job_cited_source_ids:
- memory:a541caed-4198-4a81-a162-961471ab56ec
- memory:45524177-90a6-49b2-afa7-02317c81e254
- memory:e17788f7-3baf-4bb2-ba69-fb587705c3f3
- global_guidance_memory:1194be51-ee29-47e1-8957-ec2888007db6
- global_guidance_memory:7429c22e-50ff-458a-97c0-423c679904c7
- global_guidance_memory:ff34c6eb-6bba-41e5-9e43-ff80941fa823
- global_guidance_memory:bf88c265-4749-4c50-85bc-4bae25298cd5
- global_guidance_memory:105b328f-4bda-4641-90a7-7282ef156316
- global_guidance_document:8a861a5f-35c3-4f95-bd5b-6b2297888f56
- global_guidance_document:d3a20d44-6001-4c88-8772-65dbfac75e6e
- global_guidance_memory:3f91189b-11a1-45bb-8357-4f413dc1609d
conflicts: []
supersedes: []
preferences: []
source_cursor: 217
source_hash: ac2647ce0e6a0a122bdf5cb4b4f94b4f21aab36b9ebefc65f31ed5454146b7e1
prompt_version: 2026-08-12.3
schema_version: '3'
curation_job_id: 1406e55b-189b-4ffc-b2a0-f9b599269fae
created_at: '2026-08-31T03:09:55.749269+00:00'
updated_at: '2026-08-31T09:46:10.719811+00:00'
tags:
- development
- decisions
---
## 已作出决策(中文)
1. **自动登录默认忽略 HTTPS 证书校验**
- `HanteleClient.verify` 默认设为 `False`,CLI 亦默认 `--verify=False`。保留隐藏的 `--insecure` 参数兼容旧命令,`--ca-file` 作为显式开启严格校验的入口。
- 相关记忆源:`memory:a541caed-4198-4a81-a162-961471ab56ec`, `memory:45524177-90a6-49b2-afa7-02317c81e254`, `memory:e17788f7-3baf-4bb2-ba69-fb587705c3f3`。
2. **统一记忆系统**
- 所有项目笔记统一存放在 `aidocs/project_context.md`,由 **MemRelay** 持久管理,文件顶部固定标题,随后以最新‑优先、秒级时间戳追加记录。
- 参考全局指导 `global_guidance_memory:1194be51-ee29-47e1-8957-ec2888007db6`。
3. **语言与沟通偏好**
- 日常交流、代码注释、文档均使用中文,除非另有明确要求。
- 参考 `global_guidance_memory:7429c22e-50ff-458a-97c0-423c679904c7` 与 `global_guidance_memory:ff34c6eb-6bba-41e5-9e43-ff80941fa823`。
4. **开发实施原则**
- 坚持 **KISS** 与 **YAGNI**,优先复用已有框架、服务和约定,禁止为未来假设需求添加依赖或抽象层。
- 参考 `global_guidance_memory:bf88c265-4749-4c50-85bc-4bae25298cd5`。
5. **凭证管理工作流**
- 在任何登录、SSH、数据库或 API 调用前先查询 **Vaultwarden**;唯一匹配自动使用,出现多匹配或无匹配时提示人工选择。
- 新增或修改的密码、Token、API‑Key、TOTP 种子必须立即写入密码库,记忆中仅记录名称、用途、使用方式。
- 参考 `global_guidance_memory:105b328f-4bda-4641-90a7-7282ef156316`。
6. **Docker 与网络配置**
- Docker Desktop 代理必须手动设置为 `http://127.0.0.1:7897`(HTTP 与 HTTPS),重启后验证 `docker pull` 正常。
- 容器内部访问宿主使用 `host.docker.internal`;如需桥接网关使用 `172.17.0.1`。
- 参考 `global_guidance_document:8a861a5f-35c3-4f95-bd5b-6b2297888f56`。
7. **提交与 Git 工作流**
- 默认仅 **commit**,除非明确请求才 **push**。提交信息格式为 `type: 中文一句话描述`(`type` 为 `feat/fix/refactor/style/docs/chore/revert`)。
- 参考 `global_guidance_document:d3a20d44-6001-4c88-8772-65dbfac75e6e` 与 `global_guidance_memory:1194be51-ee29-47e1-8957-ec2888007db6`。
8. **AI 与 Git 自动化**
- AI 驱动的记忆同步与 Git 集成默认关闭,系统在未显式开启时不会尝试加载模型、创建 `.git` 目录或执行自动 push。
- 参考 `global_guidance_memory:3f91189b-11a1-45bb-8357-4f413dc1609d`。
---
**标签**: ["development", "decisions"]
@@ -0,0 +1,93 @@
---
title: 当前状态 – HanteleWorkTime 开发工作空间
type: curated
permalink: main/projects/6553b53c-bf14-49e3-a3de-1ee2f3533d51/curated/当前状态-hantele-work-time-开发工作空间
stable_id: ec4ea45f-8b87-4bc7-83b2-f83f16e90a5b
scope: project
project_id: 6553b53c-bf14-49e3-a3de-1ee2f3533d51
workspace_type: development
usage_profile_id: null
preference_context: development
document_type: current_state
revision: 4
source_memory_ids:
- a541caed-4198-4a81-a162-961471ab56ec
source_checkpoint_ids:
- 45524177-90a6-49b2-afa7-02317c81e254
- e17788f7-3baf-4bb2-ba69-fb587705c3f3
source_file_ids: []
source_git_commit: null
source_git_commits: []
source_agent_sync_ids:
- hantele-tls-curation-20260831-001
model_connection: Sub2API
model_name: openai/gpt-oss-120b
source_count: 26
source_revisions:
memory:5761b7bf-7dfe-46ee-91b4-b6b0c41b0888: '1'
memory:ebfb0410-00e9-473f-aba0-524e48184051: '2'
memory:12faa41a-7590-4ff8-b3c3-990b38257a50: '1'
source_dispositions:
processed: 26
unchanged: 0
unsupported: 0
skipped: 0
cited_source_ids:
- curated_baseline:ec4ea45f-8b87-4bc7-83b2-f83f16e90a5b
- curated_baseline:fb9a56e2-56ce-4d5a-9334-79c18192d663
- global_guidance_memory:5ed86f53-b53e-4534-8e51-d3a010069d5e
- global_guidance_document:d3a20d44-6001-4c88-8772-65dbfac75e6e
- global_guidance_memory:105b328f-4bda-4641-90a7-7282ef156316
- global_guidance_document:8a861a5f-35c3-4f95-bd5b-6b2297888f56
- global_guidance_document:6973450e-6ecc-48e3-8cdd-4d7d7707d843
- memory:ebfb0410-00e9-473f-aba0-524e48184051
- memory:12faa41a-7590-4ff8-b3c3-990b38257a50
- memory:5761b7bf-7dfe-46ee-91b4-b6b0c41b0888
- global_guidance_memory:bf88c265-4749-4c50-85bc-4bae25298cd5
- global_guidance_memory:3f91189b-11a1-45bb-8357-4f413dc1609d
- global_guidance_memory:1194be51-ee29-47e1-8957-ec2888007db6
- global_guidance_document:e4fc35f2-1606-4b79-9c1e-367edeea97d0
job_cited_source_ids:
- curated_baseline:ec4ea45f-8b87-4bc7-83b2-f83f16e90a5b
- curated_baseline:fb9a56e2-56ce-4d5a-9334-79c18192d663
- global_guidance_memory:5ed86f53-b53e-4534-8e51-d3a010069d5e
- global_guidance_document:d3a20d44-6001-4c88-8772-65dbfac75e6e
- global_guidance_memory:105b328f-4bda-4641-90a7-7282ef156316
conflicts: []
supersedes: []
preferences: []
source_cursor: 217
source_hash: ac2647ce0e6a0a122bdf5cb4b4f94b4f21aab36b9ebefc65f31ed5454146b7e1
prompt_version: 2026-08-12.3
schema_version: '3'
curation_job_id: 1406e55b-189b-4ffc-b2a0-f9b599269fae
created_at: '2026-08-31T03:09:53.482547+00:00'
updated_at: '2026-08-31T09:46:12.170076+00:00'
tags:
- development
- current_state
---
## 当前状态(中文)
### 架构与运行环境
- **平台**:Windows 10/11 + WSL2 + Docker Desktop(见 `curated_baseline:fb9a56e2-56ce-4d5a-9334-79c18192d663`)。
- **容器网络**:容器通过 `host.docker.internal` 访问宿主,必要时使用桥接网关 `172.17.0.1`(同上)。
- **代理**:Docker Desktop 手动代理 `http://127.0.0.1:7897`,已验证 `docker pull` 正常。
### 开发记忆与 Git 工作流
- 所有笔记统一保存在 `aidocs/project_context.md`,文件顶部固定标题,随后 **最新‑优先**、秒级时间戳追加(`global_guidance_memory:5ed86f53-b53e-4534-8e51-d3a010069d5e`)。
- `aidocs/` 已加入 `.gitignore`,记忆文件不提交至代码仓库。
- 提交约定为 `type: 中文一句话描述`(如 `feat: 添加用户登录`),默认仅 **commit**,除非明确请求才 **push**(`global_guidance_document:d3a20d44-6001-4c88-8772-65dbfac75e6e`)。
### 凭证管理
- 登录、SSH、数据库、API 调用前先在 **Vaultwarden** 搜索,唯一匹配自动使用;多匹配或无匹配时提示手动选择(`global_guidance_memory:105b328f-4bda-4641-90a7-7282ef156316`)。
- 新增或修改的密码、Token、API‑Key、TOTP 种子立即写入密码库,记忆中仅记录名称、用途、使用方式,绝不保存明文。
- 当前受管基础设施:BDYG18Pro、OpenWrt、MySQL、MemRelay、Gitea OAuth、FRP Token 与公网 FRPS 服务器(同上)。
### 登录协议实现进展
- 已完成 **瀚信工时系统** 登录协议的只读分析并在 Chrome 实际登录验证,验证码获取、密码 Base64 编码、Token 获取等细节已记录。
- 待实现功能:Session 复用、验证码 OCR、Token 缓存/刷新、失败验证码重试机制(参考 `curated_baseline:ec4ea45f-8b87-4bc7-83b2-f83f16e90a5b` 中的记录)。
---
**标签**: ["development", "current_state"]
@@ -0,0 +1,83 @@
---
title: 时间线 – HanteleWorkTime 项目要点
type: curated
permalink: main/projects/6553b53c-bf14-49e3-a3de-1ee2f3533d51/curated/时间线-hantele-work-time-项目要点
stable_id: 83f481d3-5892-4cdd-91f9-68b62d13e2a0
scope: project
project_id: 6553b53c-bf14-49e3-a3de-1ee2f3533d51
workspace_type: development
usage_profile_id: null
preference_context: development
document_type: timeline
revision: 4
source_memory_ids:
- a541caed-4198-4a81-a162-961471ab56ec
source_checkpoint_ids:
- 45524177-90a6-49b2-afa7-02317c81e254
- e17788f7-3baf-4bb2-ba69-fb587705c3f3
source_file_ids: []
source_git_commit: null
source_git_commits: []
source_agent_sync_ids:
- hantele-tls-curation-20260831-001
model_connection: Sub2API
model_name: openai/gpt-oss-120b
source_count: 26
source_revisions:
memory:5761b7bf-7dfe-46ee-91b4-b6b0c41b0888: '1'
memory:ebfb0410-00e9-473f-aba0-524e48184051: '2'
memory:c3c4bb68-8520-4a05-a1a9-5d5a299bba50: '1'
memory:12faa41a-7590-4ff8-b3c3-990b38257a50: '1'
source_dispositions:
processed: 26
unchanged: 0
unsupported: 0
skipped: 0
cited_source_ids:
- curated_baseline:83f481d3-5892-4cdd-91f9-68b62d13e2a0
- global_guidance_memory:bf88c265-4749-4c50-85bc-4bae25298cd5
- global_guidance_memory:105b328f-4bda-4641-90a7-7282ef156316
- global_guidance_memory:5ed86f53-b53e-4534-8e51-d3a010069d5e
- global_guidance_memory:7429c22e-50ff-458a-97c0-423c679904c7
- global_guidance_memory:ff34c6eb-6bba-41e5-9e43-ff80941fa823
- global_guidance_memory:3f91189b-11a1-45bb-8357-4f413dc1609d
- memory:c3c4bb68-8520-4a05-a1a9-5d5a299bba50
- memory:12faa41a-7590-4ff8-b3c3-990b38257a50
- memory:ebfb0410-00e9-473f-aba0-524e48184051
- memory:5761b7bf-7dfe-46ee-91b4-b6b0c41b0888
- project:6553b53c-bf14-49e3-a3de-1ee2f3533d51
job_cited_source_ids:
- curated_baseline:83f481d3-5892-4cdd-91f9-68b62d13e2a0
- global_guidance_memory:bf88c265-4749-4c50-85bc-4bae25298cd5
- global_guidance_memory:105b328f-4bda-4641-90a7-7282ef156316
- global_guidance_memory:5ed86f53-b53e-4534-8e51-d3a010069d5e
- global_guidance_memory:7429c22e-50ff-458a-97c0-423c679904c7
- global_guidance_memory:ff34c6eb-6bba-41e5-9e43-ff80941fa823
- global_guidance_memory:3f91189b-11a1-45bb-8357-4f413dc1609d
conflicts: []
supersedes: []
preferences: []
source_cursor: 217
source_hash: ac2647ce0e6a0a122bdf5cb4b4f94b4f21aab36b9ebefc65f31ed5454146b7e1
prompt_version: 2026-08-12.3
schema_version: '3'
curation_job_id: 1406e55b-189b-4ffc-b2a0-f9b599269fae
created_at: '2026-08-31T03:09:58.458970+00:00'
updated_at: '2026-08-31T09:46:14.547222+00:00'
tags:
- development
- timeline
---
## 项目时间线(中文)
- **2026‑08‑31 02:52:21 UTC** – 创建工作空间 **HanteleWorkTime**(`project:6553b53c-bf14-49e3-a3de-1ee2f3533d51`)。
- **2026‑08‑31 04:06:06 UTC** – 完成 **瀚信工时系统登录协议** 只读分析并在 Chrome 中实际登录成功,验证码首轮识别通过(`memory:ebfb0410-00e9-473f-aba0-524e48184051`)。
- **2026‑08‑31 04:06:23 UTC** – 记录登录协议细节:验证码 GET `/wts/code/{randomStr}`,`randomStr` 为四位随机数字+毫秒时间戳;密码 Base64 编码;POST `/wts/oauth/token` 参数通过 query string 传递;返回 `access_token`、`refresh_token`,后续使用 `Authorization: Bearer {access_token}`(同上)。
- **2026‑08‑07** – 发布全局 **开发实施原则**(KISS、YAGNI、复用、无假设抽象等)(`global_guidance_memory:bf88c265-4749-4c50-85bc-4bae25298cd5`)。
- **2026‑08‑02** – 确立 **凭证与记忆边界** 规则以及 **项目记忆与 Git 工作流** 规范(`global_guidance_memory:105b328f-4bda-4641-90a7-7282ef156316`、`global_guidance_memory:5ed86f53-b53e-4534-8e51-d3a010069d5e`)。
- **2026‑08‑25** – 设置 **语言与协作偏好** 为中文(`global_guidance_memory:7429c22e-50ff-458a-97c0-423c679904c7` 与 `global_guidance_memory:ff34c6eb-6bba-41e5-9e43-ff80941fa823`)。
- **2026‑08‑25** – 明确 **AI 与 Git 集成默认关闭**(`global_guidance_memory:3f91189b-11a1-45bb-8357-4f413dc1609d`)。
---
**标签**: ["development", "timeline"]
@@ -0,0 +1,89 @@
---
title: 项目概览 – HanteleWorkTime
type: curated
permalink: main/projects/6553b53c-bf14-49e3-a3de-1ee2f3533d51/curated/项目概览-hantele-work-time
stable_id: 9309f15d-ab08-498d-b11e-f38ecc4a705d
scope: project
project_id: 6553b53c-bf14-49e3-a3de-1ee2f3533d51
workspace_type: development
usage_profile_id: null
preference_context: development
document_type: overview
revision: 1
source_memory_ids: []
source_checkpoint_ids: []
source_file_ids: []
source_git_commit: null
source_git_commits: []
source_agent_sync_ids: []
model_connection: Sub2API
model_name: openai/gpt-oss-120b
source_count: 13
source_revisions: {}
source_dispositions:
processed: 13
unchanged: 0
unsupported: 0
skipped: 0
cited_source_ids:
- project:6553b53c-bf14-49e3-a3de-1ee2f3533d51
- global_guidance_memory:7429c22e-50ff-458a-97c0-423c679904c7
- global_guidance_memory:1194be51-ee29-47e1-8957-ec2888007db6
job_cited_source_ids:
- project:6553b53c-bf14-49e3-a3de-1ee2f3533d51
- global_guidance_memory:7429c22e-50ff-458a-97c0-423c679904c7
- global_guidance_memory:1194be51-ee29-47e1-8957-ec2888007db6
conflicts: []
supersedes: []
preferences:
- statement: 默认使用中文进行日常交流。
level: scenario
workspace_types:
- development
workspace_ids: []
source_ids:
- global_guidance_memory:7429c22e-50ff-458a-97c0-423c679904c7
counterexample_source_ids: []
occurrence_count: 1
explicit: true
confidence: 1.0
status: current
- statement: 所有项目的开发记忆统一使用 MemRelay 持久管理,除非用户明确要求导出。
level: scenario
workspace_types:
- development
workspace_ids: []
source_ids:
- global_guidance_memory:1194be51-ee29-47e1-8957-ec2888007db6
counterexample_source_ids: []
occurrence_count: 1
explicit: true
confidence: 1.0
status: current
source_cursor: 207
source_hash: 5a2bf7e4aa8a90513e133f70e1737cdaf99fddd9888166c7645ba4700934109c
prompt_version: 2026-08-12.3
schema_version: '3'
curation_job_id: 831de31c-3ff7-4cb5-81ed-55b900461a33
created_at: '2026-08-31T03:09:50.053931+00:00'
updated_at: '2026-08-31T03:09:50.054534+00:00'
tags:
- overview
- development
- project
---
## 项目概述
- **项目名称**:HanteleWorkTime
- **工作空间类型**:development
- **使用概况**:本工作空间用于开发与维护 HanteleWorkTime 项目,遵循组织统一的开发记忆、凭证管理与实现原则。
- **创建时间**:2026‑08‑31T02:52:21Z(来源 `project:6553b53c-bf14-49e3-a3de-1ee2f3533d51`)。
该工作空间在 **共享使用配置文件** 下运行,适用于所有使用 `development` 角色的协同成员。
---
**关键引用**
- 项目创建记录 `project:6553b53c-bf14-49e3-a3de-1ee2f3533d51`
- 全局语言偏好 `global_guidance_memory:7429c22e-50ff-458a-97c0-423c679904c7`
- 开发记忆统一 `global_guidance_memory:1194be51-ee29-47e1-8957-ec2888007db6`
@@ -0,0 +1,23 @@
---
title: 瀚信工时系统登录协议
type: experience
permalink: main/projects/6553b53c-bf14-49e3-a3de-1ee2f3533d51/瀚信工时系统登录协议
stable_id: ebfb0410-00e9-473f-aba0-524e48184051
scope: project
memory_type: experience
project_id: 6553b53c-bf14-49e3-a3de-1ee2f3533d51
usage_profile_id: 7aee455b-24cc-4008-bdaf-443721e6f939
status: active
revision: 2
request_id: hantele-login-protocol-20260831-002
created_at: '2026-08-31T04:06:03.690552+00:00'
updated_at: '2026-08-31T08:57:07.528861+00:00'
tags:
- login
- oauth
- captcha
- automation
- implemented
---
已通过 Chrome 与 Python CLI 实际登录验证。验证码:GET /wts/code/{randomStr},randomStr = 4位随机数字 + Date.now() 毫秒时间戳。密码字段仅做浏览器 btoa/Base64 编码,不是 AES。登录:POST /wts/oauth/token,参数通过 query string 传输:username、password、randomStr、code、grant_type=password、scope=server;请求头 Authorization: Basic cGlnOnBpZw==。成功响应至少包含 access_token、refresh_token;后续请求使用 Authorization: Bearer {access_token}。用户信息接口 GET /wts/user/info。项目已实现 hantele_login.py:requests.Session 复用、ddddocr 四字符识别、验证码错误最多重试、Token 默认不输出、用户信息默认脱敏。Python 3.12 .venv 下 4 项单测通过,真实登录两次成功且 OCR 均首轮通过。凭据只在密码库条目“瀚信工时管理系统 183.6.190.76:26007”中保存。
@@ -0,0 +1,21 @@
---
title: 自动登录默认忽略服务端证书校验
type: decision
permalink: main/projects/6553b53c-bf14-49e3-a3de-1ee2f3533d51/自动登录默认忽略服务端证书校验
stable_id: a541caed-4198-4a81-a162-961471ab56ec
scope: project
memory_type: decision
project_id: 6553b53c-bf14-49e3-a3de-1ee2f3533d51
usage_profile_id: 7aee455b-24cc-4008-bdaf-443721e6f939
status: active
revision: 1
request_id: hantele-tls-default-20260831-001
created_at: '2026-08-31T09:29:23.369104+00:00'
updated_at: '2026-08-31T09:29:23.369104+00:00'
tags:
- decision
- tls
- automation
---
用户明确要求 HanteleWorkTime 自动登录工具默认忽略 HTTPS 证书校验,不要求每次传入 --insecure。实现已将 HanteleClient 默认 verify=False,CLI 默认 verify=False;--insecure 保留为隐藏兼容参数,--ca-file 作为显式严格校验入口。