flashclaw 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (138) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +305 -0
  3. package/config/plugins.json +23 -0
  4. package/dist/agent-runner.d.ts +103 -0
  5. package/dist/agent-runner.d.ts.map +1 -0
  6. package/dist/agent-runner.js +530 -0
  7. package/dist/agent-runner.js.map +1 -0
  8. package/dist/cli.d.ts +7 -0
  9. package/dist/cli.d.ts.map +1 -0
  10. package/dist/cli.js +497 -0
  11. package/dist/cli.js.map +1 -0
  12. package/dist/commands.d.ts +68 -0
  13. package/dist/commands.d.ts.map +1 -0
  14. package/dist/commands.js +252 -0
  15. package/dist/commands.js.map +1 -0
  16. package/dist/config-schema.d.ts +21 -0
  17. package/dist/config-schema.d.ts.map +1 -0
  18. package/dist/config-schema.js +26 -0
  19. package/dist/config-schema.js.map +1 -0
  20. package/dist/config.d.ts +11 -0
  21. package/dist/config.d.ts.map +1 -0
  22. package/dist/config.js +36 -0
  23. package/dist/config.js.map +1 -0
  24. package/dist/core/api-client.d.ts +236 -0
  25. package/dist/core/api-client.d.ts.map +1 -0
  26. package/dist/core/api-client.js +369 -0
  27. package/dist/core/api-client.js.map +1 -0
  28. package/dist/core/memory.d.ts +291 -0
  29. package/dist/core/memory.d.ts.map +1 -0
  30. package/dist/core/memory.js +754 -0
  31. package/dist/core/memory.js.map +1 -0
  32. package/dist/core/model-capabilities.d.ts +45 -0
  33. package/dist/core/model-capabilities.d.ts.map +1 -0
  34. package/dist/core/model-capabilities.js +85 -0
  35. package/dist/core/model-capabilities.js.map +1 -0
  36. package/dist/db.d.ts +103 -0
  37. package/dist/db.d.ts.map +1 -0
  38. package/dist/db.js +380 -0
  39. package/dist/db.js.map +1 -0
  40. package/dist/errors.d.ts +22 -0
  41. package/dist/errors.d.ts.map +1 -0
  42. package/dist/errors.js +44 -0
  43. package/dist/errors.js.map +1 -0
  44. package/dist/health.d.ts +27 -0
  45. package/dist/health.d.ts.map +1 -0
  46. package/dist/health.js +55 -0
  47. package/dist/health.js.map +1 -0
  48. package/dist/index.d.ts +11 -0
  49. package/dist/index.d.ts.map +1 -0
  50. package/dist/index.js +1181 -0
  51. package/dist/index.js.map +1 -0
  52. package/dist/logger.d.ts +9 -0
  53. package/dist/logger.d.ts.map +1 -0
  54. package/dist/logger.js +19 -0
  55. package/dist/logger.js.map +1 -0
  56. package/dist/message-queue.d.ts +69 -0
  57. package/dist/message-queue.d.ts.map +1 -0
  58. package/dist/message-queue.js +198 -0
  59. package/dist/message-queue.js.map +1 -0
  60. package/dist/metrics.d.ts +46 -0
  61. package/dist/metrics.d.ts.map +1 -0
  62. package/dist/metrics.js +101 -0
  63. package/dist/metrics.js.map +1 -0
  64. package/dist/paths.d.ts +81 -0
  65. package/dist/paths.d.ts.map +1 -0
  66. package/dist/paths.js +127 -0
  67. package/dist/paths.js.map +1 -0
  68. package/dist/plugins/index.d.ts +9 -0
  69. package/dist/plugins/index.d.ts.map +1 -0
  70. package/dist/plugins/index.js +13 -0
  71. package/dist/plugins/index.js.map +1 -0
  72. package/dist/plugins/installer.d.ts +120 -0
  73. package/dist/plugins/installer.d.ts.map +1 -0
  74. package/dist/plugins/installer.js +1008 -0
  75. package/dist/plugins/installer.js.map +1 -0
  76. package/dist/plugins/loader.d.ts +37 -0
  77. package/dist/plugins/loader.d.ts.map +1 -0
  78. package/dist/plugins/loader.js +429 -0
  79. package/dist/plugins/loader.js.map +1 -0
  80. package/dist/plugins/manager.d.ts +72 -0
  81. package/dist/plugins/manager.d.ts.map +1 -0
  82. package/dist/plugins/manager.js +187 -0
  83. package/dist/plugins/manager.js.map +1 -0
  84. package/dist/plugins/types.d.ts +101 -0
  85. package/dist/plugins/types.d.ts.map +1 -0
  86. package/dist/plugins/types.js +12 -0
  87. package/dist/plugins/types.js.map +1 -0
  88. package/dist/session-tracker.d.ts +81 -0
  89. package/dist/session-tracker.d.ts.map +1 -0
  90. package/dist/session-tracker.js +228 -0
  91. package/dist/session-tracker.js.map +1 -0
  92. package/dist/task-scheduler.d.ts +47 -0
  93. package/dist/task-scheduler.d.ts.map +1 -0
  94. package/dist/task-scheduler.js +331 -0
  95. package/dist/task-scheduler.js.map +1 -0
  96. package/dist/types.d.ts +57 -0
  97. package/dist/types.d.ts.map +1 -0
  98. package/dist/types.js +2 -0
  99. package/dist/types.js.map +1 -0
  100. package/dist/utils/env-substitute.d.ts +63 -0
  101. package/dist/utils/env-substitute.d.ts.map +1 -0
  102. package/dist/utils/env-substitute.js +133 -0
  103. package/dist/utils/env-substitute.js.map +1 -0
  104. package/dist/utils/log-rotate.d.ts +19 -0
  105. package/dist/utils/log-rotate.d.ts.map +1 -0
  106. package/dist/utils/log-rotate.js +85 -0
  107. package/dist/utils/log-rotate.js.map +1 -0
  108. package/dist/utils/rate-limiter.d.ts +38 -0
  109. package/dist/utils/rate-limiter.d.ts.map +1 -0
  110. package/dist/utils/rate-limiter.js +79 -0
  111. package/dist/utils/rate-limiter.js.map +1 -0
  112. package/dist/utils/retry.d.ts +10 -0
  113. package/dist/utils/retry.d.ts.map +1 -0
  114. package/dist/utils/retry.js +47 -0
  115. package/dist/utils/retry.js.map +1 -0
  116. package/dist/utils.d.ts +86 -0
  117. package/dist/utils.d.ts.map +1 -0
  118. package/dist/utils.js +218 -0
  119. package/dist/utils.js.map +1 -0
  120. package/package.json +78 -0
  121. package/plugins/cancel-task/index.ts +161 -0
  122. package/plugins/cancel-task/plugin.json +9 -0
  123. package/plugins/feishu/index.ts +944 -0
  124. package/plugins/feishu/plugin.json +29 -0
  125. package/plugins/list-tasks/index.ts +150 -0
  126. package/plugins/list-tasks/plugin.json +9 -0
  127. package/plugins/memory/index.ts +190 -0
  128. package/plugins/memory/plugin.json +7 -0
  129. package/plugins/pause-task/index.ts +95 -0
  130. package/plugins/pause-task/plugin.json +8 -0
  131. package/plugins/register-group/index.ts +147 -0
  132. package/plugins/register-group/plugin.json +7 -0
  133. package/plugins/resume-task/index.ts +92 -0
  134. package/plugins/resume-task/plugin.json +8 -0
  135. package/plugins/schedule-task/index.ts +248 -0
  136. package/plugins/schedule-task/plugin.json +9 -0
  137. package/plugins/send-message/index.ts +75 -0
  138. package/plugins/send-message/plugin.json +9 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory.js","sourceRoot":"","sources":["../../src/core/memory.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * 模型能力配置
3
+ * 参考 openclaw 的 model-catalog.ts 设计
4
+ */
5
+ /**
6
+ * 模型能力定义
7
+ */
8
+ export interface ModelCapabilities {
9
+ /** 模型 ID(可以是模式匹配) */
10
+ pattern: string | RegExp;
11
+ /** 提供者 */
12
+ provider?: string;
13
+ /** 支持的输入类型 */
14
+ input: Array<'text' | 'image' | 'audio' | 'video'>;
15
+ /** 上下文窗口大小 */
16
+ contextWindow?: number;
17
+ /** 是否支持推理/思考 */
18
+ reasoning?: boolean;
19
+ }
20
+ /**
21
+ * 根据模型 ID 查找能力
22
+ */
23
+ export declare function findModelCapabilities(modelId: string): ModelCapabilities | null;
24
+ /**
25
+ * 检查模型是否支持图片输入
26
+ */
27
+ export declare function modelSupportsVision(modelId: string): boolean;
28
+ /**
29
+ * 检查模型是否支持音频输入
30
+ */
31
+ export declare function modelSupportsAudio(modelId: string): boolean;
32
+ /**
33
+ * 获取模型的上下文窗口大小
34
+ */
35
+ export declare function getModelContextWindow(modelId: string): number;
36
+ /**
37
+ * 从环境变量或配置中获取当前模型 ID
38
+ * 支持多种环境变量名(兼容不同配置)
39
+ */
40
+ export declare function getCurrentModelId(): string;
41
+ /**
42
+ * 检查当前配置的模型是否支持图片
43
+ */
44
+ export declare function currentModelSupportsVision(): boolean;
45
+ //# sourceMappingURL=model-capabilities.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-capabilities.d.ts","sourceRoot":"","sources":["../../src/core/model-capabilities.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,qBAAqB;IACrB,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC;IACzB,UAAU;IACV,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,cAAc;IACd,KAAK,EAAE,KAAK,CAAC,MAAM,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,CAAC,CAAC;IACnD,cAAc;IACd,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,gBAAgB;IAChB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAsCD;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,iBAAiB,GAAG,IAAI,CAc/E;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAG5D;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAG3D;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAG7D;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C;AAED;;GAEG;AACH,wBAAgB,0BAA0B,IAAI,OAAO,CAGpD"}
@@ -0,0 +1,85 @@
1
+ /**
2
+ * 模型能力配置
3
+ * 参考 openclaw 的 model-catalog.ts 设计
4
+ */
5
+ /**
6
+ * 已知模型能力目录
7
+ * 根据实际支持情况配置
8
+ */
9
+ const MODEL_CAPABILITIES = [
10
+ // Anthropic Claude 系列(支持图片)
11
+ { pattern: /^claude/i, provider: 'anthropic', input: ['text', 'image'], contextWindow: 200000 },
12
+ // OpenAI GPT-4 系列(支持图片)
13
+ { pattern: /^gpt-4/i, provider: 'openai', input: ['text', 'image'], contextWindow: 128000 },
14
+ { pattern: /^gpt-4o/i, provider: 'openai', input: ['text', 'image', 'audio'], contextWindow: 128000 },
15
+ { pattern: /^gpt-3/i, provider: 'openai', input: ['text'], contextWindow: 16000 },
16
+ // Google Gemini 系列(支持图片)
17
+ { pattern: /^gemini/i, provider: 'google', input: ['text', 'image', 'audio', 'video'], contextWindow: 1000000 },
18
+ // MiniMax 系列(不支持图片)
19
+ { pattern: /^abab/i, provider: 'minimax', input: ['text'], contextWindow: 32000 },
20
+ { pattern: /^minimax/i, provider: 'minimax', input: ['text'], contextWindow: 32000 },
21
+ // 智谱 GLM 系列
22
+ { pattern: /^glm-4v/i, provider: 'zhipu', input: ['text', 'image'], contextWindow: 128000 },
23
+ { pattern: /^glm-4/i, provider: 'zhipu', input: ['text'], contextWindow: 128000 },
24
+ // 通义千问系列
25
+ { pattern: /^qwen-vl/i, provider: 'alibaba', input: ['text', 'image'], contextWindow: 32000 },
26
+ { pattern: /^qwen/i, provider: 'alibaba', input: ['text'], contextWindow: 32000 },
27
+ // DeepSeek 系列
28
+ { pattern: /^deepseek/i, provider: 'deepseek', input: ['text'], contextWindow: 64000 },
29
+ // Moonshot Kimi 系列
30
+ { pattern: /^moonshot/i, provider: 'moonshot', input: ['text'], contextWindow: 128000 },
31
+ { pattern: /^kimi/i, provider: 'moonshot', input: ['text'], contextWindow: 128000 },
32
+ ];
33
+ /**
34
+ * 根据模型 ID 查找能力
35
+ */
36
+ export function findModelCapabilities(modelId) {
37
+ const normalized = modelId.trim().toLowerCase();
38
+ for (const cap of MODEL_CAPABILITIES) {
39
+ if (cap.pattern instanceof RegExp) {
40
+ if (cap.pattern.test(normalized)) {
41
+ return cap;
42
+ }
43
+ }
44
+ else if (normalized.includes(cap.pattern.toLowerCase())) {
45
+ return cap;
46
+ }
47
+ }
48
+ return null;
49
+ }
50
+ /**
51
+ * 检查模型是否支持图片输入
52
+ */
53
+ export function modelSupportsVision(modelId) {
54
+ const cap = findModelCapabilities(modelId);
55
+ return cap?.input.includes('image') ?? false;
56
+ }
57
+ /**
58
+ * 检查模型是否支持音频输入
59
+ */
60
+ export function modelSupportsAudio(modelId) {
61
+ const cap = findModelCapabilities(modelId);
62
+ return cap?.input.includes('audio') ?? false;
63
+ }
64
+ /**
65
+ * 获取模型的上下文窗口大小
66
+ */
67
+ export function getModelContextWindow(modelId) {
68
+ const cap = findModelCapabilities(modelId);
69
+ return cap?.contextWindow ?? 32000; // 默认 32k
70
+ }
71
+ /**
72
+ * 从环境变量或配置中获取当前模型 ID
73
+ * 支持多种环境变量名(兼容不同配置)
74
+ */
75
+ export function getCurrentModelId() {
76
+ return process.env.AI_MODEL || process.env.ANTHROPIC_MODEL || 'claude-4-5-sonnet-20250929';
77
+ }
78
+ /**
79
+ * 检查当前配置的模型是否支持图片
80
+ */
81
+ export function currentModelSupportsVision() {
82
+ const modelId = getCurrentModelId();
83
+ return modelSupportsVision(modelId);
84
+ }
85
+ //# sourceMappingURL=model-capabilities.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-capabilities.js","sourceRoot":"","sources":["../../src/core/model-capabilities.ts"],"names":[],"mappings":"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"}
package/dist/db.d.ts ADDED
@@ -0,0 +1,103 @@
1
+ import Database from 'better-sqlite3';
2
+ import { NewMessage, ScheduledTask, TaskRunLog } from './types.js';
3
+ /**
4
+ * Generic message input for storing messages from any platform
5
+ */
6
+ export interface MessageInput {
7
+ id: string;
8
+ chatId: string;
9
+ senderId: string;
10
+ senderName: string;
11
+ content: string;
12
+ timestamp: string;
13
+ isFromMe: boolean;
14
+ }
15
+ declare global {
16
+ var __flashclaw_db: Database.Database | undefined;
17
+ }
18
+ export declare function initDatabase(): void;
19
+ /**
20
+ * Store chat metadata only (no message content).
21
+ * Used for all chats to enable group discovery without storing sensitive content.
22
+ */
23
+ export declare function storeChatMetadata(chatJid: string, timestamp: string, name?: string): void;
24
+ /**
25
+ * Update chat name without changing timestamp for existing chats.
26
+ * New chats get the current time as their initial timestamp.
27
+ * Used during group metadata sync.
28
+ */
29
+ export declare function updateChatName(chatJid: string, name: string): void;
30
+ export interface ChatInfo {
31
+ jid: string;
32
+ name: string;
33
+ last_message_time: string;
34
+ }
35
+ /**
36
+ * Get all known chats, ordered by most recent activity.
37
+ */
38
+ export declare function getAllChats(): ChatInfo[];
39
+ /**
40
+ * Get timestamp of last group metadata sync.
41
+ */
42
+ export declare function getLastGroupSync(): string | null;
43
+ /**
44
+ * Record that group metadata was synced.
45
+ */
46
+ export declare function setLastGroupSync(): void;
47
+ /**
48
+ * Store a message with full content.
49
+ * Only call this for registered groups where message history is needed.
50
+ */
51
+ export declare function storeMessage(msg: MessageInput): void;
52
+ export declare function getNewMessages(jids: string[], lastTimestamp: string, botPrefix: string): {
53
+ messages: NewMessage[];
54
+ newTimestamp: string;
55
+ };
56
+ export declare function getMessagesSince(chatJid: string, sinceTimestamp: string, botPrefix: string): NewMessage[];
57
+ export declare function createTask(task: Omit<ScheduledTask, 'last_run' | 'last_result'>): void;
58
+ export declare function getTaskById(id: string): ScheduledTask | undefined;
59
+ export declare function getTasksForGroup(groupFolder: string): ScheduledTask[];
60
+ export declare function getAllTasks(): ScheduledTask[];
61
+ export declare function updateTask(id: string, updates: Partial<Pick<ScheduledTask, 'prompt' | 'schedule_type' | 'schedule_value' | 'next_run' | 'status' | 'retry_count' | 'max_retries' | 'timeout_ms'>>): void;
62
+ export declare function deleteTask(id: string): void;
63
+ export declare function getDueTasks(): ScheduledTask[];
64
+ /**
65
+ * 获取下一个将要执行的任务(用于精确定时器)
66
+ * @returns 下一个任务的执行时间(毫秒),如果没有任务则返回 null
67
+ */
68
+ export declare function getNextWakeTime(): number | null;
69
+ /**
70
+ * 获取所有活跃任务(用于调度器初始化)
71
+ */
72
+ export declare function getActiveTasks(): ScheduledTask[];
73
+ /**
74
+ * 更新任务重试信息
75
+ */
76
+ export declare function updateTaskRetry(id: string, retryCount: number, nextRun: string | null): void;
77
+ /**
78
+ * 重置任务重试计数(成功执行后调用)
79
+ */
80
+ export declare function resetTaskRetry(id: string): void;
81
+ export declare function updateTaskAfterRun(id: string, nextRun: string | null, lastResult: string): void;
82
+ export declare function logTaskRun(log: TaskRunLog): void;
83
+ export declare function getTaskRunLogs(taskId: string, limit?: number): TaskRunLog[];
84
+ /**
85
+ * 获取聊天历史记录(用于上下文)
86
+ * @param chatJid 聊天 ID
87
+ * @param limit 最大消息数量
88
+ * @param beforeTimestamp 可选,获取此时间之前的消息
89
+ */
90
+ export declare function getChatHistory(chatJid: string, limit?: number, beforeTimestamp?: string): NewMessage[];
91
+ /**
92
+ * 获取消息统计
93
+ */
94
+ export declare function getMessageStats(chatJid: string): {
95
+ totalMessages: number;
96
+ firstMessage: string | null;
97
+ lastMessage: string | null;
98
+ };
99
+ /**
100
+ * 检查消息是否已存在(用于去重)
101
+ */
102
+ export declare function messageExists(messageId: string, chatJid: string): boolean;
103
+ //# sourceMappingURL=db.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../src/db.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AAGtC,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAGnE;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAID,OAAO,CAAC,MAAM,CAAC;IAEb,IAAI,cAAc,EAAE,QAAQ,CAAC,QAAQ,GAAG,SAAS,CAAC;CACnD;AAYD,wBAAgB,YAAY,IAAI,IAAI,CAmFnC;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAiBzF;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAKlE;AAED,MAAM,WAAW,QAAQ;IACvB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED;;GAEG;AACH,wBAAgB,WAAW,IAAI,QAAQ,EAAE,CAMxC;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,MAAM,GAAG,IAAI,CAIhD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,IAAI,CAGvC;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,YAAY,GAAG,IAAI,CAGpD;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,aAAa,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG;IAAE,QAAQ,EAAE,UAAU,EAAE,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,CAoBzI;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,UAAU,EAAE,CASzG;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,aAAa,EAAE,UAAU,GAAG,aAAa,CAAC,GAAG,IAAI,CAmBtF;AAED,wBAAgB,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,CAEjE;AAED,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,aAAa,EAAE,CAErE;AAED,wBAAgB,WAAW,IAAI,aAAa,EAAE,CAE7C;AAED,wBAAgB,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,aAAa,EAAE,QAAQ,GAAG,eAAe,GAAG,gBAAgB,GAAG,UAAU,GAAG,QAAQ,GAAG,aAAa,GAAG,aAAa,GAAG,YAAY,CAAC,CAAC,GAAG,IAAI,CAiBxM;AAED,wBAAgB,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAI3C;AAED,wBAAgB,WAAW,IAAI,aAAa,EAAE,CAO7C;AAED;;;GAGG;AACH,wBAAgB,eAAe,IAAI,MAAM,GAAG,IAAI,CAU/C;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,aAAa,EAAE,CAMhD;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAM5F;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAM/C;AAED,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,CAO/F;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,UAAU,GAAG,IAAI,CAKhD;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,SAAK,GAAG,UAAU,EAAE,CAQvE;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,SAAK,EAAE,eAAe,CAAC,EAAE,MAAM,GAAG,UAAU,EAAE,CAkBlG;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG;IAAE,aAAa,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAenI;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAKzE"}
package/dist/db.js ADDED
@@ -0,0 +1,380 @@
1
+ import Database from 'better-sqlite3';
2
+ import fs from 'fs';
3
+ import path from 'path';
4
+ import { paths } from './paths.js';
5
+ /**
6
+ * 获取数据库实例,确保已初始化
7
+ */
8
+ function getDb() {
9
+ if (!global.__flashclaw_db) {
10
+ throw new Error('数据库未初始化,请先调用 initDatabase()');
11
+ }
12
+ return global.__flashclaw_db;
13
+ }
14
+ export function initDatabase() {
15
+ const dbPath = paths.database();
16
+ fs.mkdirSync(path.dirname(dbPath), { recursive: true });
17
+ const database = new Database(dbPath);
18
+ global.__flashclaw_db = database;
19
+ database.exec(`
20
+ CREATE TABLE IF NOT EXISTS chats (
21
+ jid TEXT PRIMARY KEY,
22
+ name TEXT,
23
+ last_message_time TEXT
24
+ );
25
+ CREATE TABLE IF NOT EXISTS messages (
26
+ id TEXT,
27
+ chat_jid TEXT,
28
+ sender TEXT,
29
+ sender_name TEXT,
30
+ content TEXT,
31
+ timestamp TEXT,
32
+ is_from_me INTEGER,
33
+ PRIMARY KEY (id, chat_jid),
34
+ FOREIGN KEY (chat_jid) REFERENCES chats(jid)
35
+ );
36
+ CREATE INDEX IF NOT EXISTS idx_timestamp ON messages(timestamp);
37
+
38
+ CREATE TABLE IF NOT EXISTS scheduled_tasks (
39
+ id TEXT PRIMARY KEY,
40
+ group_folder TEXT NOT NULL,
41
+ chat_jid TEXT NOT NULL,
42
+ prompt TEXT NOT NULL,
43
+ schedule_type TEXT NOT NULL,
44
+ schedule_value TEXT NOT NULL,
45
+ next_run TEXT,
46
+ last_run TEXT,
47
+ last_result TEXT,
48
+ status TEXT DEFAULT 'active',
49
+ created_at TEXT NOT NULL
50
+ );
51
+ CREATE INDEX IF NOT EXISTS idx_next_run ON scheduled_tasks(next_run);
52
+ CREATE INDEX IF NOT EXISTS idx_status ON scheduled_tasks(status);
53
+
54
+ CREATE TABLE IF NOT EXISTS task_run_logs (
55
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
56
+ task_id TEXT NOT NULL,
57
+ run_at TEXT NOT NULL,
58
+ duration_ms INTEGER NOT NULL,
59
+ status TEXT NOT NULL,
60
+ result TEXT,
61
+ error TEXT,
62
+ FOREIGN KEY (task_id) REFERENCES scheduled_tasks(id)
63
+ );
64
+ CREATE INDEX IF NOT EXISTS idx_task_run_logs ON task_run_logs(task_id, run_at);
65
+ `);
66
+ // Add sender_name column if it doesn't exist (migration for existing DBs)
67
+ try {
68
+ database.exec(`ALTER TABLE messages ADD COLUMN sender_name TEXT`);
69
+ }
70
+ catch { /* column already exists */ }
71
+ // Add context_mode column if it doesn't exist (migration for existing DBs)
72
+ try {
73
+ database.exec(`ALTER TABLE scheduled_tasks ADD COLUMN context_mode TEXT DEFAULT 'isolated'`);
74
+ }
75
+ catch { /* column already exists */ }
76
+ // Add retry_count column (migration for existing DBs)
77
+ try {
78
+ database.exec(`ALTER TABLE scheduled_tasks ADD COLUMN retry_count INTEGER DEFAULT 0`);
79
+ }
80
+ catch { /* column already exists */ }
81
+ // Add max_retries column (migration for existing DBs)
82
+ try {
83
+ database.exec(`ALTER TABLE scheduled_tasks ADD COLUMN max_retries INTEGER DEFAULT 3`);
84
+ }
85
+ catch { /* column already exists */ }
86
+ // Add timeout_ms column (migration for existing DBs)
87
+ try {
88
+ database.exec(`ALTER TABLE scheduled_tasks ADD COLUMN timeout_ms INTEGER DEFAULT 300000`);
89
+ }
90
+ catch { /* column already exists */ }
91
+ // Create composite index for efficient due task queries
92
+ try {
93
+ database.exec(`CREATE INDEX IF NOT EXISTS idx_due_tasks ON scheduled_tasks(status, next_run)`);
94
+ }
95
+ catch { /* column already exists */ }
96
+ }
97
+ /**
98
+ * Store chat metadata only (no message content).
99
+ * Used for all chats to enable group discovery without storing sensitive content.
100
+ */
101
+ export function storeChatMetadata(chatJid, timestamp, name) {
102
+ if (name) {
103
+ // Update with name, preserving existing timestamp if newer
104
+ getDb().prepare(`
105
+ INSERT INTO chats (jid, name, last_message_time) VALUES (?, ?, ?)
106
+ ON CONFLICT(jid) DO UPDATE SET
107
+ name = excluded.name,
108
+ last_message_time = MAX(last_message_time, excluded.last_message_time)
109
+ `).run(chatJid, name, timestamp);
110
+ }
111
+ else {
112
+ // Update timestamp only, preserve existing name if any
113
+ getDb().prepare(`
114
+ INSERT INTO chats (jid, name, last_message_time) VALUES (?, ?, ?)
115
+ ON CONFLICT(jid) DO UPDATE SET
116
+ last_message_time = MAX(last_message_time, excluded.last_message_time)
117
+ `).run(chatJid, chatJid, timestamp);
118
+ }
119
+ }
120
+ /**
121
+ * Update chat name without changing timestamp for existing chats.
122
+ * New chats get the current time as their initial timestamp.
123
+ * Used during group metadata sync.
124
+ */
125
+ export function updateChatName(chatJid, name) {
126
+ getDb().prepare(`
127
+ INSERT INTO chats (jid, name, last_message_time) VALUES (?, ?, ?)
128
+ ON CONFLICT(jid) DO UPDATE SET name = excluded.name
129
+ `).run(chatJid, name, new Date().toISOString());
130
+ }
131
+ /**
132
+ * Get all known chats, ordered by most recent activity.
133
+ */
134
+ export function getAllChats() {
135
+ return getDb().prepare(`
136
+ SELECT jid, name, last_message_time
137
+ FROM chats
138
+ ORDER BY last_message_time DESC
139
+ `).all();
140
+ }
141
+ /**
142
+ * Get timestamp of last group metadata sync.
143
+ */
144
+ export function getLastGroupSync() {
145
+ // Store sync time in a special chat entry
146
+ const row = getDb().prepare(`SELECT last_message_time FROM chats WHERE jid = '__group_sync__'`).get();
147
+ return row?.last_message_time || null;
148
+ }
149
+ /**
150
+ * Record that group metadata was synced.
151
+ */
152
+ export function setLastGroupSync() {
153
+ const now = new Date().toISOString();
154
+ getDb().prepare(`INSERT OR REPLACE INTO chats (jid, name, last_message_time) VALUES ('__group_sync__', '__group_sync__', ?)`).run(now);
155
+ }
156
+ /**
157
+ * Store a message with full content.
158
+ * Only call this for registered groups where message history is needed.
159
+ */
160
+ export function storeMessage(msg) {
161
+ getDb().prepare(`INSERT OR REPLACE INTO messages (id, chat_jid, sender, sender_name, content, timestamp, is_from_me) VALUES (?, ?, ?, ?, ?, ?, ?)`)
162
+ .run(msg.id, msg.chatId, msg.senderId, msg.senderName, msg.content, msg.timestamp, msg.isFromMe ? 1 : 0);
163
+ }
164
+ export function getNewMessages(jids, lastTimestamp, botPrefix) {
165
+ if (jids.length === 0)
166
+ return { messages: [], newTimestamp: lastTimestamp };
167
+ const placeholders = jids.map(() => '?').join(',');
168
+ // Filter out bot's own messages by checking content prefix (not is_from_me, since user shares the account)
169
+ const sql = `
170
+ SELECT id, chat_jid, sender, sender_name, content, timestamp
171
+ FROM messages
172
+ WHERE timestamp > ? AND chat_jid IN (${placeholders}) AND content NOT LIKE ?
173
+ ORDER BY timestamp
174
+ `;
175
+ const rows = getDb().prepare(sql).all(lastTimestamp, ...jids, `${botPrefix}:%`);
176
+ let newTimestamp = lastTimestamp;
177
+ for (const row of rows) {
178
+ if (row.timestamp > newTimestamp)
179
+ newTimestamp = row.timestamp;
180
+ }
181
+ return { messages: rows, newTimestamp };
182
+ }
183
+ export function getMessagesSince(chatJid, sinceTimestamp, botPrefix) {
184
+ // Filter out bot's own messages by checking content prefix
185
+ const sql = `
186
+ SELECT id, chat_jid, sender, sender_name, content, timestamp
187
+ FROM messages
188
+ WHERE chat_jid = ? AND timestamp > ? AND content NOT LIKE ?
189
+ ORDER BY timestamp
190
+ `;
191
+ return getDb().prepare(sql).all(chatJid, sinceTimestamp, `${botPrefix}:%`);
192
+ }
193
+ export function createTask(task) {
194
+ getDb().prepare(`
195
+ INSERT INTO scheduled_tasks (id, group_folder, chat_jid, prompt, schedule_type, schedule_value, context_mode, next_run, status, created_at, retry_count, max_retries, timeout_ms)
196
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
197
+ `).run(task.id, task.group_folder, task.chat_jid, task.prompt, task.schedule_type, task.schedule_value, task.context_mode || 'isolated', task.next_run, task.status, task.created_at, task.retry_count ?? 0, task.max_retries ?? 3, task.timeout_ms ?? 300000);
198
+ }
199
+ export function getTaskById(id) {
200
+ return getDb().prepare('SELECT * FROM scheduled_tasks WHERE id = ?').get(id);
201
+ }
202
+ export function getTasksForGroup(groupFolder) {
203
+ return getDb().prepare('SELECT * FROM scheduled_tasks WHERE group_folder = ? ORDER BY created_at DESC').all(groupFolder);
204
+ }
205
+ export function getAllTasks() {
206
+ return getDb().prepare('SELECT * FROM scheduled_tasks ORDER BY created_at DESC').all();
207
+ }
208
+ export function updateTask(id, updates) {
209
+ const fields = [];
210
+ const values = [];
211
+ if (updates.prompt !== undefined) {
212
+ fields.push('prompt = ?');
213
+ values.push(updates.prompt);
214
+ }
215
+ if (updates.schedule_type !== undefined) {
216
+ fields.push('schedule_type = ?');
217
+ values.push(updates.schedule_type);
218
+ }
219
+ if (updates.schedule_value !== undefined) {
220
+ fields.push('schedule_value = ?');
221
+ values.push(updates.schedule_value);
222
+ }
223
+ if (updates.next_run !== undefined) {
224
+ fields.push('next_run = ?');
225
+ values.push(updates.next_run);
226
+ }
227
+ if (updates.status !== undefined) {
228
+ fields.push('status = ?');
229
+ values.push(updates.status);
230
+ }
231
+ if (updates.retry_count !== undefined) {
232
+ fields.push('retry_count = ?');
233
+ values.push(updates.retry_count);
234
+ }
235
+ if (updates.max_retries !== undefined) {
236
+ fields.push('max_retries = ?');
237
+ values.push(updates.max_retries);
238
+ }
239
+ if (updates.timeout_ms !== undefined) {
240
+ fields.push('timeout_ms = ?');
241
+ values.push(updates.timeout_ms);
242
+ }
243
+ if (fields.length === 0)
244
+ return;
245
+ values.push(id);
246
+ getDb().prepare(`UPDATE scheduled_tasks SET ${fields.join(', ')} WHERE id = ?`).run(...values);
247
+ }
248
+ export function deleteTask(id) {
249
+ // Delete child records first (FK constraint)
250
+ getDb().prepare('DELETE FROM task_run_logs WHERE task_id = ?').run(id);
251
+ getDb().prepare('DELETE FROM scheduled_tasks WHERE id = ?').run(id);
252
+ }
253
+ export function getDueTasks() {
254
+ const now = new Date().toISOString();
255
+ return getDb().prepare(`
256
+ SELECT * FROM scheduled_tasks
257
+ WHERE status = 'active' AND next_run IS NOT NULL AND next_run <= ?
258
+ ORDER BY next_run
259
+ `).all(now);
260
+ }
261
+ /**
262
+ * 获取下一个将要执行的任务(用于精确定时器)
263
+ * @returns 下一个任务的执行时间(毫秒),如果没有任务则返回 null
264
+ */
265
+ export function getNextWakeTime() {
266
+ const row = getDb().prepare(`
267
+ SELECT next_run FROM scheduled_tasks
268
+ WHERE status = 'active' AND next_run IS NOT NULL
269
+ ORDER BY next_run ASC
270
+ LIMIT 1
271
+ `).get();
272
+ if (!row)
273
+ return null;
274
+ return new Date(row.next_run).getTime();
275
+ }
276
+ /**
277
+ * 获取所有活跃任务(用于调度器初始化)
278
+ */
279
+ export function getActiveTasks() {
280
+ return getDb().prepare(`
281
+ SELECT * FROM scheduled_tasks
282
+ WHERE status = 'active' AND next_run IS NOT NULL
283
+ ORDER BY next_run ASC
284
+ `).all();
285
+ }
286
+ /**
287
+ * 更新任务重试信息
288
+ */
289
+ export function updateTaskRetry(id, retryCount, nextRun) {
290
+ getDb().prepare(`
291
+ UPDATE scheduled_tasks
292
+ SET retry_count = ?, next_run = ?
293
+ WHERE id = ?
294
+ `).run(retryCount, nextRun, id);
295
+ }
296
+ /**
297
+ * 重置任务重试计数(成功执行后调用)
298
+ */
299
+ export function resetTaskRetry(id) {
300
+ getDb().prepare(`
301
+ UPDATE scheduled_tasks
302
+ SET retry_count = 0
303
+ WHERE id = ?
304
+ `).run(id);
305
+ }
306
+ export function updateTaskAfterRun(id, nextRun, lastResult) {
307
+ const now = new Date().toISOString();
308
+ getDb().prepare(`
309
+ UPDATE scheduled_tasks
310
+ SET next_run = ?, last_run = ?, last_result = ?, status = CASE WHEN ? IS NULL THEN 'completed' ELSE status END
311
+ WHERE id = ?
312
+ `).run(nextRun, now, lastResult, nextRun, id);
313
+ }
314
+ export function logTaskRun(log) {
315
+ getDb().prepare(`
316
+ INSERT INTO task_run_logs (task_id, run_at, duration_ms, status, result, error)
317
+ VALUES (?, ?, ?, ?, ?, ?)
318
+ `).run(log.task_id, log.run_at, log.duration_ms, log.status, log.result, log.error);
319
+ }
320
+ export function getTaskRunLogs(taskId, limit = 10) {
321
+ return getDb().prepare(`
322
+ SELECT task_id, run_at, duration_ms, status, result, error
323
+ FROM task_run_logs
324
+ WHERE task_id = ?
325
+ ORDER BY run_at DESC
326
+ LIMIT ?
327
+ `).all(taskId, limit);
328
+ }
329
+ /**
330
+ * 获取聊天历史记录(用于上下文)
331
+ * @param chatJid 聊天 ID
332
+ * @param limit 最大消息数量
333
+ * @param beforeTimestamp 可选,获取此时间之前的消息
334
+ */
335
+ export function getChatHistory(chatJid, limit = 50, beforeTimestamp) {
336
+ if (beforeTimestamp) {
337
+ return getDb().prepare(`
338
+ SELECT id, chat_jid, sender, sender_name, content, timestamp
339
+ FROM messages
340
+ WHERE chat_jid = ? AND timestamp < ?
341
+ ORDER BY timestamp DESC
342
+ LIMIT ?
343
+ `).all(chatJid, beforeTimestamp, limit).reverse();
344
+ }
345
+ return getDb().prepare(`
346
+ SELECT id, chat_jid, sender, sender_name, content, timestamp
347
+ FROM messages
348
+ WHERE chat_jid = ?
349
+ ORDER BY timestamp DESC
350
+ LIMIT ?
351
+ `).all(chatJid, limit).reverse();
352
+ }
353
+ /**
354
+ * 获取消息统计
355
+ */
356
+ export function getMessageStats(chatJid) {
357
+ const stats = getDb().prepare(`
358
+ SELECT
359
+ COUNT(*) as total,
360
+ MIN(timestamp) as first_msg,
361
+ MAX(timestamp) as last_msg
362
+ FROM messages
363
+ WHERE chat_jid = ?
364
+ `).get(chatJid);
365
+ return {
366
+ totalMessages: stats.total,
367
+ firstMessage: stats.first_msg,
368
+ lastMessage: stats.last_msg
369
+ };
370
+ }
371
+ /**
372
+ * 检查消息是否已存在(用于去重)
373
+ */
374
+ export function messageExists(messageId, chatJid) {
375
+ const row = getDb().prepare(`
376
+ SELECT 1 FROM messages WHERE id = ? AND chat_jid = ?
377
+ `).get(messageId, chatJid);
378
+ return !!row;
379
+ }
380
+ //# sourceMappingURL=db.js.map