@zentodo/cli 0.1.6 → 0.1.7

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.
@@ -531,6 +531,19 @@ zentodo auth login-email --email a@b.com
531
531
  - **所需 scope**:`read`
532
532
  - **对应 Skill 工具**:`zentodo.pomo.history`
533
533
 
534
+ ### `zentodo pomo focus-stats` _(只读 / 幂等)_
535
+
536
+ 专注时长统计(时间窗)。
537
+
538
+ - **后端端点**:`POST /tomatoWorkerController/getFocusStats`
539
+ - **所需 scope**:`read`
540
+ - **对应 Skill 工具**:`zentodo.pomo.focus-stats`
541
+
542
+ | 参数 | 类型 | 必填 | 说明 |
543
+ | --- | --- | --- | --- |
544
+ | `start_time` | datetime | 否 | 起始时间(ISO,可选)。不传则今天 00:00:00。 |
545
+ | `end_time` | datetime | 否 | 截止时间(ISO,可选)。不传则今天 23:59:59。 |
546
+
534
547
  ### `zentodo pomo sync-pull-worker` _(只读)_
535
548
 
536
549
  按 clientVersion 拉取番茄钟记录增量。
@@ -623,6 +636,47 @@ zentodo auth login-email --email a@b.com
623
636
  - **所需 scope**:`read`
624
637
  - **对应 Skill 工具**:`zentodo.project.list-all`
625
638
 
639
+ ### `zentodo project list-active` _(只读 / 幂等)_
640
+
641
+ 列出活跃项目(未完成、未取消、未模板)。
642
+
643
+ - **后端端点**:`POST /projectController/getActiveProjects`
644
+ - **所需 scope**:`read`
645
+ - **对应 Skill 工具**:`zentodo.project.list-active`
646
+
647
+ ### `zentodo project list-archived` _(只读 / 幂等)_
648
+
649
+ 列出已归档/已完成/已取消的项目。
650
+
651
+ - **后端端点**:`POST /projectController/getArchivedProjects`
652
+ - **所需 scope**:`read`
653
+ - **对应 Skill 工具**:`zentodo.project.list-archived`
654
+
655
+ ### `zentodo project search` _(只读 / 幂等)_
656
+
657
+ 按关键字搜索项目(projectName / projectDesc)。
658
+
659
+ - **后端端点**:`POST /projectController/searchProjects`
660
+ - **所需 scope**:`read`
661
+ - **对应 Skill 工具**:`zentodo.project.search`
662
+
663
+ | 参数 | 类型 | 必填 | 说明 |
664
+ | --- | --- | --- | --- |
665
+ | `keyword` | string | 是 | 关键字。 |
666
+ | `limit` | integer | 否 | 最多返回多少条(默认 50,最大 500)。 |
667
+
668
+ ### `zentodo project stats` _(只读 / 幂等)_
669
+
670
+ 单个项目的统计数据。
671
+
672
+ - **后端端点**:`POST /projectController/getProjectStats`
673
+ - **所需 scope**:`read`
674
+ - **对应 Skill 工具**:`zentodo.project.stats`
675
+
676
+ | 参数 | 类型 | 必填 | 说明 |
677
+ | --- | --- | --- | --- |
678
+ | `project_key` | integer | 是 | 项目 projectKey。 |
679
+
626
680
  ### `zentodo project sync-pull` _(只读)_
627
681
 
628
682
  按 clientVersion 拉取项目增量。
@@ -1048,7 +1102,7 @@ zentodo task add --title "写周报" --due 2025-09-05T14:00 --priority 3
1048
1102
 
1049
1103
  ### `zentodo task completed-today` _(只读 / 幂等)_
1050
1104
 
1051
- 列出今日完成的任务。
1105
+ 列出今日(或指定日期)完成的任务。
1052
1106
 
1053
1107
  - **后端端点**:`POST /taskController/getCompletedTasks`
1054
1108
  - **所需 scope**:`read`
@@ -1056,11 +1110,7 @@ zentodo task add --title "写周报" --due 2025-09-05T14:00 --priority 3
1056
1110
 
1057
1111
  | 参数 | 类型 | 必填 | 说明 |
1058
1112
  | --- | --- | --- | --- |
1059
- | `is_templete` | boolean | 否 | 排除模板。 |
1060
- | `sync_flag` | string | 否 | 同步标记过滤。 |
1061
- | `task_state` | string | 否 | 已完成。 |
1062
- | `task_completed_time` | string | 否 | 完成时间=今日。 |
1063
- | `task_create_time_not_null` | boolean | 否 | 要求 createTime 非空。 |
1113
+ | `date` | date | 否 | 指定日期(ISO,可选)。不传则使用服务器今天。 |
1064
1114
 
1065
1115
  ### `zentodo task mit-list` _(只读 / 幂等)_
1066
1116
 
@@ -1070,15 +1120,6 @@ zentodo task add --title "写周报" --due 2025-09-05T14:00 --priority 3
1070
1120
  - **所需 scope**:`read`
1071
1121
  - **对应 Skill 工具**:`zentodo.task.mit-list`
1072
1122
 
1073
- | 参数 | 类型 | 必填 | 说明 |
1074
- | --- | --- | --- | --- |
1075
- | `sync_flag` | string | 否 | 同步标记过滤。 |
1076
- | `is_templete` | boolean | 否 | 排除模板。 |
1077
- | `task_state` | string | 否 | 未完成。 |
1078
- | `task_create_time_not_null` | boolean | 否 | 要求 createTime 非空。 |
1079
- | `task_create_time` | string | 否 | 到今日为止。 |
1080
- | `is_mit` | boolean | 否 | MIT 过滤。 |
1081
-
1082
1123
  ### `zentodo task calendar` _(只读 / 幂等)_
1083
1124
 
1084
1125
  按日期范围列出日历视图任务。
@@ -1091,11 +1132,48 @@ zentodo task add --title "写周报" --due 2025-09-05T14:00 --priority 3
1091
1132
  | --- | --- | --- | --- |
1092
1133
  | `start_date` | date | 是 | 范围起始(ISO 日期)。 |
1093
1134
  | `end_date` | date | 是 | 范围截止(ISO 日期)。 |
1094
- | `sync_flag` | string | 否 | 同步标记过滤。 |
1095
- | `task_state` | string | | 未完成。 |
1096
- | `is_templete` | boolean | 否 | 排除模板。 |
1097
- | `task_start_item_not_1` | string | 否 | 排除 FT 项。 |
1098
- | `task_start_item_not_2` | string | 否 | 排除垃圾箱。 |
1135
+
1136
+ ### `zentodo task overdue` _(只读 / 幂等)_
1137
+
1138
+ 列出已过期未完成的任务(taskCreateTime < 今天)。
1139
+
1140
+ - **后端端点**:`POST /taskController/getOverdueTasks`
1141
+ - **所需 scope**:`read`
1142
+ - **对应 Skill 工具**:`zentodo.task.overdue`
1143
+
1144
+ ### `zentodo task inbox` _(只读 / 幂等)_
1145
+
1146
+ 列出收集箱任务(未安排时间的未完成任务)。
1147
+
1148
+ - **后端端点**:`POST /taskController/getInboxTasks`
1149
+ - **所需 scope**:`read`
1150
+ - **对应 Skill 工具**:`zentodo.task.inbox`
1151
+
1152
+ ### `zentodo task search` _(只读 / 幂等)_
1153
+
1154
+ 按关键字搜索任务(taskName / taskDesc)。
1155
+
1156
+ - **后端端点**:`POST /taskController/searchTasks`
1157
+ - **所需 scope**:`read`
1158
+ - **对应 Skill 工具**:`zentodo.task.search`
1159
+
1160
+ | 参数 | 类型 | 必填 | 说明 |
1161
+ | --- | --- | --- | --- |
1162
+ | `keyword` | string | 是 | 关键字。 |
1163
+ | `limit` | integer | 否 | 最多返回多少条(默认 50,最大 500)。 |
1164
+
1165
+ ### `zentodo task stats` _(只读 / 幂等)_
1166
+
1167
+ 任务完成情况统计(指定时间窗)。
1168
+
1169
+ - **后端端点**:`POST /taskController/getTaskStats`
1170
+ - **所需 scope**:`read`
1171
+ - **对应 Skill 工具**:`zentodo.task.stats`
1172
+
1173
+ | 参数 | 类型 | 必填 | 说明 |
1174
+ | --- | --- | --- | --- |
1175
+ | `start_date` | date | 否 | 起始日期(ISO,可选)。不传则今天。 |
1176
+ | `end_date` | date | 否 | 截止日期(ISO,可选)。不传则今天。 |
1099
1177
 
1100
1178
  ### `zentodo task move`
1101
1179
 
@@ -29,6 +29,10 @@
29
29
  | task | `zentodo task completed-today` | `zentodo.task.completed-today` | `POST /taskController/getCompletedTasks` | read |
30
30
  | task | `zentodo task mit-list` | `zentodo.task.mit-list` | `POST /taskController/getMitTasks` | read |
31
31
  | task | `zentodo task calendar` | `zentodo.task.calendar` | `POST /taskController/getCalendarTaskByDate` | read |
32
+ | task | `zentodo task overdue` | `zentodo.task.overdue` | `POST /taskController/getOverdueTasks` | read |
33
+ | task | `zentodo task inbox` | `zentodo.task.inbox` | `POST /taskController/getInboxTasks` | read |
34
+ | task | `zentodo task search` | `zentodo.task.search` | `POST /taskController/searchTasks` | read |
35
+ | task | `zentodo task stats` | `zentodo.task.stats` | `POST /taskController/getTaskStats` | read |
32
36
  | task | `zentodo task move` | `zentodo.task.move` | `POST /taskController/updateTaskCreateTime` | write |
33
37
  | task | `zentodo task sync-pull` | `zentodo.task.sync-pull` | `POST /taskController/getSyncTaskList` | sync, read |
34
38
  | task | `zentodo task sync-push` | `zentodo.task.sync-push` | `POST /taskController/putSyncTask` | sync, write |
@@ -38,6 +42,10 @@
38
42
  | subtask | `zentodo subtask sync-pull` | `zentodo.subtask.sync-pull` | `POST /subTaskController/getSyncSubTaskList` | sync, read |
39
43
  | project | `zentodo project upsert` | `zentodo.project.sync-push` | `POST /projectController/putSyncProject` | sync, write |
40
44
  | project | `zentodo project list` | `zentodo.project.list-all` | `POST /projectController/getAllProjectByUserId` | read |
45
+ | project | `zentodo project list-active` | `zentodo.project.list-active` | `POST /projectController/getActiveProjects` | read |
46
+ | project | `zentodo project list-archived` | `zentodo.project.list-archived` | `POST /projectController/getArchivedProjects` | read |
47
+ | project | `zentodo project search` | `zentodo.project.search` | `POST /projectController/searchProjects` | read |
48
+ | project | `zentodo project stats` | `zentodo.project.stats` | `POST /projectController/getProjectStats` | read |
41
49
  | project | `zentodo project sync-pull` | `zentodo.project.sync-pull` | `POST /projectController/getSyncProjectList` | sync, read |
42
50
  | subproject | `zentodo subproject upsert` | `zentodo.subproject.sync-push` | `POST /subProjectController/putSyncSubProject` | sync, write |
43
51
  | subproject | `zentodo subproject list` | `zentodo.subproject.list-all` | `POST /subProjectController/getAllSubProjectByUserId` | read |
@@ -69,6 +77,7 @@
69
77
  | pomo | `zentodo pomo start` | `zentodo.pomo.start` | `POST /timerController/startPomodoro` | write |
70
78
  | pomo | `zentodo pomo stop` | `zentodo.pomo.stop` | `POST /timerController/stopTimer` | write |
71
79
  | pomo | `zentodo pomo history` | `zentodo.pomo.history` | `POST /tomatoWorkerController/getAllTomatoByUserId` | read |
80
+ | pomo | `zentodo pomo focus-stats` | `zentodo.pomo.focus-stats` | `POST /tomatoWorkerController/getFocusStats` | read |
72
81
  | pomo | `zentodo pomo sync-pull-worker` | `zentodo.pomo.sync-pull-worker` | `POST /tomatoWorkerController/getSyncTomatoWorkerList` | sync, read |
73
82
  | pomo | `zentodo pomo sync-push-worker` | `zentodo.pomo.sync-push-worker` | `POST /tomatoWorkerController/putSyncTomatoWorker` | sync, write |
74
83
  | pomo | `zentodo pomo config-get` | `zentodo.pomo.config-get` | `POST /tomatoConfigController/getAllTomatoConfigByUserId` | read |
@@ -927,7 +927,7 @@
927
927
  "name": "zentodo.task.completed-today",
928
928
  "domain": "task",
929
929
  "action": "completed-today",
930
- "description": "调用 /taskController/getCompletedTasks。过滤条件:syncFlag != D、taskState = 0、taskCompletedTime = today。",
930
+ "description": "调用 /taskController/getCompletedTasks。服务端根据 usrKey + date 直接过滤,不用在客户端再做一次。",
931
931
  "http": {
932
932
  "method": "POST",
933
933
  "path": "/taskController/getCompletedTasks"
@@ -942,41 +942,11 @@
942
942
  },
943
943
  "params": [
944
944
  {
945
- "name": "is_templete",
946
- "backendName": "isTemplete",
947
- "type": "boolean",
948
- "default": false,
949
- "transform": "booleanToString",
950
- "description": "排除模板。"
951
- },
952
- {
953
- "name": "sync_flag",
954
- "backendName": "syncFlag",
955
- "type": "string",
956
- "default": "!=D",
957
- "description": "同步标记过滤。"
958
- },
959
- {
960
- "name": "task_state",
961
- "backendName": "taskState",
962
- "type": "string",
963
- "default": "=0",
964
- "description": "已完成。"
965
- },
966
- {
967
- "name": "task_completed_time",
968
- "backendName": "taskCompletedTime",
969
- "type": "string",
970
- "default": "=today",
971
- "description": "完成时间=今日。"
972
- },
973
- {
974
- "name": "task_create_time_not_null",
975
- "backendName": "taskCreateTimeNotNull",
976
- "type": "boolean",
977
- "default": true,
978
- "transform": "booleanToString",
979
- "description": "要求 createTime 非空。"
945
+ "name": "date",
946
+ "backendName": "date",
947
+ "type": "date",
948
+ "transform": "isoToBackendDate",
949
+ "description": "指定日期(ISO,可选)。不传则使用服务器今天。"
980
950
  }
981
951
  ],
982
952
  "output": {
@@ -987,7 +957,7 @@
987
957
  "name": "zentodo.task.mit-list",
988
958
  "domain": "task",
989
959
  "action": "mit-list",
990
- "description": "调用 /taskController/getMitTasks。过滤条件与 PC loadMitHeaderDatas() 一致。",
960
+ "description": "调用 /taskController/getMitTasks。服务端按 usrKey 过滤 isMIT=true + 未完成 + taskCreateTime<=今天。",
991
961
  "http": {
992
962
  "method": "POST",
993
963
  "path": "/taskController/getMitTasks"
@@ -1000,53 +970,7 @@
1000
970
  "idempotent": true,
1001
971
  "destructive": false
1002
972
  },
1003
- "params": [
1004
- {
1005
- "name": "sync_flag",
1006
- "backendName": "syncFlag",
1007
- "type": "string",
1008
- "default": "!=D",
1009
- "description": "同步标记过滤。"
1010
- },
1011
- {
1012
- "name": "is_templete",
1013
- "backendName": "isTemplete",
1014
- "type": "boolean",
1015
- "default": false,
1016
- "transform": "booleanToString",
1017
- "description": "排除模板。"
1018
- },
1019
- {
1020
- "name": "task_state",
1021
- "backendName": "taskState",
1022
- "type": "string",
1023
- "default": "!=0",
1024
- "description": "未完成。"
1025
- },
1026
- {
1027
- "name": "task_create_time_not_null",
1028
- "backendName": "taskCreateTimeNotNull",
1029
- "type": "boolean",
1030
- "default": true,
1031
- "transform": "booleanToString",
1032
- "description": "要求 createTime 非空。"
1033
- },
1034
- {
1035
- "name": "task_create_time",
1036
- "backendName": "taskCreateTime",
1037
- "type": "string",
1038
- "default": "<=today",
1039
- "description": "到今日为止。"
1040
- },
1041
- {
1042
- "name": "is_mit",
1043
- "backendName": "isMIT",
1044
- "type": "boolean",
1045
- "default": true,
1046
- "transform": "booleanToString",
1047
- "description": "MIT 过滤。"
1048
- }
1049
- ],
973
+ "params": [],
1050
974
  "output": {
1051
975
  "shape": "array"
1052
976
  }
@@ -1055,7 +979,7 @@
1055
979
  "name": "zentodo.task.calendar",
1056
980
  "domain": "task",
1057
981
  "action": "calendar",
1058
- "description": "调用 /taskController/getCalendarTaskByDate。过滤与安卓端一致(syncFlag!=D、taskState!=0、isTemplete=false、taskStartItem!=FT、taskStartItem!=垃圾箱)。",
982
+ "description": "调用 /taskController/getCalendarTaskByDate。服务端已内置过滤(未完成 + 非模板 + 非垃圾箱)。",
1059
983
  "http": {
1060
984
  "method": "POST",
1061
985
  "path": "/taskController/getCalendarTaskByDate"
@@ -1084,46 +1008,128 @@
1084
1008
  "transform": "isoToBackendDate",
1085
1009
  "required": true,
1086
1010
  "description": "范围截止(ISO 日期)。"
1087
- },
1088
- {
1089
- "name": "sync_flag",
1090
- "backendName": "syncFlag",
1091
- "type": "string",
1092
- "default": "!=D",
1093
- "description": "同步标记过滤。"
1094
- },
1011
+ }
1012
+ ],
1013
+ "output": {
1014
+ "shape": "array"
1015
+ }
1016
+ },
1017
+ {
1018
+ "name": "zentodo.task.overdue",
1019
+ "domain": "task",
1020
+ "action": "overdue",
1021
+ "description": "调用 /taskController/getOverdueTasks。",
1022
+ "http": {
1023
+ "method": "POST",
1024
+ "path": "/taskController/getOverdueTasks"
1025
+ },
1026
+ "scopes": [
1027
+ "read"
1028
+ ],
1029
+ "annotations": {
1030
+ "readOnly": true,
1031
+ "idempotent": true,
1032
+ "destructive": false
1033
+ },
1034
+ "params": [],
1035
+ "output": {
1036
+ "shape": "array"
1037
+ }
1038
+ },
1039
+ {
1040
+ "name": "zentodo.task.inbox",
1041
+ "domain": "task",
1042
+ "action": "inbox",
1043
+ "description": "调用 /taskController/getInboxTasks。",
1044
+ "http": {
1045
+ "method": "POST",
1046
+ "path": "/taskController/getInboxTasks"
1047
+ },
1048
+ "scopes": [
1049
+ "read"
1050
+ ],
1051
+ "annotations": {
1052
+ "readOnly": true,
1053
+ "idempotent": true,
1054
+ "destructive": false
1055
+ },
1056
+ "params": [],
1057
+ "output": {
1058
+ "shape": "array"
1059
+ }
1060
+ },
1061
+ {
1062
+ "name": "zentodo.task.search",
1063
+ "domain": "task",
1064
+ "action": "search",
1065
+ "description": "调用 /taskController/searchTasks。服务端按 LIKE 匹配并按 latestVersion 倒序返回。",
1066
+ "http": {
1067
+ "method": "POST",
1068
+ "path": "/taskController/searchTasks"
1069
+ },
1070
+ "scopes": [
1071
+ "read"
1072
+ ],
1073
+ "annotations": {
1074
+ "readOnly": true,
1075
+ "idempotent": true,
1076
+ "destructive": false
1077
+ },
1078
+ "params": [
1095
1079
  {
1096
- "name": "task_state",
1097
- "backendName": "taskState",
1080
+ "name": "keyword",
1081
+ "backendName": "keyword",
1098
1082
  "type": "string",
1099
- "default": "!=0",
1100
- "description": "未完成。"
1083
+ "required": true,
1084
+ "description": "关键字。"
1101
1085
  },
1102
1086
  {
1103
- "name": "is_templete",
1104
- "backendName": "isTemplete",
1105
- "type": "boolean",
1106
- "default": false,
1107
- "transform": "booleanToString",
1108
- "description": "排除模板。"
1109
- },
1087
+ "name": "limit",
1088
+ "backendName": "limit",
1089
+ "type": "integer",
1090
+ "default": 50,
1091
+ "description": "最多返回多少条(默认 50,最大 500)。"
1092
+ }
1093
+ ],
1094
+ "output": {
1095
+ "shape": "array"
1096
+ }
1097
+ },
1098
+ {
1099
+ "name": "zentodo.task.stats",
1100
+ "domain": "task",
1101
+ "action": "stats",
1102
+ "description": "调用 /taskController/getTaskStats。返回 { created, completed, completion_rate, by_project }。",
1103
+ "http": {
1104
+ "method": "POST",
1105
+ "path": "/taskController/getTaskStats"
1106
+ },
1107
+ "scopes": [
1108
+ "read"
1109
+ ],
1110
+ "annotations": {
1111
+ "readOnly": true,
1112
+ "idempotent": true,
1113
+ "destructive": false
1114
+ },
1115
+ "params": [
1110
1116
  {
1111
- "name": "task_start_item_not_1",
1112
- "backendName": "taskStartItemNot1",
1113
- "type": "string",
1114
- "default": "FT",
1115
- "description": "排除 FT 项。"
1117
+ "name": "start_date",
1118
+ "backendName": "startDate",
1119
+ "type": "date",
1120
+ "transform": "isoToBackendDate",
1121
+ "description": "起始日期(ISO,可选)。不传则今天。"
1116
1122
  },
1117
1123
  {
1118
- "name": "task_start_item_not_2",
1119
- "backendName": "taskStartItemNot2",
1120
- "type": "string",
1121
- "default": "垃圾箱",
1122
- "description": "排除垃圾箱。"
1124
+ "name": "end_date",
1125
+ "backendName": "endDate",
1126
+ "type": "date",
1127
+ "transform": "isoToBackendDate",
1128
+ "description": "截止日期(ISO,可选)。不传则今天。"
1123
1129
  }
1124
1130
  ],
1125
1131
  "output": {
1126
- "shape": "array"
1132
+ "shape": "object"
1127
1133
  }
1128
1134
  },
1129
1135
  {
@@ -1467,6 +1473,117 @@
1467
1473
  "shape": "array"
1468
1474
  }
1469
1475
  },
1476
+ {
1477
+ "name": "zentodo.project.list-active",
1478
+ "domain": "project",
1479
+ "action": "list-active",
1480
+ "description": "调用 /projectController/getActiveProjects。",
1481
+ "http": {
1482
+ "method": "POST",
1483
+ "path": "/projectController/getActiveProjects"
1484
+ },
1485
+ "scopes": [
1486
+ "read"
1487
+ ],
1488
+ "annotations": {
1489
+ "readOnly": true,
1490
+ "idempotent": true,
1491
+ "destructive": false
1492
+ },
1493
+ "params": [],
1494
+ "output": {
1495
+ "shape": "array"
1496
+ }
1497
+ },
1498
+ {
1499
+ "name": "zentodo.project.list-archived",
1500
+ "domain": "project",
1501
+ "action": "list-archived",
1502
+ "description": "调用 /projectController/getArchivedProjects。projectState in (2,3,4)。",
1503
+ "http": {
1504
+ "method": "POST",
1505
+ "path": "/projectController/getArchivedProjects"
1506
+ },
1507
+ "scopes": [
1508
+ "read"
1509
+ ],
1510
+ "annotations": {
1511
+ "readOnly": true,
1512
+ "idempotent": true,
1513
+ "destructive": false
1514
+ },
1515
+ "params": [],
1516
+ "output": {
1517
+ "shape": "array"
1518
+ }
1519
+ },
1520
+ {
1521
+ "name": "zentodo.project.search",
1522
+ "domain": "project",
1523
+ "action": "search",
1524
+ "description": "调用 /projectController/searchProjects。",
1525
+ "http": {
1526
+ "method": "POST",
1527
+ "path": "/projectController/searchProjects"
1528
+ },
1529
+ "scopes": [
1530
+ "read"
1531
+ ],
1532
+ "annotations": {
1533
+ "readOnly": true,
1534
+ "idempotent": true,
1535
+ "destructive": false
1536
+ },
1537
+ "params": [
1538
+ {
1539
+ "name": "keyword",
1540
+ "backendName": "keyword",
1541
+ "type": "string",
1542
+ "required": true,
1543
+ "description": "关键字。"
1544
+ },
1545
+ {
1546
+ "name": "limit",
1547
+ "backendName": "limit",
1548
+ "type": "integer",
1549
+ "default": 50,
1550
+ "description": "最多返回多少条(默认 50,最大 500)。"
1551
+ }
1552
+ ],
1553
+ "output": {
1554
+ "shape": "array"
1555
+ }
1556
+ },
1557
+ {
1558
+ "name": "zentodo.project.stats",
1559
+ "domain": "project",
1560
+ "action": "stats",
1561
+ "description": "调用 /projectController/getProjectStats。返回 { task_count, done_task_count, progress, exec_time_ms, state }。",
1562
+ "http": {
1563
+ "method": "POST",
1564
+ "path": "/projectController/getProjectStats"
1565
+ },
1566
+ "scopes": [
1567
+ "read"
1568
+ ],
1569
+ "annotations": {
1570
+ "readOnly": true,
1571
+ "idempotent": true,
1572
+ "destructive": false
1573
+ },
1574
+ "params": [
1575
+ {
1576
+ "name": "project_key",
1577
+ "backendName": "projectKey",
1578
+ "type": "integer",
1579
+ "required": true,
1580
+ "description": "项目 projectKey。"
1581
+ }
1582
+ ],
1583
+ "output": {
1584
+ "shape": "object"
1585
+ }
1586
+ },
1470
1587
  {
1471
1588
  "name": "zentodo.project.sync-pull",
1472
1589
  "domain": "project",
@@ -2561,6 +2678,43 @@
2561
2678
  "shape": "array"
2562
2679
  }
2563
2680
  },
2681
+ {
2682
+ "name": "zentodo.pomo.focus-stats",
2683
+ "domain": "pomo",
2684
+ "action": "focus-stats",
2685
+ "description": "调用 /tomatoWorkerController/getFocusStats。返回 { sessions, total_sec, total_hours, by_task }。",
2686
+ "http": {
2687
+ "method": "POST",
2688
+ "path": "/tomatoWorkerController/getFocusStats"
2689
+ },
2690
+ "scopes": [
2691
+ "read"
2692
+ ],
2693
+ "annotations": {
2694
+ "readOnly": true,
2695
+ "idempotent": true,
2696
+ "destructive": false
2697
+ },
2698
+ "params": [
2699
+ {
2700
+ "name": "start_time",
2701
+ "backendName": "startTime",
2702
+ "type": "datetime",
2703
+ "transform": "isoToBackendDateTime",
2704
+ "description": "起始时间(ISO,可选)。不传则今天 00:00:00。"
2705
+ },
2706
+ {
2707
+ "name": "end_time",
2708
+ "backendName": "endTime",
2709
+ "type": "datetime",
2710
+ "transform": "isoToBackendDateTime",
2711
+ "description": "截止时间(ISO,可选)。不传则今天 23:59:59。"
2712
+ }
2713
+ ],
2714
+ "output": {
2715
+ "shape": "object"
2716
+ }
2717
+ },
2564
2718
  {
2565
2719
  "name": "zentodo.pomo.sync-pull-worker",
2566
2720
  "domain": "pomo",