@gatanot/qualia_core 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.
Files changed (297) hide show
  1. package/dist/agent/background.d.ts +6 -0
  2. package/dist/agent/background.d.ts.map +1 -0
  3. package/dist/agent/background.js +58 -0
  4. package/dist/agent/background.js.map +1 -0
  5. package/dist/agent/context-builder.d.ts +23 -0
  6. package/dist/agent/context-builder.d.ts.map +1 -0
  7. package/dist/agent/context-builder.js +102 -0
  8. package/dist/agent/context-builder.js.map +1 -0
  9. package/dist/agent/diary.d.ts +4 -0
  10. package/dist/agent/diary.d.ts.map +1 -0
  11. package/dist/agent/diary.js +67 -0
  12. package/dist/agent/diary.js.map +1 -0
  13. package/dist/agent/index.d.ts +22 -0
  14. package/dist/agent/index.d.ts.map +1 -0
  15. package/dist/agent/index.js +20 -0
  16. package/dist/agent/index.js.map +1 -0
  17. package/dist/agent/logger.d.ts +23 -0
  18. package/dist/agent/logger.d.ts.map +1 -0
  19. package/dist/agent/logger.js +70 -0
  20. package/dist/agent/logger.js.map +1 -0
  21. package/dist/agent/logger.test.d.ts +2 -0
  22. package/dist/agent/logger.test.d.ts.map +1 -0
  23. package/dist/agent/logger.test.js +28 -0
  24. package/dist/agent/logger.test.js.map +1 -0
  25. package/dist/agent/loop.d.ts +52 -0
  26. package/dist/agent/loop.d.ts.map +1 -0
  27. package/dist/agent/loop.js +557 -0
  28. package/dist/agent/loop.js.map +1 -0
  29. package/dist/agent/message-sanitizer.d.ts +13 -0
  30. package/dist/agent/message-sanitizer.d.ts.map +1 -0
  31. package/dist/agent/message-sanitizer.js +138 -0
  32. package/dist/agent/message-sanitizer.js.map +1 -0
  33. package/dist/agent/message-sanitizer.test.d.ts +2 -0
  34. package/dist/agent/message-sanitizer.test.d.ts.map +1 -0
  35. package/dist/agent/message-sanitizer.test.js +110 -0
  36. package/dist/agent/message-sanitizer.test.js.map +1 -0
  37. package/dist/agent/prompts.d.ts +15 -0
  38. package/dist/agent/prompts.d.ts.map +1 -0
  39. package/dist/agent/prompts.js +34 -0
  40. package/dist/agent/prompts.js.map +1 -0
  41. package/dist/agent/summarize-worker.d.ts +6 -0
  42. package/dist/agent/summarize-worker.d.ts.map +1 -0
  43. package/dist/agent/summarize-worker.js +62 -0
  44. package/dist/agent/summarize-worker.js.map +1 -0
  45. package/dist/agent/summarizer.d.ts +10 -0
  46. package/dist/agent/summarizer.d.ts.map +1 -0
  47. package/dist/agent/summarizer.js +133 -0
  48. package/dist/agent/summarizer.js.map +1 -0
  49. package/dist/agent/types.d.ts +135 -0
  50. package/dist/agent/types.d.ts.map +1 -0
  51. package/dist/agent/types.js +21 -0
  52. package/dist/agent/types.js.map +1 -0
  53. package/dist/ai/base.d.ts +19 -0
  54. package/dist/ai/base.d.ts.map +1 -0
  55. package/dist/ai/base.js +2 -0
  56. package/dist/ai/base.js.map +1 -0
  57. package/dist/ai/deepseek.d.ts +15 -0
  58. package/dist/ai/deepseek.d.ts.map +1 -0
  59. package/dist/ai/deepseek.js +24 -0
  60. package/dist/ai/deepseek.js.map +1 -0
  61. package/dist/ai/factory.d.ts +4 -0
  62. package/dist/ai/factory.d.ts.map +1 -0
  63. package/dist/ai/factory.js +53 -0
  64. package/dist/ai/factory.js.map +1 -0
  65. package/dist/ai/index.d.ts +43 -0
  66. package/dist/ai/index.d.ts.map +1 -0
  67. package/dist/ai/index.js +36 -0
  68. package/dist/ai/index.js.map +1 -0
  69. package/dist/ai/models.d.ts +13 -0
  70. package/dist/ai/models.d.ts.map +1 -0
  71. package/dist/ai/models.js +67 -0
  72. package/dist/ai/models.js.map +1 -0
  73. package/dist/ai/ollama.d.ts +13 -0
  74. package/dist/ai/ollama.d.ts.map +1 -0
  75. package/dist/ai/ollama.js +32 -0
  76. package/dist/ai/ollama.js.map +1 -0
  77. package/dist/ai/openai.d.ts +46 -0
  78. package/dist/ai/openai.d.ts.map +1 -0
  79. package/dist/ai/openai.js +90 -0
  80. package/dist/ai/openai.js.map +1 -0
  81. package/dist/ai/types.d.ts +154 -0
  82. package/dist/ai/types.d.ts.map +1 -0
  83. package/dist/ai/types.js +2 -0
  84. package/dist/ai/types.js.map +1 -0
  85. package/dist/ai/utils.d.ts +47 -0
  86. package/dist/ai/utils.d.ts.map +1 -0
  87. package/dist/ai/utils.js +145 -0
  88. package/dist/ai/utils.js.map +1 -0
  89. package/dist/ai/xiaomi.d.ts +15 -0
  90. package/dist/ai/xiaomi.d.ts.map +1 -0
  91. package/dist/ai/xiaomi.js +23 -0
  92. package/dist/ai/xiaomi.js.map +1 -0
  93. package/dist/chat-confirm.d.ts +4 -0
  94. package/dist/chat-confirm.d.ts.map +1 -0
  95. package/dist/chat-confirm.js +2 -0
  96. package/dist/chat-confirm.js.map +1 -0
  97. package/dist/chat-steering.d.ts +6 -0
  98. package/dist/chat-steering.d.ts.map +1 -0
  99. package/dist/chat-steering.js +2 -0
  100. package/dist/chat-steering.js.map +1 -0
  101. package/dist/concurrency/background-worker.d.ts +16 -0
  102. package/dist/concurrency/background-worker.d.ts.map +1 -0
  103. package/dist/concurrency/background-worker.js +62 -0
  104. package/dist/concurrency/background-worker.js.map +1 -0
  105. package/dist/concurrency/background-worker.test.d.ts +2 -0
  106. package/dist/concurrency/background-worker.test.d.ts.map +1 -0
  107. package/dist/concurrency/background-worker.test.js +55 -0
  108. package/dist/concurrency/background-worker.test.js.map +1 -0
  109. package/dist/concurrency/file-mutex.d.ts +8 -0
  110. package/dist/concurrency/file-mutex.d.ts.map +1 -0
  111. package/dist/concurrency/file-mutex.js +41 -0
  112. package/dist/concurrency/file-mutex.js.map +1 -0
  113. package/dist/concurrency/file-mutex.test.d.ts +2 -0
  114. package/dist/concurrency/file-mutex.test.d.ts.map +1 -0
  115. package/dist/concurrency/file-mutex.test.js +50 -0
  116. package/dist/concurrency/file-mutex.test.js.map +1 -0
  117. package/dist/concurrency/index.d.ts +5 -0
  118. package/dist/concurrency/index.d.ts.map +1 -0
  119. package/dist/concurrency/index.js +4 -0
  120. package/dist/concurrency/index.js.map +1 -0
  121. package/dist/concurrency/session-lock.d.ts +8 -0
  122. package/dist/concurrency/session-lock.d.ts.map +1 -0
  123. package/dist/concurrency/session-lock.js +41 -0
  124. package/dist/concurrency/session-lock.js.map +1 -0
  125. package/dist/concurrency/session-lock.test.d.ts +2 -0
  126. package/dist/concurrency/session-lock.test.d.ts.map +1 -0
  127. package/dist/concurrency/session-lock.test.js +51 -0
  128. package/dist/concurrency/session-lock.test.js.map +1 -0
  129. package/dist/config/index.d.ts +12 -0
  130. package/dist/config/index.d.ts.map +1 -0
  131. package/dist/config/index.js +10 -0
  132. package/dist/config/index.js.map +1 -0
  133. package/dist/config/store.d.ts +17 -0
  134. package/dist/config/store.d.ts.map +1 -0
  135. package/dist/config/store.js +214 -0
  136. package/dist/config/store.js.map +1 -0
  137. package/dist/config/types.d.ts +44 -0
  138. package/dist/config/types.d.ts.map +1 -0
  139. package/dist/config/types.js +2 -0
  140. package/dist/config/types.js.map +1 -0
  141. package/dist/gateway/adapters/email.d.ts +23 -0
  142. package/dist/gateway/adapters/email.d.ts.map +1 -0
  143. package/dist/gateway/adapters/email.js +145 -0
  144. package/dist/gateway/adapters/email.js.map +1 -0
  145. package/dist/gateway/adapters/telegram-sessions.d.ts +4 -0
  146. package/dist/gateway/adapters/telegram-sessions.d.ts.map +1 -0
  147. package/dist/gateway/adapters/telegram-sessions.js +39 -0
  148. package/dist/gateway/adapters/telegram-sessions.js.map +1 -0
  149. package/dist/gateway/adapters/telegram.d.ts +22 -0
  150. package/dist/gateway/adapters/telegram.d.ts.map +1 -0
  151. package/dist/gateway/adapters/telegram.js +131 -0
  152. package/dist/gateway/adapters/telegram.js.map +1 -0
  153. package/dist/gateway/dispatcher.d.ts +19 -0
  154. package/dist/gateway/dispatcher.d.ts.map +1 -0
  155. package/dist/gateway/dispatcher.js +81 -0
  156. package/dist/gateway/dispatcher.js.map +1 -0
  157. package/dist/gateway/inbound-handler.d.ts +3 -0
  158. package/dist/gateway/inbound-handler.d.ts.map +1 -0
  159. package/dist/gateway/inbound-handler.js +95 -0
  160. package/dist/gateway/inbound-handler.js.map +1 -0
  161. package/dist/gateway/index.d.ts +9 -0
  162. package/dist/gateway/index.d.ts.map +1 -0
  163. package/dist/gateway/index.js +6 -0
  164. package/dist/gateway/index.js.map +1 -0
  165. package/dist/gateway/lifecycle.d.ts +3 -0
  166. package/dist/gateway/lifecycle.d.ts.map +1 -0
  167. package/dist/gateway/lifecycle.js +38 -0
  168. package/dist/gateway/lifecycle.js.map +1 -0
  169. package/dist/gateway/types.d.ts +32 -0
  170. package/dist/gateway/types.d.ts.map +1 -0
  171. package/dist/gateway/types.js +2 -0
  172. package/dist/gateway/types.js.map +1 -0
  173. package/dist/index.d.ts +23 -0
  174. package/dist/index.d.ts.map +1 -0
  175. package/dist/index.js +14 -0
  176. package/dist/index.js.map +1 -0
  177. package/dist/markdown.d.ts +2 -0
  178. package/dist/markdown.d.ts.map +1 -0
  179. package/dist/markdown.js +94 -0
  180. package/dist/markdown.js.map +1 -0
  181. package/dist/paths.d.ts +5 -0
  182. package/dist/paths.d.ts.map +1 -0
  183. package/dist/paths.js +17 -0
  184. package/dist/paths.js.map +1 -0
  185. package/dist/storage/index.d.ts +10 -0
  186. package/dist/storage/index.d.ts.map +1 -0
  187. package/dist/storage/index.js +18 -0
  188. package/dist/storage/index.js.map +1 -0
  189. package/dist/storage/memory.d.ts +39 -0
  190. package/dist/storage/memory.d.ts.map +1 -0
  191. package/dist/storage/memory.js +252 -0
  192. package/dist/storage/memory.js.map +1 -0
  193. package/dist/storage/sqlite.d.ts +44 -0
  194. package/dist/storage/sqlite.d.ts.map +1 -0
  195. package/dist/storage/sqlite.js +275 -0
  196. package/dist/storage/sqlite.js.map +1 -0
  197. package/dist/storage/types.d.ts +134 -0
  198. package/dist/storage/types.d.ts.map +1 -0
  199. package/dist/storage/types.js +2 -0
  200. package/dist/storage/types.js.map +1 -0
  201. package/dist/storage/utils.d.ts +2 -0
  202. package/dist/storage/utils.d.ts.map +1 -0
  203. package/dist/storage/utils.js +8 -0
  204. package/dist/storage/utils.js.map +1 -0
  205. package/dist/task/executor.d.ts +3 -0
  206. package/dist/task/executor.d.ts.map +1 -0
  207. package/dist/task/executor.js +80 -0
  208. package/dist/task/executor.js.map +1 -0
  209. package/dist/task/index.d.ts +5 -0
  210. package/dist/task/index.d.ts.map +1 -0
  211. package/dist/task/index.js +4 -0
  212. package/dist/task/index.js.map +1 -0
  213. package/dist/task/scheduler.d.ts +5 -0
  214. package/dist/task/scheduler.d.ts.map +1 -0
  215. package/dist/task/scheduler.js +47 -0
  216. package/dist/task/scheduler.js.map +1 -0
  217. package/dist/task/store.d.ts +14 -0
  218. package/dist/task/store.d.ts.map +1 -0
  219. package/dist/task/store.js +156 -0
  220. package/dist/task/store.js.map +1 -0
  221. package/dist/task/types.d.ts +13 -0
  222. package/dist/task/types.d.ts.map +1 -0
  223. package/dist/task/types.js +2 -0
  224. package/dist/task/types.js.map +1 -0
  225. package/dist/tool/env.d.ts +20 -0
  226. package/dist/tool/env.d.ts.map +1 -0
  227. package/dist/tool/env.js +26 -0
  228. package/dist/tool/env.js.map +1 -0
  229. package/dist/tool/env.test.d.ts +2 -0
  230. package/dist/tool/env.test.d.ts.map +1 -0
  231. package/dist/tool/env.test.js +42 -0
  232. package/dist/tool/env.test.js.map +1 -0
  233. package/dist/tool/index.d.ts +42 -0
  234. package/dist/tool/index.d.ts.map +1 -0
  235. package/dist/tool/index.js +53 -0
  236. package/dist/tool/index.js.map +1 -0
  237. package/dist/tool/registry.d.ts +43 -0
  238. package/dist/tool/registry.d.ts.map +1 -0
  239. package/dist/tool/registry.js +79 -0
  240. package/dist/tool/registry.js.map +1 -0
  241. package/dist/tool/safeguard.d.ts +21 -0
  242. package/dist/tool/safeguard.d.ts.map +1 -0
  243. package/dist/tool/safeguard.js +212 -0
  244. package/dist/tool/safeguard.js.map +1 -0
  245. package/dist/tool/tools/delete-file.d.ts +10 -0
  246. package/dist/tool/tools/delete-file.d.ts.map +1 -0
  247. package/dist/tool/tools/delete-file.js +52 -0
  248. package/dist/tool/tools/delete-file.js.map +1 -0
  249. package/dist/tool/tools/edit.d.ts +10 -0
  250. package/dist/tool/tools/edit.d.ts.map +1 -0
  251. package/dist/tool/tools/edit.js +159 -0
  252. package/dist/tool/tools/edit.js.map +1 -0
  253. package/dist/tool/tools/exec.d.ts +12 -0
  254. package/dist/tool/tools/exec.d.ts.map +1 -0
  255. package/dist/tool/tools/exec.js +170 -0
  256. package/dist/tool/tools/exec.js.map +1 -0
  257. package/dist/tool/tools/file-utils.d.ts +13 -0
  258. package/dist/tool/tools/file-utils.d.ts.map +1 -0
  259. package/dist/tool/tools/file-utils.js +65 -0
  260. package/dist/tool/tools/file-utils.js.map +1 -0
  261. package/dist/tool/tools/read-file.d.ts +10 -0
  262. package/dist/tool/tools/read-file.d.ts.map +1 -0
  263. package/dist/tool/tools/read-file.js +116 -0
  264. package/dist/tool/tools/read-file.js.map +1 -0
  265. package/dist/tool/tools/read-memory.d.ts +3 -0
  266. package/dist/tool/tools/read-memory.d.ts.map +1 -0
  267. package/dist/tool/tools/read-memory.js +58 -0
  268. package/dist/tool/tools/read-memory.js.map +1 -0
  269. package/dist/tool/tools/read-tasks.d.ts +3 -0
  270. package/dist/tool/tools/read-tasks.d.ts.map +1 -0
  271. package/dist/tool/tools/read-tasks.js +29 -0
  272. package/dist/tool/tools/read-tasks.js.map +1 -0
  273. package/dist/tool/tools/schedule-task.d.ts +3 -0
  274. package/dist/tool/tools/schedule-task.d.ts.map +1 -0
  275. package/dist/tool/tools/schedule-task.js +50 -0
  276. package/dist/tool/tools/schedule-task.js.map +1 -0
  277. package/dist/tool/tools/search-history.d.ts +4 -0
  278. package/dist/tool/tools/search-history.d.ts.map +1 -0
  279. package/dist/tool/tools/search-history.js +58 -0
  280. package/dist/tool/tools/search-history.js.map +1 -0
  281. package/dist/tool/tools/web-search.d.ts +3 -0
  282. package/dist/tool/tools/web-search.d.ts.map +1 -0
  283. package/dist/tool/tools/web-search.js +89 -0
  284. package/dist/tool/tools/web-search.js.map +1 -0
  285. package/dist/tool/tools/write-file.d.ts +11 -0
  286. package/dist/tool/tools/write-file.d.ts.map +1 -0
  287. package/dist/tool/tools/write-file.js +79 -0
  288. package/dist/tool/tools/write-file.js.map +1 -0
  289. package/dist/tool/tools/write-memory.d.ts +3 -0
  290. package/dist/tool/tools/write-memory.d.ts.map +1 -0
  291. package/dist/tool/tools/write-memory.js +99 -0
  292. package/dist/tool/tools/write-memory.js.map +1 -0
  293. package/dist/tool/types.d.ts +63 -0
  294. package/dist/tool/types.d.ts.map +1 -0
  295. package/dist/tool/types.js +33 -0
  296. package/dist/tool/types.js.map +1 -0
  297. package/package.json +53 -0
@@ -0,0 +1,252 @@
1
+ import { formatSessionTitle } from './utils.js';
2
+ /**
3
+ * MemoryStorage — 基于内存 Map 的存储实现
4
+ *
5
+ * 所有数据存储在内存中,进程重启后数据丢失。
6
+ * 适用于开发测试或关闭持久化时使用。
7
+ */
8
+ export class MemoryStorage {
9
+ sessions = new Map();
10
+ messages = new Map();
11
+ messageById = new Map();
12
+ seqCounter = new Map();
13
+ async createSession(title, memorySnapshot, workspace) {
14
+ const id = crypto.randomUUID();
15
+ const now = Date.now();
16
+ const today = new Date(now);
17
+ const startOfDay = new Date(today.getFullYear(), today.getMonth(), today.getDate()).getTime();
18
+ let count = 0;
19
+ for (const s of this.sessions.values()) {
20
+ if (s.created_at >= startOfDay)
21
+ count++;
22
+ }
23
+ const effectiveTitle = title || formatSessionTitle(today, count + 1);
24
+ const session = {
25
+ id,
26
+ title: effectiveTitle,
27
+ created_at: now,
28
+ updated_at: now,
29
+ parent_id: null,
30
+ status: 'active',
31
+ token_count: 0,
32
+ summary: '',
33
+ last_summarized_at: null,
34
+ memory_snapshot: memorySnapshot || '',
35
+ workspace: workspace || ''
36
+ };
37
+ this.sessions.set(id, session);
38
+ this.messages.set(id, []);
39
+ this.seqCounter.set(id, 0);
40
+ return session;
41
+ }
42
+ async getSession(id) {
43
+ return this.sessions.get(id) || null;
44
+ }
45
+ async listSessions() {
46
+ return Array.from(this.sessions.values())
47
+ .sort((a, b) => b.updated_at - a.updated_at);
48
+ }
49
+ async deleteSession(id) {
50
+ this.sessions.delete(id);
51
+ const msgs = this.messages.get(id) || [];
52
+ for (const msg of msgs) {
53
+ this.messageById.delete(msg.id);
54
+ }
55
+ this.messages.delete(id);
56
+ this.seqCounter.delete(id);
57
+ }
58
+ async archiveSession(id) {
59
+ const session = this.sessions.get(id);
60
+ if (session) {
61
+ session.status = 'archived';
62
+ session.updated_at = Date.now();
63
+ }
64
+ }
65
+ async forkSession(id) {
66
+ const parent = this.sessions.get(id);
67
+ if (!parent)
68
+ throw new Error(`会话不存在: ${id}`);
69
+ const newSession = await this.createSession(`[分叉] ${parent.title}`, parent.memory_snapshot);
70
+ newSession.parent_id = id;
71
+ newSession.token_count = parent.token_count;
72
+ this.sessions.set(newSession.id, newSession);
73
+ // 复制父会话全部消息,保持缓存命中的消息序列一致
74
+ const parentMessages = this.messages.get(id) || [];
75
+ const copiedMsgs = [];
76
+ let seq = 0;
77
+ for (const msg of parentMessages) {
78
+ seq++;
79
+ const copy = {
80
+ ...msg,
81
+ id: crypto.randomUUID(),
82
+ session_id: newSession.id,
83
+ seq
84
+ };
85
+ copiedMsgs.push(copy);
86
+ this.messageById.set(copy.id, copy);
87
+ }
88
+ this.messages.set(newSession.id, copiedMsgs);
89
+ this.seqCounter.set(newSession.id, seq);
90
+ return newSession;
91
+ }
92
+ async addMessage(sessionId, message) {
93
+ const session = this.sessions.get(sessionId);
94
+ if (!session)
95
+ throw new Error(`会话不存在: ${sessionId}`);
96
+ const seq = (this.seqCounter.get(sessionId) || 0) + 1;
97
+ this.seqCounter.set(sessionId, seq);
98
+ const record = {
99
+ ...message,
100
+ id: message.id || crypto.randomUUID(),
101
+ created_at: Date.now(),
102
+ seq
103
+ };
104
+ const list = this.messages.get(sessionId) || [];
105
+ list.push(record);
106
+ this.messages.set(sessionId, list);
107
+ this.messageById.set(record.id, record);
108
+ session.updated_at = Date.now();
109
+ return record;
110
+ }
111
+ async getMessages(sessionId, options) {
112
+ let list = this.messages.get(sessionId) || [];
113
+ if (options?.before !== undefined)
114
+ list = list.filter((m) => m.seq < options.before);
115
+ if (options?.limit !== undefined)
116
+ list = list.slice(-options.limit);
117
+ return list;
118
+ }
119
+ async getMessage(id) {
120
+ return this.messageById.get(id) || null;
121
+ }
122
+ async deleteMessage(id) {
123
+ const msg = this.messageById.get(id);
124
+ if (!msg)
125
+ return;
126
+ this.messageById.delete(id);
127
+ const list = this.messages.get(msg.session_id);
128
+ if (list) {
129
+ const idx = list.findIndex((m) => m.id === id);
130
+ if (idx !== -1)
131
+ list.splice(idx, 1);
132
+ }
133
+ }
134
+ async deleteMessagesFrom(sessionId, messageId) {
135
+ const list = this.messages.get(sessionId);
136
+ if (!list)
137
+ return;
138
+ const idx = list.findIndex((m) => m.id === messageId);
139
+ if (idx === -1)
140
+ return;
141
+ const toDelete = list.splice(idx);
142
+ for (const msg of toDelete) {
143
+ this.messageById.delete(msg.id);
144
+ }
145
+ }
146
+ async getTokenCount(sessionId) {
147
+ return this.sessions.get(sessionId)?.token_count || 0;
148
+ }
149
+ async updateTokenCount(sessionId, count) {
150
+ const session = this.sessions.get(sessionId);
151
+ if (session)
152
+ session.token_count = count;
153
+ }
154
+ async setSessionTitle(sessionId, title) {
155
+ const session = this.sessions.get(sessionId);
156
+ if (session)
157
+ session.title = title;
158
+ }
159
+ async getStaleSessions(idleMs) {
160
+ const now = Date.now();
161
+ const result = [];
162
+ for (const s of this.sessions.values()) {
163
+ if (s.status !== 'active')
164
+ continue;
165
+ if (idleMs !== null && now - s.updated_at <= idleMs)
166
+ continue;
167
+ if (s.last_summarized_at !== null && s.last_summarized_at >= s.updated_at)
168
+ continue;
169
+ const msgs = this.messages.get(s.id);
170
+ if (!msgs || msgs.length === 0)
171
+ continue;
172
+ result.push(s);
173
+ }
174
+ result.sort((a, b) => a.updated_at - b.updated_at);
175
+ return result;
176
+ }
177
+ async getMessagesSinceSeq(sessionId, seq) {
178
+ const list = this.messages.get(sessionId) || [];
179
+ return list.filter((m) => m.seq > seq);
180
+ }
181
+ async updateSummary(sessionId, summary) {
182
+ const session = this.sessions.get(sessionId);
183
+ if (session) {
184
+ session.summary = summary;
185
+ session.last_summarized_at = Date.now();
186
+ }
187
+ }
188
+ async getTodayUpdatedSessions() {
189
+ const now = new Date();
190
+ const startOfDay = new Date(now.getFullYear(), now.getMonth(), now.getDate()).getTime();
191
+ const endOfDay = startOfDay + 86_400_000;
192
+ const result = [];
193
+ for (const s of this.sessions.values()) {
194
+ if (s.summary && s.last_summarized_at && s.last_summarized_at >= startOfDay && s.last_summarized_at < endOfDay) {
195
+ result.push(s);
196
+ }
197
+ }
198
+ result.sort((a, b) => (a.last_summarized_at || 0) - (b.last_summarized_at || 0));
199
+ return result;
200
+ }
201
+ async setMemorySnapshot(sessionId, snapshot) {
202
+ const session = this.sessions.get(sessionId);
203
+ if (session) {
204
+ session.memory_snapshot = snapshot;
205
+ }
206
+ }
207
+ async searchMessages(query, sessionId, limit = 10) {
208
+ const lowerQuery = query.toLowerCase();
209
+ const results = [];
210
+ for (const [sid, msgs] of this.messages) {
211
+ if (sessionId && sid !== sessionId)
212
+ continue;
213
+ const session = this.sessions.get(sid);
214
+ for (const msg of msgs) {
215
+ if (!msg.content.toLowerCase().includes(lowerQuery))
216
+ continue;
217
+ results.push({
218
+ sessionId: sid,
219
+ sessionTitle: session?.title || '',
220
+ messageId: msg.id,
221
+ role: msg.role,
222
+ content: msg.content,
223
+ createdAt: msg.created_at
224
+ });
225
+ }
226
+ }
227
+ results.sort((a, b) => b.createdAt - a.createdAt);
228
+ return results.slice(0, limit);
229
+ }
230
+ async setAudioPath(messageId, path) {
231
+ const msg = this.messageById.get(messageId);
232
+ if (msg)
233
+ msg.audio_path = path;
234
+ }
235
+ async getMostRecentSession() {
236
+ for (const s of this.sessions.values()) {
237
+ if (s.status === 'active')
238
+ return s;
239
+ }
240
+ return null;
241
+ }
242
+ async listWorkspaces() {
243
+ const workspaces = new Set();
244
+ for (const s of this.sessions.values()) {
245
+ if (s.status === 'active' && s.workspace) {
246
+ workspaces.add(s.workspace);
247
+ }
248
+ }
249
+ return Array.from(workspaces).sort();
250
+ }
251
+ }
252
+ //# sourceMappingURL=memory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory.js","sourceRoot":"","sources":["../../src/storage/memory.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,44 @@
1
+ import type { Storage, Session, MessageRecord, MessageQueryOptions, MessageSearchResult } from './types.js';
2
+ /**
3
+ * SQLiteStorage — 基于 better-sqlite3 的持久化存储
4
+ *
5
+ * 使用 WAL 模式,支持外键约束。
6
+ * 自动建表,联合索引 (session_id, seq)。
7
+ */
8
+ export declare class SQLiteStorage implements Storage {
9
+ private db;
10
+ private stmts;
11
+ constructor(dbPath: string);
12
+ private initTables;
13
+ private migrate;
14
+ private prepareStatements;
15
+ createSession(title?: string, memorySnapshot?: string, workspace?: string): Promise<Session>;
16
+ private generateDefaultTitle;
17
+ getSession(id: string): Promise<Session | null>;
18
+ listSessions(): Promise<Session[]>;
19
+ deleteSession(id: string): Promise<void>;
20
+ archiveSession(id: string): Promise<void>;
21
+ forkSession(id: string): Promise<Session>;
22
+ addMessage(sessionId: string, message: Omit<MessageRecord, 'id' | 'created_at' | 'seq'> & {
23
+ id?: string;
24
+ }): Promise<MessageRecord>;
25
+ getMessages(sessionId: string, options?: MessageQueryOptions): Promise<MessageRecord[]>;
26
+ getMessage(id: string): Promise<MessageRecord | null>;
27
+ deleteMessage(id: string): Promise<void>;
28
+ deleteMessagesFrom(sessionId: string, messageId: string): Promise<void>;
29
+ getTokenCount(sessionId: string): Promise<number>;
30
+ updateTokenCount(sessionId: string, count: number): Promise<void>;
31
+ setSessionTitle(sessionId: string, title: string): Promise<void>;
32
+ searchMessages(query: string, sessionId?: string, limit?: number): Promise<MessageSearchResult[]>;
33
+ setAudioPath(messageId: string, path: string): Promise<void>;
34
+ getMostRecentSession(): Promise<Session | null>;
35
+ listWorkspaces(): Promise<string[]>;
36
+ getStaleSessions(idleMs: number | null): Promise<Session[]>;
37
+ getMessagesSinceSeq(sessionId: string, seq: number): Promise<MessageRecord[]>;
38
+ updateSummary(sessionId: string, summary: string): Promise<void>;
39
+ getTodayUpdatedSessions(): Promise<Session[]>;
40
+ setMemorySnapshot(sessionId: string, snapshot: string): Promise<void>;
41
+ private rowToSession;
42
+ private rowToMessage;
43
+ }
44
+ //# sourceMappingURL=sqlite.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sqlite.d.ts","sourceRoot":"","sources":["../../src/storage/sqlite.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,275 @@
1
+ import Database from 'better-sqlite3';
2
+ import { formatSessionTitle } from './utils.js';
3
+ /**
4
+ * SQLiteStorage — 基于 better-sqlite3 的持久化存储
5
+ *
6
+ * 使用 WAL 模式,支持外键约束。
7
+ * 自动建表,联合索引 (session_id, seq)。
8
+ */
9
+ export class SQLiteStorage {
10
+ db;
11
+ stmts;
12
+ constructor(dbPath) {
13
+ this.db = new Database(dbPath);
14
+ this.db.pragma('journal_mode = WAL');
15
+ this.db.pragma('foreign_keys = ON');
16
+ this.initTables();
17
+ this.stmts = this.prepareStatements();
18
+ }
19
+ initTables() {
20
+ this.db.exec(`
21
+ CREATE TABLE IF NOT EXISTS sessions (
22
+ id TEXT PRIMARY KEY,
23
+ title TEXT NOT NULL DEFAULT '',
24
+ created_at INTEGER NOT NULL,
25
+ updated_at INTEGER NOT NULL,
26
+ parent_id TEXT,
27
+ status TEXT NOT NULL DEFAULT 'active',
28
+ token_count INTEGER NOT NULL DEFAULT 0,
29
+ summary TEXT NOT NULL DEFAULT '',
30
+ last_summarized_at INTEGER,
31
+ memory_snapshot TEXT NOT NULL DEFAULT '',
32
+ workspace TEXT NOT NULL DEFAULT ''
33
+ );
34
+ CREATE TABLE IF NOT EXISTS messages (
35
+ id TEXT PRIMARY KEY,
36
+ session_id TEXT NOT NULL,
37
+ role TEXT NOT NULL,
38
+ content TEXT NOT NULL DEFAULT '',
39
+ reasoning_content TEXT,
40
+ tool_calls TEXT,
41
+ tool_call_id TEXT,
42
+ name TEXT,
43
+ usage TEXT,
44
+ audio_path TEXT,
45
+ created_at INTEGER NOT NULL,
46
+ seq INTEGER NOT NULL,
47
+ FOREIGN KEY (session_id) REFERENCES sessions(id) ON DELETE CASCADE
48
+ );
49
+ CREATE INDEX IF NOT EXISTS idx_messages_session_seq
50
+ ON messages(session_id, seq);
51
+ `);
52
+ this.migrate();
53
+ }
54
+ migrate() {
55
+ const cols = this.db.pragma('table_info(sessions)');
56
+ const columnNames = new Set(cols.map((c) => c.name));
57
+ if (!columnNames.has('summary')) {
58
+ this.db.exec(`ALTER TABLE sessions ADD COLUMN summary TEXT NOT NULL DEFAULT ''`);
59
+ }
60
+ if (!columnNames.has('last_summarized_at')) {
61
+ this.db.exec(`ALTER TABLE sessions ADD COLUMN last_summarized_at INTEGER`);
62
+ }
63
+ if (!columnNames.has('memory_snapshot')) {
64
+ this.db.exec(`ALTER TABLE sessions ADD COLUMN memory_snapshot TEXT NOT NULL DEFAULT ''`);
65
+ }
66
+ if (!columnNames.has('workspace')) {
67
+ this.db.exec(`ALTER TABLE sessions ADD COLUMN workspace TEXT NOT NULL DEFAULT ''`);
68
+ }
69
+ }
70
+ prepareStatements() {
71
+ return {
72
+ createSession: this.db.prepare(`INSERT INTO sessions (id, title, created_at, updated_at, parent_id, status, token_count, summary, last_summarized_at, memory_snapshot, workspace) VALUES (?, ?, ?, ?, ?, ?, ?, '', NULL, ?, ?)`),
73
+ getSession: this.db.prepare(`SELECT * FROM sessions WHERE id = ?`),
74
+ listAllSessions: this.db.prepare(`SELECT * FROM sessions ORDER BY updated_at DESC`),
75
+ deleteSession: this.db.prepare(`DELETE FROM sessions WHERE id = ?`),
76
+ updateSessionStatus: this.db.prepare(`UPDATE sessions SET status = ?, updated_at = ? WHERE id = ?`),
77
+ updateSession: this.db.prepare(`UPDATE sessions SET title = ?, updated_at = ?, token_count = ? WHERE id = ?`),
78
+ insertMessage: this.db.prepare(`INSERT INTO messages (id, session_id, role, content, reasoning_content, tool_calls, tool_call_id, name, usage, audio_path, created_at, seq) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`),
79
+ getMessages: this.db.prepare(`SELECT * FROM messages WHERE session_id = ? AND (? IS NULL OR seq < ?) ORDER BY seq ASC`),
80
+ getMessagesSinceSeq: this.db.prepare(`SELECT * FROM messages WHERE session_id = ? AND seq > ? ORDER BY seq ASC`),
81
+ getMessage: this.db.prepare(`SELECT * FROM messages WHERE id = ?`),
82
+ deleteMessage: this.db.prepare(`DELETE FROM messages WHERE id = ?`),
83
+ getMaxSeq: this.db.prepare(`SELECT COALESCE(MAX(seq), 0) as max_seq FROM messages WHERE session_id = ?`),
84
+ updateAudioPath: this.db.prepare(`UPDATE messages SET audio_path = ? WHERE id = ?`),
85
+ deleteFromSeq: this.db.prepare(`DELETE FROM messages WHERE session_id = ? AND seq >= ?`),
86
+ setTitle: this.db.prepare(`UPDATE sessions SET title = ? WHERE id = ?`),
87
+ updateSummary: this.db.prepare(`UPDATE sessions SET summary = ?, last_summarized_at = ? WHERE id = ?`),
88
+ getStaleSessions: this.db.prepare(`SELECT * FROM sessions WHERE status = 'active' AND (? - updated_at > ?) AND (last_summarized_at IS NULL OR last_summarized_at < updated_at) AND id IN (SELECT DISTINCT session_id FROM messages) ORDER BY updated_at ASC`),
89
+ getAllUnsummarized: this.db.prepare(`SELECT * FROM sessions WHERE status = 'active' AND (last_summarized_at IS NULL OR last_summarized_at < updated_at) AND id IN (SELECT DISTINCT session_id FROM messages) ORDER BY updated_at ASC`),
90
+ getTodayUpdated: this.db.prepare(`SELECT * FROM sessions WHERE summary != '' AND last_summarized_at >= ? AND last_summarized_at < ? ORDER BY last_summarized_at ASC`),
91
+ setMemorySnapshot: this.db.prepare(`UPDATE sessions SET memory_snapshot = ? WHERE id = ?`),
92
+ countToday: this.db.prepare(`SELECT COUNT(*) as cnt FROM sessions WHERE created_at >= ? AND created_at < ?`),
93
+ searchMessages: this.db.prepare(`SELECT m.id as messageId, m.session_id as sessionId, m.role, m.content, m.created_at as createdAt, s.title as sessionTitle FROM messages m JOIN sessions s ON m.session_id = s.id WHERE m.content LIKE ? AND (? IS NULL OR m.session_id = ?) ORDER BY m.created_at DESC LIMIT ?`)
94
+ };
95
+ }
96
+ async createSession(title, memorySnapshot, workspace) {
97
+ const id = crypto.randomUUID();
98
+ const now = Date.now();
99
+ const effectiveTitle = title || this.generateDefaultTitle(now);
100
+ this.stmts.createSession.run(id, effectiveTitle, now, now, null, 'active', 0, memorySnapshot || '', workspace || '');
101
+ return (await this.getSession(id));
102
+ }
103
+ generateDefaultTitle(now) {
104
+ const today = new Date(now);
105
+ const startOfDay = new Date(today.getFullYear(), today.getMonth(), today.getDate()).getTime();
106
+ const endOfDay = startOfDay + 86_400_000;
107
+ const { cnt } = this.stmts.countToday.get(startOfDay, endOfDay);
108
+ return formatSessionTitle(today, cnt + 1);
109
+ }
110
+ async getSession(id) {
111
+ const row = this.stmts.getSession.get(id);
112
+ return row ? this.rowToSession(row) : null;
113
+ }
114
+ async listSessions() {
115
+ const rows = this.stmts.listAllSessions.all();
116
+ return rows.map((row) => this.rowToSession(row));
117
+ }
118
+ async deleteSession(id) {
119
+ this.stmts.deleteSession.run(id);
120
+ }
121
+ async archiveSession(id) {
122
+ this.stmts.updateSessionStatus.run('archived', Date.now(), id);
123
+ }
124
+ async forkSession(id) {
125
+ const parent = await this.getSession(id);
126
+ if (!parent)
127
+ throw new Error(`会话不存在: ${id}`);
128
+ const newSession = await this.createSession(`[分叉] ${parent.title}`, parent.memory_snapshot);
129
+ const now = Date.now();
130
+ // 子会话 parent_id 指向父会话
131
+ this.db.prepare('UPDATE sessions SET parent_id = ? WHERE id = ?').run(id, newSession.id);
132
+ // 复制父会话全部消息,保持缓存命中的消息序列一致
133
+ const parentMessages = await this.getMessages(id);
134
+ let seq = 0;
135
+ for (const msg of parentMessages) {
136
+ seq++;
137
+ this.stmts.insertMessage.run(crypto.randomUUID(), newSession.id, msg.role, msg.content, msg.reasoning_content || null, msg.tool_calls ? JSON.stringify(msg.tool_calls) : null, msg.tool_call_id || null, msg.name || null, msg.usage ? JSON.stringify(msg.usage) : null, msg.audio_path || null, msg.created_at, seq);
138
+ }
139
+ // 继承父会话 token_count,反映实际消息量
140
+ this.db.prepare('UPDATE sessions SET token_count = ?, updated_at = ? WHERE id = ?').run(parent.token_count, now, newSession.id);
141
+ return (await this.getSession(newSession.id));
142
+ }
143
+ async addMessage(sessionId, message) {
144
+ const session = await this.getSession(sessionId);
145
+ if (!session)
146
+ throw new Error(`会话不存在: ${sessionId}`);
147
+ const { max_seq } = this.stmts.getMaxSeq.get(sessionId);
148
+ const seq = max_seq + 1;
149
+ const id = message.id || crypto.randomUUID();
150
+ const now = Date.now();
151
+ this.stmts.insertMessage.run(id, sessionId, message.role, message.content, message.reasoning_content || null, message.tool_calls ? JSON.stringify(message.tool_calls) : null, message.tool_call_id || null, message.name || null, message.usage ? JSON.stringify(message.usage) : null, message.audio_path || null, now, seq);
152
+ this.stmts.updateSession.run(session.title, now, session.token_count, sessionId);
153
+ return (await this.getMessage(id));
154
+ }
155
+ async getMessages(sessionId, options) {
156
+ const before = options?.before ?? null;
157
+ const rows = this.stmts.getMessages.all(sessionId, before, before);
158
+ let result = rows.map((row) => this.rowToMessage(row));
159
+ if (options?.limit !== undefined)
160
+ result = result.slice(-options.limit);
161
+ return result;
162
+ }
163
+ async getMessage(id) {
164
+ const row = this.stmts.getMessage.get(id);
165
+ return row ? this.rowToMessage(row) : null;
166
+ }
167
+ async deleteMessage(id) {
168
+ this.stmts.deleteMessage.run(id);
169
+ }
170
+ async deleteMessagesFrom(sessionId, messageId) {
171
+ const msg = this.stmts.getMessage.get(messageId);
172
+ if (!msg)
173
+ return;
174
+ this.stmts.deleteFromSeq.run(sessionId, msg.seq);
175
+ }
176
+ async getTokenCount(sessionId) {
177
+ const session = await this.getSession(sessionId);
178
+ return session?.token_count || 0;
179
+ }
180
+ async updateTokenCount(sessionId, count) {
181
+ const session = await this.getSession(sessionId);
182
+ if (session)
183
+ this.stmts.updateSession.run(session.title, Date.now(), count, sessionId);
184
+ }
185
+ async setSessionTitle(sessionId, title) {
186
+ this.stmts.setTitle.run(title, sessionId);
187
+ }
188
+ async searchMessages(query, sessionId, limit = 10) {
189
+ const pattern = `%${query}%`;
190
+ const rows = this.stmts.searchMessages.all(pattern, sessionId || null, sessionId || null, limit);
191
+ return rows.map((r) => ({
192
+ sessionId: r.sessionId,
193
+ sessionTitle: r.sessionTitle,
194
+ messageId: r.messageId,
195
+ role: r.role,
196
+ content: r.content,
197
+ createdAt: r.createdAt
198
+ }));
199
+ }
200
+ async setAudioPath(messageId, path) {
201
+ this.stmts.updateAudioPath.run(path, messageId);
202
+ }
203
+ async getMostRecentSession() {
204
+ const rows = this.stmts.listAllSessions.all();
205
+ for (const row of rows) {
206
+ if (row.status === 'active')
207
+ return this.rowToSession(row);
208
+ }
209
+ return null;
210
+ }
211
+ async listWorkspaces() {
212
+ const rows = this.db.prepare(`SELECT DISTINCT workspace FROM sessions WHERE status = 'active' AND workspace != '' ORDER BY workspace ASC`).all();
213
+ return rows.map((r) => r.workspace);
214
+ }
215
+ async getStaleSessions(idleMs) {
216
+ let rows;
217
+ if (idleMs === null) {
218
+ rows = this.stmts.getAllUnsummarized.all();
219
+ }
220
+ else {
221
+ const now = Date.now();
222
+ rows = this.stmts.getStaleSessions.all(now, idleMs);
223
+ }
224
+ return rows.map((row) => this.rowToSession(row));
225
+ }
226
+ async getMessagesSinceSeq(sessionId, seq) {
227
+ const rows = this.stmts.getMessagesSinceSeq.all(sessionId, seq);
228
+ return rows.map((row) => this.rowToMessage(row));
229
+ }
230
+ async updateSummary(sessionId, summary) {
231
+ this.stmts.updateSummary.run(summary, Date.now(), sessionId);
232
+ }
233
+ async getTodayUpdatedSessions() {
234
+ const now = new Date();
235
+ const startOfDay = new Date(now.getFullYear(), now.getMonth(), now.getDate()).getTime();
236
+ const endOfDay = startOfDay + 86_400_000;
237
+ const rows = this.stmts.getTodayUpdated.all(startOfDay, endOfDay);
238
+ return rows.map((row) => this.rowToSession(row));
239
+ }
240
+ async setMemorySnapshot(sessionId, snapshot) {
241
+ this.stmts.setMemorySnapshot.run(snapshot, sessionId);
242
+ }
243
+ rowToSession(row) {
244
+ return {
245
+ id: row.id,
246
+ title: row.title,
247
+ created_at: row.created_at,
248
+ updated_at: row.updated_at,
249
+ parent_id: row.parent_id,
250
+ status: row.status,
251
+ token_count: row.token_count,
252
+ summary: row.summary || '',
253
+ last_summarized_at: row.last_summarized_at ?? null,
254
+ memory_snapshot: row.memory_snapshot || '',
255
+ workspace: row.workspace || ''
256
+ };
257
+ }
258
+ rowToMessage(row) {
259
+ return {
260
+ id: row.id,
261
+ session_id: row.session_id,
262
+ role: row.role,
263
+ content: row.content,
264
+ reasoning_content: row.reasoning_content || undefined,
265
+ tool_calls: row.tool_calls ? JSON.parse(row.tool_calls) : undefined,
266
+ tool_call_id: row.tool_call_id || undefined,
267
+ name: row.name || undefined,
268
+ usage: row.usage ? JSON.parse(row.usage) : undefined,
269
+ audio_path: row.audio_path || undefined,
270
+ created_at: row.created_at,
271
+ seq: row.seq
272
+ };
273
+ }
274
+ }
275
+ //# sourceMappingURL=sqlite.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sqlite.js","sourceRoot":"","sources":["../../src/storage/sqlite.ts"],"names":[],"mappings":"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"}