lifeos 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 (216) hide show
  1. package/LICENSE +21 -0
  2. package/README.en.md +202 -0
  3. package/README.md +202 -0
  4. package/assets/lifeos-rules.en.md +162 -0
  5. package/assets/lifeos-rules.zh.md +162 -0
  6. package/assets/lifeos.yaml +56 -0
  7. package/assets/prompts/AI_LLMResearch_Prompt.en.md +120 -0
  8. package/assets/prompts/AI_LLMResearch_Prompt.zh.md +120 -0
  9. package/assets/prompts/Art_ChinesePainting_Prompt.en.md +147 -0
  10. package/assets/prompts/Art_ChinesePainting_Prompt.zh.md +148 -0
  11. package/assets/prompts/Cryptography_Prompt.en.md +148 -0
  12. package/assets/prompts/Cryptography_Prompt.zh.md +147 -0
  13. package/assets/prompts/History_ChineseCulture_Prompt.en.md +98 -0
  14. package/assets/prompts/History_ChineseCulture_Prompt.zh.md +98 -0
  15. package/assets/prompts/Math_HigherMathematics_Prompt.en.md +117 -0
  16. package/assets/prompts/Math_HigherMathematics_Prompt.zh.md +116 -0
  17. package/assets/schema/Frontmatter_Schema.md +139 -0
  18. package/assets/skills/_shared/completion-report.en.md +30 -0
  19. package/assets/skills/_shared/completion-report.zh.md +30 -0
  20. package/assets/skills/_shared/dual-agent-orchestrator.en.md +40 -0
  21. package/assets/skills/_shared/dual-agent-orchestrator.zh.md +40 -0
  22. package/assets/skills/_shared/learning-lifecycle.en.md +53 -0
  23. package/assets/skills/_shared/learning-lifecycle.zh.md +53 -0
  24. package/assets/skills/_shared/lifecycle.en.md +84 -0
  25. package/assets/skills/_shared/lifecycle.zh.md +84 -0
  26. package/assets/skills/_shared/memory-protocol.en.md +36 -0
  27. package/assets/skills/_shared/memory-protocol.zh.md +36 -0
  28. package/assets/skills/_shared/template-loading.en.md +26 -0
  29. package/assets/skills/_shared/template-loading.zh.md +26 -0
  30. package/assets/skills/archive/SKILL.en.md +300 -0
  31. package/assets/skills/archive/SKILL.zh.md +300 -0
  32. package/assets/skills/ask/SKILL.en.md +164 -0
  33. package/assets/skills/ask/SKILL.zh.md +164 -0
  34. package/assets/skills/brainstorm/SKILL.en.md +242 -0
  35. package/assets/skills/brainstorm/SKILL.zh.md +242 -0
  36. package/assets/skills/brainstorm/references/action-options.en.md +65 -0
  37. package/assets/skills/brainstorm/references/action-options.zh.md +65 -0
  38. package/assets/skills/knowledge/SKILL.en.md +202 -0
  39. package/assets/skills/knowledge/SKILL.zh.md +202 -0
  40. package/assets/skills/project/SKILL.en.md +133 -0
  41. package/assets/skills/project/SKILL.zh.md +133 -0
  42. package/assets/skills/project/references/execution-agent-prompt.en.md +148 -0
  43. package/assets/skills/project/references/execution-agent-prompt.zh.md +148 -0
  44. package/assets/skills/project/references/planning-agent-prompt.en.md +162 -0
  45. package/assets/skills/project/references/planning-agent-prompt.zh.md +162 -0
  46. package/assets/skills/read-pdf/SKILL.en.md +199 -0
  47. package/assets/skills/read-pdf/SKILL.zh.md +199 -0
  48. package/assets/skills/read-pdf/scripts/read_pdf.py +354 -0
  49. package/assets/skills/research/SKILL.en.md +107 -0
  50. package/assets/skills/research/SKILL.zh.md +107 -0
  51. package/assets/skills/research/references/execution-agent-prompt.en.md +166 -0
  52. package/assets/skills/research/references/execution-agent-prompt.zh.md +166 -0
  53. package/assets/skills/research/references/planning-agent-prompt.en.md +129 -0
  54. package/assets/skills/research/references/planning-agent-prompt.zh.md +129 -0
  55. package/assets/skills/revise/SKILL.en.md +258 -0
  56. package/assets/skills/revise/SKILL.zh.md +258 -0
  57. package/assets/skills/revise/references/grading-protocol.en.md +99 -0
  58. package/assets/skills/revise/references/grading-protocol.zh.md +99 -0
  59. package/assets/skills/today/SKILL.en.md +211 -0
  60. package/assets/skills/today/SKILL.zh.md +211 -0
  61. package/assets/templates/en/Daily_Template.md +25 -0
  62. package/assets/templates/en/Draft_Template.md +29 -0
  63. package/assets/templates/en/Knowledge_Template.md +86 -0
  64. package/assets/templates/en/Project_Template.md +110 -0
  65. package/assets/templates/en/Research_Template.md +46 -0
  66. package/assets/templates/en/Retrospective_Template.md +89 -0
  67. package/assets/templates/en/Revise_Template.md +24 -0
  68. package/assets/templates/en/Wiki_Template.md +35 -0
  69. package/assets/templates/zh/Daily_Template.md +26 -0
  70. package/assets/templates/zh/Draft_Template.md +29 -0
  71. package/assets/templates/zh/Knowledge_Template.md +86 -0
  72. package/assets/templates/zh/Project_Template.md +110 -0
  73. package/assets/templates/zh/Research_Template.md +46 -0
  74. package/assets/templates/zh/Retrospective_Template.md +89 -0
  75. package/assets/templates/zh/Revise_Template.md +24 -0
  76. package/assets/templates/zh/Wiki_Template.md +35 -0
  77. package/bin/lifeos.js +24 -0
  78. package/dist/active-docs/citations.d.ts +20 -0
  79. package/dist/active-docs/citations.js +74 -0
  80. package/dist/active-docs/citations.js.map +1 -0
  81. package/dist/active-docs/derived-memory.d.ts +57 -0
  82. package/dist/active-docs/derived-memory.js +161 -0
  83. package/dist/active-docs/derived-memory.js.map +1 -0
  84. package/dist/active-docs/index.d.ts +51 -0
  85. package/dist/active-docs/index.js +165 -0
  86. package/dist/active-docs/index.js.map +1 -0
  87. package/dist/active-docs/long-term-profile.d.ts +24 -0
  88. package/dist/active-docs/long-term-profile.js +75 -0
  89. package/dist/active-docs/long-term-profile.js.map +1 -0
  90. package/dist/active-docs/taskboard.d.ts +12 -0
  91. package/dist/active-docs/taskboard.js +146 -0
  92. package/dist/active-docs/taskboard.js.map +1 -0
  93. package/dist/active-docs/userprofile.d.ts +12 -0
  94. package/dist/active-docs/userprofile.js +169 -0
  95. package/dist/active-docs/userprofile.js.map +1 -0
  96. package/dist/cli/commands/doctor.d.ts +9 -0
  97. package/dist/cli/commands/doctor.js +125 -0
  98. package/dist/cli/commands/doctor.js.map +1 -0
  99. package/dist/cli/commands/init.d.ts +1 -0
  100. package/dist/cli/commands/init.js +129 -0
  101. package/dist/cli/commands/init.js.map +1 -0
  102. package/dist/cli/commands/rename.d.ts +7 -0
  103. package/dist/cli/commands/rename.js +188 -0
  104. package/dist/cli/commands/rename.js.map +1 -0
  105. package/dist/cli/commands/upgrade.d.ts +6 -0
  106. package/dist/cli/commands/upgrade.js +66 -0
  107. package/dist/cli/commands/upgrade.js.map +1 -0
  108. package/dist/cli/index.d.ts +1 -0
  109. package/dist/cli/index.js +52 -0
  110. package/dist/cli/index.js.map +1 -0
  111. package/dist/cli/utils/assets.d.ts +3 -0
  112. package/dist/cli/utils/assets.js +20 -0
  113. package/dist/cli/utils/assets.js.map +1 -0
  114. package/dist/cli/utils/install-assets.d.ts +39 -0
  115. package/dist/cli/utils/install-assets.js +141 -0
  116. package/dist/cli/utils/install-assets.js.map +1 -0
  117. package/dist/cli/utils/lang.d.ts +1 -0
  118. package/dist/cli/utils/lang.js +32 -0
  119. package/dist/cli/utils/lang.js.map +1 -0
  120. package/dist/cli/utils/managed-assets.d.ts +9 -0
  121. package/dist/cli/utils/managed-assets.js +20 -0
  122. package/dist/cli/utils/managed-assets.js.map +1 -0
  123. package/dist/cli/utils/mcp-register.d.ts +2 -0
  124. package/dist/cli/utils/mcp-register.js +132 -0
  125. package/dist/cli/utils/mcp-register.js.map +1 -0
  126. package/dist/cli/utils/sync-vault.d.ts +14 -0
  127. package/dist/cli/utils/sync-vault.js +132 -0
  128. package/dist/cli/utils/sync-vault.js.map +1 -0
  129. package/dist/cli/utils/ui.d.ts +14 -0
  130. package/dist/cli/utils/ui.js +78 -0
  131. package/dist/cli/utils/ui.js.map +1 -0
  132. package/dist/cli/utils/version.d.ts +1 -0
  133. package/dist/cli/utils/version.js +4 -0
  134. package/dist/cli/utils/version.js.map +1 -0
  135. package/dist/config.d.ts +127 -0
  136. package/dist/config.js +356 -0
  137. package/dist/config.js.map +1 -0
  138. package/dist/core.d.ts +106 -0
  139. package/dist/core.js +286 -0
  140. package/dist/core.js.map +1 -0
  141. package/dist/db/consolidation.d.ts +14 -0
  142. package/dist/db/consolidation.js +28 -0
  143. package/dist/db/consolidation.js.map +1 -0
  144. package/dist/db/index.d.ts +22 -0
  145. package/dist/db/index.js +39 -0
  146. package/dist/db/index.js.map +1 -0
  147. package/dist/db/schema.d.ts +7 -0
  148. package/dist/db/schema.js +175 -0
  149. package/dist/db/schema.js.map +1 -0
  150. package/dist/index.d.ts +3 -0
  151. package/dist/index.js +5 -0
  152. package/dist/index.js.map +1 -0
  153. package/dist/server.d.ts +6 -0
  154. package/dist/server.js +303 -0
  155. package/dist/server.js.map +1 -0
  156. package/dist/services/capture.d.ts +101 -0
  157. package/dist/services/capture.js +297 -0
  158. package/dist/services/capture.js.map +1 -0
  159. package/dist/services/enhance.d.ts +51 -0
  160. package/dist/services/enhance.js +184 -0
  161. package/dist/services/enhance.js.map +1 -0
  162. package/dist/services/layer0.d.ts +24 -0
  163. package/dist/services/layer0.js +90 -0
  164. package/dist/services/layer0.js.map +1 -0
  165. package/dist/services/maintenance.d.ts +27 -0
  166. package/dist/services/maintenance.js +73 -0
  167. package/dist/services/maintenance.js.map +1 -0
  168. package/dist/services/retrieval.d.ts +120 -0
  169. package/dist/services/retrieval.js +571 -0
  170. package/dist/services/retrieval.js.map +1 -0
  171. package/dist/services/startup.d.ts +28 -0
  172. package/dist/services/startup.js +112 -0
  173. package/dist/services/startup.js.map +1 -0
  174. package/dist/skill-context/ask-global.d.ts +8 -0
  175. package/dist/skill-context/ask-global.js +21 -0
  176. package/dist/skill-context/ask-global.js.map +1 -0
  177. package/dist/skill-context/base.d.ts +48 -0
  178. package/dist/skill-context/base.js +5 -0
  179. package/dist/skill-context/base.js.map +1 -0
  180. package/dist/skill-context/daily-global.d.ts +8 -0
  181. package/dist/skill-context/daily-global.js +25 -0
  182. package/dist/skill-context/daily-global.js.map +1 -0
  183. package/dist/skill-context/index.d.ts +32 -0
  184. package/dist/skill-context/index.js +171 -0
  185. package/dist/skill-context/index.js.map +1 -0
  186. package/dist/skill-context/knowledge-strict.d.ts +8 -0
  187. package/dist/skill-context/knowledge-strict.js +26 -0
  188. package/dist/skill-context/knowledge-strict.js.map +1 -0
  189. package/dist/skill-context/review-strict.d.ts +8 -0
  190. package/dist/skill-context/review-strict.js +26 -0
  191. package/dist/skill-context/review-strict.js.map +1 -0
  192. package/dist/skill-context/revise-strict.d.ts +8 -0
  193. package/dist/skill-context/revise-strict.js +26 -0
  194. package/dist/skill-context/revise-strict.js.map +1 -0
  195. package/dist/skill-context/seed-profiles.d.ts +21 -0
  196. package/dist/skill-context/seed-profiles.js +80 -0
  197. package/dist/skill-context/seed-profiles.js.map +1 -0
  198. package/dist/types.d.ts +165 -0
  199. package/dist/types.js +76 -0
  200. package/dist/types.js.map +1 -0
  201. package/dist/utils/context-policy.d.ts +57 -0
  202. package/dist/utils/context-policy.js +333 -0
  203. package/dist/utils/context-policy.js.map +1 -0
  204. package/dist/utils/scan-state.d.ts +41 -0
  205. package/dist/utils/scan-state.js +79 -0
  206. package/dist/utils/scan-state.js.map +1 -0
  207. package/dist/utils/segmenter.d.ts +19 -0
  208. package/dist/utils/segmenter.js +75 -0
  209. package/dist/utils/segmenter.js.map +1 -0
  210. package/dist/utils/shared.d.ts +103 -0
  211. package/dist/utils/shared.js +313 -0
  212. package/dist/utils/shared.js.map +1 -0
  213. package/dist/utils/vault-indexer.d.ts +53 -0
  214. package/dist/utils/vault-indexer.js +256 -0
  215. package/dist/utils/vault-indexer.js.map +1 -0
  216. package/package.json +59 -0
@@ -0,0 +1,571 @@
1
+ /**
2
+ * retrieval.ts — 检索服务。
3
+ */
4
+ import { inClause, queryAll } from '../db/index.js';
5
+ import { daysAgo } from '../types.js';
6
+ import { tokenize } from '../utils/segmenter.js';
7
+ import { compactText, containsCjk, loadsJsonList } from '../utils/shared.js';
8
+ // ─── Score constants ──────────────────────────────────────────────────────────
9
+ const BASE_SCORES = {
10
+ exact_filter: 400,
11
+ fts5: 300,
12
+ hybrid_expand: 200,
13
+ like_fallback: 120,
14
+ };
15
+ const FIELD_SCORES = {
16
+ title: 120,
17
+ semantic_summary: 90,
18
+ summary: 70,
19
+ search_hints: 60,
20
+ tags: 30,
21
+ };
22
+ // ─── Private helpers ──────────────────────────────────────────────────────────
23
+ /**
24
+ * Build FTS5 query string from a user query.
25
+ * CJK → tokenize then quote each term: "四元数" "群"
26
+ * English → prefix match: term1* term2*
27
+ */
28
+ function ftsQuery(q) {
29
+ const hasCjk = containsCjk(q);
30
+ if (hasCjk) {
31
+ const terms = tokenize(q);
32
+ if (terms.length === 0)
33
+ return '';
34
+ return terms.map((t) => `"${t}"`).join(' ');
35
+ }
36
+ // English: split words, add * prefix suffix
37
+ const words = q.trim().split(/\s+/).filter(Boolean);
38
+ if (words.length === 0)
39
+ return '';
40
+ return words.map((w) => `${w}*`).join(' ');
41
+ }
42
+ /**
43
+ * Extract query terms for matching verification.
44
+ */
45
+ function queryTerms(query) {
46
+ if (containsCjk(query)) {
47
+ return tokenize(query);
48
+ }
49
+ return query.trim().toLowerCase().split(/\s+/).filter(Boolean);
50
+ }
51
+ /**
52
+ * Check if text contains all query terms.
53
+ */
54
+ function textMatchesTerms(text, terms, hasCjk) {
55
+ if (terms.length === 0)
56
+ return false;
57
+ const lower = text.toLowerCase();
58
+ if (hasCjk) {
59
+ return terms.every((t) => lower.includes(t));
60
+ }
61
+ return terms.every((t) => lower.includes(t));
62
+ }
63
+ /**
64
+ * Check which fields in a row matched the query.
65
+ */
66
+ function matchedFields(query, row) {
67
+ if (!query.trim())
68
+ return [];
69
+ const terms = queryTerms(query);
70
+ const hasCjk = containsCjk(query);
71
+ const fieldMap = {
72
+ title: 'title',
73
+ summary: 'summary',
74
+ semantic_summary: 'semantic_summary',
75
+ search_hints: 'search_hints',
76
+ tags: 'tags',
77
+ };
78
+ return Object.entries(fieldMap)
79
+ .filter(([col]) => {
80
+ const value = row[col];
81
+ return value != null && textMatchesTerms(String(value), terms, hasCjk);
82
+ })
83
+ .map(([, name]) => name);
84
+ }
85
+ /**
86
+ * Score a result based on match source and matched fields.
87
+ */
88
+ function scoreResult(matchSource, fields) {
89
+ const base = BASE_SCORES[matchSource] ?? 100;
90
+ const fieldBonus = fields.reduce((acc, f) => acc + (FIELD_SCORES[f] ?? 0), 0);
91
+ return base + fieldBonus;
92
+ }
93
+ /**
94
+ * Build a VaultQueryResult from a database row.
95
+ */
96
+ function buildQueryResult(row, matchSource, fields) {
97
+ const summary = row.summary != null ? String(row.summary) : null;
98
+ const semanticSummary = row.semantic_summary != null ? String(row.semantic_summary) : null;
99
+ return {
100
+ filePath: String(row.file_path),
101
+ title: row.title != null ? String(row.title) : '',
102
+ type: row.type != null ? String(row.type) : null,
103
+ status: row.status != null ? String(row.status) : null,
104
+ domain: row.domain != null ? String(row.domain) : null,
105
+ summary,
106
+ displaySummary: compactText(semanticSummary ?? summary),
107
+ matchSource,
108
+ matchedFields: fields,
109
+ score: scoreResult(matchSource, fields),
110
+ modifiedAt: row.modified_at != null ? String(row.modified_at) : null,
111
+ masteryStatus: row.status != null ? String(row.status) : null,
112
+ tags: loadsJsonList(row.tags),
113
+ aliases: loadsJsonList(row.aliases),
114
+ wikilinks: loadsJsonList(row.wikilinks),
115
+ backlinks: loadsJsonList(row.backlinks),
116
+ };
117
+ }
118
+ /**
119
+ * Build a SessionEvent from a database row.
120
+ */
121
+ function buildSessionEvent(row) {
122
+ return {
123
+ eventId: String(row.event_id),
124
+ timestamp: String(row.timestamp),
125
+ entryType: String(row.entry_type),
126
+ importance: Number(row.importance),
127
+ scope: row.scope != null ? String(row.scope) : null,
128
+ skillName: row.skill_name != null ? String(row.skill_name) : null,
129
+ summary: String(row.summary),
130
+ detail: row.detail != null ? String(row.detail) : null,
131
+ sourceRefs: loadsJsonList(row.source_refs),
132
+ relatedFiles: loadsJsonList(row.related_files),
133
+ relatedEntities: loadsJsonList(row.related_entities),
134
+ };
135
+ }
136
+ /**
137
+ * Merge two arrays and deduplicate by a key function.
138
+ * Items from primary appear first; secondary items are appended if not already seen.
139
+ */
140
+ function mergeAndDedupe(primary, secondary, keyFn) {
141
+ const seen = new Set(primary.map(keyFn));
142
+ const merged = [...primary];
143
+ for (const item of secondary) {
144
+ const key = keyFn(item);
145
+ if (!seen.has(key)) {
146
+ seen.add(key);
147
+ merged.push(item);
148
+ }
149
+ }
150
+ return merged;
151
+ }
152
+ /**
153
+ * Rerank vault query results using scene policy.
154
+ */
155
+ function rerankQueryResults(results, scenePolicy) {
156
+ if (!scenePolicy)
157
+ return results;
158
+ const rankingBias = scenePolicy.ranking_bias;
159
+ if (!rankingBias || Object.keys(rankingBias).length === 0)
160
+ return results;
161
+ const scored = results.map((r) => {
162
+ let bonus = 0;
163
+ if (r.type && rankingBias[r.type] != null) {
164
+ bonus += rankingBias[r.type];
165
+ }
166
+ if (r.domain && rankingBias[r.domain] != null) {
167
+ bonus += rankingBias[r.domain];
168
+ }
169
+ return { result: r, finalScore: r.score + bonus };
170
+ });
171
+ scored.sort((a, b) => b.finalScore - a.finalScore);
172
+ return scored.map((s) => s.result);
173
+ }
174
+ /**
175
+ * Rerank session events using scene policy.
176
+ */
177
+ function rerankRecentEvents(events, scenePolicy) {
178
+ if (!scenePolicy)
179
+ return events;
180
+ const bias = scenePolicy.recent_event_bias;
181
+ if (!bias || Object.keys(bias).length === 0)
182
+ return events;
183
+ const scored = events.map((e) => ({
184
+ event: e,
185
+ bonus: bias[e.entryType] ?? 0,
186
+ }));
187
+ scored.sort((a, b) => b.bonus - a.bonus);
188
+ return scored.map((s) => s.event);
189
+ }
190
+ // ─── Vault index SELECT fragment ──────────────────────────────────────────────
191
+ const VAULT_SELECT = `
192
+ vi.file_path, vi.title, vi.type, vi.status, vi.domain,
193
+ vi.summary, vi.semantic_summary, vi.search_hints,
194
+ vi.tags, vi.aliases, vi.wikilinks, vi.backlinks,
195
+ vi.modified_at
196
+ `.trim();
197
+ // ─── Public API ───────────────────────────────────────────────────────────────
198
+ /**
199
+ * Main vault search: FTS5 + LIKE fallback + exact filter.
200
+ */
201
+ export function queryVaultIndex(db, query, filters, limit, scenePolicy) {
202
+ const q = (query ?? '').trim();
203
+ const hasQuery = q.length > 0;
204
+ const hasFilters = filters != null && Object.keys(filters).length > 0;
205
+ // Build WHERE clause for filters
206
+ const filterConditions = [];
207
+ const filterParams = [];
208
+ if (hasFilters && filters != null) {
209
+ for (const [key, value] of Object.entries(filters)) {
210
+ filterConditions.push(`vi.${key} = ?`);
211
+ filterParams.push(value);
212
+ }
213
+ }
214
+ const filterWhere = filterConditions.length > 0 ? filterConditions.join(' AND ') : '';
215
+ // Case 1: No query, no filters → empty
216
+ if (!hasQuery && !hasFilters) {
217
+ return { results: [] };
218
+ }
219
+ // Case 2: No query, has filters → exact filter
220
+ if (!hasQuery && hasFilters) {
221
+ const sql = `
222
+ SELECT ${VAULT_SELECT}
223
+ FROM vault_index vi
224
+ WHERE ${filterWhere}
225
+ ORDER BY vi.modified_at DESC
226
+ LIMIT ?
227
+ `;
228
+ const rows = queryAll(db, sql, ...filterParams, limit);
229
+ const results = rows.map((row) => buildQueryResult(row, 'exact_filter', matchedFields(q, row)));
230
+ return { results: rerankQueryResults(results, scenePolicy) };
231
+ }
232
+ // Case 3: Has query — try FTS5 first
233
+ const ftsQ = ftsQuery(q);
234
+ let ftsRows = [];
235
+ let ftsError = false;
236
+ if (ftsQ) {
237
+ try {
238
+ let sql = `
239
+ SELECT ${VAULT_SELECT}
240
+ FROM vault_index vi
241
+ JOIN vault_fts vf ON vf.rowid = vi.rowid
242
+ WHERE vault_fts MATCH ?
243
+ `;
244
+ const params = [ftsQ];
245
+ if (filterWhere) {
246
+ sql += ` AND ${filterWhere}`;
247
+ params.push(...filterParams);
248
+ }
249
+ sql += ' ORDER BY vi.modified_at DESC LIMIT ?';
250
+ params.push(limit * 2); // Over-fetch for reranking
251
+ ftsRows = queryAll(db, sql, ...params);
252
+ }
253
+ catch {
254
+ ftsError = true;
255
+ }
256
+ }
257
+ const hasCjk = containsCjk(q);
258
+ const needsFallback = ftsError || (hasCjk && ftsRows.length < 3);
259
+ // FTS5 succeeded and has enough results
260
+ if (!needsFallback && ftsRows.length > 0) {
261
+ const results = ftsRows
262
+ .slice(0, limit)
263
+ .map((row) => buildQueryResult(row, 'fts5', matchedFields(q, row)));
264
+ return { results: rerankQueryResults(results, scenePolicy) };
265
+ }
266
+ // Case 4: LIKE fallback (CJK with few FTS results, or FTS error)
267
+ if (needsFallback || ftsRows.length === 0) {
268
+ // Try LIKE fallback
269
+ const likePattern = `%${q}%`;
270
+ let likeWhere = `(
271
+ vi.semantic_summary LIKE ? OR
272
+ vi.search_hints LIKE ? OR
273
+ vi.summary LIKE ? OR
274
+ vi.title LIKE ? OR
275
+ vi.tags LIKE ?
276
+ )`;
277
+ const likeParams = [likePattern, likePattern, likePattern, likePattern, likePattern];
278
+ if (filterWhere) {
279
+ likeWhere += ` AND ${filterWhere}`;
280
+ likeParams.push(...filterParams);
281
+ }
282
+ const likeSql = `
283
+ SELECT ${VAULT_SELECT}
284
+ FROM vault_index vi
285
+ WHERE ${likeWhere}
286
+ ORDER BY vi.modified_at DESC
287
+ LIMIT ?
288
+ `;
289
+ likeParams.push(limit);
290
+ const likeRows = queryAll(db, likeSql, ...likeParams);
291
+ // Merge FTS rows + LIKE rows, deduplicate by file_path
292
+ const likeSource = ftsRows.length > 0 ? 'hybrid_expand' : 'like_fallback';
293
+ const ftsTagged = ftsRows.map((row) => ({ row, source: 'fts5' }));
294
+ const likeTagged = likeRows.map((row) => ({ row, source: likeSource }));
295
+ const merged = mergeAndDedupe(ftsTagged, likeTagged, (item) => String(item.row.file_path));
296
+ const results = merged
297
+ .slice(0, limit)
298
+ .map(({ row, source }) => buildQueryResult(row, source, matchedFields(q, row)));
299
+ return { results: rerankQueryResults(results, scenePolicy) };
300
+ }
301
+ return { results: [] };
302
+ }
303
+ /**
304
+ * Query recent session log events.
305
+ */
306
+ export function queryRecentEvents(db, opts) {
307
+ const { days, entryType, scope, query, limit, scenePolicy } = opts;
308
+ const cutoff = daysAgo(days);
309
+ const q = (query ?? '').trim();
310
+ const hasQuery = q.length > 0;
311
+ // Build base conditions
312
+ const baseConds = ['sl.timestamp >= ?'];
313
+ const baseParams = [cutoff];
314
+ if (entryType) {
315
+ baseConds.push('sl.entry_type = ?');
316
+ baseParams.push(entryType);
317
+ }
318
+ if (scope) {
319
+ baseConds.push('sl.scope = ?');
320
+ baseParams.push(scope);
321
+ }
322
+ const baseWhere = baseConds.join(' AND ');
323
+ const SESSION_SELECT = `
324
+ sl.event_id, sl.timestamp, sl.entry_type, sl.importance,
325
+ sl.scope, sl.skill_name, sl.summary, sl.detail,
326
+ sl.source_refs, sl.related_files, sl.related_entities
327
+ `.trim();
328
+ // No query → direct filter
329
+ if (!hasQuery) {
330
+ const sql = `
331
+ SELECT ${SESSION_SELECT}
332
+ FROM session_log sl
333
+ WHERE ${baseWhere}
334
+ ORDER BY sl.timestamp DESC
335
+ LIMIT ?
336
+ `;
337
+ const rows = queryAll(db, sql, ...baseParams, limit);
338
+ const events = rows.map(buildSessionEvent);
339
+ return { events: rerankRecentEvents(events, scenePolicy) };
340
+ }
341
+ // Has query → try FTS5
342
+ const ftsQ = ftsQuery(q);
343
+ let ftsRows = [];
344
+ let ftsError = false;
345
+ if (ftsQ) {
346
+ try {
347
+ const sql = `
348
+ SELECT ${SESSION_SELECT}
349
+ FROM session_log sl
350
+ JOIN session_fts sf ON sf.rowid = sl.id
351
+ WHERE session_fts MATCH ?
352
+ AND ${baseWhere}
353
+ ORDER BY sl.timestamp DESC
354
+ LIMIT ?
355
+ `;
356
+ ftsRows = queryAll(db, sql, ftsQ, ...baseParams, limit * 2);
357
+ }
358
+ catch {
359
+ ftsError = true;
360
+ }
361
+ }
362
+ const hasCjk = containsCjk(q);
363
+ const needsFallback = ftsError || (hasCjk && ftsRows.length < 3);
364
+ if (!needsFallback && ftsRows.length > 0) {
365
+ const events = ftsRows.slice(0, limit).map(buildSessionEvent);
366
+ return { events: rerankRecentEvents(events, scenePolicy) };
367
+ }
368
+ // LIKE fallback
369
+ const likePattern = `%${q}%`;
370
+ const likeWhere = `(
371
+ sl.summary LIKE ? OR
372
+ sl.detail LIKE ? OR
373
+ sl.related_entities LIKE ? OR
374
+ sl.search_hints LIKE ?
375
+ )`;
376
+ const likeParams = [likePattern, likePattern, likePattern, likePattern, ...baseParams];
377
+ const likeSql = `
378
+ SELECT ${SESSION_SELECT}
379
+ FROM session_log sl
380
+ WHERE ${likeWhere} AND ${baseWhere}
381
+ ORDER BY sl.timestamp DESC
382
+ LIMIT ?
383
+ `;
384
+ likeParams.push(limit);
385
+ const likeRows = queryAll(db, likeSql, ...likeParams);
386
+ // Merge FTS + LIKE rows, deduplicate by event_id
387
+ const merged = mergeAndDedupe(ftsRows, likeRows, (row) => String(row.event_id));
388
+ const events = merged.slice(0, limit).map(buildSessionEvent);
389
+ return { events: rerankRecentEvents(events, scenePolicy) };
390
+ }
391
+ /**
392
+ * Lookup vault index entries by exact file paths.
393
+ * Results are returned in the same order as the requested paths.
394
+ */
395
+ export function queryVaultIndexByPaths(db, filePaths) {
396
+ if (filePaths.length === 0)
397
+ return { results: [] };
398
+ const { clause, params: inParams } = inClause('vi.file_path', filePaths);
399
+ const sql = `
400
+ SELECT ${VAULT_SELECT}
401
+ FROM vault_index vi
402
+ WHERE ${clause}
403
+ `;
404
+ const rows = queryAll(db, sql, ...inParams);
405
+ // Sort by requested order
406
+ const rowMap = new Map();
407
+ for (const row of rows) {
408
+ rowMap.set(String(row.file_path), row);
409
+ }
410
+ const results = [];
411
+ for (const fp of filePaths) {
412
+ const row = rowMap.get(fp);
413
+ if (row) {
414
+ results.push(buildQueryResult(row, 'exact_filter', []));
415
+ }
416
+ }
417
+ return { results };
418
+ }
419
+ /**
420
+ * Lookup vault index entries by title (exact match).
421
+ */
422
+ export function queryVaultIndexByTitles(db, titles, pathPrefix) {
423
+ if (titles.length === 0)
424
+ return { results: [] };
425
+ const { clause, params: inParams } = inClause('vi.title', titles);
426
+ const params = [...inParams];
427
+ let sql = `
428
+ SELECT ${VAULT_SELECT}
429
+ FROM vault_index vi
430
+ WHERE ${clause}
431
+ `;
432
+ if (pathPrefix) {
433
+ sql += ' AND vi.file_path LIKE ?';
434
+ params.push(`${pathPrefix}%`);
435
+ }
436
+ sql += ' ORDER BY vi.modified_at DESC';
437
+ const rows = queryAll(db, sql, ...params);
438
+ const results = rows.map((row) => buildQueryResult(row, 'exact_filter', []));
439
+ return { results };
440
+ }
441
+ /**
442
+ * Query vault index entries by path prefix(es).
443
+ */
444
+ export function queryVaultIndexByPrefixes(db, opts) {
445
+ const { prefixes, typeFilter, statusFilter, limit = 50 } = opts;
446
+ if (prefixes.length === 0)
447
+ return { results: [] };
448
+ const conditions = [];
449
+ const params = [];
450
+ // prefix OR conditions
451
+ const prefixConds = prefixes.map(() => 'vi.file_path LIKE ?').join(' OR ');
452
+ conditions.push(`(${prefixConds})`);
453
+ for (const prefix of prefixes) {
454
+ params.push(`${prefix}%`);
455
+ }
456
+ if (typeFilter) {
457
+ conditions.push('vi.type = ?');
458
+ params.push(typeFilter);
459
+ }
460
+ if (statusFilter) {
461
+ conditions.push('vi.status = ?');
462
+ params.push(statusFilter);
463
+ }
464
+ const sql = `
465
+ SELECT ${VAULT_SELECT}
466
+ FROM vault_index vi
467
+ WHERE ${conditions.join(' AND ')}
468
+ ORDER BY vi.modified_at DESC
469
+ LIMIT ?
470
+ `;
471
+ params.push(limit);
472
+ const rows = queryAll(db, sql, ...params);
473
+ const results = rows.map((row) => buildQueryResult(row, 'exact_filter', []));
474
+ return { results };
475
+ }
476
+ /**
477
+ * Query vault index entries by domain(s) or tag(s).
478
+ */
479
+ export function queryVaultIndexByDomainsOrTags(db, opts) {
480
+ const { domains, tags, typeFilter, limit = 50 } = opts;
481
+ const orConditions = [];
482
+ const params = [];
483
+ if (domains && domains.length > 0) {
484
+ const { clause, params: domainParams } = inClause('vi.domain', domains);
485
+ orConditions.push(clause);
486
+ params.push(...domainParams);
487
+ }
488
+ if (tags && tags.length > 0) {
489
+ // Tags are stored as JSON arrays, use LIKE for each tag
490
+ const tagConds = tags.map(() => 'vi.tags LIKE ?').join(' OR ');
491
+ orConditions.push(`(${tagConds})`);
492
+ for (const tag of tags) {
493
+ params.push(`%"${tag}"%`);
494
+ }
495
+ }
496
+ if (orConditions.length === 0)
497
+ return { results: [] };
498
+ const conditions = [`(${orConditions.join(' OR ')})`];
499
+ if (typeFilter) {
500
+ conditions.push('vi.type = ?');
501
+ params.push(typeFilter);
502
+ }
503
+ const sql = `
504
+ SELECT ${VAULT_SELECT}
505
+ FROM vault_index vi
506
+ WHERE ${conditions.join(' AND ')}
507
+ ORDER BY vi.modified_at DESC
508
+ LIMIT ?
509
+ `;
510
+ params.push(limit);
511
+ const rows = queryAll(db, sql, ...params);
512
+ const results = rows.map((row) => buildQueryResult(row, 'exact_filter', []));
513
+ return { results };
514
+ }
515
+ /**
516
+ * Query memory items.
517
+ */
518
+ export function queryMemoryItems(db, opts) {
519
+ const { target, section, slotKey, statusFilter, limit = 100 } = opts;
520
+ const conditions = [];
521
+ const params = [];
522
+ if (target) {
523
+ conditions.push('target = ?');
524
+ params.push(target);
525
+ }
526
+ if (section) {
527
+ conditions.push('section = ?');
528
+ params.push(section);
529
+ }
530
+ if (slotKey) {
531
+ conditions.push('slot_key = ?');
532
+ params.push(slotKey);
533
+ }
534
+ if (statusFilter) {
535
+ conditions.push('status = ?');
536
+ params.push(statusFilter);
537
+ }
538
+ const whereClause = conditions.length > 0 ? `WHERE ${conditions.join(' AND ')}` : '';
539
+ const sql = `
540
+ SELECT
541
+ item_id, target, section, slot_key, content,
542
+ confidence, source_event_ids, source_refs, related_files,
543
+ manual_flag, status, superseded_by, last_confirmed_at,
544
+ updated_at, expires_at
545
+ FROM memory_items
546
+ ${whereClause}
547
+ ORDER BY updated_at DESC
548
+ LIMIT ?
549
+ `;
550
+ params.push(limit);
551
+ const rows = queryAll(db, sql, ...params);
552
+ const items = rows.map((row) => ({
553
+ itemId: String(row.item_id),
554
+ target: String(row.target),
555
+ section: String(row.section),
556
+ slotKey: String(row.slot_key),
557
+ content: String(row.content),
558
+ confidence: row.confidence != null ? String(row.confidence) : null,
559
+ sourceEventIds: loadsJsonList(row.source_event_ids),
560
+ sourceRefs: loadsJsonList(row.source_refs),
561
+ relatedFiles: loadsJsonList(row.related_files),
562
+ manualFlag: Number(row.manual_flag) !== 0,
563
+ status: String(row.status),
564
+ supersededBy: row.superseded_by != null ? String(row.superseded_by) : null,
565
+ lastConfirmedAt: row.last_confirmed_at != null ? String(row.last_confirmed_at) : null,
566
+ updatedAt: String(row.updated_at),
567
+ expiresAt: row.expires_at != null ? String(row.expires_at) : null,
568
+ }));
569
+ return { items };
570
+ }
571
+ //# sourceMappingURL=retrieval.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retrieval.js","sourceRoot":"","sources":["../../src/services/retrieval.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * startup.ts — 启动服务。
3
+ *
4
+ * Orchestrates session initialization: schema init, vault scan, enhance
5
+ * queue processing, maintenance, and Layer 0 summary construction.
6
+ */
7
+ import type Database from 'better-sqlite3';
8
+ import type { StartupResult } from '../types.js';
9
+ /**
10
+ * Orchestrate the full startup sequence for a session.
11
+ *
12
+ * Steps:
13
+ * 1. Init DB schema
14
+ * 2. Detect previous unclean sessions
15
+ * 3. Register current session
16
+ * 4. Load custom dictionary (if exists)
17
+ * 5. Full vault scan (via dbPath stored on the db object)
18
+ * 6. Process enhance queue
19
+ * 7. Run maintenance if needed
20
+ * 8. Build Layer 0 summary
21
+ *
22
+ * @param db Open better-sqlite3 Database instance
23
+ * @param vaultRoot Absolute path to the vault root
24
+ * @param resolvedSessionId Session ID already resolved by the caller
25
+ * @param now Optional time override (ISO string or Date)
26
+ * @returns Startup result object with stats and Layer 0 summary
27
+ */
28
+ export declare function runStartup(db: Database.Database, vaultRoot: string, resolvedSessionId: string, now?: string | Date | null): StartupResult;