yuangs 3.9.0 → 3.10.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/dist/ai/client.js +5 -10
- package/dist/ai/client.js.map +1 -1
- package/dist/core/db.d.ts +4 -0
- package/dist/core/db.js +56 -0
- package/dist/core/db.js.map +1 -0
- package/package.json +3 -1
- package/dist/commands/chatHistoryStorage.js.map +0 -1
package/dist/ai/client.js
CHANGED
|
@@ -14,25 +14,20 @@ const fs_1 = __importDefault(require("fs"));
|
|
|
14
14
|
const path_1 = __importDefault(require("path"));
|
|
15
15
|
const os_1 = __importDefault(require("os"));
|
|
16
16
|
const validation_1 = require("../core/validation");
|
|
17
|
-
const
|
|
17
|
+
const db_1 = require("../core/db");
|
|
18
18
|
const CONFIG_FILE = path_1.default.join(os_1.default.homedir(), '.yuangs.json');
|
|
19
|
-
let conversationHistory =
|
|
20
|
-
// 初始化时加载持久化的聊天历史记录
|
|
21
|
-
(0, chatHistoryStorage_1.loadChatHistory)().then(history => {
|
|
22
|
-
conversationHistory = history;
|
|
23
|
-
});
|
|
19
|
+
let conversationHistory = (0, db_1.getRecentMessagesFromDB)(20);
|
|
24
20
|
function addToConversationHistory(role, content) {
|
|
25
21
|
conversationHistory.push({ role, content });
|
|
26
22
|
if (conversationHistory.length > 20) {
|
|
27
23
|
conversationHistory = conversationHistory.slice(-20);
|
|
28
24
|
}
|
|
29
|
-
//
|
|
30
|
-
(0,
|
|
25
|
+
// Deep persist
|
|
26
|
+
(0, db_1.appendMessageToDB)(role, content);
|
|
31
27
|
}
|
|
32
28
|
function clearConversationHistory() {
|
|
33
29
|
conversationHistory = [];
|
|
34
|
-
|
|
35
|
-
(0, chatHistoryStorage_1.saveChatHistory)(conversationHistory);
|
|
30
|
+
(0, db_1.clearMessagesInDB)();
|
|
36
31
|
}
|
|
37
32
|
function getConversationHistory() {
|
|
38
33
|
return conversationHistory;
|
package/dist/ai/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/ai/client.ts"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/ai/client.ts"],"names":[],"mappings":"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"}
|
package/dist/core/db.js
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.appendMessageToDB = appendMessageToDB;
|
|
7
|
+
exports.getRecentMessagesFromDB = getRecentMessagesFromDB;
|
|
8
|
+
exports.clearMessagesInDB = clearMessagesInDB;
|
|
9
|
+
const better_sqlite3_1 = __importDefault(require("better-sqlite3"));
|
|
10
|
+
const path_1 = __importDefault(require("path"));
|
|
11
|
+
const os_1 = __importDefault(require("os"));
|
|
12
|
+
const fs_1 = __importDefault(require("fs"));
|
|
13
|
+
const DB_DIR = path_1.default.resolve(os_1.default.homedir(), '.yuangs_chat_history');
|
|
14
|
+
const DB_FILE = path_1.default.join(DB_DIR, 'history.db');
|
|
15
|
+
// Ensure directory exists
|
|
16
|
+
if (!fs_1.default.existsSync(DB_DIR)) {
|
|
17
|
+
fs_1.default.mkdirSync(DB_DIR, { recursive: true });
|
|
18
|
+
}
|
|
19
|
+
let dbInstance = null;
|
|
20
|
+
function getDb() {
|
|
21
|
+
if (!dbInstance) {
|
|
22
|
+
dbInstance = new better_sqlite3_1.default(DB_FILE);
|
|
23
|
+
// Initialize schema
|
|
24
|
+
dbInstance.exec(`
|
|
25
|
+
CREATE TABLE IF NOT EXISTS messages (
|
|
26
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
27
|
+
role TEXT NOT NULL,
|
|
28
|
+
content TEXT NOT NULL,
|
|
29
|
+
timestamp INTEGER DEFAULT (unixepoch())
|
|
30
|
+
);
|
|
31
|
+
CREATE INDEX IF NOT EXISTS idx_timestamp ON messages(timestamp);
|
|
32
|
+
`);
|
|
33
|
+
}
|
|
34
|
+
return dbInstance;
|
|
35
|
+
}
|
|
36
|
+
function appendMessageToDB(role, content) {
|
|
37
|
+
const db = getDb();
|
|
38
|
+
const stmt = db.prepare('INSERT INTO messages (role, content, timestamp) VALUES (?, ?, ?)');
|
|
39
|
+
stmt.run(role, content, Date.now());
|
|
40
|
+
}
|
|
41
|
+
function getRecentMessagesFromDB(limit = 20) {
|
|
42
|
+
const db = getDb();
|
|
43
|
+
// Get last N messages order by timestamp desc, then reverse to get chronological order
|
|
44
|
+
const stmt = db.prepare('SELECT role, content FROM messages ORDER BY id DESC LIMIT ?');
|
|
45
|
+
const rows = stmt.all(limit);
|
|
46
|
+
// Reverse to return in chronological order (oldest -> newest)
|
|
47
|
+
return rows.reverse().map(row => ({
|
|
48
|
+
role: row.role,
|
|
49
|
+
content: row.content
|
|
50
|
+
}));
|
|
51
|
+
}
|
|
52
|
+
function clearMessagesInDB() {
|
|
53
|
+
const db = getDb();
|
|
54
|
+
db.exec('DELETE FROM messages');
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=db.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"db.js","sourceRoot":"","sources":["../../src/core/db.ts"],"names":[],"mappings":";;;;;AAiCA,8CAIC;AAED,0DAWC;AAED,8CAGC;AAvDD,oEAAsC;AACtC,gDAAwB;AACxB,4CAAoB;AACpB,4CAAoB;AAGpB,MAAM,MAAM,GAAG,cAAI,CAAC,OAAO,CAAC,YAAE,CAAC,OAAO,EAAE,EAAE,sBAAsB,CAAC,CAAC;AAClE,MAAM,OAAO,GAAG,cAAI,CAAC,IAAI,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;AAEhD,0BAA0B;AAC1B,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;IACzB,YAAE,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;AAC9C,CAAC;AAED,IAAI,UAAU,GAA6B,IAAI,CAAC;AAEhD,SAAS,KAAK;IACV,IAAI,CAAC,UAAU,EAAE,CAAC;QACd,UAAU,GAAG,IAAI,wBAAQ,CAAC,OAAO,CAAC,CAAC;QACnC,oBAAoB;QACpB,UAAU,CAAC,IAAI,CAAC;;;;;;;;SAQf,CAAC,CAAC;IACP,CAAC;IACD,OAAO,UAAU,CAAC;AACtB,CAAC;AAED,SAAgB,iBAAiB,CAAC,IAAY,EAAE,OAAe;IAC3D,MAAM,EAAE,GAAG,KAAK,EAAE,CAAC;IACnB,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC,kEAAkE,CAAC,CAAC;IAC5F,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;AACxC,CAAC;AAED,SAAgB,uBAAuB,CAAC,QAAgB,EAAE;IACtD,MAAM,EAAE,GAAG,KAAK,EAAE,CAAC;IACnB,uFAAuF;IACvF,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC,6DAA6D,CAAC,CAAC;IACvF,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAwC,CAAC;IAEpE,8DAA8D;IAC9D,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC9B,IAAI,EAAE,GAAG,CAAC,IAAuC;QACjD,OAAO,EAAE,GAAG,CAAC,OAAO;KACvB,CAAC,CAAC,CAAC;AACR,CAAC;AAED,SAAgB,iBAAiB;IAC7B,MAAM,EAAE,GAAG,KAAK,EAAE,CAAC;IACnB,EAAE,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;AACpC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "yuangs",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.10.0",
|
|
4
4
|
"description": "苑广山的个人应用集合 CLI(彩色版)",
|
|
5
5
|
"author": "苑广山",
|
|
6
6
|
"license": "ISC",
|
|
@@ -36,6 +36,7 @@
|
|
|
36
36
|
"homepage": "https://github.com/yuanguangshan/npm_yuangs#readme",
|
|
37
37
|
"dependencies": {
|
|
38
38
|
"axios": "^1.13.2",
|
|
39
|
+
"better-sqlite3": "^12.6.2",
|
|
39
40
|
"chalk": "^4.1.2",
|
|
40
41
|
"commander": "^13.1.0",
|
|
41
42
|
"js-yaml": "^4.1.0",
|
|
@@ -48,6 +49,7 @@
|
|
|
48
49
|
},
|
|
49
50
|
"devDependencies": {
|
|
50
51
|
"@assemblyscript/loader": "^0.27.37",
|
|
52
|
+
"@types/better-sqlite3": "^7.6.13",
|
|
51
53
|
"@types/jest": "^30.0.0",
|
|
52
54
|
"@types/js-yaml": "^4.0.9",
|
|
53
55
|
"@types/json5": "^0.0.30",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"chatHistoryStorage.js","sourceRoot":"","sources":["../../src/commands/chatHistoryStorage.ts"],"names":[],"mappings":";;;;;AAcA,0CAmBC;AAED,0CAOC;AAED,4CAMC;AAlDD,4CAAoB;AACpB,+BAAiC;AACjC,gDAAwB;AACxB,4CAAoB;AAGpB,MAAM,gBAAgB,GAAG,cAAI,CAAC,OAAO,CAAC,YAAE,CAAC,OAAO,EAAE,EAAE,sBAAsB,CAAC,CAAC;AAC5E,MAAM,iBAAiB,GAAG,cAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,mBAAmB,CAAC,CAAC;AAE3E,MAAM,aAAa,GAAG,IAAA,gBAAS,EAAC,YAAE,CAAC,QAAQ,CAAC,CAAC;AAC7C,MAAM,cAAc,GAAG,IAAA,gBAAS,EAAC,YAAE,CAAC,SAAS,CAAC,CAAC;AAC/C,MAAM,UAAU,GAAG,IAAA,gBAAS,EAAC,YAAE,CAAC,KAAK,CAAC,CAAC;AACvC,MAAM,OAAO,GAAG,IAAA,gBAAS,EAAC,YAAE,CAAC,EAAE,CAAC,CAAC;AAE1B,KAAK,UAAU,eAAe;IACjC,IAAI,YAAE,CAAC,UAAU,CAAC,iBAAiB,CAAC,EAAE,CAAC;QACnC,IAAI,CAAC;YACD,MAAM,GAAG,GAAG,MAAM,aAAa,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC;YAC5D,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAE7B,SAAS;YACT,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CACxC,OAAO,GAAG,KAAK,QAAQ;gBACvB,CAAC,MAAM,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;gBAClD,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ,CAClC,EAAE,CAAC;gBACA,OAAO,IAA0B,CAAC;YACtC,CAAC;QACL,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACT,OAAO,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;QAC3C,CAAC;IACL,CAAC;IACD,OAAO,EAAE,CAAC;AACd,CAAC;AAEM,KAAK,UAAU,eAAe,CAAC,OAA2B;IAC7D,IAAI,CAAC;QACD,MAAM,UAAU,CAAC,gBAAgB,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACxD,MAAM,cAAc,CAAC,iBAAiB,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAC9E,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACT,OAAO,CAAC,KAAK,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC;IACxC,CAAC;AACL,CAAC;AAEM,KAAK,UAAU,gBAAgB;IAClC,IAAI,CAAC;QACD,MAAM,OAAO,CAAC,iBAAiB,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACtD,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACT,OAAO,CAAC,KAAK,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC;IACxC,CAAC;AACL,CAAC"}
|