@very_aq/codex-cli-web 0.0.7 → 0.0.9
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/README.md +1 -1
- package/README.zh-CN.md +1 -1
- package/package.json +1 -2
- package/server/dist/auth/sqlite/authDb.d.ts +2 -2
- package/server/dist/auth/sqlite/authDb.js +3 -4
- package/server/dist/auth/sqlite/authDb.js.map +1 -1
- package/server/dist/history/sqlite/sqliteHistoryStore.js +3 -3
- package/server/dist/history/sqlite/sqliteHistoryStore.js.map +1 -1
- package/server/dist/sqlite/nodeSqlite.d.ts +31 -0
- package/server/dist/sqlite/nodeSqlite.js +72 -0
- package/server/dist/sqlite/nodeSqlite.js.map +1 -0
- package/server/dist/workspace/threadListVisibility.js +39 -5
- package/server/dist/workspace/threadListVisibility.js.map +1 -1
package/README.md
CHANGED
package/README.zh-CN.md
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@very_aq/codex-cli-web",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.9",
|
|
4
4
|
"private": false,
|
|
5
5
|
"bin": {
|
|
6
6
|
"ccw": "bin/ccw"
|
|
@@ -26,7 +26,6 @@
|
|
|
26
26
|
"version patch": "npm version patch"
|
|
27
27
|
},
|
|
28
28
|
"dependencies": {
|
|
29
|
-
"better-sqlite3": "^11.8.1",
|
|
30
29
|
"busboy": "^1.6.0",
|
|
31
30
|
"express": "^4.19.2",
|
|
32
31
|
"remark-breaks": "^4.0.0",
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { type SqliteDatabase } from "../../sqlite/nodeSqlite";
|
|
2
2
|
/**
|
|
3
3
|
* 认证数据库句柄与事务工具。
|
|
4
4
|
*/
|
|
5
5
|
export type AuthDb = {
|
|
6
|
-
db:
|
|
6
|
+
db: SqliteDatabase;
|
|
7
7
|
runInTransaction: <T>(callback: () => T) => T;
|
|
8
8
|
};
|
|
9
9
|
/**
|
|
@@ -6,7 +6,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
exports.createAuthDb = createAuthDb;
|
|
7
7
|
const node_fs_1 = __importDefault(require("node:fs"));
|
|
8
8
|
const node_path_1 = __importDefault(require("node:path"));
|
|
9
|
-
const
|
|
9
|
+
const nodeSqlite_1 = require("../../sqlite/nodeSqlite");
|
|
10
10
|
const schema_1 = require("./schema");
|
|
11
11
|
/**
|
|
12
12
|
* 创建并初始化认证数据库连接。
|
|
@@ -17,10 +17,9 @@ function createAuthDb(options) {
|
|
|
17
17
|
throw new Error("auth dbPath is required");
|
|
18
18
|
const dbDirPath = node_path_1.default.dirname(normalizedDbPath);
|
|
19
19
|
node_fs_1.default.mkdirSync(dbDirPath, { recursive: true });
|
|
20
|
-
const db =
|
|
20
|
+
const db = (0, nodeSqlite_1.openSqliteDatabase)(normalizedDbPath);
|
|
21
21
|
(0, schema_1.applyAuthSchema)(db);
|
|
22
|
-
const
|
|
23
|
-
const runInTransaction = (callback) => transaction(callback);
|
|
22
|
+
const runInTransaction = (0, nodeSqlite_1.createSqliteTransactionRunner)(db);
|
|
24
23
|
return { db, runInTransaction };
|
|
25
24
|
}
|
|
26
25
|
//# sourceMappingURL=authDb.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"authDb.js","sourceRoot":"","sources":["../../../src/auth/sqlite/authDb.ts"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"authDb.js","sourceRoot":"","sources":["../../../src/auth/sqlite/authDb.ts"],"names":[],"mappings":";;;;;AA2BA,oCAYC;AAvCD,sDAAyB;AACzB,0DAA6B;AAC7B,wDAIiC;AACjC,qCAA2C;AAiB3C;;GAEG;AACH,SAAgB,YAAY,CAAC,OAA4B;IACvD,MAAM,gBAAgB,GAAG,mBAAI,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IAC3E,IAAI,CAAC,gBAAgB;QAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAElE,MAAM,SAAS,GAAG,mBAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;IACjD,iBAAE,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAE7C,MAAM,EAAE,GAAG,IAAA,+BAAkB,EAAC,gBAAgB,CAAC,CAAC;IAChD,IAAA,wBAAe,EAAC,EAAE,CAAC,CAAC;IAEpB,MAAM,gBAAgB,GAAG,IAAA,0CAA6B,EAAC,EAAE,CAAC,CAAC;IAC3D,OAAO,EAAE,EAAE,EAAE,gBAAgB,EAAE,CAAC;AAClC,CAAC"}
|
|
@@ -6,7 +6,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
exports.createSqliteHistoryStore = createSqliteHistoryStore;
|
|
7
7
|
const node_fs_1 = __importDefault(require("node:fs"));
|
|
8
8
|
const node_path_1 = __importDefault(require("node:path"));
|
|
9
|
-
const
|
|
9
|
+
const nodeSqlite_1 = require("../../sqlite/nodeSqlite");
|
|
10
10
|
const schema_1 = require("./schema");
|
|
11
11
|
/**
|
|
12
12
|
* 统一归一化毫秒时间戳,避免出现负数和小数。
|
|
@@ -65,7 +65,7 @@ function createSqliteHistoryStore(options) {
|
|
|
65
65
|
const dbDirPath = node_path_1.default.dirname(node_path_1.default.resolve(options.dbPath));
|
|
66
66
|
node_fs_1.default.mkdirSync(dbDirPath, { recursive: true });
|
|
67
67
|
// 共享连接并复用 prepared statements,降低频繁写入开销。
|
|
68
|
-
const db =
|
|
68
|
+
const db = (0, nodeSqlite_1.openSqliteDatabase)(options.dbPath);
|
|
69
69
|
(0, schema_1.applyHistorySchema)(db);
|
|
70
70
|
ensureMessageTableColumns(db);
|
|
71
71
|
const upsertMessageStatement = db.prepare(`
|
|
@@ -145,7 +145,7 @@ function createSqliteHistoryStore(options) {
|
|
|
145
145
|
ORDER BY created_at_ms ASC, message_id ASC
|
|
146
146
|
`);
|
|
147
147
|
// 事务包装器:让上层服务可以在一个原子事务中完成多表写入。
|
|
148
|
-
const runInTransaction =
|
|
148
|
+
const runInTransaction = (0, nodeSqlite_1.createSqliteTransactionRunner)(db);
|
|
149
149
|
return {
|
|
150
150
|
/**
|
|
151
151
|
* 插入或更新结构化消息。
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sqliteHistoryStore.js","sourceRoot":"","sources":["../../../src/history/sqlite/sqliteHistoryStore.ts"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"sqliteHistoryStore.js","sourceRoot":"","sources":["../../../src/history/sqlite/sqliteHistoryStore.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SQLite `run` 的返回结构(兼容 Node 内置 `node:sqlite`)。
|
|
3
|
+
*/
|
|
4
|
+
export type SqliteRunResult = {
|
|
5
|
+
changes?: number | bigint;
|
|
6
|
+
lastInsertRowid?: number | bigint;
|
|
7
|
+
};
|
|
8
|
+
/**
|
|
9
|
+
* SQLite 预编译语句最小接口,覆盖当前仓库使用到的方法。
|
|
10
|
+
*/
|
|
11
|
+
export type SqliteStatement = {
|
|
12
|
+
run: (...params: unknown[]) => SqliteRunResult;
|
|
13
|
+
get: (...params: unknown[]) => unknown;
|
|
14
|
+
all: (...params: unknown[]) => unknown[];
|
|
15
|
+
};
|
|
16
|
+
/**
|
|
17
|
+
* SQLite 数据库最小接口,覆盖当前仓库使用到的方法。
|
|
18
|
+
*/
|
|
19
|
+
export type SqliteDatabase = {
|
|
20
|
+
exec: (sql: string) => unknown;
|
|
21
|
+
prepare: (sql: string) => SqliteStatement;
|
|
22
|
+
close: () => void;
|
|
23
|
+
};
|
|
24
|
+
/**
|
|
25
|
+
* 打开 SQLite 文件数据库连接。
|
|
26
|
+
*/
|
|
27
|
+
export declare function openSqliteDatabase(dbPath: string): SqliteDatabase;
|
|
28
|
+
/**
|
|
29
|
+
* 构造事务运行器,支持嵌套事务(SAVEPOINT)。
|
|
30
|
+
*/
|
|
31
|
+
export declare function createSqliteTransactionRunner(db: SqliteDatabase): <T>(callback: () => T) => T;
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.openSqliteDatabase = openSqliteDatabase;
|
|
4
|
+
exports.createSqliteTransactionRunner = createSqliteTransactionRunner;
|
|
5
|
+
/**
|
|
6
|
+
* 动态加载 Node 内置 sqlite;低版本 Node 会抛出可读错误。
|
|
7
|
+
*/
|
|
8
|
+
function loadNodeSqliteModule() {
|
|
9
|
+
try {
|
|
10
|
+
return require("node:sqlite");
|
|
11
|
+
}
|
|
12
|
+
catch (error) {
|
|
13
|
+
const rawMessage = error instanceof Error ? error.message : String(error);
|
|
14
|
+
throw new Error(`Failed to load node:sqlite. Please use Node.js 22+ (current error: ${rawMessage})`);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* 打开 SQLite 文件数据库连接。
|
|
19
|
+
*/
|
|
20
|
+
function openSqliteDatabase(dbPath) {
|
|
21
|
+
const sqliteModule = loadNodeSqliteModule();
|
|
22
|
+
return new sqliteModule.DatabaseSync(dbPath);
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* 构造事务运行器,支持嵌套事务(SAVEPOINT)。
|
|
26
|
+
*/
|
|
27
|
+
function createSqliteTransactionRunner(db) {
|
|
28
|
+
/**
|
|
29
|
+
* 当前事务深度;0 表示不在事务中。
|
|
30
|
+
*/
|
|
31
|
+
let transactionDepth = 0;
|
|
32
|
+
/**
|
|
33
|
+
* savepoint 自增序号,确保名称唯一。
|
|
34
|
+
*/
|
|
35
|
+
let savepointSequence = 0;
|
|
36
|
+
return (callback) => {
|
|
37
|
+
if (transactionDepth <= 0) {
|
|
38
|
+
transactionDepth = 1;
|
|
39
|
+
db.exec("BEGIN IMMEDIATE;");
|
|
40
|
+
try {
|
|
41
|
+
const callbackResult = callback();
|
|
42
|
+
db.exec("COMMIT;");
|
|
43
|
+
return callbackResult;
|
|
44
|
+
}
|
|
45
|
+
catch (error) {
|
|
46
|
+
db.exec("ROLLBACK;");
|
|
47
|
+
throw error;
|
|
48
|
+
}
|
|
49
|
+
finally {
|
|
50
|
+
transactionDepth = 0;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
const savepointName = `ccw_savepoint_${savepointSequence}`;
|
|
54
|
+
savepointSequence += 1;
|
|
55
|
+
transactionDepth += 1;
|
|
56
|
+
db.exec(`SAVEPOINT ${savepointName};`);
|
|
57
|
+
try {
|
|
58
|
+
const callbackResult = callback();
|
|
59
|
+
db.exec(`RELEASE SAVEPOINT ${savepointName};`);
|
|
60
|
+
return callbackResult;
|
|
61
|
+
}
|
|
62
|
+
catch (error) {
|
|
63
|
+
db.exec(`ROLLBACK TO SAVEPOINT ${savepointName};`);
|
|
64
|
+
db.exec(`RELEASE SAVEPOINT ${savepointName};`);
|
|
65
|
+
throw error;
|
|
66
|
+
}
|
|
67
|
+
finally {
|
|
68
|
+
transactionDepth -= 1;
|
|
69
|
+
}
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=nodeSqlite.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nodeSqlite.js","sourceRoot":"","sources":["../../src/sqlite/nodeSqlite.ts"],"names":[],"mappings":";;AAkDA,gDAGC;AAKD,sEA0CC;AAnED;;GAEG;AACH,SAAS,oBAAoB;IAC3B,IAAI,CAAC;QACH,OAAO,OAAO,CAAC,aAAa,CAAqB,CAAC;IACpD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,UAAU,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC1E,MAAM,IAAI,KAAK,CACb,sEAAsE,UAAU,GAAG,CACpF,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAgB,kBAAkB,CAAC,MAAc;IAC/C,MAAM,YAAY,GAAG,oBAAoB,EAAE,CAAC;IAC5C,OAAO,IAAI,YAAY,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;AAC/C,CAAC;AAED;;GAEG;AACH,SAAgB,6BAA6B,CAAC,EAAkB;IAC9D;;OAEG;IACH,IAAI,gBAAgB,GAAG,CAAC,CAAC;IACzB;;OAEG;IACH,IAAI,iBAAiB,GAAG,CAAC,CAAC;IAE1B,OAAO,CAAI,QAAiB,EAAK,EAAE;QACjC,IAAI,gBAAgB,IAAI,CAAC,EAAE,CAAC;YAC1B,gBAAgB,GAAG,CAAC,CAAC;YACrB,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;YAC5B,IAAI,CAAC;gBACH,MAAM,cAAc,GAAG,QAAQ,EAAE,CAAC;gBAClC,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBACnB,OAAO,cAAc,CAAC;YACxB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;gBACrB,MAAM,KAAK,CAAC;YACd,CAAC;oBAAS,CAAC;gBACT,gBAAgB,GAAG,CAAC,CAAC;YACvB,CAAC;QACH,CAAC;QAED,MAAM,aAAa,GAAG,iBAAiB,iBAAiB,EAAE,CAAC;QAC3D,iBAAiB,IAAI,CAAC,CAAC;QACvB,gBAAgB,IAAI,CAAC,CAAC;QACtB,EAAE,CAAC,IAAI,CAAC,aAAa,aAAa,GAAG,CAAC,CAAC;QACvC,IAAI,CAAC;YACH,MAAM,cAAc,GAAG,QAAQ,EAAE,CAAC;YAClC,EAAE,CAAC,IAAI,CAAC,qBAAqB,aAAa,GAAG,CAAC,CAAC;YAC/C,OAAO,cAAc,CAAC;QACxB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,EAAE,CAAC,IAAI,CAAC,yBAAyB,aAAa,GAAG,CAAC,CAAC;YACnD,EAAE,CAAC,IAAI,CAAC,qBAAqB,aAAa,GAAG,CAAC,CAAC;YAC/C,MAAM,KAAK,CAAC;QACd,CAAC;gBAAS,CAAC;YACT,gBAAgB,IAAI,CAAC,CAAC;QACxB,CAAC;IACH,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -12,6 +12,43 @@ exports.isThreadCwdVisibleToUser = isThreadCwdVisibleToUser;
|
|
|
12
12
|
exports.shouldIncludeThreadForList = shouldIncludeThreadForList;
|
|
13
13
|
const node_path_1 = __importDefault(require("node:path"));
|
|
14
14
|
const accessControl_1 = require("./accessControl");
|
|
15
|
+
const WINDOWS_DRIVE_ABSOLUTE_PATH_RE = /^[a-zA-Z]:[\\/]/;
|
|
16
|
+
const WINDOWS_UNC_ABSOLUTE_PATH_RE = /^(?:\\\\|\/\/)[^\\/]+[\\/][^\\/]+/;
|
|
17
|
+
function isWindowsAbsolutePath(candidatePath) {
|
|
18
|
+
return WINDOWS_DRIVE_ABSOLUTE_PATH_RE.test(candidatePath) || WINDOWS_UNC_ABSOLUTE_PATH_RE.test(candidatePath);
|
|
19
|
+
}
|
|
20
|
+
function stripWindowsNamespacePrefix(inputPath) {
|
|
21
|
+
const normalized = inputPath.replace(/\//g, "\\");
|
|
22
|
+
const lower = normalized.toLowerCase();
|
|
23
|
+
const longPathUncPrefix = "\\\\?\\UNC\\";
|
|
24
|
+
const longPathPrefix = "\\\\?\\";
|
|
25
|
+
const devicePathPrefix = "\\\\.\\";
|
|
26
|
+
if (lower.startsWith(longPathUncPrefix.toLowerCase())) {
|
|
27
|
+
return `\\\\${normalized.slice(longPathUncPrefix.length)}`;
|
|
28
|
+
}
|
|
29
|
+
if (normalized.startsWith(longPathPrefix))
|
|
30
|
+
return normalized.slice(longPathPrefix.length);
|
|
31
|
+
if (normalized.startsWith(devicePathPrefix))
|
|
32
|
+
return normalized.slice(devicePathPrefix.length);
|
|
33
|
+
return normalized;
|
|
34
|
+
}
|
|
35
|
+
function normalizePathForThreadListComparison(rawPath) {
|
|
36
|
+
const trimmedPath = typeof rawPath === "string" ? rawPath.trim() : "";
|
|
37
|
+
if (!trimmedPath)
|
|
38
|
+
return "";
|
|
39
|
+
if (isWindowsAbsolutePath(trimmedPath)) {
|
|
40
|
+
const stripped = stripWindowsNamespacePrefix(trimmedPath);
|
|
41
|
+
return node_path_1.default.win32.resolve(stripped).toLowerCase();
|
|
42
|
+
}
|
|
43
|
+
return node_path_1.default.resolve(trimmedPath);
|
|
44
|
+
}
|
|
45
|
+
function isSameThreadListPath(leftPath, rightPath) {
|
|
46
|
+
const normalizedLeftPath = normalizePathForThreadListComparison(leftPath);
|
|
47
|
+
const normalizedRightPath = normalizePathForThreadListComparison(rightPath);
|
|
48
|
+
if (!normalizedLeftPath || !normalizedRightPath)
|
|
49
|
+
return false;
|
|
50
|
+
return normalizedLeftPath === normalizedRightPath;
|
|
51
|
+
}
|
|
15
52
|
// WS/HTTP 统一使用绝对路径 + 去重后的 workspace 列表,避免路径比较歧义。
|
|
16
53
|
function normalizeWorkspacePaths(workspaces) {
|
|
17
54
|
const seen = new Set();
|
|
@@ -65,10 +102,7 @@ async function resolveThreadListWorkspaceFilter(requestedCwd, user) {
|
|
|
65
102
|
}
|
|
66
103
|
// 规整 thread.cwd,避免空白/相对路径造成过滤误判。
|
|
67
104
|
function normalizeThreadCwd(rawThreadCwd) {
|
|
68
|
-
|
|
69
|
-
if (!threadCwd)
|
|
70
|
-
return "";
|
|
71
|
-
return node_path_1.default.resolve(threadCwd);
|
|
105
|
+
return normalizePathForThreadListComparison(rawThreadCwd);
|
|
72
106
|
}
|
|
73
107
|
// 判断线程 cwd 是否对指定用户可见(admin 全可见,member 按分配工作区可见)。
|
|
74
108
|
function isThreadCwdVisibleToUser(input) {
|
|
@@ -99,6 +133,6 @@ function shouldIncludeThreadForList(input) {
|
|
|
99
133
|
if (!input.workspaceFilterCwd)
|
|
100
134
|
return true;
|
|
101
135
|
// 工作区语义按“线程 cwd == 选中 workspace cwd”处理,避免前缀误包含。
|
|
102
|
-
return normalizedThreadCwd
|
|
136
|
+
return isSameThreadListPath(normalizedThreadCwd, input.workspaceFilterCwd);
|
|
103
137
|
}
|
|
104
138
|
//# sourceMappingURL=threadListVisibility.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"threadListVisibility.js","sourceRoot":"","sources":["../../src/workspace/threadListVisibility.ts"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"threadListVisibility.js","sourceRoot":"","sources":["../../src/workspace/threadListVisibility.ts"],"names":[],"mappings":"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"}
|