Install
openclaw skills install @ithou/sn-work-recordopenclaw skills install @ithou/sn-work-record推荐统一入口:
/root/.agents/skills/sn-work-record/sn-work-record所有 Python 脚本现在都带运行时自检:即使误用系统
python3启动,也会优先自动切换到依赖完整的解释器。也可通过环境变量SN_WORK_RECORD_PYTHON显式指定解释器路径。
/root/.agents/skills/sn-work-record/sn-work-record login [--credentials PATH] [--base-url http://X.X.X.X:PORT]
或:
python scripts/sn_oa_login.py [--credentials PATH] [--base-url http://X.X.X.X:PORT]
→ token 输出到 stdout(可 | tee token.txt 保存)
/root/.agents/skills/sn-work-record/sn-work-record submit 2026-04-11 --job-desc "工时描述"
或:
python scripts/submit_time_entry.py 2026-04-11 --job-desc "工时描述"
→ 内部调用 POST /sn/timeEntry/saveOrUpdate
默认优先使用凭据文件中的默认项目;支持
--save-draft保存草稿,并会在直接提交时自动检查是否为工作日。
/root/.agents/skills/sn-work-record/sn-work-record update <工时ID> --job-desc "新描述"
→ 内部调用 PUT /sn/timeEntry/update
/root/.agents/skills/sn-work-record/sn-work-record query 2026-04-10
→ 内部调用 POST /sn/timeEntry/findEveryDayList
/root/.agents/skills/sn-work-record/sn-work-record details <工时ID>
→ 内部调用 GET /sn/timeEntry/details/<工时ID>
注意:工时提交/查询/详情/修改接口统一通过完整认证会话发起,必须同时携带
Authorization: Bearer {token}和Admin-OA-Token: {token}两个请求头。
python scripts/list_projects.py [--credentials PATH] [--base-url URL]
列出 OA 系统所有项目,供用户选择默认项目。
sn-work-record:统一 launcher,封装常用子命令入口scripts/runtime_bootstrap.py:运行时解释器自检/自动切换scripts/sn_oa_login.py:登录并输出 tokenscripts/list_projects.py:查询项目列表(支持 --json)scripts/submit_time_entry.py:提交工时或保存草稿scripts/query_time_entry.py:查询某天工时列表scripts/get_time_entry_details.py:按工时 ID 查询详情scripts/update_time_entry.py:按工时 ID 修改描述或逻辑删除scripts/oa_utils.py:公共能力(登录、认证会话、状态映射、工时提交/查询/详情/修改)存放在 memory/sn-work-record-credentials.md:
# 蜀宁 OA 凭证
- **账号**: <手机号>
- **密码**: <密码>
- **Base URL**: http://<IP>:<PORT>
- **默认项目ID**: <your-project-id>(可选)
- **默认项目名称**: <your-project-name>(可选)
支持加密存储(.md.enc),使用 AES-256-CBC + openssl,密钥通过 OA_ENC_KEY 环境变量或 ~/.openclaw/workspace/.cache/oa_enc_key 提供。
提交工时时 fillDate 使用纯日期格式 YYYY-MM-DD 即可(如 2026-04-10),API 不要求 (周X) 后缀。
list_projects.py 脚本获取用户确认后设定,写入 memory/sn-work-record-credentials.md10 = 草稿,20 = 审批中,30 = 已审批<your-project-id>、<record-id>),不要写入真实配置。| 用户说 | 执行动作 |
|---|---|
| "今天填了工时" | python scripts/submit_time_entry.py <日期> --job-desc "..." 提交 8h 工时(默认项目) |
| "周一到周三做某个项目" | 批量提交多天 |
| "把昨天工时改成xxx" | 查昨天 → update_time_entry.py 修改描述 |
| "查一下今天的工时状态" | python scripts/query_time_entry.py <日期> 查询 |
| "看看这条工时详情" | python scripts/get_time_entry_details.py <工时ID> |
| "把这条工时删掉" | python scripts/update_time_entry.py <工时ID> --delete |
以下节假日期间不予填写工时(2026年官方安排):
| 节日 | 放假日期 |
|---|---|
| 元旦 | 2026-01-01 ~ 2026-01-03 |
| 春节 | 2026-02-15 ~ 2026-02-23 |
| 清明节 | 2026-04-04 ~ 2026-04-06 |
| 劳动节 | 2026-05-01 ~ 2026-05-05 |
| 端午节 | 2026-06-19 ~ 2026-06-21 |
| 中秋节 | 2026-09-25 ~ 2026-09-27 |
| 国庆节 | 2026-10-01 ~ 2026-10-07 |
如遇节假日区间,回复:「节假日期间无需填写工时~」并拒绝提交。
✅ {日期}({星期})工时提交成功!
• 日期:{fillDate}
• 项目:{projectName}
• 时长:{manHour}h
• 描述:{jobDesc}
• 状态:审批中 🟢
修改描述成功时输出:
✅ {日期} 工时描述已更新!
• 日期:{fillDate}
• 新描述:{jobDesc}
• 状态:审批中 🟢
pip3 install ddddocrpip3 install chinese_calendar(用于精确判断中国工作日/节假日)pip3 install requestsmemory/sn-work-record-credentials.md(明文或 .enc 加密均可)说明:脚本会优先使用依赖完整的解释器。若环境特殊,可通过
SN_WORK_RECORD_PYTHON=/path/to/python显式指定解释器路径。若需要单独准备虚拟环境,推荐名称优先使用sn_work_record_env(也兼容oa_worktime_env、ddddocr_env、.venv、venv等常见命名)。
python scripts/sn_oa_login.py 完成登录python scripts/list_projects.py 获取项目列表,选择默认项目oa_utils.py,避免不同脚本各写一套导致认证不一致--json,方便调试或二次处理runtime_bootstrap.py:若当前解释器缺少依赖,会自动切换到可用解释器再执行SN_WORK_RECORD_PYTHON 覆盖,也会自动探测常见虚拟环境名称sn-work-record launcher,后续优先使用它作为统一入口