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.
- package/LICENSE +21 -0
- package/README.en.md +202 -0
- package/README.md +202 -0
- package/assets/lifeos-rules.en.md +162 -0
- package/assets/lifeos-rules.zh.md +162 -0
- package/assets/lifeos.yaml +56 -0
- package/assets/prompts/AI_LLMResearch_Prompt.en.md +120 -0
- package/assets/prompts/AI_LLMResearch_Prompt.zh.md +120 -0
- package/assets/prompts/Art_ChinesePainting_Prompt.en.md +147 -0
- package/assets/prompts/Art_ChinesePainting_Prompt.zh.md +148 -0
- package/assets/prompts/Cryptography_Prompt.en.md +148 -0
- package/assets/prompts/Cryptography_Prompt.zh.md +147 -0
- package/assets/prompts/History_ChineseCulture_Prompt.en.md +98 -0
- package/assets/prompts/History_ChineseCulture_Prompt.zh.md +98 -0
- package/assets/prompts/Math_HigherMathematics_Prompt.en.md +117 -0
- package/assets/prompts/Math_HigherMathematics_Prompt.zh.md +116 -0
- package/assets/schema/Frontmatter_Schema.md +139 -0
- package/assets/skills/_shared/completion-report.en.md +30 -0
- package/assets/skills/_shared/completion-report.zh.md +30 -0
- package/assets/skills/_shared/dual-agent-orchestrator.en.md +40 -0
- package/assets/skills/_shared/dual-agent-orchestrator.zh.md +40 -0
- package/assets/skills/_shared/learning-lifecycle.en.md +53 -0
- package/assets/skills/_shared/learning-lifecycle.zh.md +53 -0
- package/assets/skills/_shared/lifecycle.en.md +84 -0
- package/assets/skills/_shared/lifecycle.zh.md +84 -0
- package/assets/skills/_shared/memory-protocol.en.md +36 -0
- package/assets/skills/_shared/memory-protocol.zh.md +36 -0
- package/assets/skills/_shared/template-loading.en.md +26 -0
- package/assets/skills/_shared/template-loading.zh.md +26 -0
- package/assets/skills/archive/SKILL.en.md +300 -0
- package/assets/skills/archive/SKILL.zh.md +300 -0
- package/assets/skills/ask/SKILL.en.md +164 -0
- package/assets/skills/ask/SKILL.zh.md +164 -0
- package/assets/skills/brainstorm/SKILL.en.md +242 -0
- package/assets/skills/brainstorm/SKILL.zh.md +242 -0
- package/assets/skills/brainstorm/references/action-options.en.md +65 -0
- package/assets/skills/brainstorm/references/action-options.zh.md +65 -0
- package/assets/skills/knowledge/SKILL.en.md +202 -0
- package/assets/skills/knowledge/SKILL.zh.md +202 -0
- package/assets/skills/project/SKILL.en.md +133 -0
- package/assets/skills/project/SKILL.zh.md +133 -0
- package/assets/skills/project/references/execution-agent-prompt.en.md +148 -0
- package/assets/skills/project/references/execution-agent-prompt.zh.md +148 -0
- package/assets/skills/project/references/planning-agent-prompt.en.md +162 -0
- package/assets/skills/project/references/planning-agent-prompt.zh.md +162 -0
- package/assets/skills/read-pdf/SKILL.en.md +199 -0
- package/assets/skills/read-pdf/SKILL.zh.md +199 -0
- package/assets/skills/read-pdf/scripts/read_pdf.py +354 -0
- package/assets/skills/research/SKILL.en.md +107 -0
- package/assets/skills/research/SKILL.zh.md +107 -0
- package/assets/skills/research/references/execution-agent-prompt.en.md +166 -0
- package/assets/skills/research/references/execution-agent-prompt.zh.md +166 -0
- package/assets/skills/research/references/planning-agent-prompt.en.md +129 -0
- package/assets/skills/research/references/planning-agent-prompt.zh.md +129 -0
- package/assets/skills/revise/SKILL.en.md +258 -0
- package/assets/skills/revise/SKILL.zh.md +258 -0
- package/assets/skills/revise/references/grading-protocol.en.md +99 -0
- package/assets/skills/revise/references/grading-protocol.zh.md +99 -0
- package/assets/skills/today/SKILL.en.md +211 -0
- package/assets/skills/today/SKILL.zh.md +211 -0
- package/assets/templates/en/Daily_Template.md +25 -0
- package/assets/templates/en/Draft_Template.md +29 -0
- package/assets/templates/en/Knowledge_Template.md +86 -0
- package/assets/templates/en/Project_Template.md +110 -0
- package/assets/templates/en/Research_Template.md +46 -0
- package/assets/templates/en/Retrospective_Template.md +89 -0
- package/assets/templates/en/Revise_Template.md +24 -0
- package/assets/templates/en/Wiki_Template.md +35 -0
- package/assets/templates/zh/Daily_Template.md +26 -0
- package/assets/templates/zh/Draft_Template.md +29 -0
- package/assets/templates/zh/Knowledge_Template.md +86 -0
- package/assets/templates/zh/Project_Template.md +110 -0
- package/assets/templates/zh/Research_Template.md +46 -0
- package/assets/templates/zh/Retrospective_Template.md +89 -0
- package/assets/templates/zh/Revise_Template.md +24 -0
- package/assets/templates/zh/Wiki_Template.md +35 -0
- package/bin/lifeos.js +24 -0
- package/dist/active-docs/citations.d.ts +20 -0
- package/dist/active-docs/citations.js +74 -0
- package/dist/active-docs/citations.js.map +1 -0
- package/dist/active-docs/derived-memory.d.ts +57 -0
- package/dist/active-docs/derived-memory.js +161 -0
- package/dist/active-docs/derived-memory.js.map +1 -0
- package/dist/active-docs/index.d.ts +51 -0
- package/dist/active-docs/index.js +165 -0
- package/dist/active-docs/index.js.map +1 -0
- package/dist/active-docs/long-term-profile.d.ts +24 -0
- package/dist/active-docs/long-term-profile.js +75 -0
- package/dist/active-docs/long-term-profile.js.map +1 -0
- package/dist/active-docs/taskboard.d.ts +12 -0
- package/dist/active-docs/taskboard.js +146 -0
- package/dist/active-docs/taskboard.js.map +1 -0
- package/dist/active-docs/userprofile.d.ts +12 -0
- package/dist/active-docs/userprofile.js +169 -0
- package/dist/active-docs/userprofile.js.map +1 -0
- package/dist/cli/commands/doctor.d.ts +9 -0
- package/dist/cli/commands/doctor.js +125 -0
- package/dist/cli/commands/doctor.js.map +1 -0
- package/dist/cli/commands/init.d.ts +1 -0
- package/dist/cli/commands/init.js +129 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/commands/rename.d.ts +7 -0
- package/dist/cli/commands/rename.js +188 -0
- package/dist/cli/commands/rename.js.map +1 -0
- package/dist/cli/commands/upgrade.d.ts +6 -0
- package/dist/cli/commands/upgrade.js +66 -0
- package/dist/cli/commands/upgrade.js.map +1 -0
- package/dist/cli/index.d.ts +1 -0
- package/dist/cli/index.js +52 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/utils/assets.d.ts +3 -0
- package/dist/cli/utils/assets.js +20 -0
- package/dist/cli/utils/assets.js.map +1 -0
- package/dist/cli/utils/install-assets.d.ts +39 -0
- package/dist/cli/utils/install-assets.js +141 -0
- package/dist/cli/utils/install-assets.js.map +1 -0
- package/dist/cli/utils/lang.d.ts +1 -0
- package/dist/cli/utils/lang.js +32 -0
- package/dist/cli/utils/lang.js.map +1 -0
- package/dist/cli/utils/managed-assets.d.ts +9 -0
- package/dist/cli/utils/managed-assets.js +20 -0
- package/dist/cli/utils/managed-assets.js.map +1 -0
- package/dist/cli/utils/mcp-register.d.ts +2 -0
- package/dist/cli/utils/mcp-register.js +132 -0
- package/dist/cli/utils/mcp-register.js.map +1 -0
- package/dist/cli/utils/sync-vault.d.ts +14 -0
- package/dist/cli/utils/sync-vault.js +132 -0
- package/dist/cli/utils/sync-vault.js.map +1 -0
- package/dist/cli/utils/ui.d.ts +14 -0
- package/dist/cli/utils/ui.js +78 -0
- package/dist/cli/utils/ui.js.map +1 -0
- package/dist/cli/utils/version.d.ts +1 -0
- package/dist/cli/utils/version.js +4 -0
- package/dist/cli/utils/version.js.map +1 -0
- package/dist/config.d.ts +127 -0
- package/dist/config.js +356 -0
- package/dist/config.js.map +1 -0
- package/dist/core.d.ts +106 -0
- package/dist/core.js +286 -0
- package/dist/core.js.map +1 -0
- package/dist/db/consolidation.d.ts +14 -0
- package/dist/db/consolidation.js +28 -0
- package/dist/db/consolidation.js.map +1 -0
- package/dist/db/index.d.ts +22 -0
- package/dist/db/index.js +39 -0
- package/dist/db/index.js.map +1 -0
- package/dist/db/schema.d.ts +7 -0
- package/dist/db/schema.js +175 -0
- package/dist/db/schema.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -0
- package/dist/server.d.ts +6 -0
- package/dist/server.js +303 -0
- package/dist/server.js.map +1 -0
- package/dist/services/capture.d.ts +101 -0
- package/dist/services/capture.js +297 -0
- package/dist/services/capture.js.map +1 -0
- package/dist/services/enhance.d.ts +51 -0
- package/dist/services/enhance.js +184 -0
- package/dist/services/enhance.js.map +1 -0
- package/dist/services/layer0.d.ts +24 -0
- package/dist/services/layer0.js +90 -0
- package/dist/services/layer0.js.map +1 -0
- package/dist/services/maintenance.d.ts +27 -0
- package/dist/services/maintenance.js +73 -0
- package/dist/services/maintenance.js.map +1 -0
- package/dist/services/retrieval.d.ts +120 -0
- package/dist/services/retrieval.js +571 -0
- package/dist/services/retrieval.js.map +1 -0
- package/dist/services/startup.d.ts +28 -0
- package/dist/services/startup.js +112 -0
- package/dist/services/startup.js.map +1 -0
- package/dist/skill-context/ask-global.d.ts +8 -0
- package/dist/skill-context/ask-global.js +21 -0
- package/dist/skill-context/ask-global.js.map +1 -0
- package/dist/skill-context/base.d.ts +48 -0
- package/dist/skill-context/base.js +5 -0
- package/dist/skill-context/base.js.map +1 -0
- package/dist/skill-context/daily-global.d.ts +8 -0
- package/dist/skill-context/daily-global.js +25 -0
- package/dist/skill-context/daily-global.js.map +1 -0
- package/dist/skill-context/index.d.ts +32 -0
- package/dist/skill-context/index.js +171 -0
- package/dist/skill-context/index.js.map +1 -0
- package/dist/skill-context/knowledge-strict.d.ts +8 -0
- package/dist/skill-context/knowledge-strict.js +26 -0
- package/dist/skill-context/knowledge-strict.js.map +1 -0
- package/dist/skill-context/review-strict.d.ts +8 -0
- package/dist/skill-context/review-strict.js +26 -0
- package/dist/skill-context/review-strict.js.map +1 -0
- package/dist/skill-context/revise-strict.d.ts +8 -0
- package/dist/skill-context/revise-strict.js +26 -0
- package/dist/skill-context/revise-strict.js.map +1 -0
- package/dist/skill-context/seed-profiles.d.ts +21 -0
- package/dist/skill-context/seed-profiles.js +80 -0
- package/dist/skill-context/seed-profiles.js.map +1 -0
- package/dist/types.d.ts +165 -0
- package/dist/types.js +76 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/context-policy.d.ts +57 -0
- package/dist/utils/context-policy.js +333 -0
- package/dist/utils/context-policy.js.map +1 -0
- package/dist/utils/scan-state.d.ts +41 -0
- package/dist/utils/scan-state.js +79 -0
- package/dist/utils/scan-state.js.map +1 -0
- package/dist/utils/segmenter.d.ts +19 -0
- package/dist/utils/segmenter.js +75 -0
- package/dist/utils/segmenter.js.map +1 -0
- package/dist/utils/shared.d.ts +103 -0
- package/dist/utils/shared.js +313 -0
- package/dist/utils/shared.js.map +1 -0
- package/dist/utils/vault-indexer.d.ts +53 -0
- package/dist/utils/vault-indexer.js +256 -0
- package/dist/utils/vault-indexer.js.map +1 -0
- 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;
|