shawnxixi-cli 0.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.
- package/.env.example +2 -0
- package/.github/workflows/ci.yml +48 -0
- package/AUTH-RESEARCH.md +230 -0
- package/CLAUDE.md +102 -0
- package/NPM-PUBLISH-RESEARCH.md +163 -0
- package/README.md +136 -0
- package/dist/commands/biz/calendar.d.ts +12 -0
- package/dist/commands/biz/calendar.d.ts.map +1 -0
- package/dist/commands/biz/calendar.js +35 -0
- package/dist/commands/biz/calendar.js.map +1 -0
- package/dist/commands/biz/finance.d.ts +12 -0
- package/dist/commands/biz/finance.d.ts.map +1 -0
- package/dist/commands/biz/finance.js +34 -0
- package/dist/commands/biz/finance.js.map +1 -0
- package/dist/commands/biz/item.d.ts +12 -0
- package/dist/commands/biz/item.d.ts.map +1 -0
- package/dist/commands/biz/item.js +32 -0
- package/dist/commands/biz/item.js.map +1 -0
- package/dist/commands/biz/record.d.ts +28 -0
- package/dist/commands/biz/record.d.ts.map +1 -0
- package/dist/commands/biz/record.js +34 -0
- package/dist/commands/biz/record.js.map +1 -0
- package/dist/commands/biz/todo.d.ts +35 -0
- package/dist/commands/biz/todo.d.ts.map +1 -0
- package/dist/commands/biz/todo.js +73 -0
- package/dist/commands/biz/todo.js.map +1 -0
- package/dist/commands/sys/health.d.ts +9 -0
- package/dist/commands/sys/health.d.ts.map +1 -0
- package/dist/commands/sys/health.js +28 -0
- package/dist/commands/sys/health.js.map +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +199 -0
- package/dist/index.js.map +1 -0
- package/dist/services/api.d.ts +37 -0
- package/dist/services/api.d.ts.map +1 -0
- package/dist/services/api.js +218 -0
- package/dist/services/api.js.map +1 -0
- package/jest.config.js +11 -0
- package/package.json +40 -0
- package/src/commands/biz/calendar.ts +31 -0
- package/src/commands/biz/finance.ts +30 -0
- package/src/commands/biz/item.ts +28 -0
- package/src/commands/biz/record.ts +38 -0
- package/src/commands/biz/todo.ts +74 -0
- package/src/commands/sys/health.ts +23 -0
- package/src/index.ts +209 -0
- package/src/services/api.ts +226 -0
- package/tests/commands/todo.test.ts +39 -0
- package/tests/services/api.test.ts +39 -0
- package/tsconfig.json +20 -0
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.calendarCommands = void 0;
|
|
4
|
+
const api_1 = require("../../services/api");
|
|
5
|
+
exports.calendarCommands = {
|
|
6
|
+
create: async (title, options = {}) => {
|
|
7
|
+
if (!options.start || !options.end) {
|
|
8
|
+
console.error('必须指定 --start 和 --end 时间');
|
|
9
|
+
process.exit(1);
|
|
10
|
+
}
|
|
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' };
|
|
15
|
+
console.log(JSON.stringify(result, null, 2));
|
|
16
|
+
}
|
|
17
|
+
catch (error) {
|
|
18
|
+
console.error('创建日程失败:', error.message);
|
|
19
|
+
process.exit(1);
|
|
20
|
+
}
|
|
21
|
+
},
|
|
22
|
+
list: async (options = {}) => {
|
|
23
|
+
try {
|
|
24
|
+
const result = await api_1.apiService.listCalendarEvents
|
|
25
|
+
? api_1.apiService.listCalendarEvents(options)
|
|
26
|
+
: { error: 'Calendar API not yet implemented in service' };
|
|
27
|
+
console.log(JSON.stringify(result, null, 2));
|
|
28
|
+
}
|
|
29
|
+
catch (error) {
|
|
30
|
+
console.error('查询日程失败:', error.message);
|
|
31
|
+
process.exit(1);
|
|
32
|
+
}
|
|
33
|
+
},
|
|
34
|
+
};
|
|
35
|
+
//# sourceMappingURL=calendar.js.map
|
|
@@ -0,0 +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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export declare const financeCommands: {
|
|
2
|
+
create: (amount: string, options?: {
|
|
3
|
+
type?: string;
|
|
4
|
+
category?: string;
|
|
5
|
+
desc?: string;
|
|
6
|
+
}) => Promise<void>;
|
|
7
|
+
list: (options?: {
|
|
8
|
+
type?: string;
|
|
9
|
+
category?: string;
|
|
10
|
+
}) => Promise<void>;
|
|
11
|
+
};
|
|
12
|
+
//# sourceMappingURL=finance.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"finance.d.ts","sourceRoot":"","sources":["../../../src/commands/biz/finance.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,eAAe;qBACH,MAAM,YAAW;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE;qBAiBrE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE;CAS3D,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.financeCommands = void 0;
|
|
4
|
+
const api_1 = require("../../services/api");
|
|
5
|
+
exports.financeCommands = {
|
|
6
|
+
create: async (amount, options = {}) => {
|
|
7
|
+
const num = parseFloat(amount);
|
|
8
|
+
if (isNaN(num)) {
|
|
9
|
+
console.error('金额必须是数字:', amount);
|
|
10
|
+
process.exit(1);
|
|
11
|
+
}
|
|
12
|
+
const type = options.type || (num >= 0 ? 'income' : 'expense');
|
|
13
|
+
const category = options.category || 'other';
|
|
14
|
+
try {
|
|
15
|
+
const result = await api_1.apiService.createFinance(Math.abs(num), type, category, options.desc);
|
|
16
|
+
console.log(JSON.stringify(result, null, 2));
|
|
17
|
+
}
|
|
18
|
+
catch (error) {
|
|
19
|
+
console.error('创建财务记录失败:', error.message);
|
|
20
|
+
process.exit(1);
|
|
21
|
+
}
|
|
22
|
+
},
|
|
23
|
+
list: async (options = {}) => {
|
|
24
|
+
try {
|
|
25
|
+
const result = await api_1.apiService.listFinances(options.type, options.category);
|
|
26
|
+
console.log(JSON.stringify(result, null, 2));
|
|
27
|
+
}
|
|
28
|
+
catch (error) {
|
|
29
|
+
console.error('查询财务记录失败:', error.message);
|
|
30
|
+
process.exit(1);
|
|
31
|
+
}
|
|
32
|
+
},
|
|
33
|
+
};
|
|
34
|
+
//# sourceMappingURL=finance.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"finance.js","sourceRoot":"","sources":["../../../src/commands/biz/finance.ts"],"names":[],"mappings":";;;AAAA,4CAAgD;AAEnC,QAAA,eAAe,GAAG;IAC7B,MAAM,EAAE,KAAK,EAAE,MAAc,EAAE,UAA+D,EAAE,EAAE,EAAE;QAClG,MAAM,GAAG,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;QAC/B,IAAI,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;YAClC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QAC/D,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC;QAC7C,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,gBAAU,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;YAC3F,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,WAAW,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;YAC1C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IAED,IAAI,EAAE,KAAK,EAAE,UAAgD,EAAE,EAAE,EAAE;QACjE,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,gBAAU,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,QAAQ,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,WAAW,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;YAC1C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export declare const itemCommands: {
|
|
2
|
+
create: (name: string, options?: {
|
|
3
|
+
location?: string;
|
|
4
|
+
expire?: string;
|
|
5
|
+
category?: string;
|
|
6
|
+
}) => Promise<void>;
|
|
7
|
+
list: (options?: {
|
|
8
|
+
category?: string;
|
|
9
|
+
expiring?: boolean;
|
|
10
|
+
}) => Promise<void>;
|
|
11
|
+
};
|
|
12
|
+
//# sourceMappingURL=item.d.ts.map
|
|
@@ -0,0 +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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.itemCommands = void 0;
|
|
4
|
+
const api_1 = require("../../services/api");
|
|
5
|
+
exports.itemCommands = {
|
|
6
|
+
create: async (name, options = {}) => {
|
|
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' };
|
|
12
|
+
console.log(JSON.stringify(result, null, 2));
|
|
13
|
+
}
|
|
14
|
+
catch (error) {
|
|
15
|
+
console.error('创建物品失败:', error.message);
|
|
16
|
+
process.exit(1);
|
|
17
|
+
}
|
|
18
|
+
},
|
|
19
|
+
list: async (options = {}) => {
|
|
20
|
+
try {
|
|
21
|
+
const result = await api_1.apiService.listItems
|
|
22
|
+
? api_1.apiService.listItems(options)
|
|
23
|
+
: { error: 'Item API not yet implemented in service' };
|
|
24
|
+
console.log(JSON.stringify(result, null, 2));
|
|
25
|
+
}
|
|
26
|
+
catch (error) {
|
|
27
|
+
console.error('查询物品失败:', error.message);
|
|
28
|
+
process.exit(1);
|
|
29
|
+
}
|
|
30
|
+
},
|
|
31
|
+
};
|
|
32
|
+
//# sourceMappingURL=item.js.map
|
|
@@ -0,0 +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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* biz record 命令
|
|
3
|
+
* 记录相关命令:create / list
|
|
4
|
+
*/
|
|
5
|
+
export interface RecordItem {
|
|
6
|
+
id: string;
|
|
7
|
+
content: string;
|
|
8
|
+
createdAt: string;
|
|
9
|
+
}
|
|
10
|
+
export declare const recordCommands: {
|
|
11
|
+
create: (title: string, content: string, options?: {
|
|
12
|
+
type?: string;
|
|
13
|
+
tags?: string;
|
|
14
|
+
}) => Promise<void>;
|
|
15
|
+
list: (options?: {
|
|
16
|
+
type?: string;
|
|
17
|
+
tags?: string;
|
|
18
|
+
}) => Promise<void>;
|
|
19
|
+
};
|
|
20
|
+
export declare const createRecord: (title: string, content: string, options?: {
|
|
21
|
+
type?: string;
|
|
22
|
+
tags?: string;
|
|
23
|
+
}) => Promise<void>;
|
|
24
|
+
export declare const listRecords: (options?: {
|
|
25
|
+
type?: string;
|
|
26
|
+
tags?: string;
|
|
27
|
+
}) => Promise<void>;
|
|
28
|
+
//# sourceMappingURL=record.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"record.d.ts","sourceRoot":"","sources":["../../../src/commands/biz/record.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,eAAO,MAAM,cAAc;oBACH,MAAM,WAAW,MAAM,YAAW;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE;qBAUlE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE;CASvD,CAAC;AAGF,eAAO,MAAM,YAAY,UAtBD,MAAM,WAAW,MAAM,YAAW;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,kBAsBzC,CAAC;AAClD,eAAO,MAAM,WAAW,aAbA;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,kBAaV,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* biz record 命令
|
|
4
|
+
* 记录相关命令:create / list
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.listRecords = exports.createRecord = exports.recordCommands = void 0;
|
|
8
|
+
const api_1 = require("../../services/api");
|
|
9
|
+
exports.recordCommands = {
|
|
10
|
+
create: async (title, content, options = {}) => {
|
|
11
|
+
try {
|
|
12
|
+
const result = await api_1.apiService.createRecord(title, content, options.type, options.tags);
|
|
13
|
+
console.log(JSON.stringify(result, null, 2));
|
|
14
|
+
}
|
|
15
|
+
catch (error) {
|
|
16
|
+
console.error('创建记录失败:', error.message);
|
|
17
|
+
process.exit(1);
|
|
18
|
+
}
|
|
19
|
+
},
|
|
20
|
+
list: async (options = {}) => {
|
|
21
|
+
try {
|
|
22
|
+
const result = await api_1.apiService.listRecords(options.type, options.tags);
|
|
23
|
+
console.log(JSON.stringify(result, null, 2));
|
|
24
|
+
}
|
|
25
|
+
catch (error) {
|
|
26
|
+
console.error('查询记录失败:', error.message);
|
|
27
|
+
process.exit(1);
|
|
28
|
+
}
|
|
29
|
+
},
|
|
30
|
+
};
|
|
31
|
+
// 兼容旧导出
|
|
32
|
+
exports.createRecord = exports.recordCommands.create;
|
|
33
|
+
exports.listRecords = exports.recordCommands.list;
|
|
34
|
+
//# sourceMappingURL=record.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"record.js","sourceRoot":"","sources":["../../../src/commands/biz/record.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,4CAAgD;AAQnC,QAAA,cAAc,GAAG;IAC5B,MAAM,EAAE,KAAK,EAAE,KAAa,EAAE,OAAe,EAAE,UAA4C,EAAE,EAAE,EAAE;QAC/F,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,gBAAU,CAAC,YAAY,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;YACzF,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,UAA4C,EAAE,EAAE,EAAE;QAC7D,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,gBAAU,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;YACxE,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;AAEF,QAAQ;AACK,QAAA,YAAY,GAAG,sBAAc,CAAC,MAAM,CAAC;AACrC,QAAA,WAAW,GAAG,sBAAc,CAAC,IAAI,CAAC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* biz todo 命令
|
|
3
|
+
* 待办相关命令:create / list
|
|
4
|
+
*/
|
|
5
|
+
export interface TodoItem {
|
|
6
|
+
id: string;
|
|
7
|
+
title: string;
|
|
8
|
+
completed: boolean;
|
|
9
|
+
createdAt: string;
|
|
10
|
+
}
|
|
11
|
+
export declare const todoCommands: {
|
|
12
|
+
create: (title: string, options?: {
|
|
13
|
+
due?: string;
|
|
14
|
+
priority?: string;
|
|
15
|
+
}) => Promise<void>;
|
|
16
|
+
list: (options?: {
|
|
17
|
+
status?: string;
|
|
18
|
+
}) => Promise<void>;
|
|
19
|
+
update: (id: number, options?: {
|
|
20
|
+
title?: string;
|
|
21
|
+
status?: string;
|
|
22
|
+
priority?: string;
|
|
23
|
+
due?: string;
|
|
24
|
+
}) => Promise<void>;
|
|
25
|
+
done: (id: number) => Promise<void>;
|
|
26
|
+
delete: (id: number) => Promise<void>;
|
|
27
|
+
};
|
|
28
|
+
export declare const createTodo: (title: string, options?: {
|
|
29
|
+
due?: string;
|
|
30
|
+
priority?: string;
|
|
31
|
+
}) => Promise<void>;
|
|
32
|
+
export declare const listTodos: (options?: {
|
|
33
|
+
status?: string;
|
|
34
|
+
}) => Promise<void>;
|
|
35
|
+
//# sourceMappingURL=todo.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"todo.d.ts","sourceRoot":"","sources":["../../../src/commands/biz/todo.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,eAAO,MAAM,YAAY;oBACD,MAAM,YAAW;QAAE,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE;qBAUpD;QAAE,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE;iBAUtB,MAAM,YAAW;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE;eAevF,MAAM;iBAUJ,MAAM;CAS1B,CAAC;AAGF,eAAO,MAAM,UAAU,UAzDC,MAAM,YAAW;IAAE,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,kBAyD/B,CAAC;AAC9C,eAAO,MAAM,SAAS,aAhDE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,kBAgDD,CAAC"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* biz todo 命令
|
|
4
|
+
* 待办相关命令:create / list
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.listTodos = exports.createTodo = exports.todoCommands = void 0;
|
|
8
|
+
const api_1 = require("../../services/api");
|
|
9
|
+
exports.todoCommands = {
|
|
10
|
+
create: async (title, options = {}) => {
|
|
11
|
+
try {
|
|
12
|
+
const result = await api_1.apiService.createTodo(title, options.due, options.priority);
|
|
13
|
+
console.log(JSON.stringify(result, null, 2));
|
|
14
|
+
}
|
|
15
|
+
catch (error) {
|
|
16
|
+
console.error('创建待办失败:', error.message);
|
|
17
|
+
process.exit(1);
|
|
18
|
+
}
|
|
19
|
+
},
|
|
20
|
+
list: async (options = {}) => {
|
|
21
|
+
try {
|
|
22
|
+
const result = await api_1.apiService.listTodos(options.status);
|
|
23
|
+
console.log(JSON.stringify(result, null, 2));
|
|
24
|
+
}
|
|
25
|
+
catch (error) {
|
|
26
|
+
console.error('查询待办失败:', error.message);
|
|
27
|
+
process.exit(1);
|
|
28
|
+
}
|
|
29
|
+
},
|
|
30
|
+
update: async (id, options = {}) => {
|
|
31
|
+
try {
|
|
32
|
+
const updates = {};
|
|
33
|
+
if (options.title)
|
|
34
|
+
updates.title = options.title;
|
|
35
|
+
if (options.status)
|
|
36
|
+
updates.status = options.status;
|
|
37
|
+
if (options.priority)
|
|
38
|
+
updates.priority = options.priority;
|
|
39
|
+
if (options.due)
|
|
40
|
+
updates.dueDate = options.due;
|
|
41
|
+
const result = await api_1.apiService.updateTodo(id, updates);
|
|
42
|
+
console.log(JSON.stringify(result, null, 2));
|
|
43
|
+
}
|
|
44
|
+
catch (error) {
|
|
45
|
+
console.error('更新待办失败:', error.message);
|
|
46
|
+
process.exit(1);
|
|
47
|
+
}
|
|
48
|
+
},
|
|
49
|
+
done: async (id) => {
|
|
50
|
+
try {
|
|
51
|
+
const result = await api_1.apiService.updateTodo(id, { status: 'done' });
|
|
52
|
+
console.log(JSON.stringify(result, null, 2));
|
|
53
|
+
}
|
|
54
|
+
catch (error) {
|
|
55
|
+
console.error('标记待办完成失败:', error.message);
|
|
56
|
+
process.exit(1);
|
|
57
|
+
}
|
|
58
|
+
},
|
|
59
|
+
delete: async (id) => {
|
|
60
|
+
try {
|
|
61
|
+
const result = await api_1.apiService.deleteTodo(id);
|
|
62
|
+
console.log(JSON.stringify(result, null, 2));
|
|
63
|
+
}
|
|
64
|
+
catch (error) {
|
|
65
|
+
console.error('删除待办失败:', error.message);
|
|
66
|
+
process.exit(1);
|
|
67
|
+
}
|
|
68
|
+
},
|
|
69
|
+
};
|
|
70
|
+
// 兼容旧导出
|
|
71
|
+
exports.createTodo = exports.todoCommands.create;
|
|
72
|
+
exports.listTodos = exports.todoCommands.list;
|
|
73
|
+
//# sourceMappingURL=todo.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"todo.js","sourceRoot":"","sources":["../../../src/commands/biz/todo.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,4CAAgD;AASnC,QAAA,YAAY,GAAG;IAC1B,MAAM,EAAE,KAAK,EAAE,KAAa,EAAE,UAA+C,EAAE,EAAE,EAAE;QACjF,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,gBAAU,CAAC,UAAU,CAAC,KAAK,EAAE,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;YACjF,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,UAA+B,EAAE,EAAE,EAAE;QAChD,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,gBAAU,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YAC1D,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,MAAM,EAAE,KAAK,EAAE,EAAU,EAAE,UAAgF,EAAE,EAAE,EAAE;QAC/G,IAAI,CAAC;YACH,MAAM,OAAO,GAAgF,EAAE,CAAC;YAChG,IAAI,OAAO,CAAC,KAAK;gBAAE,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;YACjD,IAAI,OAAO,CAAC,MAAM;gBAAE,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;YACpD,IAAI,OAAO,CAAC,QAAQ;gBAAE,OAAO,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;YAC1D,IAAI,OAAO,CAAC,GAAG;gBAAE,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC;YAC/C,MAAM,MAAM,GAAG,MAAM,gBAAU,CAAC,UAAU,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;YACxD,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,EAAU,EAAE,EAAE;QACzB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,gBAAU,CAAC,UAAU,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;YACnE,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,WAAW,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;YAC1C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IAED,MAAM,EAAE,KAAK,EAAE,EAAU,EAAE,EAAE;QAC3B,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,gBAAU,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;YAC/C,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;AAEF,QAAQ;AACK,QAAA,UAAU,GAAG,oBAAY,CAAC,MAAM,CAAC;AACjC,QAAA,SAAS,GAAG,oBAAY,CAAC,IAAI,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"health.d.ts","sourceRoot":"","sources":["../../../src/commands/sys/health.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,eAAO,MAAM,UAAU,GAAU,WAAW,MAAM,EAAE,UAAS;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAO,kBAezG,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* sys health 命令
|
|
4
|
+
* 健康数据命令:sync / query
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.syncHealth = void 0;
|
|
8
|
+
const api_1 = require("../../services/api");
|
|
9
|
+
const syncHealth = async (dataType, options = {}) => {
|
|
10
|
+
try {
|
|
11
|
+
if (dataType || options.startDate || options.endDate) {
|
|
12
|
+
// 查询模式
|
|
13
|
+
const result = await api_1.apiService.queryHealthData(dataType, options.startDate, options.endDate);
|
|
14
|
+
console.log(JSON.stringify(result, null, 2));
|
|
15
|
+
}
|
|
16
|
+
else {
|
|
17
|
+
// 同步模式
|
|
18
|
+
const result = await api_1.apiService.syncHealthData();
|
|
19
|
+
console.log(JSON.stringify(result, null, 2));
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
catch (error) {
|
|
23
|
+
console.error('健康数据操作失败:', error.message);
|
|
24
|
+
process.exit(1);
|
|
25
|
+
}
|
|
26
|
+
};
|
|
27
|
+
exports.syncHealth = syncHealth;
|
|
28
|
+
//# sourceMappingURL=health.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"health.js","sourceRoot":"","sources":["../../../src/commands/sys/health.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,4CAAgD;AAEzC,MAAM,UAAU,GAAG,KAAK,EAAE,QAAiB,EAAE,UAAoD,EAAE,EAAE,EAAE;IAC5G,IAAI,CAAC;QACH,IAAI,QAAQ,IAAI,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YACrD,OAAO;YACP,MAAM,MAAM,GAAG,MAAM,gBAAU,CAAC,eAAe,CAAC,QAAQ,EAAE,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;YAC9F,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC/C,CAAC;aAAM,CAAC;YACN,OAAO;YACP,MAAM,MAAM,GAAG,MAAM,gBAAU,CAAC,cAAc,EAAE,CAAC;YACjD,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,OAAO,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;QAC1C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC;AAfW,QAAA,UAAU,cAerB"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;;;GAIG"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
/**
|
|
4
|
+
* shawnxixi-cli
|
|
5
|
+
* 肖嘻 CLI 工具入口
|
|
6
|
+
* 命令命名空间:biz:*(日常业务)、sys:*(系统操作)
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
const todo_1 = require("./commands/biz/todo");
|
|
10
|
+
const record_1 = require("./commands/biz/record");
|
|
11
|
+
const finance_1 = require("./commands/biz/finance");
|
|
12
|
+
const item_1 = require("./commands/biz/item");
|
|
13
|
+
const calendar_1 = require("./commands/biz/calendar");
|
|
14
|
+
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();
|
|
199
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;AAEA;;;;GAIG;;AAEH,8CAAmD;AACnD,kDAAuD;AACvD,oDAAyD;AACzD,8CAAmD;AACnD,sDAA2D;AAC3D,kDAAmD;AAQnD,MAAM,QAAQ,GAAe;IAC3B,OAAO;IACP,iBAAiB,EAAE,KAAK,EAAE,KAAa,EAAE,IAAc,EAAE,EAAE;QACzD,MAAM,OAAO,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;QACvC,MAAM,mBAAY,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAC5C,CAAC;IACD,eAAe,EAAE,KAAK,IAAI,EAAE;QAC1B,MAAM,mBAAY,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC9B,CAAC;IACD,eAAe,EAAE,KAAK,EAAE,EAAU,EAAE,EAAE;QACpC,MAAM,mBAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;IAC5C,CAAC;IACD,iBAAiB,EAAE,KAAK,EAAE,EAAU,EAAE,EAAE;QACtC,MAAM,mBAAY,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;IAC9C,CAAC;IAED,SAAS;IACT,mBAAmB,EAAE,KAAK,EAAE,KAAa,EAAE,IAAc,EAAE,EAAE;QAC3D,MAAM,OAAO,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;QACzC,MAAM,uBAAc,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,OAAO,IAAI,EAAE,EAAE,OAAO,CAAC,CAAC;IACrE,CAAC;IACD,iBAAiB,EAAE,KAAK,IAAI,EAAE;QAC5B,MAAM,uBAAc,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAChC,CAAC;IAED,UAAU;IACV,oBAAoB,EAAE,KAAK,EAAE,MAAc,EAAE,IAAc,EAAE,EAAE;QAC7D,MAAM,OAAO,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC;QAC1C,MAAM,yBAAe,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChD,CAAC;IACD,kBAAkB,EAAE,KAAK,EAAE,IAAc,EAAE,EAAE;QAC3C,MAAM,OAAO,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC;QAC1C,MAAM,yBAAe,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACtC,CAAC;IAED,OAAO;IACP,iBAAiB,EAAE,KAAK,EAAE,IAAY,EAAE,IAAc,EAAE,EAAE;QACxD,MAAM,OAAO,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;QACvC,MAAM,mBAAY,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC3C,CAAC;IACD,eAAe,EAAE,KAAK,IAAI,EAAE;QAC1B,MAAM,mBAAY,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC9B,CAAC;IAED,WAAW;IACX,qBAAqB,EAAE,KAAK,EAAE,KAAa,EAAE,IAAc,EAAE,EAAE;QAC7D,MAAM,OAAO,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC;QAC3C,MAAM,2BAAgB,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAChD,CAAC;IACD,mBAAmB,EAAE,KAAK,IAAI,EAAE;QAC9B,MAAM,2BAAgB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAClC,CAAC;IAED,SAAS;IACT,iBAAiB,EAAE,KAAK,IAAI,EAAE;QAC5B,MAAM,IAAA,mBAAU,GAAE,CAAC;IACrB,CAAC;IACD,kBAAkB,EAAE,KAAK,EAAE,QAAgB,EAAE,IAAc,EAAE,EAAE;QAC7D,MAAM,OAAO,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;QACzC,MAAM,IAAA,mBAAU,EAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACtC,CAAC;CACF,CAAC;AAEF,2CAA2C;AAE3C,SAAS,gBAAgB,CAAC,IAAc;IACtC,MAAM,OAAO,GAAwC,EAAE,CAAC;IACxD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,OAAO,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;YAAE,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QAChE,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,YAAY,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;YAAE,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;IAC5E,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,kBAAkB,CAAC,IAAc;IACxC,MAAM,OAAO,GAAuD,EAAE,CAAC;IACvE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,WAAW,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;YAAE,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QACxE,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;YAAE,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QAClE,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;YAAE,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;IACpE,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,mBAAmB,CAAC,IAAc;IACzC,MAAM,OAAO,GAAwD,EAAE,CAAC;IACxE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;YAAE,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QAClE,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,YAAY,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;YAAE,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QAC1E,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;YAAE,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;IACpE,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAc;IACtC,MAAM,OAAO,GAA8D,EAAE,CAAC;IAC9E,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,YAAY,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;YAAE,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QAC1E,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,UAAU,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;YAAE,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QACtE,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,YAAY,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;YAAE,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;IAC5E,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,oBAAoB,CAAC,IAAc;IAC1C,MAAM,OAAO,GAAoD,EAAE,CAAC;IACpE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,SAAS,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;YAAE,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QACpE,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,OAAO,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;YAAE,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QAChE,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;YAAE,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;IACpE,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,kBAAkB,CAAC,IAAc;IACxC,MAAM,OAAO,GAA6C,EAAE,CAAC;IAC7D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;YAAE,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QACvE,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,MAAM,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;YAAE,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;IACrE,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,sCAAsC;AAEtC,SAAS,UAAU;IACjB,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2Bb,CAAC,CAAC;AACH,CAAC;AAED,SAAS,IAAI;IACX,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAEnC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QAClE,UAAU,EAAE,CAAC;QACb,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,0DAA0D;IAC1D,IAAI,UAAkB,CAAC;IACvB,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,KAAK,EAAE,CAAC;QAC3C,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC9B,CAAC;SAAM,CAAC;QACN,UAAU,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACvB,CAAC;IAED,MAAM,OAAO,GAAG,QAAQ,CAAC,UAAU,CAAC,CAAC;IAErC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,oBAAoB,UAAU,EAAE,CAAC,CAAC;QAChD,UAAU,EAAE,CAAC;QACb,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAClC,OAAO,CAAC,GAAG,WAAW,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;QACtC,OAAO,CAAC,KAAK,CAAC,iBAAiB,EAAE,KAAK,CAAC,CAAC;QACxC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;AACL,CAAC;AAED,IAAI,EAAE,CAAC"}
|