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,112 @@
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 { existsSync } from 'node:fs';
8
+ import { join } from 'node:path';
9
+ import { refreshTaskboard, refreshUserprofile } from '../active-docs/index.js';
10
+ import { getVaultConfig } from '../config.js';
11
+ import { initDb } from '../db/schema.js';
12
+ import { ensureContextPolicyExists, loadContextPolicy } from '../utils/context-policy.js';
13
+ import { loadCustomDict } from '../utils/segmenter.js';
14
+ import { coerceNow, countRows } from '../utils/shared.js';
15
+ import { fullScan } from '../utils/vault-indexer.js';
16
+ import { latestSessionBridge } from './capture.js';
17
+ import { processEnhanceQueue } from './enhance.js';
18
+ import { buildLayer0Summary } from './layer0.js';
19
+ import { maintenanceRun, needsMaintenance } from './maintenance.js';
20
+ // ─── runStartup ───────────────────────────────────────────────────────────────
21
+ /**
22
+ * Orchestrate the full startup sequence for a session.
23
+ *
24
+ * Steps:
25
+ * 1. Init DB schema
26
+ * 2. Detect previous unclean sessions
27
+ * 3. Register current session
28
+ * 4. Load custom dictionary (if exists)
29
+ * 5. Full vault scan (via dbPath stored on the db object)
30
+ * 6. Process enhance queue
31
+ * 7. Run maintenance if needed
32
+ * 8. Build Layer 0 summary
33
+ *
34
+ * @param db Open better-sqlite3 Database instance
35
+ * @param vaultRoot Absolute path to the vault root
36
+ * @param resolvedSessionId Session ID already resolved by the caller
37
+ * @param now Optional time override (ISO string or Date)
38
+ * @returns Startup result object with stats and Layer 0 summary
39
+ */
40
+ export function runStartup(db, vaultRoot, resolvedSessionId, now) {
41
+ const startedAt = coerceNow(now).toISOString();
42
+ // 1. Init DB schema
43
+ initDb(db);
44
+ // 2. Check for previous unclean sessions
45
+ const previousUnclean = db
46
+ .prepare(`SELECT session_id FROM session_state
47
+ WHERE closed_at IS NULL AND session_id != ?
48
+ ORDER BY last_seen_at DESC LIMIT 1`)
49
+ .get(resolvedSessionId);
50
+ // 3. Register current session
51
+ db.prepare(`
52
+ INSERT INTO session_state (session_id, started_at, last_seen_at, closed_at, close_status)
53
+ VALUES (?, ?, ?, NULL, NULL)
54
+ ON CONFLICT(session_id) DO UPDATE SET
55
+ last_seen_at = excluded.last_seen_at,
56
+ closed_at = NULL,
57
+ close_status = NULL
58
+ `).run(resolvedSessionId, startedAt, startedAt);
59
+ // 4. Load custom dictionary (before scan so tokens use updated segmenter)
60
+ const config = getVaultConfig();
61
+ if (config) {
62
+ const dictPath = join(config.subDirPath('system', 'memory'), 'custom_dict.txt');
63
+ if (existsSync(dictPath)) {
64
+ try {
65
+ loadCustomDict(dictPath);
66
+ }
67
+ catch (e) {
68
+ console.warn(`[lifeos] Failed to load custom dict ${dictPath}:`, e);
69
+ }
70
+ }
71
+ }
72
+ // 5. Full vault scan — vault-indexer opens its own DB connection via dbPath
73
+ let scanIndexed = 0;
74
+ try {
75
+ const dbPath = db.name; // better-sqlite3 exposes .name as the db file path
76
+ const scanResult = fullScan(vaultRoot, dbPath);
77
+ scanIndexed = scanResult.indexed;
78
+ }
79
+ catch (e) {
80
+ console.warn('[lifeos] vault scan failed:', e);
81
+ scanIndexed = 0;
82
+ }
83
+ // 6. Enhance queue processing
84
+ const enhanceResult = processEnhanceQueue(db, vaultRoot, 5);
85
+ // 7. Maintenance check
86
+ let maintenanceResult = null;
87
+ if (needsMaintenance(db, now)) {
88
+ maintenanceResult = maintenanceRun(db, now);
89
+ }
90
+ // 8. Refresh active docs before building Layer 0 from their AUTO sections.
91
+ refreshTaskboard(db, vaultRoot);
92
+ refreshUserprofile(db, vaultRoot);
93
+ // 9. Load context policy and build Layer 0
94
+ ensureContextPolicyExists(vaultRoot);
95
+ const policy = loadContextPolicy(vaultRoot);
96
+ const bridgeRow = latestSessionBridge(db, resolvedSessionId) ?? latestSessionBridge(db);
97
+ const bridgeText = bridgeRow ? bridgeRow.summary : null;
98
+ // 10. Stats
99
+ const totalFiles = countRows(db, 'vault_index');
100
+ const enhanceQueueSize = countRows(db, 'enhance_queue', "status = 'pending'");
101
+ return {
102
+ layer0_summary: buildLayer0Summary(vaultRoot, policy, bridgeText),
103
+ vault_stats: { total_files: totalFiles, updated_since_last: scanIndexed },
104
+ enhance_queue_size: enhanceQueueSize,
105
+ enhanced_files: enhanceResult.processed,
106
+ last_session_bridge: bridgeText,
107
+ recovered_from_unclean_shutdown: previousUnclean !== undefined,
108
+ previous_unclean_session_id: previousUnclean?.session_id ?? null,
109
+ maintenance: maintenanceResult,
110
+ };
111
+ }
112
+ //# sourceMappingURL=startup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"startup.js","sourceRoot":"","sources":["../../src/services/startup.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * ask-global.ts — /ask 技能上下文画像。
3
+ *
4
+ * General-purpose question answering. Falls back to domain/tag matching.
5
+ * Balanced weights with no strong type bias.
6
+ */
7
+ import type { SeedProfileConfig } from './base.js';
8
+ export declare const ASK_GLOBAL: SeedProfileConfig;
@@ -0,0 +1,21 @@
1
+ /**
2
+ * ask-global.ts — /ask 技能上下文画像。
3
+ *
4
+ * General-purpose question answering. Falls back to domain/tag matching.
5
+ * Balanced weights with no strong type bias.
6
+ */
7
+ export const ASK_GLOBAL = {
8
+ name: 'ask_global',
9
+ loadTaskboard: false,
10
+ allowDomainTagFallback: true,
11
+ rankingBias: {},
12
+ recentEventBias: {
13
+ decision: 20,
14
+ correction: 20,
15
+ preference: 10,
16
+ },
17
+ vaultQueryLimit: 10,
18
+ recentEventLimit: 8,
19
+ recentEventDays: 14,
20
+ };
21
+ //# sourceMappingURL=ask-global.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ask-global.js","sourceRoot":"","sources":["../../src/skill-context/ask-global.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,MAAM,CAAC,MAAM,UAAU,GAAsB;IAC5C,IAAI,EAAE,YAAY;IAClB,aAAa,EAAE,KAAK;IACpB,sBAAsB,EAAE,IAAI;IAC5B,WAAW,EAAE,EAAE;IACf,eAAe,EAAE;QAChB,QAAQ,EAAE,EAAE;QACZ,UAAU,EAAE,EAAE;QACd,UAAU,EAAE,EAAE;KACd;IACD,eAAe,EAAE,EAAE;IACnB,gBAAgB,EAAE,CAAC;IACnB,eAAe,EAAE,EAAE;CACnB,CAAC"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * skill-context/base.ts — 技能上下文公共类型定义。
3
+ */
4
+ import type { MemoryItem, SessionEvent, VaultQueryResult } from '../services/retrieval.js';
5
+ /**
6
+ * Configuration for a skill context seed profile.
7
+ * Controls how vault results, recent events, and memory items are selected.
8
+ */
9
+ export interface SeedProfileConfig {
10
+ /** Profile identifier (e.g. 'revise_strict') */
11
+ name: string;
12
+ /** Whether to load and include the TaskBoard summary */
13
+ loadTaskboard: boolean;
14
+ /** Whether to fall back to domain/tag matching when no direct results are found */
15
+ allowDomainTagFallback: boolean;
16
+ /**
17
+ * Ranking bias map: bucket/type name → bonus score added when reranking vault results.
18
+ * Higher values push matching items to the top.
19
+ * Example: { revise: 50, knowledge: 30 }
20
+ */
21
+ rankingBias: Record<string, number>;
22
+ /**
23
+ * Recent event bias map: entry_type → bonus score for reranking session events.
24
+ * Example: { correction: 40, skill_completion: 20 }
25
+ */
26
+ recentEventBias: Record<string, number>;
27
+ /** Maximum number of vault index results to return */
28
+ vaultQueryLimit: number;
29
+ /** Maximum number of recent session events to return */
30
+ recentEventLimit: number;
31
+ /** Look-back window in days for recent events */
32
+ recentEventDays: number;
33
+ }
34
+ /**
35
+ * Output of buildSkillContext — assembled context for a skill execution.
36
+ */
37
+ export interface SkillContextResult {
38
+ /** Profile name used to assemble this context */
39
+ profile: string;
40
+ /** Vault index search results, reranked by profile bias */
41
+ vaultResults: VaultQueryResult[];
42
+ /** Recent session events, reranked by profile bias */
43
+ recentEvents: SessionEvent[];
44
+ /** Active memory items for all active-doc targets */
45
+ memoryItems: MemoryItem[];
46
+ /** Optional TaskBoard focus section content (loaded when profile.loadTaskboard=true) */
47
+ taskboardSummary?: string;
48
+ }
@@ -0,0 +1,5 @@
1
+ /**
2
+ * skill-context/base.ts — 技能上下文公共类型定义。
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=base.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.js","sourceRoot":"","sources":["../../src/skill-context/base.ts"],"names":[],"mappings":"AAAA;;GAEG"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * daily-global.ts — /today 技能上下文画像。
3
+ *
4
+ * Used for morning planning: prioritizes active projects and daily notes.
5
+ * Taskboard is loaded. No domain/tag fallback needed.
6
+ */
7
+ import type { SeedProfileConfig } from './base.js';
8
+ export declare const DAILY_GLOBAL: SeedProfileConfig;
@@ -0,0 +1,25 @@
1
+ /**
2
+ * daily-global.ts — /today 技能上下文画像。
3
+ *
4
+ * Used for morning planning: prioritizes active projects and daily notes.
5
+ * Taskboard is loaded. No domain/tag fallback needed.
6
+ */
7
+ export const DAILY_GLOBAL = {
8
+ name: 'daily_global',
9
+ loadTaskboard: true,
10
+ allowDomainTagFallback: false,
11
+ rankingBias: {
12
+ project: 60,
13
+ revise: 45,
14
+ daily: 30,
15
+ },
16
+ recentEventBias: {
17
+ decision: 35,
18
+ skill_completion: 15,
19
+ milestone: 10,
20
+ },
21
+ vaultQueryLimit: 10,
22
+ recentEventLimit: 15,
23
+ recentEventDays: 7,
24
+ };
25
+ //# sourceMappingURL=daily-global.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"daily-global.js","sourceRoot":"","sources":["../../src/skill-context/daily-global.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,MAAM,CAAC,MAAM,YAAY,GAAsB;IAC9C,IAAI,EAAE,cAAc;IACpB,aAAa,EAAE,IAAI;IACnB,sBAAsB,EAAE,KAAK;IAC7B,WAAW,EAAE;QACZ,OAAO,EAAE,EAAE;QACX,MAAM,EAAE,EAAE;QACV,KAAK,EAAE,EAAE;KACT;IACD,eAAe,EAAE;QAChB,QAAQ,EAAE,EAAE;QACZ,gBAAgB,EAAE,EAAE;QACpB,SAAS,EAAE,EAAE;KACb;IACD,eAAe,EAAE,EAAE;IACnB,gBAAgB,EAAE,EAAE;IACpB,eAAe,EAAE,CAAC;CAClB,CAAC"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * skill-context/index.ts — 技能上下文组装入口。
3
+ *
4
+ * buildSkillContext assembles vault results, recent events, and memory items
5
+ * for a skill execution using the named seed profile's bias configuration.
6
+ */
7
+ import type Database from 'better-sqlite3';
8
+ import type { SkillContextResult } from './base.js';
9
+ export interface BuildSkillContextOpts {
10
+ /** Profile name — must be registered in seed-profiles registry */
11
+ skillProfile: string;
12
+ /** Explicitly related file paths to include in vault lookup */
13
+ relatedFiles?: string[];
14
+ /** Free-text query for vault + event search */
15
+ query?: string;
16
+ /** Override the vault query limit from the profile config */
17
+ limit?: number;
18
+ }
19
+ /**
20
+ * Assemble skill context from DB and active docs.
21
+ *
22
+ * Steps:
23
+ * 1. Resolve profile config
24
+ * 2. Query vault_index: related_files (exact) + query (FTS)
25
+ * 3. Apply profile ranking bias
26
+ * 4. Query recent session events with profile event bias
27
+ * 5. Query active memory items
28
+ * 6. Optionally load TaskBoard focus section
29
+ * 7. Return assembled SkillContextResult
30
+ */
31
+ export declare function buildSkillContext(db: Database.Database, vaultRoot: string, opts: BuildSkillContextOpts): SkillContextResult;
32
+ export type { SeedProfileConfig, SkillContextResult } from './base.js';
@@ -0,0 +1,171 @@
1
+ /**
2
+ * skill-context/index.ts — 技能上下文组装入口。
3
+ *
4
+ * buildSkillContext assembles vault results, recent events, and memory items
5
+ * for a skill execution using the named seed profile's bias configuration.
6
+ */
7
+ import { existsSync, readFileSync } from 'node:fs';
8
+ import { join } from 'node:path';
9
+ import { getVaultConfig, resolveConfig } from '../config.js';
10
+ import { extractAutoSection } from '../services/layer0.js';
11
+ import { queryMemoryItems, queryRecentEvents, queryVaultIndex, queryVaultIndexByDomainsOrTags, queryVaultIndexByPaths, } from '../services/retrieval.js';
12
+ import { getProfile } from './seed-profiles.js';
13
+ // ─── Reranking helpers ────────────────────────────────────────────────────────
14
+ /**
15
+ * Apply profile ranking bias to vault results.
16
+ * Adds bonus score based on the result's type matching rankingBias keys.
17
+ */
18
+ function rerankVaultResults(results, rankingBias) {
19
+ if (Object.keys(rankingBias).length === 0)
20
+ return results;
21
+ const scored = results.map((r) => {
22
+ let bonus = 0;
23
+ // Check type match
24
+ if (r.type && rankingBias[r.type] != null) {
25
+ bonus += rankingBias[r.type];
26
+ }
27
+ // Check status match (e.g. 'revise', 'draft')
28
+ if (r.status && rankingBias[r.status] != null) {
29
+ bonus += rankingBias[r.status];
30
+ }
31
+ return { result: r, finalScore: r.score + bonus };
32
+ });
33
+ scored.sort((a, b) => b.finalScore - a.finalScore);
34
+ return scored.map((s) => s.result);
35
+ }
36
+ /**
37
+ * Apply profile recent event bias to session events.
38
+ */
39
+ function rerankRecentEvents(events, recentEventBias) {
40
+ if (Object.keys(recentEventBias).length === 0)
41
+ return events;
42
+ const scored = events.map((e) => ({
43
+ event: e,
44
+ bonus: recentEventBias[e.entryType] ?? 0,
45
+ }));
46
+ scored.sort((a, b) => b.bonus - a.bonus || 0);
47
+ return scored.map((s) => s.event);
48
+ }
49
+ // ─── TaskBoard summary loader ─────────────────────────────────────────────────
50
+ function loadTaskboardSummary(vaultRoot) {
51
+ const vc = getVaultConfig() ?? resolveConfig(vaultRoot);
52
+ const memDir = vc.memoryDir();
53
+ const tbPath = join(memDir, 'TaskBoard.md');
54
+ if (!existsSync(tbPath))
55
+ return undefined;
56
+ const content = readFileSync(tbPath, 'utf-8');
57
+ const focus = extractAutoSection(content, 'focus');
58
+ return focus || undefined;
59
+ }
60
+ // ─── Domain/tag fallback ──────────────────────────────────────────────────────
61
+ /**
62
+ * Extract domain names from related file paths.
63
+ * Uses vault config to infer domains.
64
+ */
65
+ function inferDomainsFromFiles(filePaths, vaultRoot) {
66
+ const vc = getVaultConfig() ?? resolveConfig(vaultRoot);
67
+ const domains = new Set();
68
+ for (const fp of filePaths) {
69
+ const domain = vc.inferDomainFromPath(fp);
70
+ if (domain)
71
+ domains.add(domain);
72
+ }
73
+ return [...domains];
74
+ }
75
+ /**
76
+ * Assemble skill context from DB and active docs.
77
+ *
78
+ * Steps:
79
+ * 1. Resolve profile config
80
+ * 2. Query vault_index: related_files (exact) + query (FTS)
81
+ * 3. Apply profile ranking bias
82
+ * 4. Query recent session events with profile event bias
83
+ * 5. Query active memory items
84
+ * 6. Optionally load TaskBoard focus section
85
+ * 7. Return assembled SkillContextResult
86
+ */
87
+ export function buildSkillContext(db, vaultRoot, opts) {
88
+ const { skillProfile, relatedFiles = [], query = '', limit } = opts;
89
+ // 1. Resolve profile config
90
+ const profile = getProfile(skillProfile) ?? {
91
+ name: skillProfile,
92
+ loadTaskboard: false,
93
+ allowDomainTagFallback: false,
94
+ rankingBias: {},
95
+ recentEventBias: {},
96
+ vaultQueryLimit: 10,
97
+ recentEventLimit: 10,
98
+ recentEventDays: 30,
99
+ };
100
+ const vaultLimit = limit ?? profile.vaultQueryLimit;
101
+ // 2a. Exact lookup for related files
102
+ let vaultResults = [];
103
+ if (relatedFiles.length > 0) {
104
+ const { results: exactResults } = queryVaultIndexByPaths(db, relatedFiles);
105
+ vaultResults.push(...exactResults);
106
+ }
107
+ // 2b. FTS / keyword query
108
+ if (query.trim()) {
109
+ const { results: queryResults } = queryVaultIndex(db, query, null, vaultLimit * 2, // Over-fetch for reranking
110
+ null);
111
+ // Merge, avoiding duplicates
112
+ const existingPaths = new Set(vaultResults.map((r) => r.filePath));
113
+ for (const r of queryResults) {
114
+ if (!existingPaths.has(r.filePath)) {
115
+ vaultResults.push(r);
116
+ existingPaths.add(r.filePath);
117
+ }
118
+ }
119
+ }
120
+ // 2c. Domain/tag fallback when allowed and results are sparse
121
+ if (profile.allowDomainTagFallback && vaultResults.length < 3) {
122
+ const domains = inferDomainsFromFiles(relatedFiles, vaultRoot);
123
+ if (domains.length > 0) {
124
+ const { results: domainResults } = queryVaultIndexByDomainsOrTags(db, {
125
+ domains,
126
+ limit: vaultLimit,
127
+ });
128
+ const existingPaths = new Set(vaultResults.map((r) => r.filePath));
129
+ for (const r of domainResults) {
130
+ if (!existingPaths.has(r.filePath)) {
131
+ vaultResults.push(r);
132
+ }
133
+ }
134
+ }
135
+ }
136
+ // 3. Rerank vault results by profile bias
137
+ vaultResults = rerankVaultResults(vaultResults, profile.rankingBias);
138
+ vaultResults = vaultResults.slice(0, vaultLimit);
139
+ // 4. Query recent session events
140
+ let { events: recentEvents } = queryRecentEvents(db, {
141
+ days: profile.recentEventDays,
142
+ limit: profile.recentEventLimit * 2, // Over-fetch for reranking
143
+ });
144
+ recentEvents = rerankRecentEvents(recentEvents, profile.recentEventBias);
145
+ recentEvents = recentEvents.slice(0, profile.recentEventLimit);
146
+ // 5. Query active memory items (both targets)
147
+ const { items: tbItems } = queryMemoryItems(db, {
148
+ target: 'TaskBoard',
149
+ statusFilter: 'active',
150
+ limit: 20,
151
+ });
152
+ const { items: upItems } = queryMemoryItems(db, {
153
+ target: 'UserProfile',
154
+ statusFilter: 'active',
155
+ limit: 20,
156
+ });
157
+ const memoryItems = [...tbItems, ...upItems];
158
+ // 6. Optionally load TaskBoard focus section
159
+ let taskboardSummary;
160
+ if (profile.loadTaskboard) {
161
+ taskboardSummary = loadTaskboardSummary(vaultRoot);
162
+ }
163
+ return {
164
+ profile: profile.name,
165
+ vaultResults,
166
+ recentEvents,
167
+ memoryItems,
168
+ taskboardSummary,
169
+ };
170
+ }
171
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/skill-context/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * knowledge-strict.ts — /knowledge 技能上下文画像。
3
+ *
4
+ * Strictly focused on knowledge notes and project files.
5
+ * Does NOT fall back to domain tags. Heavily weights knowledge-type items.
6
+ */
7
+ import type { SeedProfileConfig } from './base.js';
8
+ export declare const KNOWLEDGE_STRICT: SeedProfileConfig;
@@ -0,0 +1,26 @@
1
+ /**
2
+ * knowledge-strict.ts — /knowledge 技能上下文画像。
3
+ *
4
+ * Strictly focused on knowledge notes and project files.
5
+ * Does NOT fall back to domain tags. Heavily weights knowledge-type items.
6
+ */
7
+ export const KNOWLEDGE_STRICT = {
8
+ name: 'knowledge_strict',
9
+ loadTaskboard: false,
10
+ allowDomainTagFallback: false,
11
+ rankingBias: {
12
+ knowledge: 70,
13
+ project: 35,
14
+ resource: 25,
15
+ note: 60,
16
+ },
17
+ recentEventBias: {
18
+ correction: 35,
19
+ decision: 15,
20
+ skill_completion: 10,
21
+ },
22
+ vaultQueryLimit: 8,
23
+ recentEventLimit: 8,
24
+ recentEventDays: 30,
25
+ };
26
+ //# sourceMappingURL=knowledge-strict.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"knowledge-strict.js","sourceRoot":"","sources":["../../src/skill-context/knowledge-strict.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,MAAM,CAAC,MAAM,gBAAgB,GAAsB;IAClD,IAAI,EAAE,kBAAkB;IACxB,aAAa,EAAE,KAAK;IACpB,sBAAsB,EAAE,KAAK;IAC7B,WAAW,EAAE;QACZ,SAAS,EAAE,EAAE;QACb,OAAO,EAAE,EAAE;QACX,QAAQ,EAAE,EAAE;QACZ,IAAI,EAAE,EAAE;KACR;IACD,eAAe,EAAE;QAChB,UAAU,EAAE,EAAE;QACd,QAAQ,EAAE,EAAE;QACZ,gBAAgB,EAAE,EAAE;KACpB;IACD,eAAe,EAAE,CAAC;IAClB,gBAAgB,EAAE,CAAC;IACnB,eAAe,EAAE,EAAE;CACnB,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * review-strict.ts — /review 技能上下文画像。
3
+ *
4
+ * Strictly focused on knowledge/review items and corrections.
5
+ * Does NOT fall back to domain tags. Heavily weights correction events.
6
+ */
7
+ import type { SeedProfileConfig } from './base.js';
8
+ export declare const REVIEW_STRICT: SeedProfileConfig;
@@ -0,0 +1,26 @@
1
+ /**
2
+ * review-strict.ts — /review 技能上下文画像。
3
+ *
4
+ * Strictly focused on knowledge/review items and corrections.
5
+ * Does NOT fall back to domain tags. Heavily weights correction events.
6
+ */
7
+ export const REVIEW_STRICT = {
8
+ name: 'review_strict',
9
+ loadTaskboard: false,
10
+ allowDomainTagFallback: false,
11
+ rankingBias: {
12
+ review: 50,
13
+ knowledge: 30,
14
+ correction: 90,
15
+ note: 25,
16
+ },
17
+ recentEventBias: {
18
+ correction: 40,
19
+ skill_completion: 20,
20
+ milestone: 15,
21
+ },
22
+ vaultQueryLimit: 8,
23
+ recentEventLimit: 10,
24
+ recentEventDays: 30,
25
+ };
26
+ //# sourceMappingURL=review-strict.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review-strict.js","sourceRoot":"","sources":["../../src/skill-context/review-strict.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,MAAM,CAAC,MAAM,aAAa,GAAsB;IAC/C,IAAI,EAAE,eAAe;IACrB,aAAa,EAAE,KAAK;IACpB,sBAAsB,EAAE,KAAK;IAC7B,WAAW,EAAE;QACZ,MAAM,EAAE,EAAE;QACV,SAAS,EAAE,EAAE;QACb,UAAU,EAAE,EAAE;QACd,IAAI,EAAE,EAAE;KACR;IACD,eAAe,EAAE;QAChB,UAAU,EAAE,EAAE;QACd,gBAAgB,EAAE,EAAE;QACpB,SAAS,EAAE,EAAE;KACb;IACD,eAAe,EAAE,CAAC;IAClB,gBAAgB,EAAE,EAAE;IACpB,eAAe,EAAE,EAAE;CACnB,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * revise-strict.ts — /revise 技能上下文画像。
3
+ *
4
+ * Strictly focused on knowledge/revise items and corrections.
5
+ * Does NOT fall back to domain tags. Heavily weights correction events.
6
+ */
7
+ import type { SeedProfileConfig } from './base.js';
8
+ export declare const REVISE_STRICT: SeedProfileConfig;
@@ -0,0 +1,26 @@
1
+ /**
2
+ * revise-strict.ts — /revise 技能上下文画像。
3
+ *
4
+ * Strictly focused on knowledge/revise items and corrections.
5
+ * Does NOT fall back to domain tags. Heavily weights correction events.
6
+ */
7
+ export const REVISE_STRICT = {
8
+ name: 'revise_strict',
9
+ loadTaskboard: false,
10
+ allowDomainTagFallback: false,
11
+ rankingBias: {
12
+ revise: 50,
13
+ knowledge: 30,
14
+ correction: 90,
15
+ note: 25,
16
+ },
17
+ recentEventBias: {
18
+ correction: 40,
19
+ skill_completion: 20,
20
+ milestone: 15,
21
+ },
22
+ vaultQueryLimit: 8,
23
+ recentEventLimit: 10,
24
+ recentEventDays: 30,
25
+ };
26
+ //# sourceMappingURL=revise-strict.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"revise-strict.js","sourceRoot":"","sources":["../../src/skill-context/revise-strict.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,MAAM,CAAC,MAAM,aAAa,GAAsB;IAC/C,IAAI,EAAE,eAAe;IACrB,aAAa,EAAE,KAAK;IACpB,sBAAsB,EAAE,KAAK;IAC7B,WAAW,EAAE;QACZ,MAAM,EAAE,EAAE;QACV,SAAS,EAAE,EAAE;QACb,UAAU,EAAE,EAAE;QACd,IAAI,EAAE,EAAE;KACR;IACD,eAAe,EAAE;QAChB,UAAU,EAAE,EAAE;QACd,gBAAgB,EAAE,EAAE;QACpB,SAAS,EAAE,EAAE;KACb;IACD,eAAe,EAAE,CAAC;IAClB,gBAAgB,EAAE,EAAE;IACpB,eAAe,EAAE,EAAE;CACnB,CAAC"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * seed-profiles.ts — 技能画像注册表。
3
+ *
4
+ * Registry mapping profile names to SeedProfileConfig objects.
5
+ * Additional profiles (research_seed, project_seed) use defaults from context-policy.
6
+ */
7
+ import type { SeedProfileConfig } from './base.js';
8
+ /**
9
+ * Get a SeedProfileConfig by name.
10
+ * Returns null if the profile name is not registered.
11
+ */
12
+ export declare function getProfile(name: string): SeedProfileConfig | null;
13
+ /**
14
+ * List all registered profile names.
15
+ */
16
+ export declare function listProfiles(): string[];
17
+ /**
18
+ * Register a custom profile.
19
+ * Overwrites an existing profile with the same name.
20
+ */
21
+ export declare function registerProfile(config: SeedProfileConfig): void;