shawnxixi-cli 0.3.0 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (82) hide show
  1. package/.env.example +8 -2
  2. package/.github/workflows/ci.yml +9 -22
  3. package/.github/workflows/release.yml +30 -0
  4. package/CLAUDE.md +167 -63
  5. package/README.md +345 -65
  6. package/commitlint.config.js +10 -0
  7. package/dist/commands/biz/calendar.d.ts +17 -2
  8. package/dist/commands/biz/calendar.d.ts.map +1 -1
  9. package/dist/commands/biz/calendar.js +47 -9
  10. package/dist/commands/biz/calendar.js.map +1 -1
  11. package/dist/commands/biz/finance.d.ts +32 -1
  12. package/dist/commands/biz/finance.d.ts.map +1 -1
  13. package/dist/commands/biz/finance.js +99 -12
  14. package/dist/commands/biz/finance.js.map +1 -1
  15. package/dist/commands/biz/health.d.ts +32 -0
  16. package/dist/commands/biz/health.d.ts.map +1 -0
  17. package/dist/commands/biz/health.js +92 -0
  18. package/dist/commands/biz/health.js.map +1 -0
  19. package/dist/commands/biz/item.d.ts +41 -0
  20. package/dist/commands/biz/item.d.ts.map +1 -1
  21. package/dist/commands/biz/item.js +89 -5
  22. package/dist/commands/biz/item.js.map +1 -1
  23. package/dist/commands/biz/record.d.ts +0 -8
  24. package/dist/commands/biz/record.d.ts.map +1 -1
  25. package/dist/commands/biz/record.js +29 -8
  26. package/dist/commands/biz/record.js.map +1 -1
  27. package/dist/commands/biz/task.d.ts +38 -0
  28. package/dist/commands/biz/task.d.ts.map +1 -0
  29. package/dist/commands/biz/task.js +110 -0
  30. package/dist/commands/biz/task.js.map +1 -0
  31. package/dist/commands/biz/todo.d.ts +52 -8
  32. package/dist/commands/biz/todo.d.ts.map +1 -1
  33. package/dist/commands/biz/todo.js +167 -17
  34. package/dist/commands/biz/todo.js.map +1 -1
  35. package/dist/commands/sys/health.d.ts.map +1 -1
  36. package/dist/commands/sys/health.js +20 -3
  37. package/dist/commands/sys/health.js.map +1 -1
  38. package/dist/index.d.ts +5 -0
  39. package/dist/index.d.ts.map +1 -1
  40. package/dist/index.js +281 -42
  41. package/dist/index.js.map +1 -1
  42. package/dist/services/api.d.ts +22 -8
  43. package/dist/services/api.d.ts.map +1 -1
  44. package/dist/services/api.js +108 -28
  45. package/dist/services/api.js.map +1 -1
  46. package/dist/utils/env.d.ts +16 -0
  47. package/dist/utils/env.d.ts.map +1 -0
  48. package/dist/utils/env.js +78 -0
  49. package/dist/utils/env.js.map +1 -0
  50. package/dist/utils/finance.model.d.ts +80 -0
  51. package/dist/utils/finance.model.d.ts.map +1 -0
  52. package/dist/utils/finance.model.js +150 -0
  53. package/dist/utils/finance.model.js.map +1 -0
  54. package/dist/utils/output.d.ts +42 -0
  55. package/dist/utils/output.d.ts.map +1 -0
  56. package/dist/utils/output.js +124 -0
  57. package/dist/utils/output.js.map +1 -0
  58. package/dist/utils/todo.model.d.ts +55 -0
  59. package/dist/utils/todo.model.d.ts.map +1 -0
  60. package/dist/utils/todo.model.js +135 -0
  61. package/dist/utils/todo.model.js.map +1 -0
  62. package/package.json +18 -2
  63. package/src/commands/biz/calendar.ts +61 -10
  64. package/src/commands/biz/finance.ts +112 -13
  65. package/src/commands/biz/health.ts +96 -0
  66. package/src/commands/biz/item.ts +113 -6
  67. package/src/commands/biz/record.ts +32 -8
  68. package/src/commands/biz/task.ts +115 -0
  69. package/src/commands/biz/todo.ts +193 -21
  70. package/src/commands/sys/health.ts +23 -3
  71. package/src/index.ts +311 -54
  72. package/src/services/api.ts +111 -30
  73. package/src/utils/env.ts +85 -0
  74. package/src/utils/finance.model.ts +182 -0
  75. package/src/utils/output.ts +126 -0
  76. package/src/utils/todo.model.ts +167 -0
  77. package/tests/commands/finance.test.ts +281 -0
  78. package/tests/commands/item.test.ts +215 -0
  79. package/tests/commands/todo.test.ts +292 -9
  80. package/tests/services/api.test.ts +292 -20
  81. package/tests/utils/finance.model.test.ts +319 -0
  82. package/tests/utils/todo.model.test.ts +315 -0
package/.env.example CHANGED
@@ -1,2 +1,8 @@
1
- SHAWNXIXI_API_URL=http://server.shawnxixi.icu
2
- SHAWNXIXI_API_TOKEN=
1
+ # 肖嘻 CLI 配置文件
2
+ # 复制此文件为 .env 并填入实际值
3
+
4
+ # API 地址(默认:http://localhost:8080/api/v1)
5
+ SHAWNXIXI_API_URL=http://localhost:8080/api/v1
6
+
7
+ # API Token(可选,用于认证)
8
+ # SHAWNXIXI_API_TOKEN=your_token_here
@@ -1,4 +1,4 @@
1
- name: CI/CD
1
+ name: CI
2
2
 
3
3
  on:
4
4
  push:
@@ -14,6 +14,8 @@ jobs:
14
14
  node-version: [20.x]
15
15
  steps:
16
16
  - uses: actions/checkout@v4
17
+ with:
18
+ fetch-depth: 0
17
19
  - name: Use Node.js ${{ matrix.node-version }}
18
20
  uses: actions/setup-node@v4
19
21
  with:
@@ -21,28 +23,13 @@ jobs:
21
23
  cache: npm
22
24
  - name: Install dependencies
23
25
  run: npm ci
26
+ - name: Run commitlint
27
+ run: npx commitlint --from ${{ github.event.pull_request.base.sha || github.event.commits[0].sha }} --to HEAD --verbose
28
+ if: github.event_name == 'pull_request'
29
+ - name: Run commitlint on last commit
30
+ run: npx commitlint --last --verbose
31
+ if: github.event_name == 'push'
24
32
  - name: Build
25
33
  run: npm run build
26
34
  - name: Test
27
35
  run: npm test
28
-
29
- publish:
30
- needs: build-test
31
- if: github.event_name == 'push' && github.ref == 'refs/heads/main'
32
- runs-on: ubuntu-latest
33
- steps:
34
- - uses: actions/checkout@v4
35
- - name: Use Node.js
36
- uses: actions/setup-node@v4
37
- with:
38
- node-version: '20.x'
39
- registry-url: 'https://registry.npmjs.org'
40
- - name: Install dependencies
41
- run: npm ci
42
- - name: Build
43
- run: npm run build
44
- - name: Publish to npm
45
- run: npm publish --access public
46
- env:
47
- NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
48
-
@@ -0,0 +1,30 @@
1
+ name: Release
2
+
3
+ on:
4
+ push:
5
+ branches: [main]
6
+
7
+ jobs:
8
+ release:
9
+ runs-on: ubuntu-latest
10
+ permissions:
11
+ contents: write # needed for semantic-release to push tags
12
+ steps:
13
+ - uses: actions/checkout@v4
14
+ with:
15
+ fetch-depth: 0
16
+
17
+ - name: Use Node.js
18
+ uses: actions/setup-node@v4
19
+ with:
20
+ node-version: '20.x'
21
+ cache: npm
22
+
23
+ - name: Install dependencies
24
+ run: npm ci
25
+
26
+ - name: Release
27
+ run: npx semantic-release
28
+ env:
29
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
30
+ NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
package/CLAUDE.md CHANGED
@@ -2,69 +2,154 @@
2
2
 
3
3
  ## 项目说明
4
4
 
5
- 肖嘻 CLI 工具,OpenClaw 的执行肢。通过 HTTP 调用 shawnxixi-server REST API。
5
+ 肖嘻 CLI 工具,通过 HTTP 调用 shawnxixi-server REST API。
6
6
 
7
7
  ## 技术栈
8
8
 
9
- - **Runtime**: Node.js 20+
10
- - **语言**: TypeScript 5.3
11
- - **HTTP Client**: axios
12
- - **测试**: Jest + ts-jest
13
- - **构建**: tsc
14
-
15
- ## CLI 命令格式
16
-
17
- ```
18
- shawnxixi <命名空间> <操作> [参数]
19
- ```
20
-
21
- ### biz 命名空间(日常业务)
22
-
23
- | 操作 | 命令格式 | 说明 |
24
- |------|---------|------|
25
- | todo create | `shawnxixi biz todo create "{title}" --due {date} --priority {priority}` | 创建待办 |
26
- | todo list | `shawnxixi biz todo list --status {status}` | 列出待办 |
27
- | todo update | `shawnxixi biz todo update {id} --status {status}` | 更新待办 |
28
- | todo delete | `shawnxixi biz todo delete {id}` | 删除待办 |
29
- | record create | `shawnxixi biz record create "{title}" --type {type} --content "{content}" --tags {tags}` | 创建记录 |
30
- | record list | `shawnxixi biz record list --type {type}` | 列出记录 |
31
- | finance create | `shawnxixi biz finance create --amount {amount} --type {type} --category {category}` | 记账 |
32
- | finance list | `shawnxixi biz finance list --type {type}` | 列出账单 |
33
- | item create | `shawnxixi biz item create "{name}" --category {category}` | 添加物品 |
34
- | item list | `shawnxixi biz item list --category {category}` | 列出物品 |
35
- | calendar create | `shawnxixi biz calendar create "{title}" --start {startTime} --end {endTime}` | 创建日程 |
36
- | calendar list | `shawnxixi biz calendar list --start {startTime} --end {endTime}` | 列出日程 |
37
- | reminder create | `shawnxixi biz reminder create "{title}" --trigger "{triggerTime}" --type {type}` | 创建提醒 |
38
- | reminder list | `shawnxixi biz reminder list --status {status}` | 列出提醒 |
39
- | audit list | `shawnxixi biz audit list --entityType {entityType} --operation {operation}` | 查看审计日志 |
40
- | task create | `shawnxixi biz task create "{title}" --priority {priority}` | 创建任务 |
41
- | task list | `shawnxixi biz task list --status {status}` | 列出任务 |
42
-
43
- ### sys 命名空间(系统操作)
44
-
45
- | 操作 | 命令格式 | 说明 |
46
- |------|---------|------|
47
- | health query | `shawnxixi sys health query --dataType {dataType} --startDate {startDate} --endDate {endDate}` | 查询健康数据 |
48
- | health sync | `shawnxixi sys health sync` | 同步健康数据 |
49
-
50
- ## API 端点(Server v1)
51
-
52
- 所有 API 基础路径:`http://localhost:8080/api/v1`
53
-
54
- | 端点 | 方法 | 说明 |
55
- |------|------|------|
56
- | `/api/v1/todos` | GET/POST | 待办列表/创建 |
57
- | `/api/v1/todos/{id}` | GET/PUT/PATCH/DELETE | 待办详情/更新/删除 |
58
- | `/api/v1/records` | GET/POST | 记录列表/创建 |
59
- | `/api/v1/records/{id}` | GET/PUT/PATCH/DELETE | 记录详情/更新/删除 |
60
- | `/api/v1/finances` | GET/POST | 账单列表/创建 |
61
- | `/api/v1/items` | GET/POST | 物品列表/创建 |
62
- | `/api/v1/calendar-events` | GET/POST | 日程列表/创建 |
63
- | `/api/v1/reminders` | GET/POST | 提醒列表/创建 |
64
- | `/api/v1/audit-logs` | GET | 审计日志(只读) |
65
- | `/api/v1/tasks` | GET/POST | 任务列表/创建 |
66
- | `/api/v1/health-data` | GET/POST | 健康数据 |
67
- | `/api/v1/health-data/sync` | POST | 同步健康数据 |
9
+ - Node.js 18+ + TypeScript
10
+ - Commander.js 14 + Axios
11
+
12
+ ## CLI 规范
13
+
14
+ - 命令结构:`biz <module> <action> [args]` 或 `sys <command>`
15
+ - 全局参数:`--url`, `--json`, `--quiet`, `--dry-run`
16
+ - Error 输出格式:红色 `[ERROR] 模块: 描述`
17
+
18
+ ## 全局参数
19
+
20
+ | 参数 | 说明 |
21
+ |------|------|
22
+ | `--url` | API 基础地址,默认 `http://localhost:8080` |
23
+ | `--json` | 输出 JSON 格式 |
24
+ | `--quiet` | 静默模式(只输出关键信息)|
25
+ | `--dry-run` | 预览模式(不实际调用 API,打印请求参数)|
26
+
27
+ ## 命令格式
28
+
29
+ ### biz todo(待办管理,对标滴答清单)
30
+
31
+ ```
32
+ biz todo create "<title>" [options] 创建待办
33
+ biz todo list [options] 列出待办
34
+ biz todo edit <id> [options] 编辑待办
35
+ biz todo done <id> 标记待办完成
36
+ biz todo delete <id> 删除待办
37
+ biz todo repeat <id> 完成并生成下次 occurrence(重复待办)
38
+ biz todo subtask <parent-id> --title <title> 创建子待办
39
+ biz todo subtasks <parent-id> 列出子待办
40
+
41
+ Options:
42
+ --due <date> 截止日期 YYYY-MM-DD
43
+ --priority <level> 优先级 low|medium|high (default: medium)
44
+ --tags <tags> 标签,逗号分隔
45
+ --status <status> 状态 pending|done(list/edit)
46
+ --repeat <rule> 重复规则 daily|weekly|monthly
47
+ --end-date <date> 重复结束日期 YYYY-MM-DD
48
+ --parent-id <id> 父待办 ID(创建子待办时)
49
+ ```
50
+
51
+ ### biz task(任务管理,对标系统任务)
52
+
53
+ ```
54
+ biz task create <title> [options] 创建任务
55
+ biz task list [options] 列出任务
56
+ biz task update <id> [options] 更新任务
57
+ biz task delete <id> 删除任务
58
+
59
+ Options:
60
+ --source <source> 来源 openclaw|cli (default: cli)
61
+ --openclaw-id <id> OpenClaw ID
62
+ --priority <level> 优先级 low|medium|high (default: medium)
63
+ --status <status> 状态 pending|running|done
64
+ ```
65
+
66
+ ### biz record(记录管理:日记/宠物/笔记/想法)
67
+
68
+ ```
69
+ biz record create <title> [options] 创建记录
70
+ biz record list [options] 列出记录
71
+
72
+ Options:
73
+ --content <text> 内容
74
+ --type <type> 类型 diary|pet|note|idea (default: diary)
75
+ --tags <tags> 标签,逗号分隔
76
+ ```
77
+
78
+ ### biz finance(财务管理,对标记账类 App)
79
+
80
+ ```
81
+ biz finance create <amount> [options] 记一笔账
82
+ biz finance list [options] 列出账单
83
+ biz finance stats [options] 账单统计
84
+ biz finance report [options] 月度报表
85
+
86
+ Options:
87
+ --type <type> 类型 income|expense (default: expense)
88
+ --category <cat> 分类
89
+ --note <text> 备注
90
+ --account <act> 账户 cash|card|alipay|wechat (default: cash)
91
+ --date <date> 日期 YYYY-MM-DD
92
+ --tags <tags> 标签,逗号分隔
93
+ --month <month> 月份 YYYY-MM (stats/report)
94
+ ```
95
+
96
+ ### biz item(物品管理,对标物品清单 App)
97
+
98
+ ```
99
+ biz item create <name> [options] 添加物品
100
+ biz item list [options] 列出物品
101
+ biz item expiring [options] 即将过期的物品
102
+ biz item stats 物品库存统计
103
+
104
+ Options:
105
+ --location <loc> 存放位置
106
+ --expire <date> 过期日期 YYYY-MM-DD
107
+ --category <cat> 分类
108
+ --quantity <n> 数量
109
+ --unit <unit> 单位 个|瓶|盒|kg|g|ml|l
110
+ --brand <brand> 品牌
111
+ --barcode <code> 条码
112
+ --price <price> 价格
113
+ --supplier <supplier> 供应商
114
+ --purchase-date <date> 购买日期 YYYY-MM-DD
115
+ --days <n> 提前多少天提醒 (default: 7, expiring 命令)
116
+ ```
117
+
118
+ ### biz calendar(日程管理,对标日历 App)
119
+
120
+ ```
121
+ biz calendar create <title> --from <datetime> --to <datetime> [options] 创建日程
122
+ biz calendar list [options] 列出日程
123
+
124
+ Options:
125
+ --from <datetime> 开始时间 YYYY-MM-DD 或 YYYY-MM-DD HH:MM(必需)
126
+ --to <datetime> 结束时间 YYYY-MM-DD 或 YYYY-MM-DD HH:MM(必需)
127
+ --location <loc> 地点
128
+ --color <color> 颜色 HEX 如 #ff0000
129
+ --desc <text> 描述
130
+ ```
131
+
132
+ ### biz health(健康数据管理,对标 Apple Health)
133
+
134
+ ```
135
+ biz health log --type <type> --value <value> [options] 记录健康数据
136
+ biz health list [options] 查询健康数据
137
+ biz health sync 同步健康数据(保留兼容)
138
+
139
+ Options:
140
+ --type <type> 数据类型 heart_rate|steps|weight|sleep|blood_pressure|oxygen|body_temp(必需,log 命令)
141
+ --value <value> 数值(必需,log 命令)
142
+ --unit <unit> 单位 bpm|kg|steps|hours|mmHg|%|°C
143
+ --date <date> 日期 YYYY-MM-DD (default: 今天)
144
+ --from <date> 开始日期 YYYY-MM-DD(list 命令)
145
+ --to <date> 结束日期 YYYY-MM-DD(list 命令)
146
+ ```
147
+
148
+ ### sys(系统命令)
149
+
150
+ ```
151
+ sys health 健康检查(返回 { status: 'ok', timestamp })
152
+ ```
68
153
 
69
154
  ## 环境变量
70
155
 
@@ -78,8 +163,7 @@ shawnxixi <命名空间> <操作> [参数]
78
163
  ## npm 发包
79
164
 
80
165
  - 包名:`shawnxixi-cli`(npmjs.com)
81
- - 发布命令:`npm publish --access public`
82
- - CI 自动发包:main 分支合并时通过 GitHub Actions 触发,需配置 `NPM_TOKEN` secret
166
+ - CI 自动发版:main 分支合并触发 semantic-release 自动发版
83
167
 
84
168
  ## 启动开发
85
169
 
@@ -93,10 +177,30 @@ npm test
93
177
 
94
178
  ```
95
179
  src/
96
- ├── index.ts # CLI 入口
180
+ ├── index.ts # CLI 入口(所有命令定义)
97
181
  ├── commands/ # 命令实现
98
182
  │ ├── biz/ # 业务命令
183
+ │ │ ├── todo.ts # 待办:create/list/edit/done/delete/repeat/subtask/subtasks
184
+ │ │ ├── task.ts # 任务:create/list/update/delete
185
+ │ │ ├── record.ts # 记录:create/list
186
+ │ │ ├── finance.ts # 财务:create/list/stats/report
187
+ │ │ ├── item.ts # 物品:create/list/expiring/stats
188
+ │ │ ├── calendar.ts # 日程:create/list
189
+ │ │ └── health.ts # 健康:log/list/sync
99
190
  │ └── sys/ # 系统命令
191
+ │ └── health.ts # 健康检查
100
192
  └── services/
101
193
  └── api.ts # HTTP API 调用层
102
194
  ```
195
+
196
+ ## 发版说明
197
+
198
+ 发版由 semantic-release 全自动管理,触发条件:
199
+ - `feat:` → minor 版本 +1
200
+ - `fix:` → patch 版本 +1
201
+ - `BREAKING CHANGE` in commit → major 版本 +1
202
+ - `chore:` / `docs:` 等 → 不发版
203
+
204
+ ## API 依赖
205
+
206
+ CLI 完全依赖 `shawnxixi-server` REST API,本地开发需确保 server 运行在 `http://localhost:8080`(或通过 `--url` 指定)。