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,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 @@
|
|
|
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;
|