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.
Files changed (123) hide show
  1. package/.claude/settings.local.json +8 -0
  2. package/README.md +1 -1
  3. package/README.short.md +13 -0
  4. package/dist/cli/commands/identity.d.ts +12 -0
  5. package/dist/cli/commands/identity.d.ts.map +1 -0
  6. package/dist/cli/commands/identity.js +90 -0
  7. package/dist/cli/commands/identity.js.map +1 -0
  8. package/dist/cli/commands/init.d.ts +7 -1
  9. package/dist/cli/commands/init.d.ts.map +1 -1
  10. package/dist/cli/commands/init.js +62 -40
  11. package/dist/cli/commands/init.js.map +1 -1
  12. package/dist/cli/commands/query.d.ts.map +1 -1
  13. package/dist/cli/commands/query.js +36 -5
  14. package/dist/cli/commands/query.js.map +1 -1
  15. package/dist/cli/commands/save.d.ts.map +1 -1
  16. package/dist/cli/commands/save.js +43 -6
  17. package/dist/cli/commands/save.js.map +1 -1
  18. package/dist/cli/commands/setup-password.d.ts +11 -0
  19. package/dist/cli/commands/setup-password.d.ts.map +1 -0
  20. package/dist/cli/commands/setup-password.js +82 -0
  21. package/dist/cli/commands/setup-password.js.map +1 -0
  22. package/dist/cli/commands/start.d.ts +1 -1
  23. package/dist/cli/commands/start.d.ts.map +1 -1
  24. package/dist/cli/commands/start.js +31 -16
  25. package/dist/cli/commands/start.js.map +1 -1
  26. package/dist/cli/commands/status.d.ts.map +1 -1
  27. package/dist/cli/commands/status.js +27 -5
  28. package/dist/cli/commands/status.js.map +1 -1
  29. package/dist/cli/commands/unlock.d.ts +12 -0
  30. package/dist/cli/commands/unlock.d.ts.map +1 -0
  31. package/dist/cli/commands/unlock.js +107 -0
  32. package/dist/cli/commands/unlock.js.map +1 -0
  33. package/dist/cli/commands/verify-identity.d.ts +12 -0
  34. package/dist/cli/commands/verify-identity.d.ts.map +1 -0
  35. package/dist/cli/commands/verify-identity.js +105 -0
  36. package/dist/cli/commands/verify-identity.js.map +1 -0
  37. package/dist/cli/index.js +26 -0
  38. package/dist/cli/index.js.map +1 -1
  39. package/dist/crypto/keys.d.ts +27 -0
  40. package/dist/crypto/keys.d.ts.map +1 -1
  41. package/dist/crypto/keys.js +77 -0
  42. package/dist/crypto/keys.js.map +1 -1
  43. package/dist/engine/associations.d.ts +101 -0
  44. package/dist/engine/associations.d.ts.map +1 -0
  45. package/dist/engine/associations.js +329 -0
  46. package/dist/engine/associations.js.map +1 -0
  47. package/dist/engine/conflict-detector.d.ts +55 -0
  48. package/dist/engine/conflict-detector.d.ts.map +1 -0
  49. package/dist/engine/conflict-detector.js +146 -0
  50. package/dist/engine/conflict-detector.js.map +1 -0
  51. package/dist/engine/consolidation.d.ts +96 -0
  52. package/dist/engine/consolidation.d.ts.map +1 -0
  53. package/dist/engine/consolidation.js +241 -0
  54. package/dist/engine/consolidation.js.map +1 -0
  55. package/dist/engine/follow-up.d.ts +48 -0
  56. package/dist/engine/follow-up.d.ts.map +1 -0
  57. package/dist/engine/follow-up.js +96 -0
  58. package/dist/engine/follow-up.js.map +1 -0
  59. package/dist/engine/heartbeat.d.ts +31 -1
  60. package/dist/engine/heartbeat.d.ts.map +1 -1
  61. package/dist/engine/heartbeat.js +184 -28
  62. package/dist/engine/heartbeat.js.map +1 -1
  63. package/dist/engine/query-history.d.ts +63 -0
  64. package/dist/engine/query-history.d.ts.map +1 -0
  65. package/dist/engine/query-history.js +139 -0
  66. package/dist/engine/query-history.js.map +1 -0
  67. package/dist/engine/weekly-summary.d.ts +47 -0
  68. package/dist/engine/weekly-summary.d.ts.map +1 -0
  69. package/dist/engine/weekly-summary.js +96 -0
  70. package/dist/engine/weekly-summary.js.map +1 -0
  71. package/dist/errors/index.d.ts +14 -0
  72. package/dist/errors/index.d.ts.map +1 -1
  73. package/dist/errors/index.js +24 -0
  74. package/dist/errors/index.js.map +1 -1
  75. package/dist/identity/auth.d.ts +188 -0
  76. package/dist/identity/auth.d.ts.map +1 -0
  77. package/dist/identity/auth.js +380 -0
  78. package/dist/identity/auth.js.map +1 -0
  79. package/dist/identity/collector.d.ts +130 -0
  80. package/dist/identity/collector.d.ts.map +1 -0
  81. package/dist/identity/collector.js +419 -0
  82. package/dist/identity/collector.js.map +1 -0
  83. package/dist/identity/fingerprint.d.ts +168 -0
  84. package/dist/identity/fingerprint.d.ts.map +1 -0
  85. package/dist/identity/fingerprint.js +682 -0
  86. package/dist/identity/fingerprint.js.map +1 -0
  87. package/dist/identity/identity.d.ts +151 -0
  88. package/dist/identity/identity.d.ts.map +1 -0
  89. package/dist/identity/identity.js +335 -0
  90. package/dist/identity/identity.js.map +1 -0
  91. package/dist/identity/index.d.ts +16 -0
  92. package/dist/identity/index.d.ts.map +1 -0
  93. package/dist/identity/index.js +16 -0
  94. package/dist/identity/index.js.map +1 -0
  95. package/dist/ingestors/claude-code.js +1 -1
  96. package/dist/ingestors/claude-code.js.map +1 -1
  97. package/dist/models/association.d.ts +112 -0
  98. package/dist/models/association.d.ts.map +1 -0
  99. package/dist/models/association.js +65 -0
  100. package/dist/models/association.js.map +1 -0
  101. package/dist/models/block.d.ts +1 -1
  102. package/dist/models/block.d.ts.map +1 -1
  103. package/dist/models/block.js +9 -5
  104. package/dist/models/block.js.map +1 -1
  105. package/dist/models/index.d.ts +1 -0
  106. package/dist/models/index.d.ts.map +1 -1
  107. package/dist/models/index.js +1 -0
  108. package/dist/models/index.js.map +1 -1
  109. package/dist/push/context.d.ts +49 -0
  110. package/dist/push/context.d.ts.map +1 -1
  111. package/dist/push/context.js +238 -0
  112. package/dist/push/context.js.map +1 -1
  113. package/dist/storage/database.d.ts +71 -1
  114. package/dist/storage/database.d.ts.map +1 -1
  115. package/dist/storage/database.js +372 -25
  116. package/dist/storage/database.js.map +1 -1
  117. package/dist-test/cli/commands/start.js +320 -0
  118. package/dist-test/errors/index.js +262 -0
  119. package/dist-test/models/block.js +123 -0
  120. package/dist-test/models/index.js +21 -0
  121. package/dist-test/models/pattern.js +34 -0
  122. package/dist-test/storage/database.js +643 -0
  123. package/package.json +1 -1
@@ -0,0 +1,8 @@
1
+ {
2
+ "permissions": {
3
+ "allow": [
4
+ "Bash(npm run:*)",
5
+ "Skill(corivo-save)"
6
+ ]
7
+ }
8
+ }
package/README.md CHANGED
@@ -62,4 +62,4 @@ open 03-storage.md # 存储与同步
62
62
 
63
63
  ---
64
64
 
65
- **最后更新**:2026-03-18
65
+ **最后更新**:2026-03-19
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,12 @@
1
+ /**
2
+ * CLI 命令 - identity
3
+ *
4
+ * 查看和管理用户身份信息
5
+ */
6
+ /**
7
+ * 显示身份信息
8
+ */
9
+ export declare function identityCommand(options: {
10
+ verbose?: boolean;
11
+ }): Promise<void>;
12
+ //# sourceMappingURL=identity.d.ts.map
@@ -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,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
  /**
7
13
  * 初始化命令
@@ -1 +1 @@
1
- {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAiBH;;GAEG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAyGjD"}
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 { readPassword } from '../utils/password.js';
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(' 欢迎使用 Corivo — 你的赛博伙伴');
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('请设置主密码(用于加密数据库)\n');
47
- console.log('⚠️ 密码要求:至少 8 位,包含字母和数字\n');
48
- const password1 = await readPassword('输入密码: ');
49
- if (!password1) {
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
- if (!KeyManager.validatePasswordStrength(password1)) {
54
- console.log(' 密码强度不足:至少 8 位,包含字母和数字');
55
- exit(1);
59
+ else {
60
+ console.log(' 识别到现有身份');
61
+ console.log(` 身份 ID: ${identityResult.identity.identity_id}`);
56
62
  }
57
- const password2 = await readPassword('确认密码: ');
58
- if (password1 !== password2) {
59
- console.log('❌ 两次输入的密码不一致');
60
- exit(1);
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
- console.log('\n正在生成密钥...');
64
- const salt = KeyManager.generateSalt();
65
- const masterKey = KeyManager.deriveMasterKey(password1, salt);
80
+ console.log('');
81
+ // ========== 身份识别结束 ==========
82
+ // 生成密钥(无需密码)
83
+ console.log('正在生成密钥...');
66
84
  const dbKey = KeyManager.generateDatabaseKey();
67
- const encryptedDbKey = KeyManager.encryptDatabaseKey(dbKey, masterKey);
68
- const recoveryKey = KeyManager.generateRecoveryKey(masterKey);
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
- salt: salt.toString('base64'),
84
- encrypted_db_key: encryptedDbKey,
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('您的恢复密钥(24 个单词,BIP39 标准,请手抄保存):\n');
92
- const recoveryWords = recoveryKey.split(' ');
93
- console.log(` ${recoveryWords.slice(0, 6).join(' ')}`);
94
- console.log(` ${recoveryWords.slice(6, 12).join(' ')}`);
95
- console.log(` ${recoveryWords.slice(12, 18).join(' ')}`);
96
- console.log(` ${recoveryWords.slice(18, 24).join(' ')}`);
97
- console.log('\n⚠️ 重要提示:');
98
- console.log(' 1. 请将这 24 个单词手抄在纸上,存放在安全的地方');
99
- console.log(' 2. 不要拍照、截图或存储在任何联网设备上');
100
- console.log(' 3. 任何人获得此密钥都可以访问您的 Corivo 数据');
101
- console.log(' 4. Corivo 团队也无法帮您恢复此密钥\n');
102
- await readPassword('\n按回车键确认已手抄恢复密钥...');
103
- console.log('\n初始化完成!\n');
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":"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"}
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;AAWH,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,CAsGtF"}
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
- dbKey = KeyManager.generateDatabaseKey();
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
- dbKey = KeyManager.generateDatabaseKey();
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":"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"}
1
+ {"version":3,"file":"query.js","sourceRoot":"","sources":["../../../src/cli/commands/query.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"save.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/save.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAWH,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,CAsErE"}
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
- if (annotation && !validateAnnotation(annotation)) {
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
- dbKey = KeyManager.generateDatabaseKey();
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
- dbKey = KeyManager.generateDatabaseKey();
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":"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"}
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"}