@hedgehog-finance/hedgehog-plugin 1.0.19 → 1.0.21
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/dist/index.d.ts +1 -1
- package/dist/src/channel.js +143 -4
- package/dist/src/channel.js.map +1 -1
- package/dist/src/core/database.js +156 -0
- package/dist/src/core/database.js.map +1 -1
- package/dist/src/features/index.js +9 -1
- package/dist/src/features/index.js.map +1 -1
- package/dist/src/features/notes/schema.d.ts +84 -0
- package/dist/src/features/notes/schema.js +40 -0
- package/dist/src/features/notes/schema.js.map +1 -0
- package/dist/src/features/notes/tools.d.ts +11 -0
- package/dist/src/features/notes/tools.js +297 -0
- package/dist/src/features/notes/tools.js.map +1 -0
- package/dist/src/features/pluginInfo/tools.d.ts +11 -0
- package/dist/src/features/pluginInfo/tools.js +49 -0
- package/dist/src/features/pluginInfo/tools.js.map +1 -0
- package/dist/src/features/profileLibrary/schema.d.ts +29 -0
- package/dist/src/features/profileLibrary/schema.js +21 -0
- package/dist/src/features/profileLibrary/schema.js.map +1 -0
- package/dist/src/features/profileLibrary/tools.d.ts +11 -0
- package/dist/src/features/profileLibrary/tools.js +163 -0
- package/dist/src/features/profileLibrary/tools.js.map +1 -0
- package/dist/src/features/stockAnalysis/schema.d.ts +61 -0
- package/dist/src/features/stockAnalysis/schema.js +30 -0
- package/dist/src/features/stockAnalysis/schema.js.map +1 -0
- package/dist/src/features/stockAnalysis/tools.d.ts +20 -0
- package/dist/src/features/stockAnalysis/tools.js +138 -0
- package/dist/src/features/stockAnalysis/tools.js.map +1 -0
- package/dist/src/features/watchlist/logic.js +7 -60
- package/dist/src/features/watchlist/logic.js.map +1 -1
- package/dist/src/features/watchlist/tools.js +61 -26
- package/dist/src/features/watchlist/tools.js.map +1 -1
- package/dist/src/types.d.ts +1 -1
- package/package.json +5 -5
- package/src/channel.ts +150 -4
- package/src/core/database.ts +155 -0
- package/src/features/index.ts +9 -1
- package/src/features/notes/schema.ts +75 -0
- package/src/features/notes/tools.ts +352 -0
- package/src/features/pluginInfo/tools.ts +63 -0
- package/src/features/profileLibrary/schema.ts +35 -0
- package/src/features/profileLibrary/tools.ts +194 -0
- package/src/features/stockAnalysis/schema.ts +60 -0
- package/src/features/stockAnalysis/tools.ts +192 -0
- package/src/features/watchlist/logic.ts +7 -63
- package/src/features/watchlist/tools.ts +83 -48
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { z } from "openclaw/plugin-sdk/zod";
|
|
2
|
+
export declare const AddStockNoteParamsSchema: z.ZodObject<{
|
|
3
|
+
watchlistId: z.ZodOptional<z.ZodString>;
|
|
4
|
+
stockCode: z.ZodOptional<z.ZodString>;
|
|
5
|
+
exchange: z.ZodOptional<z.ZodEnum<{
|
|
6
|
+
SSE: "SSE";
|
|
7
|
+
SZSE: "SZSE";
|
|
8
|
+
HKEX: "HKEX";
|
|
9
|
+
NASDAQ: "NASDAQ";
|
|
10
|
+
NYSE: "NYSE";
|
|
11
|
+
AMEX: "AMEX";
|
|
12
|
+
}>>;
|
|
13
|
+
note: z.ZodString;
|
|
14
|
+
profileLibraryIds: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
15
|
+
id: z.ZodString;
|
|
16
|
+
title: z.ZodString;
|
|
17
|
+
}, z.core.$strip>>>;
|
|
18
|
+
}, z.core.$strip>;
|
|
19
|
+
export type AddStockNoteParams = z.infer<typeof AddStockNoteParamsSchema>;
|
|
20
|
+
export declare const DeleteStockNoteParamsSchema: z.ZodObject<{
|
|
21
|
+
id: z.ZodString;
|
|
22
|
+
}, z.core.$strip>;
|
|
23
|
+
export type DeleteStockNoteParams = z.infer<typeof DeleteStockNoteParamsSchema>;
|
|
24
|
+
export declare const UpdateStockNoteParamsSchema: z.ZodObject<{
|
|
25
|
+
id: z.ZodString;
|
|
26
|
+
watchlistId: z.ZodOptional<z.ZodString>;
|
|
27
|
+
stockCode: z.ZodOptional<z.ZodString>;
|
|
28
|
+
exchange: z.ZodOptional<z.ZodEnum<{
|
|
29
|
+
SSE: "SSE";
|
|
30
|
+
SZSE: "SZSE";
|
|
31
|
+
HKEX: "HKEX";
|
|
32
|
+
NASDAQ: "NASDAQ";
|
|
33
|
+
NYSE: "NYSE";
|
|
34
|
+
AMEX: "AMEX";
|
|
35
|
+
}>>;
|
|
36
|
+
note: z.ZodOptional<z.ZodString>;
|
|
37
|
+
profileLibraryIds: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
38
|
+
id: z.ZodString;
|
|
39
|
+
title: z.ZodString;
|
|
40
|
+
}, z.core.$strip>>>;
|
|
41
|
+
}, z.core.$strip>;
|
|
42
|
+
export type UpdateStockNoteParams = z.infer<typeof UpdateStockNoteParamsSchema>;
|
|
43
|
+
export declare const GetStockNoteByIdParamsSchema: z.ZodObject<{
|
|
44
|
+
id: z.ZodString;
|
|
45
|
+
}, z.core.$strip>;
|
|
46
|
+
export type GetStockNoteByIdParams = z.infer<typeof GetStockNoteByIdParamsSchema>;
|
|
47
|
+
export declare const QueryStockNotesParamsSchema: z.ZodObject<{
|
|
48
|
+
watchlistId: z.ZodOptional<z.ZodString>;
|
|
49
|
+
stockCode: z.ZodOptional<z.ZodString>;
|
|
50
|
+
exchange: z.ZodOptional<z.ZodEnum<{
|
|
51
|
+
SSE: "SSE";
|
|
52
|
+
SZSE: "SZSE";
|
|
53
|
+
HKEX: "HKEX";
|
|
54
|
+
NASDAQ: "NASDAQ";
|
|
55
|
+
NYSE: "NYSE";
|
|
56
|
+
AMEX: "AMEX";
|
|
57
|
+
}>>;
|
|
58
|
+
keyword: z.ZodOptional<z.ZodString>;
|
|
59
|
+
page: z.ZodOptional<z.ZodNumber>;
|
|
60
|
+
pageSize: z.ZodOptional<z.ZodNumber>;
|
|
61
|
+
}, z.core.$strip>;
|
|
62
|
+
export type QueryStockNotesParams = z.infer<typeof QueryStockNotesParamsSchema>;
|
|
63
|
+
export interface StockNoteRow {
|
|
64
|
+
id: string;
|
|
65
|
+
watchlistId: string;
|
|
66
|
+
stockCode: string;
|
|
67
|
+
stockName: string;
|
|
68
|
+
exchange: string;
|
|
69
|
+
market: string;
|
|
70
|
+
note: string;
|
|
71
|
+
createdAt: string;
|
|
72
|
+
updatedAt: string;
|
|
73
|
+
}
|
|
74
|
+
export interface StockNoteProfileLibraryRow {
|
|
75
|
+
noteId: string;
|
|
76
|
+
id: string;
|
|
77
|
+
title: string;
|
|
78
|
+
}
|
|
79
|
+
export interface StockNote extends StockNoteRow {
|
|
80
|
+
profileLibraries: {
|
|
81
|
+
id: string;
|
|
82
|
+
title: string;
|
|
83
|
+
}[];
|
|
84
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { z } from "openclaw/plugin-sdk/zod";
|
|
2
|
+
const ExchangeEnum = z.enum(["SSE", "SZSE", "NASDAQ", "NYSE", "AMEX", "HKEX"]);
|
|
3
|
+
const ProfileLibraryInputSchema = z.object({
|
|
4
|
+
id: z.string().trim().min(1).describe("资料库 ID"),
|
|
5
|
+
title: z.string().trim().min(1).describe("资料库标题")
|
|
6
|
+
});
|
|
7
|
+
export const AddStockNoteParamsSchema = z.object({
|
|
8
|
+
watchlistId: z.string().trim().min(1).optional().describe("自选股 ID,优先使用该字段绑定股票"),
|
|
9
|
+
stockCode: z.string().trim().min(1).optional().describe("股票代码;未传 watchlistId 时需与 exchange 一起定位股票"),
|
|
10
|
+
exchange: ExchangeEnum.optional().describe("交易所;未传 watchlistId 时需与 stockCode 一起定位股票"),
|
|
11
|
+
note: z.string().trim().min(1).max(200).describe("笔记内容,200 字以内"),
|
|
12
|
+
profileLibraryIds: z.array(ProfileLibraryInputSchema).optional().describe("关联资料库列表,格式为 { id, title }")
|
|
13
|
+
}).refine((value) => Boolean(value.watchlistId || (value.stockCode && value.exchange)), {
|
|
14
|
+
message: "watchlistId 或 stockCode + exchange 必须传一个"
|
|
15
|
+
});
|
|
16
|
+
export const DeleteStockNoteParamsSchema = z.object({
|
|
17
|
+
id: z.string().trim().min(1).describe("笔记 ID")
|
|
18
|
+
});
|
|
19
|
+
export const UpdateStockNoteParamsSchema = z.object({
|
|
20
|
+
id: z.string().trim().min(1).describe("笔记 ID"),
|
|
21
|
+
watchlistId: z.string().trim().min(1).optional().describe("自选股 ID;传入则重新绑定股票"),
|
|
22
|
+
stockCode: z.string().trim().min(1).optional().describe("股票代码;与 exchange 一起传入可重新绑定股票"),
|
|
23
|
+
exchange: ExchangeEnum.optional().describe("交易所;与 stockCode 一起传入可重新绑定股票"),
|
|
24
|
+
note: z.string().trim().min(1).max(200).optional().describe("笔记内容,200 字以内"),
|
|
25
|
+
profileLibraryIds: z.array(ProfileLibraryInputSchema).optional().describe("关联资料库列表,格式为 { id, title };传入则覆盖原有关联")
|
|
26
|
+
}).refine((value) => !(value.stockCode && !value.exchange) && !(!value.stockCode && value.exchange), {
|
|
27
|
+
message: "stockCode 与 exchange 必须同时传入"
|
|
28
|
+
});
|
|
29
|
+
export const GetStockNoteByIdParamsSchema = z.object({
|
|
30
|
+
id: z.string().trim().min(1).describe("笔记 ID")
|
|
31
|
+
});
|
|
32
|
+
export const QueryStockNotesParamsSchema = z.object({
|
|
33
|
+
watchlistId: z.string().trim().min(1).optional().describe("自选股 ID"),
|
|
34
|
+
stockCode: z.string().trim().min(1).optional().describe("股票代码"),
|
|
35
|
+
exchange: ExchangeEnum.optional().describe("交易所"),
|
|
36
|
+
keyword: z.string().trim().optional().describe("模糊查询关键词,可匹配股票代码、股票名称或笔记内容"),
|
|
37
|
+
page: z.number().int().min(1).optional().describe("页码,从 1 开始,默认 1"),
|
|
38
|
+
pageSize: z.number().int().min(1).max(100).optional().describe("每页数量,默认 20,最大 100")
|
|
39
|
+
});
|
|
40
|
+
//# sourceMappingURL=schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../../src/features/notes/schema.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
interface RuntimeTool {
|
|
2
|
+
name: string;
|
|
3
|
+
description: string;
|
|
4
|
+
parameters: unknown;
|
|
5
|
+
registerTool?: boolean;
|
|
6
|
+
execute(params: unknown, ctx: {
|
|
7
|
+
userId: string;
|
|
8
|
+
}): Promise<string>;
|
|
9
|
+
}
|
|
10
|
+
export declare const noteTools: Record<string, RuntimeTool>;
|
|
11
|
+
export {};
|
|
@@ -0,0 +1,297 @@
|
|
|
1
|
+
import { randomUUID } from "node:crypto";
|
|
2
|
+
import { getDB } from "../../core/database.js";
|
|
3
|
+
import { AddStockNoteParamsSchema, DeleteStockNoteParamsSchema, GetStockNoteByIdParamsSchema, QueryStockNotesParamsSchema, UpdateStockNoteParamsSchema } from "./schema.js";
|
|
4
|
+
function escapeLikePattern(value) {
|
|
5
|
+
return value.replace(/[\\%_]/g, (char) => `\\${char}`);
|
|
6
|
+
}
|
|
7
|
+
function normalizePagination(args) {
|
|
8
|
+
const page = args.page ?? 1;
|
|
9
|
+
const pageSize = args.pageSize ?? 20;
|
|
10
|
+
return {
|
|
11
|
+
page,
|
|
12
|
+
pageSize,
|
|
13
|
+
offset: (page - 1) * pageSize
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
function uniqueProfileLibraries(libraries) {
|
|
17
|
+
const byId = new Map();
|
|
18
|
+
for (const library of libraries || []) {
|
|
19
|
+
const id = library.id.trim();
|
|
20
|
+
const title = library.title.trim();
|
|
21
|
+
if (id && title && !byId.has(id)) {
|
|
22
|
+
byId.set(id, title);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
return Array.from(byId, ([id, title]) => ({ id, title }));
|
|
26
|
+
}
|
|
27
|
+
function runInTransaction(db, task) {
|
|
28
|
+
const savepoint = `note_tx_${randomUUID().replace(/-/g, "")}`;
|
|
29
|
+
db.exec(`SAVEPOINT ${savepoint}`);
|
|
30
|
+
try {
|
|
31
|
+
const result = task();
|
|
32
|
+
db.exec(`RELEASE SAVEPOINT ${savepoint}`);
|
|
33
|
+
return result;
|
|
34
|
+
}
|
|
35
|
+
catch (e) {
|
|
36
|
+
db.exec(`ROLLBACK TO SAVEPOINT ${savepoint}`);
|
|
37
|
+
db.exec(`RELEASE SAVEPOINT ${savepoint}`);
|
|
38
|
+
throw e;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
function getNoteSelectSql(whereSql) {
|
|
42
|
+
return `
|
|
43
|
+
SELECT
|
|
44
|
+
sn.id,
|
|
45
|
+
sn.watchlistId,
|
|
46
|
+
w.stockCode,
|
|
47
|
+
w.stockName,
|
|
48
|
+
w.exchange,
|
|
49
|
+
w.market,
|
|
50
|
+
sn.note,
|
|
51
|
+
sn.createdAt,
|
|
52
|
+
sn.updatedAt
|
|
53
|
+
FROM stock_notes sn
|
|
54
|
+
JOIN watchlist w ON w.id = sn.watchlistId AND w.userId = sn.userId
|
|
55
|
+
WHERE ${whereSql}
|
|
56
|
+
`;
|
|
57
|
+
}
|
|
58
|
+
function resolveWatchlistStock(db, userId, args) {
|
|
59
|
+
if (args.watchlistId) {
|
|
60
|
+
return db.prepare(`
|
|
61
|
+
SELECT id, stockCode, stockName, exchange, market
|
|
62
|
+
FROM watchlist
|
|
63
|
+
WHERE id = ? AND userId = ? AND isDeleted = 0
|
|
64
|
+
`).get(args.watchlistId.trim(), userId) || null;
|
|
65
|
+
}
|
|
66
|
+
if (args.stockCode && args.exchange) {
|
|
67
|
+
return db.prepare(`
|
|
68
|
+
SELECT id, stockCode, stockName, exchange, market
|
|
69
|
+
FROM watchlist
|
|
70
|
+
WHERE userId = ? AND stockCode = ? AND exchange = ? AND isDeleted = 0
|
|
71
|
+
`).get(userId, args.stockCode.trim(), args.exchange) || null;
|
|
72
|
+
}
|
|
73
|
+
return null;
|
|
74
|
+
}
|
|
75
|
+
function attachProfileLibraries(db, userId, rows) {
|
|
76
|
+
if (rows.length === 0)
|
|
77
|
+
return [];
|
|
78
|
+
const noteIds = rows.map(row => row.id);
|
|
79
|
+
const libraryRows = db.prepare(`
|
|
80
|
+
SELECT npl.noteId, npl.profileLibraryId AS id, npl.title
|
|
81
|
+
FROM stock_note_profile_libraries npl
|
|
82
|
+
WHERE npl.userId = ? AND npl.noteId IN (${noteIds.map(() => "?").join(",")})
|
|
83
|
+
ORDER BY npl.noteId, npl.createdAt ASC
|
|
84
|
+
`).all(userId, ...noteIds);
|
|
85
|
+
const librariesByNoteId = new Map();
|
|
86
|
+
for (const row of libraryRows) {
|
|
87
|
+
const list = librariesByNoteId.get(row.noteId) || [];
|
|
88
|
+
list.push({ id: row.id, title: row.title });
|
|
89
|
+
librariesByNoteId.set(row.noteId, list);
|
|
90
|
+
}
|
|
91
|
+
return rows.map(row => {
|
|
92
|
+
const libs = librariesByNoteId.get(row.id) || [];
|
|
93
|
+
return {
|
|
94
|
+
...row,
|
|
95
|
+
profileLibraries: libs
|
|
96
|
+
};
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
function successWithPagination(data, page, pageSize, total) {
|
|
100
|
+
return JSON.stringify({
|
|
101
|
+
success: true,
|
|
102
|
+
data,
|
|
103
|
+
pagination: {
|
|
104
|
+
page,
|
|
105
|
+
pageSize,
|
|
106
|
+
total,
|
|
107
|
+
totalPages: Math.ceil(total / pageSize)
|
|
108
|
+
}
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
export const noteTools = {
|
|
112
|
+
add_stock_note: {
|
|
113
|
+
name: "add_stock_note",
|
|
114
|
+
description: "新增股票笔记,笔记内容 200 字以内,可关联资料库列表;profileLibraryIds 格式为 { id, title }",
|
|
115
|
+
parameters: AddStockNoteParamsSchema,
|
|
116
|
+
registerTool: false,
|
|
117
|
+
execute: async (args, ctx) => {
|
|
118
|
+
try {
|
|
119
|
+
const db = getDB();
|
|
120
|
+
const uId = String(ctx.userId);
|
|
121
|
+
const id = randomUUID();
|
|
122
|
+
const stock = resolveWatchlistStock(db, uId, args);
|
|
123
|
+
if (!stock) {
|
|
124
|
+
return JSON.stringify({ success: false, error: "股票不存在或未在自选列表中" });
|
|
125
|
+
}
|
|
126
|
+
const profileLibraries = uniqueProfileLibraries(args.profileLibraryIds);
|
|
127
|
+
runInTransaction(db, () => {
|
|
128
|
+
db.prepare(`
|
|
129
|
+
INSERT INTO stock_notes (id, userId, watchlistId, note)
|
|
130
|
+
VALUES (?, ?, ?, ?)
|
|
131
|
+
`).run(id, uId, stock.id, args.note);
|
|
132
|
+
const insertRelation = db.prepare(`
|
|
133
|
+
INSERT INTO stock_note_profile_libraries (id, noteId, userId, profileLibraryId, title)
|
|
134
|
+
VALUES (?, ?, ?, ?, ?)
|
|
135
|
+
`);
|
|
136
|
+
profileLibraries.forEach((profileLibrary) => {
|
|
137
|
+
insertRelation.run(randomUUID(), id, uId, profileLibrary.id, profileLibrary.title);
|
|
138
|
+
});
|
|
139
|
+
});
|
|
140
|
+
const row = db.prepare(getNoteSelectSql("sn.id = ? AND sn.userId = ?")).get(id, uId);
|
|
141
|
+
return JSON.stringify({ success: true, data: attachProfileLibraries(db, uId, [row])[0] });
|
|
142
|
+
}
|
|
143
|
+
catch (e) {
|
|
144
|
+
return JSON.stringify({ success: false, error: e.message });
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
},
|
|
148
|
+
delete_stock_note: {
|
|
149
|
+
name: "delete_stock_note",
|
|
150
|
+
description: "删除股票笔记,并清理笔记关联资料库记录",
|
|
151
|
+
parameters: DeleteStockNoteParamsSchema,
|
|
152
|
+
registerTool: false,
|
|
153
|
+
execute: async (args, ctx) => {
|
|
154
|
+
try {
|
|
155
|
+
const db = getDB();
|
|
156
|
+
const uId = String(ctx.userId);
|
|
157
|
+
const id = args.id.trim();
|
|
158
|
+
const info = runInTransaction(db, () => {
|
|
159
|
+
db.prepare("DELETE FROM stock_note_profile_libraries WHERE noteId = ? AND userId = ?").run(id, uId);
|
|
160
|
+
return db.prepare("DELETE FROM stock_notes WHERE id = ? AND userId = ?").run(id, uId);
|
|
161
|
+
});
|
|
162
|
+
return JSON.stringify({ success: info.changes > 0 });
|
|
163
|
+
}
|
|
164
|
+
catch (e) {
|
|
165
|
+
return JSON.stringify({ success: false, error: e.message });
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
},
|
|
169
|
+
update_stock_note: {
|
|
170
|
+
name: "update_stock_note",
|
|
171
|
+
description: "修改股票笔记;传入 profileLibraryIds 时会覆盖原有关联资料库列表;profileLibraryIds 格式为 { id, title }",
|
|
172
|
+
parameters: UpdateStockNoteParamsSchema,
|
|
173
|
+
registerTool: false,
|
|
174
|
+
execute: async (args, ctx) => {
|
|
175
|
+
try {
|
|
176
|
+
const db = getDB();
|
|
177
|
+
const uId = String(ctx.userId);
|
|
178
|
+
const id = args.id.trim();
|
|
179
|
+
const existing = db.prepare(`
|
|
180
|
+
SELECT id
|
|
181
|
+
FROM stock_notes
|
|
182
|
+
WHERE id = ? AND userId = ?
|
|
183
|
+
`).get(id, uId);
|
|
184
|
+
if (!existing) {
|
|
185
|
+
return JSON.stringify({ success: false, error: "笔记不存在" });
|
|
186
|
+
}
|
|
187
|
+
const stock = (args.watchlistId || args.stockCode || args.exchange)
|
|
188
|
+
? resolveWatchlistStock(db, uId, args)
|
|
189
|
+
: null;
|
|
190
|
+
if ((args.watchlistId || args.stockCode || args.exchange) && !stock) {
|
|
191
|
+
return JSON.stringify({ success: false, error: "股票不存在或未在自选列表中" });
|
|
192
|
+
}
|
|
193
|
+
const profileLibraries = args.profileLibraryIds === undefined ? undefined : uniqueProfileLibraries(args.profileLibraryIds);
|
|
194
|
+
runInTransaction(db, () => {
|
|
195
|
+
const updates = ["updatedAt = STRFTIME('%Y-%m-%dT%H:%M:%fZ', 'NOW')"];
|
|
196
|
+
const updateParams = [];
|
|
197
|
+
if (stock) {
|
|
198
|
+
updates.unshift("watchlistId = ?");
|
|
199
|
+
updateParams.push(stock.id);
|
|
200
|
+
}
|
|
201
|
+
if (args.note !== undefined) {
|
|
202
|
+
updates.unshift("note = ?");
|
|
203
|
+
updateParams.unshift(args.note);
|
|
204
|
+
}
|
|
205
|
+
db.prepare(`
|
|
206
|
+
UPDATE stock_notes SET ${updates.join(", ")}
|
|
207
|
+
WHERE id = ? AND userId = ?
|
|
208
|
+
`).run(...updateParams, id, uId);
|
|
209
|
+
if (profileLibraries) {
|
|
210
|
+
db.prepare(`
|
|
211
|
+
DELETE FROM stock_note_profile_libraries
|
|
212
|
+
WHERE userId = ? AND noteId = ?
|
|
213
|
+
`).run(uId, id);
|
|
214
|
+
const insertRelation = db.prepare(`
|
|
215
|
+
INSERT INTO stock_note_profile_libraries (id, noteId, userId, profileLibraryId, title)
|
|
216
|
+
VALUES (?, ?, ?, ?, ?)
|
|
217
|
+
`);
|
|
218
|
+
profileLibraries.forEach((profileLibrary) => {
|
|
219
|
+
insertRelation.run(randomUUID(), id, uId, profileLibrary.id, profileLibrary.title);
|
|
220
|
+
});
|
|
221
|
+
}
|
|
222
|
+
});
|
|
223
|
+
const row = db.prepare(getNoteSelectSql("sn.id = ? AND sn.userId = ?")).get(id, uId);
|
|
224
|
+
return JSON.stringify({ success: true, data: attachProfileLibraries(db, uId, [row])[0] });
|
|
225
|
+
}
|
|
226
|
+
catch (e) {
|
|
227
|
+
return JSON.stringify({ success: false, error: e.message });
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
},
|
|
231
|
+
get_stock_note_by_id: {
|
|
232
|
+
name: "get_stock_note_by_id",
|
|
233
|
+
description: "根据 ID 查询股票笔记详情",
|
|
234
|
+
parameters: GetStockNoteByIdParamsSchema,
|
|
235
|
+
registerTool: false,
|
|
236
|
+
execute: async (args, ctx) => {
|
|
237
|
+
try {
|
|
238
|
+
const db = getDB();
|
|
239
|
+
const uId = String(ctx.userId);
|
|
240
|
+
const row = db.prepare(getNoteSelectSql("sn.id = ? AND sn.userId = ?")).get(args.id.trim(), uId);
|
|
241
|
+
return JSON.stringify({ success: true, data: row ? attachProfileLibraries(db, uId, [row])[0] : null });
|
|
242
|
+
}
|
|
243
|
+
catch (e) {
|
|
244
|
+
return JSON.stringify({ success: false, error: e.message });
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
},
|
|
248
|
+
query_stock_notes: {
|
|
249
|
+
name: "query_stock_notes",
|
|
250
|
+
description: "分页查询股票笔记,支持按股票代码、交易所和关键词过滤",
|
|
251
|
+
parameters: QueryStockNotesParamsSchema,
|
|
252
|
+
registerTool: false,
|
|
253
|
+
execute: async (args = {}, ctx) => {
|
|
254
|
+
try {
|
|
255
|
+
const db = getDB();
|
|
256
|
+
const uId = String(ctx.userId);
|
|
257
|
+
const { page, pageSize, offset } = normalizePagination(args);
|
|
258
|
+
const conditions = ["sn.userId = ?", "w.isDeleted = 0"];
|
|
259
|
+
const params = [uId];
|
|
260
|
+
if (args.watchlistId) {
|
|
261
|
+
conditions.push("sn.watchlistId = ?");
|
|
262
|
+
params.push(args.watchlistId);
|
|
263
|
+
}
|
|
264
|
+
if (args.stockCode) {
|
|
265
|
+
conditions.push("w.stockCode = ?");
|
|
266
|
+
params.push(args.stockCode);
|
|
267
|
+
}
|
|
268
|
+
if (args.exchange) {
|
|
269
|
+
conditions.push("w.exchange = ?");
|
|
270
|
+
params.push(args.exchange);
|
|
271
|
+
}
|
|
272
|
+
const keyword = args.keyword?.trim();
|
|
273
|
+
if (keyword) {
|
|
274
|
+
const pattern = `%${escapeLikePattern(keyword)}%`;
|
|
275
|
+
conditions.push("(w.stockCode LIKE ? ESCAPE '\\' OR w.stockName LIKE ? ESCAPE '\\' OR sn.note LIKE ? ESCAPE '\\')");
|
|
276
|
+
params.push(pattern, pattern, pattern);
|
|
277
|
+
}
|
|
278
|
+
const whereSql = conditions.join(" AND ");
|
|
279
|
+
const total = db.prepare(`
|
|
280
|
+
SELECT COUNT(*) AS count
|
|
281
|
+
FROM stock_notes sn
|
|
282
|
+
JOIN watchlist w ON w.id = sn.watchlistId AND w.userId = sn.userId
|
|
283
|
+
WHERE ${whereSql}
|
|
284
|
+
`).get(...params).count;
|
|
285
|
+
const rows = db.prepare(`${getNoteSelectSql(whereSql)}
|
|
286
|
+
ORDER BY sn.updatedAt DESC, sn.createdAt DESC
|
|
287
|
+
LIMIT ? OFFSET ?
|
|
288
|
+
`).all(...params, pageSize, offset);
|
|
289
|
+
return successWithPagination(attachProfileLibraries(db, uId, rows), page, pageSize, total);
|
|
290
|
+
}
|
|
291
|
+
catch (e) {
|
|
292
|
+
return JSON.stringify({ success: false, error: e.message });
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
};
|
|
297
|
+
//# sourceMappingURL=tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../../../../src/features/notes/tools.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
interface RuntimeTool {
|
|
2
|
+
name: string;
|
|
3
|
+
description: string;
|
|
4
|
+
parameters: unknown;
|
|
5
|
+
registerTool?: boolean;
|
|
6
|
+
execute(params: unknown, ctx: {
|
|
7
|
+
userId: string;
|
|
8
|
+
}): Promise<string>;
|
|
9
|
+
}
|
|
10
|
+
export declare const pluginInfoTools: Record<string, RuntimeTool>;
|
|
11
|
+
export {};
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import * as fs from "node:fs";
|
|
2
|
+
import * as path from "node:path";
|
|
3
|
+
import { fileURLToPath } from "node:url";
|
|
4
|
+
import { z } from "openclaw/plugin-sdk/zod";
|
|
5
|
+
const GetPluginVersionParamsSchema = z.object({}).nullish();
|
|
6
|
+
let cachedPluginVersion = null;
|
|
7
|
+
function findPackageJsonPath(startDir) {
|
|
8
|
+
let currentDir = startDir;
|
|
9
|
+
while (true) {
|
|
10
|
+
const candidate = path.join(currentDir, "package.json");
|
|
11
|
+
if (fs.existsSync(candidate))
|
|
12
|
+
return candidate;
|
|
13
|
+
const parentDir = path.dirname(currentDir);
|
|
14
|
+
if (parentDir === currentDir)
|
|
15
|
+
return null;
|
|
16
|
+
currentDir = parentDir;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
function getPluginVersion() {
|
|
20
|
+
if (cachedPluginVersion)
|
|
21
|
+
return cachedPluginVersion;
|
|
22
|
+
const moduleDir = path.dirname(fileURLToPath(import.meta.url));
|
|
23
|
+
const packageJsonPath = findPackageJsonPath(moduleDir);
|
|
24
|
+
if (!packageJsonPath) {
|
|
25
|
+
throw new Error("无法找到插件 package.json");
|
|
26
|
+
}
|
|
27
|
+
const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, "utf-8"));
|
|
28
|
+
if (typeof packageJson.version !== "string" || !packageJson.version.trim()) {
|
|
29
|
+
throw new Error("插件 package.json 缺少有效版本号");
|
|
30
|
+
}
|
|
31
|
+
cachedPluginVersion = packageJson.version.trim();
|
|
32
|
+
return cachedPluginVersion;
|
|
33
|
+
}
|
|
34
|
+
export const pluginInfoTools = {
|
|
35
|
+
get_plugin_version: {
|
|
36
|
+
name: "get_plugin_version",
|
|
37
|
+
description: "获取当前 Hedgehog 插件版本号",
|
|
38
|
+
parameters: GetPluginVersionParamsSchema,
|
|
39
|
+
registerTool: false,
|
|
40
|
+
async execute(params) {
|
|
41
|
+
GetPluginVersionParamsSchema.parse(params);
|
|
42
|
+
return JSON.stringify({
|
|
43
|
+
success: true,
|
|
44
|
+
version: getPluginVersion()
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
//# sourceMappingURL=tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../../../../src/features/pluginInfo/tools.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,CAAC,EAAE,MAAM,yBAAyB,CAAC;AAU5C,MAAM,4BAA4B,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;AAE5D,IAAI,mBAAmB,GAAkB,IAAI,CAAC;AAE9C,SAAS,mBAAmB,CAAC,QAAgB;IAC5C,IAAI,UAAU,GAAG,QAAQ,CAAC;IAE1B,OAAO,IAAI,EAAE,CAAC;QACb,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;QACxD,IAAI,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC;YAAE,OAAO,SAAS,CAAC;QAE/C,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QAC3C,IAAI,SAAS,KAAK,UAAU;YAAE,OAAO,IAAI,CAAC;QAC1C,UAAU,GAAG,SAAS,CAAC;IACxB,CAAC;AACF,CAAC;AAED,SAAS,gBAAgB;IACxB,IAAI,mBAAmB;QAAE,OAAO,mBAAmB,CAAC;IAEpD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IAC/D,MAAM,eAAe,GAAG,mBAAmB,CAAC,SAAS,CAAC,CAAC;IACvD,IAAI,CAAC,eAAe,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;IACxC,CAAC;IAED,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,eAAe,EAAE,OAAO,CAAC,CAA0B,CAAC;IACnG,IAAI,OAAO,WAAW,CAAC,OAAO,KAAK,QAAQ,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;QAC5E,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC5C,CAAC;IAED,mBAAmB,GAAG,WAAW,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;IACjD,OAAO,mBAAmB,CAAC;AAC5B,CAAC;AAED,MAAM,CAAC,MAAM,eAAe,GAAgC;IAC3D,kBAAkB,EAAE;QACnB,IAAI,EAAE,oBAAoB;QAC1B,WAAW,EAAE,qBAAqB;QAClC,UAAU,EAAE,4BAA4B;QACxC,YAAY,EAAE,KAAK;QACnB,KAAK,CAAC,OAAO,CAAC,MAAe;YAC5B,4BAA4B,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAC3C,OAAO,IAAI,CAAC,SAAS,CAAC;gBACrB,OAAO,EAAE,IAAI;gBACb,OAAO,EAAE,gBAAgB,EAAE;aAC3B,CAAC,CAAC;QACJ,CAAC;KACD;CACD,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { z } from "openclaw/plugin-sdk/zod";
|
|
2
|
+
export declare const AddProfileLibraryParamsSchema: z.ZodObject<{
|
|
3
|
+
id: z.ZodOptional<z.ZodString>;
|
|
4
|
+
title: z.ZodString;
|
|
5
|
+
}, z.core.$strip>;
|
|
6
|
+
export type AddProfileLibraryParams = z.infer<typeof AddProfileLibraryParamsSchema>;
|
|
7
|
+
export declare const DeleteProfileLibraryParamsSchema: z.ZodObject<{
|
|
8
|
+
id: z.ZodString;
|
|
9
|
+
}, z.core.$strip>;
|
|
10
|
+
export type DeleteProfileLibraryParams = z.infer<typeof DeleteProfileLibraryParamsSchema>;
|
|
11
|
+
export declare const GetProfileLibraryByIdParamsSchema: z.ZodObject<{
|
|
12
|
+
id: z.ZodString;
|
|
13
|
+
}, z.core.$strip>;
|
|
14
|
+
export type GetProfileLibraryByIdParams = z.infer<typeof GetProfileLibraryByIdParamsSchema>;
|
|
15
|
+
export declare const QueryProfileLibrariesParamsSchema: z.ZodObject<{
|
|
16
|
+
keyword: z.ZodOptional<z.ZodString>;
|
|
17
|
+
page: z.ZodOptional<z.ZodNumber>;
|
|
18
|
+
pageSize: z.ZodOptional<z.ZodNumber>;
|
|
19
|
+
}, z.core.$strip>;
|
|
20
|
+
export type QueryProfileLibrariesParams = z.infer<typeof QueryProfileLibrariesParamsSchema>;
|
|
21
|
+
export declare const GetProfileLibrariesParamsSchema: z.ZodObject<{
|
|
22
|
+
page: z.ZodOptional<z.ZodNumber>;
|
|
23
|
+
pageSize: z.ZodOptional<z.ZodNumber>;
|
|
24
|
+
}, z.core.$strip>;
|
|
25
|
+
export type GetProfileLibrariesParams = z.infer<typeof GetProfileLibrariesParamsSchema>;
|
|
26
|
+
export interface ProfileLibraryRow {
|
|
27
|
+
id: string;
|
|
28
|
+
title: string;
|
|
29
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { z } from "openclaw/plugin-sdk/zod";
|
|
2
|
+
export const AddProfileLibraryParamsSchema = z.object({
|
|
3
|
+
id: z.string().trim().min(1).optional().describe("资料库 ID,不传则自动生成"),
|
|
4
|
+
title: z.string().trim().min(1).describe("资料库标题")
|
|
5
|
+
});
|
|
6
|
+
export const DeleteProfileLibraryParamsSchema = z.object({
|
|
7
|
+
id: z.string().trim().min(1).describe("资料库 ID")
|
|
8
|
+
});
|
|
9
|
+
export const GetProfileLibraryByIdParamsSchema = z.object({
|
|
10
|
+
id: z.string().trim().min(1).describe("资料库 ID")
|
|
11
|
+
});
|
|
12
|
+
export const QueryProfileLibrariesParamsSchema = z.object({
|
|
13
|
+
keyword: z.string().trim().optional().describe("模糊查询关键词,可匹配标题或 ID"),
|
|
14
|
+
page: z.number().int().min(1).optional().describe("页码,从 1 开始,默认 1"),
|
|
15
|
+
pageSize: z.number().int().min(1).max(100).optional().describe("每页数量,默认 20,最大 100")
|
|
16
|
+
});
|
|
17
|
+
export const GetProfileLibrariesParamsSchema = z.object({
|
|
18
|
+
page: z.number().int().min(1).optional().describe("页码,从 1 开始,默认 1"),
|
|
19
|
+
pageSize: z.number().int().min(1).max(100).optional().describe("每页数量,默认 20,最大 100")
|
|
20
|
+
});
|
|
21
|
+
//# sourceMappingURL=schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../../src/features/profileLibrary/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,yBAAyB,CAAC;AAE5C,MAAM,CAAC,MAAM,6BAA6B,GAAG,CAAC,CAAC,MAAM,CAAC;IACrD,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gBAAgB,CAAC;IAClE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC;CACjD,CAAC,CAAC;AAGH,MAAM,CAAC,MAAM,gCAAgC,GAAG,CAAC,CAAC,MAAM,CAAC;IACxD,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC;CAC/C,CAAC,CAAC;AAGH,MAAM,CAAC,MAAM,iCAAiC,GAAG,CAAC,CAAC,MAAM,CAAC;IACzD,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC;CAC/C,CAAC,CAAC;AAGH,MAAM,CAAC,MAAM,iCAAiC,GAAG,CAAC,CAAC,MAAM,CAAC;IACzD,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC;IACnE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gBAAgB,CAAC;IACnE,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC;CACnF,CAAC,CAAC;AAGH,MAAM,CAAC,MAAM,+BAA+B,GAAG,CAAC,CAAC,MAAM,CAAC;IACvD,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gBAAgB,CAAC;IACnE,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC;CACnF,CAAC,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
interface RuntimeTool {
|
|
2
|
+
name: string;
|
|
3
|
+
description: string;
|
|
4
|
+
parameters: unknown;
|
|
5
|
+
registerTool?: boolean;
|
|
6
|
+
execute(params: unknown, ctx: {
|
|
7
|
+
userId: string;
|
|
8
|
+
}): Promise<string>;
|
|
9
|
+
}
|
|
10
|
+
export declare const profileLibraryTools: Record<string, RuntimeTool>;
|
|
11
|
+
export {};
|