corivo 0.10.3 → 0.10.5
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/.claude/settings.local.json +8 -0
- package/README.md +1 -1
- package/README.short.md +13 -0
- package/dist/cli/commands/identity.d.ts +12 -0
- package/dist/cli/commands/identity.d.ts.map +1 -0
- package/dist/cli/commands/identity.js +90 -0
- package/dist/cli/commands/identity.js.map +1 -0
- package/dist/cli/commands/init.d.ts +7 -1
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +62 -40
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/query.d.ts.map +1 -1
- package/dist/cli/commands/query.js +36 -5
- package/dist/cli/commands/query.js.map +1 -1
- package/dist/cli/commands/save.d.ts.map +1 -1
- package/dist/cli/commands/save.js +43 -6
- package/dist/cli/commands/save.js.map +1 -1
- package/dist/cli/commands/setup-password.d.ts +11 -0
- package/dist/cli/commands/setup-password.d.ts.map +1 -0
- package/dist/cli/commands/setup-password.js +82 -0
- package/dist/cli/commands/setup-password.js.map +1 -0
- package/dist/cli/commands/start.d.ts +1 -1
- package/dist/cli/commands/start.d.ts.map +1 -1
- package/dist/cli/commands/start.js +31 -16
- package/dist/cli/commands/start.js.map +1 -1
- package/dist/cli/commands/status.d.ts.map +1 -1
- package/dist/cli/commands/status.js +27 -5
- package/dist/cli/commands/status.js.map +1 -1
- package/dist/cli/commands/unlock.d.ts +12 -0
- package/dist/cli/commands/unlock.d.ts.map +1 -0
- package/dist/cli/commands/unlock.js +107 -0
- package/dist/cli/commands/unlock.js.map +1 -0
- package/dist/cli/commands/verify-identity.d.ts +12 -0
- package/dist/cli/commands/verify-identity.d.ts.map +1 -0
- package/dist/cli/commands/verify-identity.js +105 -0
- package/dist/cli/commands/verify-identity.js.map +1 -0
- package/dist/cli/index.js +26 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/crypto/keys.d.ts +27 -0
- package/dist/crypto/keys.d.ts.map +1 -1
- package/dist/crypto/keys.js +77 -0
- package/dist/crypto/keys.js.map +1 -1
- package/dist/engine/associations.d.ts +101 -0
- package/dist/engine/associations.d.ts.map +1 -0
- package/dist/engine/associations.js +329 -0
- package/dist/engine/associations.js.map +1 -0
- package/dist/engine/conflict-detector.d.ts +55 -0
- package/dist/engine/conflict-detector.d.ts.map +1 -0
- package/dist/engine/conflict-detector.js +146 -0
- package/dist/engine/conflict-detector.js.map +1 -0
- package/dist/engine/consolidation.d.ts +96 -0
- package/dist/engine/consolidation.d.ts.map +1 -0
- package/dist/engine/consolidation.js +241 -0
- package/dist/engine/consolidation.js.map +1 -0
- package/dist/engine/follow-up.d.ts +48 -0
- package/dist/engine/follow-up.d.ts.map +1 -0
- package/dist/engine/follow-up.js +96 -0
- package/dist/engine/follow-up.js.map +1 -0
- package/dist/engine/heartbeat.d.ts +31 -1
- package/dist/engine/heartbeat.d.ts.map +1 -1
- package/dist/engine/heartbeat.js +184 -28
- package/dist/engine/heartbeat.js.map +1 -1
- package/dist/engine/query-history.d.ts +63 -0
- package/dist/engine/query-history.d.ts.map +1 -0
- package/dist/engine/query-history.js +139 -0
- package/dist/engine/query-history.js.map +1 -0
- package/dist/engine/weekly-summary.d.ts +47 -0
- package/dist/engine/weekly-summary.d.ts.map +1 -0
- package/dist/engine/weekly-summary.js +96 -0
- package/dist/engine/weekly-summary.js.map +1 -0
- package/dist/errors/index.d.ts +14 -0
- package/dist/errors/index.d.ts.map +1 -1
- package/dist/errors/index.js +24 -0
- package/dist/errors/index.js.map +1 -1
- package/dist/identity/auth.d.ts +188 -0
- package/dist/identity/auth.d.ts.map +1 -0
- package/dist/identity/auth.js +380 -0
- package/dist/identity/auth.js.map +1 -0
- package/dist/identity/collector.d.ts +130 -0
- package/dist/identity/collector.d.ts.map +1 -0
- package/dist/identity/collector.js +419 -0
- package/dist/identity/collector.js.map +1 -0
- package/dist/identity/fingerprint.d.ts +168 -0
- package/dist/identity/fingerprint.d.ts.map +1 -0
- package/dist/identity/fingerprint.js +682 -0
- package/dist/identity/fingerprint.js.map +1 -0
- package/dist/identity/identity.d.ts +151 -0
- package/dist/identity/identity.d.ts.map +1 -0
- package/dist/identity/identity.js +335 -0
- package/dist/identity/identity.js.map +1 -0
- package/dist/identity/index.d.ts +16 -0
- package/dist/identity/index.d.ts.map +1 -0
- package/dist/identity/index.js +16 -0
- package/dist/identity/index.js.map +1 -0
- package/dist/ingestors/claude-code.js +1 -1
- package/dist/ingestors/claude-code.js.map +1 -1
- package/dist/models/association.d.ts +112 -0
- package/dist/models/association.d.ts.map +1 -0
- package/dist/models/association.js +65 -0
- package/dist/models/association.js.map +1 -0
- package/dist/models/block.d.ts +1 -1
- package/dist/models/block.d.ts.map +1 -1
- package/dist/models/block.js +9 -5
- package/dist/models/block.js.map +1 -1
- package/dist/models/index.d.ts +1 -0
- package/dist/models/index.d.ts.map +1 -1
- package/dist/models/index.js +1 -0
- package/dist/models/index.js.map +1 -1
- package/dist/push/context.d.ts +49 -0
- package/dist/push/context.d.ts.map +1 -1
- package/dist/push/context.js +238 -0
- package/dist/push/context.js.map +1 -1
- package/dist/storage/database.d.ts +71 -1
- package/dist/storage/database.d.ts.map +1 -1
- package/dist/storage/database.js +372 -25
- package/dist/storage/database.js.map +1 -1
- package/dist-test/cli/commands/start.js +320 -0
- package/dist-test/errors/index.js +262 -0
- package/dist-test/models/block.js +123 -0
- package/dist-test/models/index.js +21 -0
- package/dist-test/models/pattern.js +34 -0
- package/dist-test/storage/database.js +643 -0
- package/package.json +1 -1
package/README.md
CHANGED
package/README.short.md
CHANGED
|
@@ -34,6 +34,19 @@ corivo start
|
|
|
34
34
|
|
|
35
35
|
# 停止心跳
|
|
36
36
|
corivo stop
|
|
37
|
+
|
|
38
|
+
# 注入规则到项目的 CLAUDE.md(Claude Code 集成)
|
|
39
|
+
corivo inject
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
## Claude Code 集成
|
|
43
|
+
|
|
44
|
+
Corivo 支持 `--no-password` 选项用于非交互式环境(如 Claude Code):
|
|
45
|
+
|
|
46
|
+
```bash
|
|
47
|
+
corivo save "内容" --annotation "决策 · project" --no-password
|
|
48
|
+
corivo query "关键词" --no-password
|
|
49
|
+
corivo status --no-password
|
|
37
50
|
```
|
|
38
51
|
|
|
39
52
|
## 开发
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"identity.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/identity.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAOH;;GAEG;AACH,wBAAsB,eAAe,CAAC,OAAO,EAAE;IAC7C,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,GAAG,OAAO,CAAC,IAAI,CAAC,CAyFhB"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLI 命令 - identity
|
|
3
|
+
*
|
|
4
|
+
* 查看和管理用户身份信息
|
|
5
|
+
*/
|
|
6
|
+
import fs from 'node:fs/promises';
|
|
7
|
+
import path from 'node:path';
|
|
8
|
+
import { getConfigDir } from '../../storage/database.js';
|
|
9
|
+
import { FingerprintCollector } from '../../identity/index.js';
|
|
10
|
+
/**
|
|
11
|
+
* 显示身份信息
|
|
12
|
+
*/
|
|
13
|
+
export async function identityCommand(options) {
|
|
14
|
+
const configDir = getConfigDir();
|
|
15
|
+
const identityPath = path.join(configDir, 'identity.json');
|
|
16
|
+
try {
|
|
17
|
+
const content = await fs.readFile(identityPath, 'utf-8');
|
|
18
|
+
const identity = JSON.parse(content);
|
|
19
|
+
console.log('\n═══════════════════════════════════════════════════════');
|
|
20
|
+
console.log(' Corivo 身份信息');
|
|
21
|
+
console.log('═══════════════════════════════════════════════════════\n');
|
|
22
|
+
console.log(`身份 ID: ${identity.identity_id}`);
|
|
23
|
+
console.log(`创建时间: ${new Date(identity.created_at).toLocaleString('zh-CN')}`);
|
|
24
|
+
console.log(`更新时间: ${new Date(identity.updated_at).toLocaleString('zh-CN')}`);
|
|
25
|
+
if (identity.display_name) {
|
|
26
|
+
console.log(`显示名称: ${identity.display_name}`);
|
|
27
|
+
}
|
|
28
|
+
// 显示平台指纹
|
|
29
|
+
if (Object.keys(identity.fingerprints).length > 0) {
|
|
30
|
+
console.log('\n关联的平台:');
|
|
31
|
+
const platformNames = {
|
|
32
|
+
claude_code: 'Claude Code',
|
|
33
|
+
feishu: '飞书',
|
|
34
|
+
device: '设备',
|
|
35
|
+
};
|
|
36
|
+
for (const [platform, data] of Object.entries(identity.fingerprints)) {
|
|
37
|
+
const fp = data;
|
|
38
|
+
console.log(` 🟢 ${platformNames[platform] || platform}: ${fp.value.substring(0, 8)}...`);
|
|
39
|
+
if (options.verbose) {
|
|
40
|
+
console.log(` 完整值: ${fp.value}`);
|
|
41
|
+
console.log(` 添加时间: ${new Date(fp.added_at).toLocaleString('zh-CN')}`);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
// 显示设备列表
|
|
46
|
+
if (Object.keys(identity.devices).length > 0) {
|
|
47
|
+
console.log('\n已授权设备:');
|
|
48
|
+
for (const [deviceId, data] of Object.entries(identity.devices)) {
|
|
49
|
+
const device = data;
|
|
50
|
+
const lastSeen = new Date(device.last_seen);
|
|
51
|
+
const now = new Date();
|
|
52
|
+
const diffMs = now.getTime() - lastSeen.getTime();
|
|
53
|
+
const diffMins = Math.floor(diffMs / 60000);
|
|
54
|
+
let status = '离线';
|
|
55
|
+
if (diffMins < 5) {
|
|
56
|
+
status = '在线 🟢';
|
|
57
|
+
}
|
|
58
|
+
else if (diffMins < 60) {
|
|
59
|
+
status = '最近活跃 🟡';
|
|
60
|
+
}
|
|
61
|
+
console.log(` 📱 ${device.name} (${deviceId.substring(0, 16)}...)`);
|
|
62
|
+
console.log(` 最后活跃: ${lastSeen.toLocaleString('zh-CN')} (${status})`);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
console.log('');
|
|
66
|
+
// 检查是否可以检测到新的指纹
|
|
67
|
+
if (options.verbose) {
|
|
68
|
+
console.log('正在扫描新的平台指纹...\n');
|
|
69
|
+
const fingerprints = await FingerprintCollector.collectAll();
|
|
70
|
+
for (const fp of fingerprints) {
|
|
71
|
+
const existing = identity.fingerprints[fp.platform];
|
|
72
|
+
if (!existing || existing.value !== fp.value) {
|
|
73
|
+
const platformNames = {
|
|
74
|
+
claude_code: 'Claude Code',
|
|
75
|
+
feishu: '飞书',
|
|
76
|
+
device: '设备',
|
|
77
|
+
};
|
|
78
|
+
console.log(` ➕ 新增: ${platformNames[fp.platform] || fp.platform} (${fp.value.substring(0, 8)}...)`);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
console.log('');
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
catch {
|
|
85
|
+
console.log('\n❌ 未找到身份信息');
|
|
86
|
+
console.log('请先运行: corivo init\n');
|
|
87
|
+
process.exit(1);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=identity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"identity.js","sourceRoot":"","sources":["../../../src/cli/commands/identity.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAsBH;;GAEG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAyHjD"}
|
|
@@ -1,7 +1,13 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* CLI 命令 - init
|
|
3
3
|
*
|
|
4
|
-
* 初始化 Corivo
|
|
4
|
+
* 初始化 Corivo,基于平台指纹创建身份
|
|
5
|
+
*
|
|
6
|
+
* v0.10+ 更新:
|
|
7
|
+
* - 基于平台指纹的用户身份识别(无需密码)
|
|
8
|
+
* - 跨设备身份关联
|
|
9
|
+
* - 数据库密钥明文存储(依赖文件系统权限)
|
|
10
|
+
* - init 后自动启动心跳守护进程
|
|
5
11
|
*/
|
|
6
12
|
import fs from 'node:fs/promises';
|
|
7
13
|
import fsSync from 'node:fs';
|
|
@@ -9,7 +15,8 @@ import path from 'node:path';
|
|
|
9
15
|
import { KeyManager } from '../../crypto/keys.js';
|
|
10
16
|
import { CorivoDatabase, getDefaultDatabasePath, getConfigDir } from '../../storage/database.js';
|
|
11
17
|
import { FileSystemError } from '../../errors/index.js';
|
|
12
|
-
import {
|
|
18
|
+
import { initializeIdentity, } from '../../identity/index.js';
|
|
19
|
+
import { startCommand } from './start.js';
|
|
13
20
|
/**
|
|
14
21
|
* 退出并清理
|
|
15
22
|
*/
|
|
@@ -21,7 +28,7 @@ function exit(code = 0) {
|
|
|
21
28
|
*/
|
|
22
29
|
export async function initCommand() {
|
|
23
30
|
console.log('\n═══════════════════════════════════════════════════════');
|
|
24
|
-
console.log('
|
|
31
|
+
console.log(' Corivo — 一个为你而活着的数字伙伴');
|
|
25
32
|
console.log('═══════════════════════════════════════════════════════\n');
|
|
26
33
|
// 检查是否已初始化
|
|
27
34
|
const dbPath = getDefaultDatabasePath();
|
|
@@ -42,30 +49,41 @@ export async function initCommand() {
|
|
|
42
49
|
catch (error) {
|
|
43
50
|
throw new FileSystemError(`无法创建配置目录: ${configDir}`, { cause: error });
|
|
44
51
|
}
|
|
45
|
-
//
|
|
46
|
-
console.log('
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
console.log(
|
|
51
|
-
exit(1);
|
|
52
|
+
// ========== 身份识别 (v0.10 新增) ==========
|
|
53
|
+
console.log('正在识别您的身份...\n');
|
|
54
|
+
const identityResult = await initializeIdentity(configDir);
|
|
55
|
+
if (identityResult.isNew) {
|
|
56
|
+
console.log('✓ 创建新身份');
|
|
57
|
+
console.log(` 身份 ID: ${identityResult.identity.identity_id}`);
|
|
52
58
|
}
|
|
53
|
-
|
|
54
|
-
console.log('
|
|
55
|
-
|
|
59
|
+
else {
|
|
60
|
+
console.log('✓ 识别到现有身份');
|
|
61
|
+
console.log(` 身份 ID: ${identityResult.identity.identity_id}`);
|
|
56
62
|
}
|
|
57
|
-
|
|
58
|
-
if (
|
|
59
|
-
console.log('
|
|
60
|
-
|
|
63
|
+
// 显示检测到的平台指纹
|
|
64
|
+
if (identityResult.fingerprints.length > 0) {
|
|
65
|
+
console.log('\n检测到的平台:');
|
|
66
|
+
for (const fp of identityResult.fingerprints) {
|
|
67
|
+
const platformNames = {
|
|
68
|
+
claude_code: 'Claude Code',
|
|
69
|
+
feishu: '飞书',
|
|
70
|
+
device: '设备',
|
|
71
|
+
};
|
|
72
|
+
const confidenceIcons = {
|
|
73
|
+
high: '🟢',
|
|
74
|
+
medium: '🟡',
|
|
75
|
+
low: '⚪',
|
|
76
|
+
};
|
|
77
|
+
console.log(` ${confidenceIcons[fp.confidence]} ${platformNames[fp.platform] || fp.platform}: ${fp.value.substring(0, 8)}...`);
|
|
78
|
+
}
|
|
61
79
|
}
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
80
|
+
console.log('');
|
|
81
|
+
// ========== 身份识别结束 ==========
|
|
82
|
+
// 生成密钥(无需密码)
|
|
83
|
+
console.log('正在生成密钥...');
|
|
66
84
|
const dbKey = KeyManager.generateDatabaseKey();
|
|
67
|
-
|
|
68
|
-
const
|
|
85
|
+
// 将密钥转换为 base64 存储(明文)
|
|
86
|
+
const dbKeyBase64 = dbKey.toString('base64');
|
|
69
87
|
// 创建数据库
|
|
70
88
|
console.log('正在创建加密数据库...');
|
|
71
89
|
const db = CorivoDatabase.getInstance({ path: dbPath, key: dbKey });
|
|
@@ -80,32 +98,36 @@ export async function initCommand() {
|
|
|
80
98
|
const config = {
|
|
81
99
|
version: '0.10.0-mvp',
|
|
82
100
|
created_at: new Date().toISOString(),
|
|
83
|
-
|
|
84
|
-
|
|
101
|
+
identity_id: identityResult.identity.identity_id, // 身份 ID
|
|
102
|
+
db_key: dbKeyBase64, // 明文数据库密钥
|
|
85
103
|
};
|
|
86
104
|
await fs.writeFile(configPath, JSON.stringify(config, null, 2));
|
|
87
|
-
// 显示恢复密钥
|
|
88
105
|
console.log('\n═══════════════════════════════════════════════════════');
|
|
89
|
-
console.log('
|
|
106
|
+
console.log(' ✅ 初始化完成!');
|
|
90
107
|
console.log('═══════════════════════════════════════════════════════\n');
|
|
91
|
-
console.log('
|
|
92
|
-
|
|
93
|
-
console.log(
|
|
94
|
-
console.log(
|
|
95
|
-
console.log(
|
|
96
|
-
console.log(
|
|
97
|
-
|
|
98
|
-
console.log('
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
108
|
+
console.log('🎯 Corivo 已准备就绪');
|
|
109
|
+
console.log(' 身份 ID: ' + identityResult.identity.identity_id);
|
|
110
|
+
console.log(' 数据库: ' + dbPath);
|
|
111
|
+
console.log('\n💡 提示:');
|
|
112
|
+
console.log(' 数据库密钥明文存储在本地,依赖文件系统权限保护');
|
|
113
|
+
console.log(' 请确保你的用户目录安全(不与他人共享)\n');
|
|
114
|
+
// ========== 自动启动心跳 ==========
|
|
115
|
+
console.log('🫀 正在启动心跳...');
|
|
116
|
+
try {
|
|
117
|
+
// 启动心跳(无需用户交互)
|
|
118
|
+
await startCommand();
|
|
119
|
+
console.log('\n✨ Corivo 已苏醒!心跳将持续跳动,自动整理你的记忆。');
|
|
120
|
+
}
|
|
121
|
+
catch (error) {
|
|
122
|
+
console.log('\n⚠️ 心跳启动失败,你可以稍后手动启动:');
|
|
123
|
+
console.log(' corivo start\n');
|
|
124
|
+
}
|
|
104
125
|
// 下一步提示
|
|
105
126
|
console.log('下一步:');
|
|
106
127
|
console.log(' corivo save --content "..." --annotation "性质 · 领域 · 标签"');
|
|
107
128
|
console.log(' corivo query "..."');
|
|
108
129
|
console.log(' corivo status');
|
|
130
|
+
console.log(' corivo stop # 停止心跳(如需要)\n');
|
|
109
131
|
exit(0);
|
|
110
132
|
}
|
|
111
133
|
//# sourceMappingURL=init.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/query.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/query.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAYH,UAAU,YAAY;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,wBAAsB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAkItF"}
|
|
@@ -10,6 +10,7 @@ import { CorivoDatabase, getDefaultDatabasePath, getConfigDir } from '../../stor
|
|
|
10
10
|
import { KeyManager } from '../../crypto/keys.js';
|
|
11
11
|
import { ConfigError } from '../../errors/index.js';
|
|
12
12
|
import { ContextPusher } from '../../push/context.js';
|
|
13
|
+
import { QueryHistoryTracker } from '../../engine/query-history.js';
|
|
13
14
|
import { readPassword } from '../utils/password.js';
|
|
14
15
|
export async function queryCommand(query, options) {
|
|
15
16
|
// 读取配置
|
|
@@ -27,25 +28,47 @@ export async function queryCommand(query, options) {
|
|
|
27
28
|
let dbKey;
|
|
28
29
|
const skipPassword = options.noPassword || process.env.CORIVO_NO_PASSWORD === '1';
|
|
29
30
|
if (skipPassword) {
|
|
30
|
-
//
|
|
31
|
-
|
|
31
|
+
// 无密码模式:使用 config 中的 db_key(如果有)
|
|
32
|
+
if (config.db_key) {
|
|
33
|
+
dbKey = Buffer.from(config.db_key, 'base64');
|
|
34
|
+
}
|
|
35
|
+
else if (config.encrypted_db_key) {
|
|
36
|
+
throw new ConfigError('数据库已加密,请输入密码或移除 --no-password 选项');
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
dbKey = KeyManager.generateDatabaseKey();
|
|
40
|
+
config.db_key = dbKey.toString('base64');
|
|
41
|
+
await fs.writeFile(configPath, JSON.stringify(config, null, 2));
|
|
42
|
+
}
|
|
32
43
|
}
|
|
33
44
|
else {
|
|
34
45
|
const password = await readPassword('请输入主密码: ', { allowEmpty: !process.stdin.isTTY });
|
|
35
46
|
if (password === '') {
|
|
36
|
-
|
|
37
|
-
|
|
47
|
+
if (config.db_key) {
|
|
48
|
+
dbKey = Buffer.from(config.db_key, 'base64');
|
|
49
|
+
}
|
|
50
|
+
else if (config.encrypted_db_key) {
|
|
51
|
+
throw new ConfigError('数据库已加密,请输入密码');
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
dbKey = KeyManager.generateDatabaseKey();
|
|
55
|
+
config.db_key = dbKey.toString('base64');
|
|
56
|
+
await fs.writeFile(configPath, JSON.stringify(config, null, 2));
|
|
57
|
+
}
|
|
38
58
|
}
|
|
39
59
|
else {
|
|
40
60
|
const salt = Buffer.from(config.salt, 'base64');
|
|
41
61
|
const masterKey = KeyManager.deriveMasterKey(password, salt);
|
|
42
62
|
const encryptedDbKey = config.encrypted_db_key;
|
|
63
|
+
if (!encryptedDbKey) {
|
|
64
|
+
throw new ConfigError('未设置密码,请先运行: corivo setup-password');
|
|
65
|
+
}
|
|
43
66
|
dbKey = KeyManager.decryptDatabaseKey(encryptedDbKey, masterKey);
|
|
44
67
|
}
|
|
45
68
|
}
|
|
46
69
|
// 打开数据库
|
|
47
70
|
const dbPath = getDefaultDatabasePath();
|
|
48
|
-
const db = CorivoDatabase.getInstance({ path: dbPath, key: dbKey });
|
|
71
|
+
const db = CorivoDatabase.getInstance({ path: dbPath, key: dbKey, enableEncryption: config.encrypted_db_key !== undefined });
|
|
49
72
|
// 搜索
|
|
50
73
|
const limit = options.limit ? parseInt(options.limit, 10) : 10;
|
|
51
74
|
if (options.limit && isNaN(limit)) {
|
|
@@ -82,6 +105,14 @@ export async function queryCommand(query, options) {
|
|
|
82
105
|
}
|
|
83
106
|
// 附加上下文推送
|
|
84
107
|
const pusher = new ContextPusher(db);
|
|
108
|
+
const queryTracker = new QueryHistoryTracker(db);
|
|
109
|
+
// 记录本次查询
|
|
110
|
+
queryTracker.recordQuery(query, results);
|
|
111
|
+
// 检查是否有相似的历史查询
|
|
112
|
+
const similarReminder = queryTracker.findSimilarQueries(query);
|
|
113
|
+
if (similarReminder.hasSimilar) {
|
|
114
|
+
console.log(chalk.gray(similarReminder.message));
|
|
115
|
+
}
|
|
85
116
|
// 决策模式推送
|
|
86
117
|
if (options.pattern) {
|
|
87
118
|
const patternContext = await pusher.pushPatterns(query, 3);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query.js","sourceRoot":"","sources":["../../../src/cli/commands/query.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,cAAc,EAAE,sBAAsB,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACjG,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AASpD,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,KAAa,EAAE,OAAqB;IACrE,OAAO;IACP,MAAM,SAAS,GAAG,YAAY,EAAE,CAAC;IACjC,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;IAEvD,IAAI,MAAM,CAAC;IACX,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QACvD,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC/B,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,WAAW,CAAC,+BAA+B,CAAC,CAAC;IACzD,CAAC;IAED,gBAAgB;IAChB,IAAI,KAAa,CAAC;IAClB,MAAM,YAAY,GAAG,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,GAAG,CAAC,kBAAkB,KAAK,GAAG,CAAC;IAElF,IAAI,YAAY,EAAE,CAAC;QACjB,gBAAgB;
|
|
1
|
+
{"version":3,"file":"query.js","sourceRoot":"","sources":["../../../src/cli/commands/query.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,cAAc,EAAE,sBAAsB,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACjG,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AACpE,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AASpD,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,KAAa,EAAE,OAAqB;IACrE,OAAO;IACP,MAAM,SAAS,GAAG,YAAY,EAAE,CAAC;IACjC,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;IAEvD,IAAI,MAAM,CAAC;IACX,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QACvD,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC/B,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,WAAW,CAAC,+BAA+B,CAAC,CAAC;IACzD,CAAC;IAED,gBAAgB;IAChB,IAAI,KAAa,CAAC;IAClB,MAAM,YAAY,GAAG,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,GAAG,CAAC,kBAAkB,KAAK,GAAG,CAAC;IAElF,IAAI,YAAY,EAAE,CAAC;QACjB,iCAAiC;QACjC,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;YAClB,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QAC/C,CAAC;aAAM,IAAI,MAAM,CAAC,gBAAgB,EAAE,CAAC;YACnC,MAAM,IAAI,WAAW,CAAC,kCAAkC,CAAC,CAAC;QAC5D,CAAC;aAAM,CAAC;YACN,KAAK,GAAG,UAAU,CAAC,mBAAmB,EAAE,CAAC;YACzC,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;YACzC,MAAM,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAClE,CAAC;IACH,CAAC;SAAM,CAAC;QACN,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,UAAU,EAAE,EAAE,UAAU,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;QACtF,IAAI,QAAQ,KAAK,EAAE,EAAE,CAAC;YACpB,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;gBAClB,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;YAC/C,CAAC;iBAAM,IAAI,MAAM,CAAC,gBAAgB,EAAE,CAAC;gBACnC,MAAM,IAAI,WAAW,CAAC,cAAc,CAAC,CAAC;YACxC,CAAC;iBAAM,CAAC;gBACN,KAAK,GAAG,UAAU,CAAC,mBAAmB,EAAE,CAAC;gBACzC,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;gBACzC,MAAM,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YAClE,CAAC;QACH,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;YAChD,MAAM,SAAS,GAAG,UAAU,CAAC,eAAe,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;YAC7D,MAAM,cAAc,GAAG,MAAM,CAAC,gBAAgB,CAAC;YAC/C,IAAI,CAAC,cAAc,EAAE,CAAC;gBACpB,MAAM,IAAI,WAAW,CAAC,mCAAmC,CAAC,CAAC;YAC7D,CAAC;YACD,KAAK,GAAG,UAAU,CAAC,kBAAkB,CAAC,cAAc,EAAE,SAAS,CAAC,CAAC;QACnE,CAAC;IACH,CAAC;IAED,QAAQ;IACR,MAAM,MAAM,GAAG,sBAAsB,EAAE,CAAC;IACxC,MAAM,EAAE,GAAG,cAAc,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,gBAAgB,EAAE,MAAM,CAAC,gBAAgB,KAAK,SAAS,EAAE,CAAC,CAAC;IAE7H,KAAK;IACL,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC/D,IAAI,OAAO,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;QAClC,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;IACvC,CAAC;IACD,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IAE9C,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC;QACrD,OAAO;IACT,CAAC;IAED,OAAO;IACP,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,OAAO,CAAC,MAAM,WAAW,CAAC,CAAC,CAAC;IAE3D,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,SAAS;QACT,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;QAErE,MAAM;QACN,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,IAAI,SAAS,CAAC;QACjD,MAAM,WAAW,GAAG,cAAc,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACjD,MAAM,UAAU,GAAG,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAE7C,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,IAAI,CAAC,SAAS,UAAU,WAAW,KAAK,CAAC,QAAQ,UAAU,UAAU,EAAE,CAAC,CAC/E,CAAC;QAEF,OAAO;QACP,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YACpB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,KAAK,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC;YACzD,IAAI,KAAK,CAAC,aAAa,EAAE,CAAC;gBACxB,MAAM,UAAU,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;gBACjD,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,aAAa,CAAC,GAAG,QAAQ,CAAC,CAAC;gBAC1E,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,UAAU,CAAC,cAAc,CAAC,OAAO,CAAC,KAAK,OAAO,KAAK,CAAC,CAAC,CAAC;YAC1F,CAAC;YACD,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;gBAClB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,KAAK,CAAC,OAAO,CAAC,IAAI,MAAM,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;YACrF,CAAC;QACH,CAAC;QAED,OAAO,CAAC,GAAG,EAAE,CAAC;IAChB,CAAC;IAED,UAAU;IACV,MAAM,MAAM,GAAG,IAAI,aAAa,CAAC,EAAE,CAAC,CAAC;IACrC,MAAM,YAAY,GAAG,IAAI,mBAAmB,CAAC,EAAE,CAAC,CAAC;IAEjD,SAAS;IACT,YAAY,CAAC,WAAW,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAEzC,eAAe;IACf,MAAM,eAAe,GAAG,YAAY,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;IAC/D,IAAI,eAAe,CAAC,UAAU,EAAE,CAAC;QAC/B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC;IACnD,CAAC;IAED,SAAS;IACT,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;QACpB,MAAM,cAAc,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAC3D,IAAI,cAAc,EAAE,CAAC;YACnB,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC;IAED,SAAS;IACT,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC,EAAE;QACjD,cAAc,EAAE,IAAI;QACpB,YAAY,EAAE,IAAI;QAClB,QAAQ,EAAE,OAAO,CAAC,OAAO;KAC1B,CAAC,CAAC;IAEH,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACvB,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,cAAc,CAAC,MAAc;IACpC,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,QAAQ;YACX,OAAO,KAAK,CAAC,KAAK,CAAC;QACrB,KAAK,SAAS;YACZ,OAAO,KAAK,CAAC,MAAM,CAAC;QACtB,KAAK,MAAM;YACT,OAAO,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;QACxC,KAAK,UAAU;YACb,OAAO,KAAK,CAAC,IAAI,CAAC;QACpB;YACE,OAAO,KAAK,CAAC,IAAI,CAAC;IACtB,CAAC;AACH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"save.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/save.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"save.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/save.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAYH,UAAU,WAAW;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,wBAAsB,WAAW,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAwGrE"}
|
|
@@ -11,6 +11,7 @@ import { KeyManager } from '../../crypto/keys.js';
|
|
|
11
11
|
import { ConfigError, ValidationError } from '../../errors/index.js';
|
|
12
12
|
import { validateAnnotation } from '../../models/index.js';
|
|
13
13
|
import { readPassword } from '../utils/password.js';
|
|
14
|
+
import { ConflictDetector } from '../../engine/conflict-detector.js';
|
|
14
15
|
export async function saveCommand(options) {
|
|
15
16
|
// 读取配置
|
|
16
17
|
const configDir = getConfigDir();
|
|
@@ -33,38 +34,69 @@ export async function saveCommand(options) {
|
|
|
33
34
|
console.log(chalk.yellow('\n⚠️ 未提供标注,将以 pending 模式保存'));
|
|
34
35
|
console.log(chalk.gray('心跳守护进程稍后会尝试自动标注\n'));
|
|
35
36
|
}
|
|
36
|
-
|
|
37
|
+
// 只有非 pending 模式才验证标注格式
|
|
38
|
+
if (annotation && annotation !== 'pending' && !validateAnnotation(annotation)) {
|
|
37
39
|
throw new ValidationError('标注格式无效。格式应为 "性质 · 领域 · 标签",例如: "决策 · project · corivo"');
|
|
38
40
|
}
|
|
39
41
|
// 解密数据库密钥(可选密码)
|
|
40
42
|
let dbKey;
|
|
41
43
|
const skipPassword = options.noPassword || process.env.CORIVO_NO_PASSWORD === '1';
|
|
42
44
|
if (skipPassword) {
|
|
43
|
-
//
|
|
44
|
-
|
|
45
|
+
// 无密码模式:使用 config 中的 db_key(如果有)
|
|
46
|
+
if (config.db_key) {
|
|
47
|
+
dbKey = Buffer.from(config.db_key, 'base64');
|
|
48
|
+
}
|
|
49
|
+
else if (config.encrypted_db_key) {
|
|
50
|
+
// 有加密密钥但跳过密码:提示用户
|
|
51
|
+
throw new ConfigError('数据库已加密,请输入密码或移除 --no-password 选项');
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
// 旧版本兼容:生成并保存新密钥
|
|
55
|
+
dbKey = KeyManager.generateDatabaseKey();
|
|
56
|
+
config.db_key = dbKey.toString('base64');
|
|
57
|
+
await fs.writeFile(configPath, JSON.stringify(config, null, 2));
|
|
58
|
+
}
|
|
45
59
|
}
|
|
46
60
|
else {
|
|
47
61
|
const password = await readPassword('请输入主密码: ', { allowEmpty: !process.stdin.isTTY });
|
|
48
62
|
if (password === '') {
|
|
49
|
-
//
|
|
50
|
-
|
|
63
|
+
// 空密码:尝试使用 config 中的 db_key
|
|
64
|
+
if (config.db_key) {
|
|
65
|
+
dbKey = Buffer.from(config.db_key, 'base64');
|
|
66
|
+
}
|
|
67
|
+
else if (config.encrypted_db_key) {
|
|
68
|
+
throw new ConfigError('数据库已加密,请输入密码');
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
dbKey = KeyManager.generateDatabaseKey();
|
|
72
|
+
config.db_key = dbKey.toString('base64');
|
|
73
|
+
await fs.writeFile(configPath, JSON.stringify(config, null, 2));
|
|
74
|
+
}
|
|
51
75
|
}
|
|
52
76
|
else {
|
|
77
|
+
// 使用密码解密
|
|
53
78
|
const salt = Buffer.from(config.salt, 'base64');
|
|
54
79
|
const masterKey = KeyManager.deriveMasterKey(password, salt);
|
|
55
80
|
const encryptedDbKey = config.encrypted_db_key;
|
|
81
|
+
if (!encryptedDbKey) {
|
|
82
|
+
throw new ConfigError('未设置密码,请先运行: corivo setup-password');
|
|
83
|
+
}
|
|
56
84
|
dbKey = KeyManager.decryptDatabaseKey(encryptedDbKey, masterKey);
|
|
57
85
|
}
|
|
58
86
|
}
|
|
59
87
|
// 打开数据库
|
|
60
88
|
const dbPath = getDefaultDatabasePath();
|
|
61
|
-
const db = CorivoDatabase.getInstance({ path: dbPath, key: dbKey });
|
|
89
|
+
const db = CorivoDatabase.getInstance({ path: dbPath, key: dbKey, enableEncryption: config.encrypted_db_key !== undefined });
|
|
62
90
|
// 创建 Block
|
|
63
91
|
const block = db.createBlock({
|
|
64
92
|
content: options.content,
|
|
65
93
|
annotation: annotation || 'pending',
|
|
66
94
|
source: options.source || 'cli',
|
|
67
95
|
});
|
|
96
|
+
// 检测矛盾(像朋友一样提醒)
|
|
97
|
+
const conflictDetector = new ConflictDetector();
|
|
98
|
+
const existingBlocks = db.queryBlocks({ limit: 50 });
|
|
99
|
+
const conflictReminder = conflictDetector.detect(options.content, existingBlocks);
|
|
68
100
|
// 显示结果
|
|
69
101
|
console.log(chalk.green(`\n✅ 记忆已保存\n`));
|
|
70
102
|
console.log(chalk.gray('ID: ') + chalk.white(block.id));
|
|
@@ -72,5 +104,10 @@ export async function saveCommand(options) {
|
|
|
72
104
|
console.log(chalk.gray('标注: ') + chalk.cyan(block.annotation));
|
|
73
105
|
console.log(chalk.gray('生命力: ') + chalk.yellow('100 (活跃)'));
|
|
74
106
|
console.log();
|
|
107
|
+
// 如果有矛盾,友好提醒
|
|
108
|
+
if (conflictReminder && conflictReminder.hasConflict) {
|
|
109
|
+
console.log(chalk.yellow(conflictReminder.message));
|
|
110
|
+
console.log();
|
|
111
|
+
}
|
|
75
112
|
}
|
|
76
113
|
//# sourceMappingURL=save.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"save.js","sourceRoot":"","sources":["../../../src/cli/commands/save.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,cAAc,EAAE,sBAAsB,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACjG,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACrE,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"save.js","sourceRoot":"","sources":["../../../src/cli/commands/save.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLI 命令 - setup-password
|
|
3
|
+
*
|
|
4
|
+
* 设置主密码,用于数据库加密和跨设备身份验证
|
|
5
|
+
*/
|
|
6
|
+
interface SetupPasswordOptions {
|
|
7
|
+
force?: boolean;
|
|
8
|
+
}
|
|
9
|
+
export declare function setupPasswordCommand(options?: SetupPasswordOptions): Promise<void>;
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=setup-password.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup-password.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/setup-password.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAUH,UAAU,oBAAoB;IAC5B,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,wBAAsB,oBAAoB,CAAC,OAAO,GAAE,oBAAyB,GAAG,OAAO,CAAC,IAAI,CAAC,CAkF5F"}
|