shawnxixi-cli 0.1.0 → 0.3.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.
package/.env.example CHANGED
@@ -1,2 +1,2 @@
1
- SHAWNXIXI_API_URL=http://localhost:8080
1
+ SHAWNXIXI_API_URL=http://server.shawnxixi.icu
2
2
  SHAWNXIXI_API_TOKEN=
@@ -1 +1 @@
1
- {"version":3,"file":"calendar.d.ts","sourceRoot":"","sources":["../../../src/commands/biz/calendar.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,gBAAgB;oBACL,MAAM,YAAW;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE;qBAgBhE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,EAAE,CAAC,EAAE,MAAM,CAAA;KAAE;CAWrD,CAAC"}
1
+ {"version":3,"file":"calendar.d.ts","sourceRoot":"","sources":["../../../src/commands/biz/calendar.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,gBAAgB;oBACL,MAAM,YAAW;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE;qBAchE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,EAAE,CAAC,EAAE,MAAM,CAAA;KAAE;CASrD,CAAC"}
@@ -9,9 +9,7 @@ exports.calendarCommands = {
9
9
  process.exit(1);
10
10
  }
11
11
  try {
12
- const result = await api_1.apiService.createCalendarEvent
13
- ? api_1.apiService.createCalendarEvent(title, options.start, options.end, options.desc)
14
- : { error: 'Calendar API not yet implemented in service' };
12
+ const result = await api_1.apiService.createCalendarEvent(title, options.start, options.end, options.desc);
15
13
  console.log(JSON.stringify(result, null, 2));
16
14
  }
17
15
  catch (error) {
@@ -21,9 +19,7 @@ exports.calendarCommands = {
21
19
  },
22
20
  list: async (options = {}) => {
23
21
  try {
24
- const result = await api_1.apiService.listCalendarEvents
25
- ? api_1.apiService.listCalendarEvents(options)
26
- : { error: 'Calendar API not yet implemented in service' };
22
+ const result = await api_1.apiService.listCalendarEvents(options.from, options.to);
27
23
  console.log(JSON.stringify(result, null, 2));
28
24
  }
29
25
  catch (error) {
@@ -1 +1 @@
1
- {"version":3,"file":"calendar.js","sourceRoot":"","sources":["../../../src/commands/biz/calendar.ts"],"names":[],"mappings":";;;AAAA,4CAAgD;AAEnC,QAAA,gBAAgB,GAAG;IAC9B,MAAM,EAAE,KAAK,EAAE,KAAa,EAAE,UAA2D,EAAE,EAAE,EAAE;QAC7F,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;YACnC,OAAO,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;YACzC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAO,gBAAkB,CAAC,mBAAmB;gBAC1D,CAAC,CAAE,gBAAkB,CAAC,mBAAmB,CAAC,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,IAAI,CAAC;gBAC1F,CAAC,CAAC,EAAE,KAAK,EAAE,6CAA6C,EAAE,CAAC;YAC7D,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC/C,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,OAAO,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;YACxC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IAED,IAAI,EAAE,KAAK,EAAE,UAA0C,EAAE,EAAE,EAAE;QAC3D,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAO,gBAAkB,CAAC,kBAAkB;gBACzD,CAAC,CAAE,gBAAkB,CAAC,kBAAkB,CAAC,OAAO,CAAC;gBACjD,CAAC,CAAC,EAAE,KAAK,EAAE,6CAA6C,EAAE,CAAC;YAC7D,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC/C,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,OAAO,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;YACxC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;CACF,CAAC"}
1
+ {"version":3,"file":"calendar.js","sourceRoot":"","sources":["../../../src/commands/biz/calendar.ts"],"names":[],"mappings":";;;AAAA,4CAAgD;AAEnC,QAAA,gBAAgB,GAAG;IAC9B,MAAM,EAAE,KAAK,EAAE,KAAa,EAAE,UAA2D,EAAE,EAAE,EAAE;QAC7F,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;YACnC,OAAO,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;YACzC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,gBAAU,CAAC,mBAAmB,CAAC,KAAK,EAAE,OAAO,CAAC,KAAM,EAAE,OAAO,CAAC,GAAI,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;YACvG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC/C,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,OAAO,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;YACxC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IAED,IAAI,EAAE,KAAK,EAAE,UAA0C,EAAE,EAAE,EAAE;QAC3D,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,gBAAU,CAAC,kBAAkB,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC;YAC7E,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC/C,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,OAAO,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;YACxC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;CACF,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"item.d.ts","sourceRoot":"","sources":["../../../src/commands/biz/item.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,YAAY;mBACF,MAAM,YAAW;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE;qBAazE;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;KAAE;CAWhE,CAAC"}
1
+ {"version":3,"file":"item.d.ts","sourceRoot":"","sources":["../../../src/commands/biz/item.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,YAAY;mBACF,MAAM,YAAW;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE;qBAUzE;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;KAAE;CAShE,CAAC"}
@@ -5,10 +5,7 @@ const api_1 = require("../../services/api");
5
5
  exports.itemCommands = {
6
6
  create: async (name, options = {}) => {
7
7
  try {
8
- // Item API is not yet in apiService, use generic approach
9
- const result = await api_1.apiService.createItem
10
- ? api_1.apiService.createItem(name, options)
11
- : { error: 'Item API not yet implemented in service' };
8
+ const result = await api_1.apiService.createItem(name, options.category, options.location, options.expire);
12
9
  console.log(JSON.stringify(result, null, 2));
13
10
  }
14
11
  catch (error) {
@@ -18,9 +15,7 @@ exports.itemCommands = {
18
15
  },
19
16
  list: async (options = {}) => {
20
17
  try {
21
- const result = await api_1.apiService.listItems
22
- ? api_1.apiService.listItems(options)
23
- : { error: 'Item API not yet implemented in service' };
18
+ const result = await api_1.apiService.listItems(options.category);
24
19
  console.log(JSON.stringify(result, null, 2));
25
20
  }
26
21
  catch (error) {
@@ -1 +1 @@
1
- {"version":3,"file":"item.js","sourceRoot":"","sources":["../../../src/commands/biz/item.ts"],"names":[],"mappings":";;;AAAA,4CAAgD;AAEnC,QAAA,YAAY,GAAG;IAC1B,MAAM,EAAE,KAAK,EAAE,IAAY,EAAE,UAAqE,EAAE,EAAE,EAAE;QACtG,IAAI,CAAC;YACH,0DAA0D;YAC1D,MAAM,MAAM,GAAG,MAAO,gBAAkB,CAAC,UAAU;gBACjD,CAAC,CAAE,gBAAkB,CAAC,UAAU,CAAC,IAAI,EAAE,OAAO,CAAC;gBAC/C,CAAC,CAAC,EAAE,KAAK,EAAE,yCAAyC,EAAE,CAAC;YACzD,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC/C,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,OAAO,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;YACxC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IAED,IAAI,EAAE,KAAK,EAAE,UAAqD,EAAE,EAAE,EAAE;QACtE,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAO,gBAAkB,CAAC,SAAS;gBAChD,CAAC,CAAE,gBAAkB,CAAC,SAAS,CAAC,OAAO,CAAC;gBACxC,CAAC,CAAC,EAAE,KAAK,EAAE,yCAAyC,EAAE,CAAC;YACzD,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC/C,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,OAAO,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;YACxC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;CACF,CAAC"}
1
+ {"version":3,"file":"item.js","sourceRoot":"","sources":["../../../src/commands/biz/item.ts"],"names":[],"mappings":";;;AAAA,4CAAgD;AAEnC,QAAA,YAAY,GAAG;IAC1B,MAAM,EAAE,KAAK,EAAE,IAAY,EAAE,UAAqE,EAAE,EAAE,EAAE;QACtG,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,gBAAU,CAAC,UAAU,CAAC,IAAI,EAAE,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;YACrG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC/C,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,OAAO,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;YACxC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IAED,IAAI,EAAE,KAAK,EAAE,UAAqD,EAAE,EAAE,EAAE;QACtE,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,gBAAU,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YAC5D,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC/C,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,OAAO,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;YACxC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;CACF,CAAC"}
package/dist/index.js CHANGED
@@ -6,194 +6,142 @@
6
6
  * 命令命名空间:biz:*(日常业务)、sys:*(系统操作)
7
7
  */
8
8
  Object.defineProperty(exports, "__esModule", { value: true });
9
+ const commander_1 = require("commander");
9
10
  const todo_1 = require("./commands/biz/todo");
10
11
  const record_1 = require("./commands/biz/record");
11
12
  const finance_1 = require("./commands/biz/finance");
12
13
  const item_1 = require("./commands/biz/item");
13
14
  const calendar_1 = require("./commands/biz/calendar");
14
15
  const health_1 = require("./commands/sys/health");
15
- const commands = {
16
- // Todo
17
- 'biz:todo:create': async (title, args) => {
18
- const options = parseTodoOptions(args);
19
- await todo_1.todoCommands.create(title, options);
20
- },
21
- 'biz:todo:list': async () => {
22
- await todo_1.todoCommands.list({});
23
- },
24
- 'biz:todo:done': async (id) => {
25
- await todo_1.todoCommands.done(parseInt(id, 10));
26
- },
27
- 'biz:todo:delete': async (id) => {
28
- await todo_1.todoCommands.delete(parseInt(id, 10));
29
- },
30
- // Record
31
- 'biz:record:create': async (title, args) => {
32
- const options = parseRecordOptions(args);
33
- await record_1.recordCommands.create(title, options.content || '', options);
34
- },
35
- 'biz:record:list': async () => {
36
- await record_1.recordCommands.list({});
37
- },
38
- // Finance
39
- 'biz:finance:create': async (amount, args) => {
40
- const options = parseFinanceOptions(args);
41
- await finance_1.financeCommands.create(amount, options);
42
- },
43
- 'biz:finance:list': async (args) => {
44
- const options = parseFinanceOptions(args);
45
- await finance_1.financeCommands.list(options);
46
- },
47
- // Item
48
- 'biz:item:create': async (name, args) => {
49
- const options = parseItemOptions(args);
50
- await item_1.itemCommands.create(name, options);
51
- },
52
- 'biz:item:list': async () => {
53
- await item_1.itemCommands.list({});
54
- },
55
- // Calendar
56
- 'biz:calendar:create': async (title, args) => {
57
- const options = parseCalendarOptions(args);
58
- await calendar_1.calendarCommands.create(title, options);
59
- },
60
- 'biz:calendar:list': async () => {
61
- await calendar_1.calendarCommands.list({});
62
- },
63
- // System
64
- 'sys:health:sync': async () => {
65
- await (0, health_1.syncHealth)();
66
- },
67
- 'sys:health:query': async (dataType, args) => {
68
- const options = parseHealthOptions(args);
69
- await (0, health_1.syncHealth)(dataType, options);
70
- },
71
- };
72
- // ============ Option Parsers ============
73
- function parseTodoOptions(args) {
74
- const options = {};
75
- for (let i = 0; i < args.length; i++) {
76
- if (args[i] === '--due' && args[i + 1])
77
- options.due = args[++i];
78
- if (args[i] === '--priority' && args[i + 1])
79
- options.priority = args[++i];
80
- }
81
- return options;
82
- }
83
- function parseRecordOptions(args) {
84
- const options = {};
85
- for (let i = 0; i < args.length; i++) {
86
- if (args[i] === '--content' && args[i + 1])
87
- options.content = args[++i];
88
- if (args[i] === '--type' && args[i + 1])
89
- options.type = args[++i];
90
- if (args[i] === '--tags' && args[i + 1])
91
- options.tags = args[++i];
92
- }
93
- return options;
94
- }
95
- function parseFinanceOptions(args) {
96
- const options = {};
97
- for (let i = 0; i < args.length; i++) {
98
- if (args[i] === '--type' && args[i + 1])
99
- options.type = args[++i];
100
- if (args[i] === '--category' && args[i + 1])
101
- options.category = args[++i];
102
- if (args[i] === '--desc' && args[i + 1])
103
- options.desc = args[++i];
104
- }
105
- return options;
106
- }
107
- function parseItemOptions(args) {
108
- const options = {};
109
- for (let i = 0; i < args.length; i++) {
110
- if (args[i] === '--location' && args[i + 1])
111
- options.location = args[++i];
112
- if (args[i] === '--expire' && args[i + 1])
113
- options.expire = args[++i];
114
- if (args[i] === '--category' && args[i + 1])
115
- options.category = args[++i];
116
- }
117
- return options;
118
- }
119
- function parseCalendarOptions(args) {
120
- const options = {};
121
- for (let i = 0; i < args.length; i++) {
122
- if (args[i] === '--start' && args[i + 1])
123
- options.start = args[++i];
124
- if (args[i] === '--end' && args[i + 1])
125
- options.end = args[++i];
126
- if (args[i] === '--desc' && args[i + 1])
127
- options.desc = args[++i];
128
- }
129
- return options;
130
- }
131
- function parseHealthOptions(args) {
132
- const options = {};
133
- for (let i = 0; i < args.length; i++) {
134
- if (args[i] === '--from' && args[i + 1])
135
- options.startDate = args[++i];
136
- if (args[i] === '--to' && args[i + 1])
137
- options.endDate = args[++i];
138
- }
139
- return options;
140
- }
141
- // ============ CLI Entry ============
142
- function printUsage() {
143
- console.log(`
144
- shawnxixi CLI - 肖嘻 CLI 工具
145
-
146
- Usage: shawnxixi <command> [args...]
147
-
148
- Business Commands (biz:*):
149
- biz todo create <title> [--due YYYY-MM-DD] [--priority low|medium|high]
150
- biz todo list
151
- biz todo done <id>
152
- biz todo delete <id>
153
- biz record create <title> [--content TEXT] [--type diary|pet|note|idea] [--tags TAG1,TAG2]
154
- biz record list
155
- biz finance create <amount> [--type income|expense] [--category CAT] [--desc TEXT]
156
- biz finance list [--type income|expense] [--category CAT]
157
- biz item create <name> [--location LOC] [--expire YYYY-MM-DD] [--category CAT]
158
- biz item list
159
- biz calendar create <title> --start DATETIME --end DATETIME [--desc TEXT]
160
- biz calendar list
161
-
162
- System Commands (sys:*):
163
- sys health sync [--from YYYY-MM-DD] [--to YYYY-MM-DD]
164
- sys health query <dataType> [--from YYYY-MM-DD] [--to YYYY-MM-DD]
165
-
166
- Examples:
167
- shawnxixi biz todo create "开会" --due 2026-04-12 --priority high
168
- shawnxixi biz finance create 50 --category food --desc "午饭"
169
- shawnxixi biz calendar create "面试" --start "2026-04-15 14:00" --end "2026-04-15 15:00"
170
- `);
171
- }
172
- function main() {
173
- const args = process.argv.slice(2);
174
- if (args.length === 0 || args[0] === '--help' || args[0] === '-h') {
175
- printUsage();
176
- process.exit(0);
177
- }
178
- // Handle special case: "biz todo list" -> "biz:todo:list"
179
- let commandKey;
180
- if (args[0] === 'biz' || args[0] === 'sys') {
181
- commandKey = args.join(':');
182
- }
183
- else {
184
- commandKey = args[0];
185
- }
186
- const handler = commands[commandKey];
187
- if (!handler) {
188
- console.error(`Unknown command: ${commandKey}`);
189
- printUsage();
190
- process.exit(1);
191
- }
192
- const handlerArgs = args.slice(1);
193
- handler(...handlerArgs).catch((error) => {
194
- console.error('Command failed:', error);
195
- process.exit(1);
196
- });
197
- }
198
- main();
16
+ const program = new commander_1.Command();
17
+ program
18
+ .name('shawnxixi')
19
+ .description('肖嘻 CLI 工具')
20
+ .version('0.2.0');
21
+ // ============ biz ============
22
+ const biz = program.command('biz').description('日常业务命令');
23
+ // biz todo
24
+ const todo = biz.command('todo').description('待办管理');
25
+ todo
26
+ .command('create <title>')
27
+ .description('创建待办')
28
+ .option('--due <date>', '截止日期 YYYY-MM-DD')
29
+ .option('--priority <level>', '优先级 low|medium|high', 'medium')
30
+ .action(async (title, options) => {
31
+ await todo_1.todoCommands.create(title, options);
32
+ });
33
+ todo
34
+ .command('list')
35
+ .description('列出待办')
36
+ .option('--status <status>', '状态过滤')
37
+ .action(async (options) => {
38
+ await todo_1.todoCommands.list(options);
39
+ });
40
+ todo
41
+ .command('done <id>')
42
+ .description('标记待办完成')
43
+ .action(async (id) => {
44
+ await todo_1.todoCommands.done(parseInt(id, 10));
45
+ });
46
+ todo
47
+ .command('delete <id>')
48
+ .description('删除待办')
49
+ .action(async (id) => {
50
+ await todo_1.todoCommands.delete(parseInt(id, 10));
51
+ });
52
+ // biz record
53
+ const record = biz.command('record').description('记录管理');
54
+ record
55
+ .command('create <title>')
56
+ .description('创建记录')
57
+ .option('--content <text>', '内容')
58
+ .option('--type <type>', '类型 diary|pet|note|idea', 'diary')
59
+ .option('--tags <tags>', '标签,逗号分隔')
60
+ .action(async (title, options) => {
61
+ await record_1.recordCommands.create(title, options.content || '', options);
62
+ });
63
+ record
64
+ .command('list')
65
+ .description('列出记录')
66
+ .option('--type <type>', '类型过滤')
67
+ .action(async (options) => {
68
+ await record_1.recordCommands.list(options);
69
+ });
70
+ // biz finance
71
+ const finance = biz.command('finance').description('财务管理');
72
+ finance
73
+ .command('create <amount>')
74
+ .description('记一笔账')
75
+ .option('--type <type>', '类型 income|expense', 'expense')
76
+ .option('--category <cat>', '分类', 'other')
77
+ .option('--desc <text>', '备注')
78
+ .action(async (amount, options) => {
79
+ await finance_1.financeCommands.create(amount, options);
80
+ });
81
+ finance
82
+ .command('list')
83
+ .description('列出账单')
84
+ .option('--type <type>', '类型过滤 income|expense')
85
+ .option('--category <cat>', '分类过滤')
86
+ .action(async (options) => {
87
+ await finance_1.financeCommands.list(options);
88
+ });
89
+ // biz item
90
+ const item = biz.command('item').description('物品管理');
91
+ item
92
+ .command('create <name>')
93
+ .description('添加物品')
94
+ .option('--location <loc>', '存放位置')
95
+ .option('--expire <date>', '过期日期 YYYY-MM-DD')
96
+ .option('--category <cat>', '分类')
97
+ .action(async (name, options) => {
98
+ await item_1.itemCommands.create(name, options);
99
+ });
100
+ item
101
+ .command('list')
102
+ .description('列出物品')
103
+ .option('--category <cat>', '分类过滤')
104
+ .action(async (options) => {
105
+ await item_1.itemCommands.list(options);
106
+ });
107
+ // biz calendar
108
+ const calendar = biz.command('calendar').description('日程管理');
109
+ calendar
110
+ .command('create <title>')
111
+ .description('创建日程')
112
+ .requiredOption('--start <datetime>', '开始时间')
113
+ .requiredOption('--end <datetime>', '结束时间')
114
+ .option('--desc <text>', '描述')
115
+ .action(async (title, options) => {
116
+ await calendar_1.calendarCommands.create(title, options);
117
+ });
118
+ calendar
119
+ .command('list')
120
+ .description('列出日程')
121
+ .option('--from <datetime>', '开始时间')
122
+ .option('--to <datetime>', '结束时间')
123
+ .action(async (options) => {
124
+ await calendar_1.calendarCommands.list(options);
125
+ });
126
+ // ============ sys ============
127
+ const sys = program.command('sys').description('系统命令');
128
+ const health = sys.command('health').description('健康数据');
129
+ health
130
+ .command('sync')
131
+ .description('同步健康数据')
132
+ .action(async () => {
133
+ await (0, health_1.syncHealth)();
134
+ });
135
+ health
136
+ .command('query [dataType]')
137
+ .description('查询健康数据')
138
+ .option('--from <date>', '开始日期 YYYY-MM-DD')
139
+ .option('--to <date>', '结束日期 YYYY-MM-DD')
140
+ .action(async (dataType, options) => {
141
+ await (0, health_1.syncHealth)(dataType, { startDate: options.from, endDate: options.to });
142
+ });
143
+ program.parseAsync(process.argv).catch((error) => {
144
+ console.error('Command failed:', error);
145
+ process.exit(1);
146
+ });
199
147
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/services/api.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,cAAM,UAAU;IACd,OAAO,CAAC,MAAM,CAAgB;;YAsChB,QAAQ;YAKR,YAAY;IAKpB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM;IAU7D,SAAS,CAAC,MAAM,CAAC,EAAE,MAAM;IAMzB,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAC,CAAC;IAK3G,UAAU,CAAC,EAAE,EAAE,MAAM;IAMrB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,GAAE,MAAgB,EAAE,IAAI,CAAC,EAAE,MAAM;IAUlF,WAAW,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM;IASxC,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM;IAUlF,YAAY,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM;IAS7C,cAAc;IAKd,eAAe,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM;IAUvE,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM;IAUlF,SAAS,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM;IAS5C,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM;IAW9G,kBAAkB,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM;IASvD,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,GAAE,MAAe;IAUxE,aAAa,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM;IAS5C,aAAa,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM;IAUxE,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM;IAWlF,SAAS,CAAC,MAAM,CAAC,EAAE,MAAM;CAMhC;AAED,eAAO,MAAM,UAAU,YAAmB,CAAC"}
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/services/api.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAiBH,cAAM,UAAU;IACd,OAAO,CAAC,MAAM,CAAgB;;YA0ChB,QAAQ;YAKR,YAAY;IAKpB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM;IAU7D,SAAS,CAAC,MAAM,CAAC,EAAE,MAAM;IAMzB,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAC,CAAC;IAK3G,UAAU,CAAC,EAAE,EAAE,MAAM;IAMrB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,GAAE,MAAgB,EAAE,IAAI,CAAC,EAAE,MAAM;IAUlF,WAAW,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM;IASxC,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM;IAUlF,YAAY,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM;IAS7C,cAAc;IAKd,eAAe,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM;IAUvE,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM;IAUlF,SAAS,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM;IAS5C,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM;IAW9G,kBAAkB,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM;IASvD,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,GAAE,MAAe;IAUxE,aAAa,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM;IAS5C,aAAa,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM;IAUxE,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM;IAWlF,SAAS,CAAC,MAAM,CAAC,EAAE,MAAM;CAMhC;AAED,eAAO,MAAM,UAAU,YAAmB,CAAC"}
@@ -9,12 +9,25 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
9
9
  Object.defineProperty(exports, "__esModule", { value: true });
10
10
  exports.apiService = void 0;
11
11
  const axios_1 = __importDefault(require("axios"));
12
- const API_BASE = process.env.SHAWNXIXI_API_URL || 'http://localhost:8080';
12
+ const API_BASE = process.env.SHAWNXIXI_API_URL || 'http://server.shawnxixi.icu';
13
+ /** Normalize date/datetime strings to LocalDateTime format (ISO 8601 without timezone) */
14
+ function toLocalDateTime(value) {
15
+ if (!value)
16
+ return undefined;
17
+ // "YYYY-MM-DD" → "YYYY-MM-DDT00:00:00"
18
+ if (/^\d{4}-\d{2}-\d{2}$/.test(value))
19
+ return `${value}T00:00:00`;
20
+ // "YYYY-MM-DD HH:MM" → "YYYY-MM-DDTHH:MM:00"
21
+ if (/^\d{4}-\d{2}-\d{2} \d{2}:\d{2}$/.test(value))
22
+ return value.replace(' ', 'T') + ':00';
23
+ // Already ISO format, pass through
24
+ return value;
25
+ }
13
26
  class ApiService {
14
27
  constructor() {
15
28
  this.client = axios_1.default.create({
16
29
  baseURL: API_BASE,
17
- timeout: 10000,
30
+ timeout: 30000,
18
31
  headers: {
19
32
  'Content-Type': 'application/json',
20
33
  },
@@ -25,6 +38,10 @@ class ApiService {
25
38
  if (token) {
26
39
  config.headers.Authorization = `Bearer ${token}`;
27
40
  }
41
+ // 请求体长度防护
42
+ if (config.data && JSON.stringify(config.data).length > 100000) {
43
+ throw new Error('Request payload too large (max 100KB)');
44
+ }
28
45
  return config;
29
46
  });
30
47
  // 响应拦截器:处理 401 刷新 token
@@ -52,7 +69,7 @@ class ApiService {
52
69
  async createTodo(title, dueDate, priority) {
53
70
  const { data } = await this.client.post('/api/v1/todos', {
54
71
  title,
55
- dueDate,
72
+ dueDate: toLocalDateTime(dueDate),
56
73
  priority: priority || 'medium',
57
74
  status: 'pending',
58
75
  });
@@ -64,7 +81,7 @@ class ApiService {
64
81
  return data;
65
82
  }
66
83
  async updateTodo(id, updates) {
67
- const { data } = await this.client.put(`/api/v1/todos/${id}`, updates);
84
+ const { data } = await this.client.patch(`/api/v1/todos/${id}`, updates);
68
85
  return data;
69
86
  }
70
87
  async deleteTodo(id) {
@@ -131,7 +148,7 @@ class ApiService {
131
148
  name,
132
149
  category,
133
150
  location,
134
- expireDate,
151
+ expireDate: toLocalDateTime(expireDate),
135
152
  });
136
153
  return data;
137
154
  }
@@ -148,8 +165,8 @@ class ApiService {
148
165
  async createCalendarEvent(title, startTime, endTime, description, location) {
149
166
  const { data } = await this.client.post('/api/v1/calendar-events', {
150
167
  title,
151
- startTime,
152
- endTime,
168
+ startTime: toLocalDateTime(startTime),
169
+ endTime: toLocalDateTime(endTime),
153
170
  description,
154
171
  location,
155
172
  });
@@ -168,7 +185,7 @@ class ApiService {
168
185
  async createReminder(title, triggerTime, type = 'once') {
169
186
  const { data } = await this.client.post('/api/v1/reminders', {
170
187
  title,
171
- triggerTime,
188
+ triggerTime: toLocalDateTime(triggerTime),
172
189
  type,
173
190
  status: 'active',
174
191
  });
@@ -1 +1 @@
1
- {"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/services/api.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;;;AAEH,kDAA6C;AAE7C,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,uBAAuB,CAAC;AAE1E,MAAM,UAAU;IAGd;QACE,IAAI,CAAC,MAAM,GAAG,eAAK,CAAC,MAAM,CAAC;YACzB,OAAO,EAAE,QAAQ;YACjB,OAAO,EAAE,KAAK;YACd,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;aACnC;SACF,CAAC,CAAC;QAEH,sBAAsB;QACtB,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE;YACpD,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;YACpC,IAAI,KAAK,EAAE,CAAC;gBACV,MAAM,CAAC,OAAO,CAAC,aAAa,GAAG,UAAU,KAAK,EAAE,CAAC;YACnD,CAAC;YACD,OAAO,MAAM,CAAC;QAChB,CAAC,CAAC,CAAC;QAEH,wBAAwB;QACxB,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,CACnC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,EACtB,KAAK,EAAE,KAAK,EAAE,EAAE;YACd,IAAI,KAAK,CAAC,QAAQ,EAAE,MAAM,KAAK,GAAG,EAAE,CAAC;gBACnC,gBAAgB;gBAChB,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;gBAC1B,QAAQ;gBACR,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;gBAC5B,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACpC,MAAM,CAAC,OAAO,CAAC,aAAa,GAAG,UAAU,KAAK,EAAE,CAAC;gBACjD,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAC7B,CAAC;YACD,OAAO,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC/B,CAAC,CACF,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,QAAQ;QACpB,4BAA4B;QAC5B,OAAO,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,IAAI,CAAC;IACjD,CAAC;IAEO,KAAK,CAAC,YAAY;QACxB,sBAAsB;IACxB,CAAC;IAED,qCAAqC;IACrC,KAAK,CAAC,UAAU,CAAC,KAAa,EAAE,OAAgB,EAAE,QAAiB;QACjE,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,EAAE;YACvD,KAAK;YACL,OAAO;YACP,QAAQ,EAAE,QAAQ,IAAI,QAAQ;YAC9B,MAAM,EAAE,SAAS;SAClB,CAAC,CAAC;QACH,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,MAAe;QAC7B,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACxC,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,eAAe,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;QACpE,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,EAAU,EAAE,OAAoF;QAC/G,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,iBAAiB,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;QACvE,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,EAAU;QACzB,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAC;QACjE,OAAO,IAAI,CAAC;IACd,CAAC;IAED,uCAAuC;IACvC,KAAK,CAAC,YAAY,CAAC,KAAa,EAAE,OAAe,EAAE,OAAe,OAAO,EAAE,IAAa;QACtF,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,iBAAiB,EAAE;YACzD,KAAK;YACL,OAAO;YACP,IAAI;YACJ,IAAI;SACL,CAAC,CAAC;QACH,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,IAAa,EAAE,IAAa;QAC5C,MAAM,MAAM,GAA2B,EAAE,CAAC;QAC1C,IAAI,IAAI;YAAE,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC;QAC7B,IAAI,IAAI;YAAE,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC;QAC7B,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,iBAAiB,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;QACtE,OAAO,IAAI,CAAC;IACd,CAAC;IAED,wCAAwC;IACxC,KAAK,CAAC,aAAa,CAAC,MAAc,EAAE,IAAY,EAAE,QAAgB,EAAE,WAAoB;QACtF,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,kBAAkB,EAAE;YAC1D,MAAM;YACN,IAAI;YACJ,QAAQ;YACR,WAAW;SACZ,CAAC,CAAC;QACH,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,IAAa,EAAE,QAAiB;QACjD,MAAM,MAAM,GAA2B,EAAE,CAAC;QAC1C,IAAI,IAAI;YAAE,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC;QAC7B,IAAI,QAAQ;YAAE,MAAM,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzC,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,kBAAkB,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;QACvE,OAAO,IAAI,CAAC;IACd,CAAC;IAED,uCAAuC;IACvC,KAAK,CAAC,cAAc;QAClB,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;QACpE,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,QAAiB,EAAE,SAAkB,EAAE,OAAgB;QAC3E,MAAM,MAAM,GAA2B,EAAE,CAAC;QAC1C,IAAI,QAAQ;YAAE,MAAM,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzC,IAAI,SAAS;YAAE,MAAM,CAAC,SAAS,GAAG,SAAS,CAAC;QAC5C,IAAI,OAAO;YAAE,MAAM,CAAC,OAAO,GAAG,OAAO,CAAC;QACtC,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,qBAAqB,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;QAC1E,OAAO,IAAI,CAAC;IACd,CAAC;IAED,qCAAqC;IACrC,KAAK,CAAC,UAAU,CAAC,IAAY,EAAE,QAAiB,EAAE,QAAiB,EAAE,UAAmB;QACtF,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,EAAE;YACvD,IAAI;YACJ,QAAQ;YACR,QAAQ;YACR,UAAU;SACX,CAAC,CAAC;QACH,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,QAAiB,EAAE,MAAe;QAChD,MAAM,MAAM,GAA2B,EAAE,CAAC;QAC1C,IAAI,QAAQ;YAAE,MAAM,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzC,IAAI,MAAM;YAAE,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC;QACnC,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,eAAe,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;QACpE,OAAO,IAAI,CAAC;IACd,CAAC;IAED,yCAAyC;IACzC,KAAK,CAAC,mBAAmB,CAAC,KAAa,EAAE,SAAiB,EAAE,OAAe,EAAE,WAAoB,EAAE,QAAiB;QAClH,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,yBAAyB,EAAE;YACjE,KAAK;YACL,SAAS;YACT,OAAO;YACP,WAAW;YACX,QAAQ;SACT,CAAC,CAAC;QACH,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,kBAAkB,CAAC,SAAkB,EAAE,OAAgB;QAC3D,MAAM,MAAM,GAA2B,EAAE,CAAC;QAC1C,IAAI,SAAS;YAAE,MAAM,CAAC,SAAS,GAAG,SAAS,CAAC;QAC5C,IAAI,OAAO;YAAE,MAAM,CAAC,OAAO,GAAG,OAAO,CAAC;QACtC,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,yBAAyB,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;QAC9E,OAAO,IAAI,CAAC;IACd,CAAC;IAED,yCAAyC;IACzC,KAAK,CAAC,cAAc,CAAC,KAAa,EAAE,WAAmB,EAAE,OAAe,MAAM;QAC5E,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,mBAAmB,EAAE;YAC3D,KAAK;YACL,WAAW;YACX,IAAI;YACJ,MAAM,EAAE,QAAQ;SACjB,CAAC,CAAC;QACH,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,MAAe,EAAE,IAAa;QAChD,MAAM,MAAM,GAA2B,EAAE,CAAC;QAC1C,IAAI,MAAM;YAAE,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC;QACnC,IAAI,IAAI;YAAE,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC;QAC7B,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,mBAAmB,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;QACxE,OAAO,IAAI,CAAC;IACd,CAAC;IAED,yCAAyC;IACzC,KAAK,CAAC,aAAa,CAAC,UAAmB,EAAE,QAAiB,EAAE,SAAkB;QAC5E,MAAM,MAAM,GAA2B,EAAE,CAAC;QAC1C,IAAI,UAAU;YAAE,MAAM,CAAC,UAAU,GAAG,UAAU,CAAC;QAC/C,IAAI,QAAQ;YAAE,MAAM,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;QACjD,IAAI,SAAS;YAAE,MAAM,CAAC,SAAS,GAAG,SAAS,CAAC;QAC5C,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,oBAAoB,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;QACzE,OAAO,IAAI,CAAC;IACd,CAAC;IAED,qCAAqC;IACrC,KAAK,CAAC,UAAU,CAAC,KAAa,EAAE,WAAoB,EAAE,QAAiB,EAAE,MAAe;QACtF,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,EAAE;YACvD,KAAK;YACL,WAAW;YACX,QAAQ,EAAE,QAAQ,IAAI,QAAQ;YAC9B,MAAM,EAAE,MAAM,IAAI,KAAK;YACvB,MAAM,EAAE,SAAS;SAClB,CAAC,CAAC;QACH,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,MAAe;QAC7B,MAAM,MAAM,GAA2B,EAAE,CAAC;QAC1C,IAAI,MAAM;YAAE,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC;QACnC,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,eAAe,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;QACpE,OAAO,IAAI,CAAC;IACd,CAAC;CACF;AAEY,QAAA,UAAU,GAAG,IAAI,UAAU,EAAE,CAAC"}
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/services/api.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "shawnxixi-cli",
3
- "version": "0.1.0",
3
+ "version": "0.3.0",
4
4
  "description": "肖嘻 CLI 工具 - OpenClaw 执行肢",
5
5
  "main": "dist/index.js",
6
6
  "bin": {
@@ -35,6 +35,7 @@
35
35
  "typescript": "^5.3.3"
36
36
  },
37
37
  "dependencies": {
38
- "axios": "^1.15.0"
38
+ "axios": "^1.15.0",
39
+ "commander": "^14.0.3"
39
40
  }
40
41
  }
@@ -7,9 +7,7 @@ export const calendarCommands = {
7
7
  process.exit(1);
8
8
  }
9
9
  try {
10
- const result = await (apiService as any).createCalendarEvent
11
- ? (apiService as any).createCalendarEvent(title, options.start, options.end, options.desc)
12
- : { error: 'Calendar API not yet implemented in service' };
10
+ const result = await apiService.createCalendarEvent(title, options.start!, options.end!, options.desc);
13
11
  console.log(JSON.stringify(result, null, 2));
14
12
  } catch (error: any) {
15
13
  console.error('创建日程失败:', error.message);
@@ -19,9 +17,7 @@ export const calendarCommands = {
19
17
 
20
18
  list: async (options: { from?: string; to?: string } = {}) => {
21
19
  try {
22
- const result = await (apiService as any).listCalendarEvents
23
- ? (apiService as any).listCalendarEvents(options)
24
- : { error: 'Calendar API not yet implemented in service' };
20
+ const result = await apiService.listCalendarEvents(options.from, options.to);
25
21
  console.log(JSON.stringify(result, null, 2));
26
22
  } catch (error: any) {
27
23
  console.error('查询日程失败:', error.message);
@@ -3,10 +3,7 @@ import { apiService } from '../../services/api';
3
3
  export const itemCommands = {
4
4
  create: async (name: string, options: { location?: string; expire?: string; category?: string } = {}) => {
5
5
  try {
6
- // Item API is not yet in apiService, use generic approach
7
- const result = await (apiService as any).createItem
8
- ? (apiService as any).createItem(name, options)
9
- : { error: 'Item API not yet implemented in service' };
6
+ const result = await apiService.createItem(name, options.category, options.location, options.expire);
10
7
  console.log(JSON.stringify(result, null, 2));
11
8
  } catch (error: any) {
12
9
  console.error('创建物品失败:', error.message);
@@ -16,9 +13,7 @@ export const itemCommands = {
16
13
 
17
14
  list: async (options: { category?: string; expiring?: boolean } = {}) => {
18
15
  try {
19
- const result = await (apiService as any).listItems
20
- ? (apiService as any).listItems(options)
21
- : { error: 'Item API not yet implemented in service' };
16
+ const result = await apiService.listItems(options.category);
22
17
  console.log(JSON.stringify(result, null, 2));
23
18
  } catch (error: any) {
24
19
  console.error('查询物品失败:', error.message);
package/src/index.ts CHANGED
@@ -6,6 +6,7 @@
6
6
  * 命令命名空间:biz:*(日常业务)、sys:*(系统操作)
7
7
  */
8
8
 
9
+ import { Command } from 'commander';
9
10
  import { todoCommands } from './commands/biz/todo';
10
11
  import { recordCommands } from './commands/biz/record';
11
12
  import { financeCommands } from './commands/biz/finance';
@@ -13,197 +14,160 @@ import { itemCommands } from './commands/biz/item';
13
14
  import { calendarCommands } from './commands/biz/calendar';
14
15
  import { syncHealth } from './commands/sys/health';
15
16
 
16
- type AsyncCommandHandler = (...args: any[]) => Promise<void>;
17
+ const program = new Command();
17
18
 
18
- interface CommandMap {
19
- [key: string]: AsyncCommandHandler;
20
- }
19
+ program
20
+ .name('shawnxixi')
21
+ .description('肖嘻 CLI 工具')
22
+ .version('0.2.0');
21
23
 
22
- const commands: CommandMap = {
23
- // Todo
24
- 'biz:todo:create': async (title: string, args: string[]) => {
25
- const options = parseTodoOptions(args);
24
+ // ============ biz ============
25
+
26
+ const biz = program.command('biz').description('日常业务命令');
27
+
28
+ // biz todo
29
+ const todo = biz.command('todo').description('待办管理');
30
+
31
+ todo
32
+ .command('create <title>')
33
+ .description('创建待办')
34
+ .option('--due <date>', '截止日期 YYYY-MM-DD')
35
+ .option('--priority <level>', '优先级 low|medium|high', 'medium')
36
+ .action(async (title: string, options: { due?: string; priority?: string }) => {
26
37
  await todoCommands.create(title, options);
27
- },
28
- 'biz:todo:list': async () => {
29
- await todoCommands.list({});
30
- },
31
- 'biz:todo:done': async (id: string) => {
38
+ });
39
+
40
+ todo
41
+ .command('list')
42
+ .description('列出待办')
43
+ .option('--status <status>', '状态过滤')
44
+ .action(async (options: { status?: string }) => {
45
+ await todoCommands.list(options);
46
+ });
47
+
48
+ todo
49
+ .command('done <id>')
50
+ .description('标记待办完成')
51
+ .action(async (id: string) => {
32
52
  await todoCommands.done(parseInt(id, 10));
33
- },
34
- 'biz:todo:delete': async (id: string) => {
53
+ });
54
+
55
+ todo
56
+ .command('delete <id>')
57
+ .description('删除待办')
58
+ .action(async (id: string) => {
35
59
  await todoCommands.delete(parseInt(id, 10));
36
- },
60
+ });
61
+
62
+ // biz record
63
+ const record = biz.command('record').description('记录管理');
37
64
 
38
- // Record
39
- 'biz:record:create': async (title: string, args: string[]) => {
40
- const options = parseRecordOptions(args);
65
+ record
66
+ .command('create <title>')
67
+ .description('创建记录')
68
+ .option('--content <text>', '内容')
69
+ .option('--type <type>', '类型 diary|pet|note|idea', 'diary')
70
+ .option('--tags <tags>', '标签,逗号分隔')
71
+ .action(async (title: string, options: { content?: string; type?: string; tags?: string }) => {
41
72
  await recordCommands.create(title, options.content || '', options);
42
- },
43
- 'biz:record:list': async () => {
44
- await recordCommands.list({});
45
- },
46
-
47
- // Finance
48
- 'biz:finance:create': async (amount: string, args: string[]) => {
49
- const options = parseFinanceOptions(args);
73
+ });
74
+
75
+ record
76
+ .command('list')
77
+ .description('列出记录')
78
+ .option('--type <type>', '类型过滤')
79
+ .action(async (options: { type?: string }) => {
80
+ await recordCommands.list(options);
81
+ });
82
+
83
+ // biz finance
84
+ const finance = biz.command('finance').description('财务管理');
85
+
86
+ finance
87
+ .command('create <amount>')
88
+ .description('记一笔账')
89
+ .option('--type <type>', '类型 income|expense', 'expense')
90
+ .option('--category <cat>', '分类', 'other')
91
+ .option('--desc <text>', '备注')
92
+ .action(async (amount: string, options: { type?: string; category?: string; desc?: string }) => {
50
93
  await financeCommands.create(amount, options);
51
- },
52
- 'biz:finance:list': async (args: string[]) => {
53
- const options = parseFinanceOptions(args);
94
+ });
95
+
96
+ finance
97
+ .command('list')
98
+ .description('列出账单')
99
+ .option('--type <type>', '类型过滤 income|expense')
100
+ .option('--category <cat>', '分类过滤')
101
+ .action(async (options: { type?: string; category?: string }) => {
54
102
  await financeCommands.list(options);
55
- },
103
+ });
56
104
 
57
- // Item
58
- 'biz:item:create': async (name: string, args: string[]) => {
59
- const options = parseItemOptions(args);
105
+ // biz item
106
+ const item = biz.command('item').description('物品管理');
107
+
108
+ item
109
+ .command('create <name>')
110
+ .description('添加物品')
111
+ .option('--location <loc>', '存放位置')
112
+ .option('--expire <date>', '过期日期 YYYY-MM-DD')
113
+ .option('--category <cat>', '分类')
114
+ .action(async (name: string, options: { location?: string; expire?: string; category?: string }) => {
60
115
  await itemCommands.create(name, options);
61
- },
62
- 'biz:item:list': async () => {
63
- await itemCommands.list({});
64
- },
65
-
66
- // Calendar
67
- 'biz:calendar:create': async (title: string, args: string[]) => {
68
- const options = parseCalendarOptions(args);
116
+ });
117
+
118
+ item
119
+ .command('list')
120
+ .description('列出物品')
121
+ .option('--category <cat>', '分类过滤')
122
+ .action(async (options: { category?: string }) => {
123
+ await itemCommands.list(options);
124
+ });
125
+
126
+ // biz calendar
127
+ const calendar = biz.command('calendar').description('日程管理');
128
+
129
+ calendar
130
+ .command('create <title>')
131
+ .description('创建日程')
132
+ .requiredOption('--start <datetime>', '开始时间')
133
+ .requiredOption('--end <datetime>', '结束时间')
134
+ .option('--desc <text>', '描述')
135
+ .action(async (title: string, options: { start: string; end: string; desc?: string }) => {
69
136
  await calendarCommands.create(title, options);
70
- },
71
- 'biz:calendar:list': async () => {
72
- await calendarCommands.list({});
73
- },
137
+ });
138
+
139
+ calendar
140
+ .command('list')
141
+ .description('列出日程')
142
+ .option('--from <datetime>', '开始时间')
143
+ .option('--to <datetime>', '结束时间')
144
+ .action(async (options: { from?: string; to?: string }) => {
145
+ await calendarCommands.list(options);
146
+ });
147
+
148
+ // ============ sys ============
74
149
 
75
- // System
76
- 'sys:health:sync': async () => {
150
+ const sys = program.command('sys').description('系统命令');
151
+
152
+ const health = sys.command('health').description('健康数据');
153
+
154
+ health
155
+ .command('sync')
156
+ .description('同步健康数据')
157
+ .action(async () => {
77
158
  await syncHealth();
78
- },
79
- 'sys:health:query': async (dataType: string, args: string[]) => {
80
- const options = parseHealthOptions(args);
81
- await syncHealth(dataType, options);
82
- },
83
- };
84
-
85
- // ============ Option Parsers ============
86
-
87
- function parseTodoOptions(args: string[]): { due?: string; priority?: string } {
88
- const options: { due?: string; priority?: string } = {};
89
- for (let i = 0; i < args.length; i++) {
90
- if (args[i] === '--due' && args[i + 1]) options.due = args[++i];
91
- if (args[i] === '--priority' && args[i + 1]) options.priority = args[++i];
92
- }
93
- return options;
94
- }
95
-
96
- function parseRecordOptions(args: string[]): { content?: string; type?: string; tags?: string } {
97
- const options: { content?: string; type?: string; tags?: string } = {};
98
- for (let i = 0; i < args.length; i++) {
99
- if (args[i] === '--content' && args[i + 1]) options.content = args[++i];
100
- if (args[i] === '--type' && args[i + 1]) options.type = args[++i];
101
- if (args[i] === '--tags' && args[i + 1]) options.tags = args[++i];
102
- }
103
- return options;
104
- }
105
-
106
- function parseFinanceOptions(args: string[]): { type?: string; category?: string; desc?: string } {
107
- const options: { type?: string; category?: string; desc?: string } = {};
108
- for (let i = 0; i < args.length; i++) {
109
- if (args[i] === '--type' && args[i + 1]) options.type = args[++i];
110
- if (args[i] === '--category' && args[i + 1]) options.category = args[++i];
111
- if (args[i] === '--desc' && args[i + 1]) options.desc = args[++i];
112
- }
113
- return options;
114
- }
115
-
116
- function parseItemOptions(args: string[]): { location?: string; expire?: string; category?: string } {
117
- const options: { location?: string; expire?: string; category?: string } = {};
118
- for (let i = 0; i < args.length; i++) {
119
- if (args[i] === '--location' && args[i + 1]) options.location = args[++i];
120
- if (args[i] === '--expire' && args[i + 1]) options.expire = args[++i];
121
- if (args[i] === '--category' && args[i + 1]) options.category = args[++i];
122
- }
123
- return options;
124
- }
125
-
126
- function parseCalendarOptions(args: string[]): { start?: string; end?: string; desc?: string } {
127
- const options: { start?: string; end?: string; desc?: string } = {};
128
- for (let i = 0; i < args.length; i++) {
129
- if (args[i] === '--start' && args[i + 1]) options.start = args[++i];
130
- if (args[i] === '--end' && args[i + 1]) options.end = args[++i];
131
- if (args[i] === '--desc' && args[i + 1]) options.desc = args[++i];
132
- }
133
- return options;
134
- }
135
-
136
- function parseHealthOptions(args: string[]): { startDate?: string; endDate?: string } {
137
- const options: { startDate?: string; endDate?: string } = {};
138
- for (let i = 0; i < args.length; i++) {
139
- if (args[i] === '--from' && args[i + 1]) options.startDate = args[++i];
140
- if (args[i] === '--to' && args[i + 1]) options.endDate = args[++i];
141
- }
142
- return options;
143
- }
144
-
145
- // ============ CLI Entry ============
146
-
147
- function printUsage(): void {
148
- console.log(`
149
- shawnxixi CLI - 肖嘻 CLI 工具
150
-
151
- Usage: shawnxixi <command> [args...]
152
-
153
- Business Commands (biz:*):
154
- biz todo create <title> [--due YYYY-MM-DD] [--priority low|medium|high]
155
- biz todo list
156
- biz todo done <id>
157
- biz todo delete <id>
158
- biz record create <title> [--content TEXT] [--type diary|pet|note|idea] [--tags TAG1,TAG2]
159
- biz record list
160
- biz finance create <amount> [--type income|expense] [--category CAT] [--desc TEXT]
161
- biz finance list [--type income|expense] [--category CAT]
162
- biz item create <name> [--location LOC] [--expire YYYY-MM-DD] [--category CAT]
163
- biz item list
164
- biz calendar create <title> --start DATETIME --end DATETIME [--desc TEXT]
165
- biz calendar list
166
-
167
- System Commands (sys:*):
168
- sys health sync [--from YYYY-MM-DD] [--to YYYY-MM-DD]
169
- sys health query <dataType> [--from YYYY-MM-DD] [--to YYYY-MM-DD]
170
-
171
- Examples:
172
- shawnxixi biz todo create "开会" --due 2026-04-12 --priority high
173
- shawnxixi biz finance create 50 --category food --desc "午饭"
174
- shawnxixi biz calendar create "面试" --start "2026-04-15 14:00" --end "2026-04-15 15:00"
175
- `);
176
- }
177
-
178
- function main(): void {
179
- const args = process.argv.slice(2);
180
-
181
- if (args.length === 0 || args[0] === '--help' || args[0] === '-h') {
182
- printUsage();
183
- process.exit(0);
184
- }
185
-
186
- // Handle special case: "biz todo list" -> "biz:todo:list"
187
- let commandKey: string;
188
- if (args[0] === 'biz' || args[0] === 'sys') {
189
- commandKey = args.join(':');
190
- } else {
191
- commandKey = args[0];
192
- }
193
-
194
- const handler = commands[commandKey];
195
-
196
- if (!handler) {
197
- console.error(`Unknown command: ${commandKey}`);
198
- printUsage();
199
- process.exit(1);
200
- }
201
-
202
- const handlerArgs = args.slice(1);
203
- handler(...handlerArgs).catch((error) => {
204
- console.error('Command failed:', error);
205
- process.exit(1);
206
159
  });
207
- }
208
160
 
209
- main();
161
+ health
162
+ .command('query [dataType]')
163
+ .description('查询健康数据')
164
+ .option('--from <date>', '开始日期 YYYY-MM-DD')
165
+ .option('--to <date>', '结束日期 YYYY-MM-DD')
166
+ .action(async (dataType: string | undefined, options: { from?: string; to?: string }) => {
167
+ await syncHealth(dataType, { startDate: options.from, endDate: options.to });
168
+ });
169
+
170
+ program.parseAsync(process.argv).catch((error) => {
171
+ console.error('Command failed:', error);
172
+ process.exit(1);
173
+ });
@@ -5,7 +5,18 @@
5
5
 
6
6
  import axios, { AxiosInstance } from 'axios';
7
7
 
8
- const API_BASE = process.env.SHAWNXIXI_API_URL || 'http://localhost:8080';
8
+ const API_BASE = process.env.SHAWNXIXI_API_URL || 'http://server.shawnxixi.icu';
9
+
10
+ /** Normalize date/datetime strings to LocalDateTime format (ISO 8601 without timezone) */
11
+ function toLocalDateTime(value?: string): string | undefined {
12
+ if (!value) return undefined;
13
+ // "YYYY-MM-DD" → "YYYY-MM-DDT00:00:00"
14
+ if (/^\d{4}-\d{2}-\d{2}$/.test(value)) return `${value}T00:00:00`;
15
+ // "YYYY-MM-DD HH:MM" → "YYYY-MM-DDTHH:MM:00"
16
+ if (/^\d{4}-\d{2}-\d{2} \d{2}:\d{2}$/.test(value)) return value.replace(' ', 'T') + ':00';
17
+ // Already ISO format, pass through
18
+ return value;
19
+ }
9
20
 
10
21
  class ApiService {
11
22
  private client: AxiosInstance;
@@ -13,7 +24,7 @@ class ApiService {
13
24
  constructor() {
14
25
  this.client = axios.create({
15
26
  baseURL: API_BASE,
16
- timeout: 10000,
27
+ timeout: 30000,
17
28
  headers: {
18
29
  'Content-Type': 'application/json',
19
30
  },
@@ -25,6 +36,10 @@ class ApiService {
25
36
  if (token) {
26
37
  config.headers.Authorization = `Bearer ${token}`;
27
38
  }
39
+ // 请求体长度防护
40
+ if (config.data && JSON.stringify(config.data).length > 100_000) {
41
+ throw new Error('Request payload too large (max 100KB)');
42
+ }
28
43
  return config;
29
44
  });
30
45
 
@@ -59,7 +74,7 @@ class ApiService {
59
74
  async createTodo(title: string, dueDate?: string, priority?: string) {
60
75
  const { data } = await this.client.post('/api/v1/todos', {
61
76
  title,
62
- dueDate,
77
+ dueDate: toLocalDateTime(dueDate),
63
78
  priority: priority || 'medium',
64
79
  status: 'pending',
65
80
  });
@@ -73,7 +88,7 @@ class ApiService {
73
88
  }
74
89
 
75
90
  async updateTodo(id: number, updates: Partial<{title: string; status: string; priority: string; dueDate: string}>) {
76
- const { data } = await this.client.put(`/api/v1/todos/${id}`, updates);
91
+ const { data } = await this.client.patch(`/api/v1/todos/${id}`, updates);
77
92
  return data;
78
93
  }
79
94
 
@@ -141,7 +156,7 @@ class ApiService {
141
156
  name,
142
157
  category,
143
158
  location,
144
- expireDate,
159
+ expireDate: toLocalDateTime(expireDate),
145
160
  });
146
161
  return data;
147
162
  }
@@ -158,8 +173,8 @@ class ApiService {
158
173
  async createCalendarEvent(title: string, startTime: string, endTime: string, description?: string, location?: string) {
159
174
  const { data } = await this.client.post('/api/v1/calendar-events', {
160
175
  title,
161
- startTime,
162
- endTime,
176
+ startTime: toLocalDateTime(startTime),
177
+ endTime: toLocalDateTime(endTime),
163
178
  description,
164
179
  location,
165
180
  });
@@ -178,7 +193,7 @@ class ApiService {
178
193
  async createReminder(title: string, triggerTime: string, type: string = 'once') {
179
194
  const { data } = await this.client.post('/api/v1/reminders', {
180
195
  title,
181
- triggerTime,
196
+ triggerTime: toLocalDateTime(triggerTime),
182
197
  type,
183
198
  status: 'active',
184
199
  });