@qnote/q-ai-note 1.0.1 → 1.0.2
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 +8 -3
- package/dist/cli.js +16 -2
- package/dist/cli.js.map +1 -1
- package/dist/server/db.d.ts +13 -2
- package/dist/server/db.d.ts.map +1 -1
- package/dist/server/db.js +443 -94
- package/dist/server/db.js.map +1 -1
- package/dist/web/app.js +6 -3
- package/package.json +1 -3
package/README.md
CHANGED
|
@@ -21,6 +21,7 @@ q-ai-note
|
|
|
21
21
|
|
|
22
22
|
```bash
|
|
23
23
|
q-ai-note --port 3200
|
|
24
|
+
q-ai-note .
|
|
24
25
|
```
|
|
25
26
|
|
|
26
27
|
Then open `http://localhost:3200`.
|
|
@@ -28,19 +29,23 @@ Then open `http://localhost:3200`.
|
|
|
28
29
|
## Data and config paths
|
|
29
30
|
|
|
30
31
|
- Config: `~/.q-ai-note/config.json`
|
|
31
|
-
-
|
|
32
|
+
- Data dir: `~/.q-ai-note/data/`
|
|
33
|
+
- `sandboxes.json`
|
|
34
|
+
- `work-items.json`
|
|
35
|
+
- `diaries.json`
|
|
36
|
+
- `chats.json`
|
|
37
|
+
- `chat-sandbox-relations.json`
|
|
38
|
+
- `operations.json`
|
|
32
39
|
|
|
33
40
|
You can override runtime paths with environment variables:
|
|
34
41
|
|
|
35
42
|
- `Q_AI_NOTE_CONFIG_DIR`
|
|
36
43
|
- `Q_AI_NOTE_DATA_DIR`
|
|
37
|
-
- `Q_AI_NOTE_DB_PATH`
|
|
38
44
|
|
|
39
45
|
Backward-compatible legacy variables are still supported:
|
|
40
46
|
|
|
41
47
|
- `PERSONAL_AI_NOTEBOOK_CONFIG_DIR`
|
|
42
48
|
- `PERSONAL_AI_NOTEBOOK_DATA_DIR`
|
|
43
|
-
- `PERSONAL_AI_NOTEBOOK_DB_PATH`
|
|
44
49
|
|
|
45
50
|
## Publish to npm
|
|
46
51
|
|
package/dist/cli.js
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
+
import path from 'path';
|
|
2
3
|
import { startServer } from './server/index.js';
|
|
3
4
|
function parseArgs(argv) {
|
|
4
5
|
const options = {
|
|
5
6
|
port: Number(process.env.PORT || 3000),
|
|
6
7
|
help: false,
|
|
8
|
+
dataDir: undefined,
|
|
7
9
|
};
|
|
8
10
|
for (let i = 0; i < argv.length; i += 1) {
|
|
9
11
|
const arg = argv[i];
|
|
@@ -22,6 +24,9 @@ function parseArgs(argv) {
|
|
|
22
24
|
}
|
|
23
25
|
continue;
|
|
24
26
|
}
|
|
27
|
+
if (!arg.startsWith('-') && !options.dataDir) {
|
|
28
|
+
options.dataDir = path.resolve(arg);
|
|
29
|
+
}
|
|
25
30
|
}
|
|
26
31
|
return options;
|
|
27
32
|
}
|
|
@@ -30,15 +35,18 @@ function printHelp() {
|
|
|
30
35
|
q-ai-note
|
|
31
36
|
|
|
32
37
|
Usage:
|
|
33
|
-
q-ai-note [--port <port>]
|
|
38
|
+
q-ai-note [data-dir] [--port <port>]
|
|
34
39
|
|
|
35
40
|
Options:
|
|
41
|
+
data-dir Directory for JSON data files (optional)
|
|
36
42
|
-p, --port Set server port (default: 3000 or PORT env)
|
|
37
43
|
-h, --help Show this help message
|
|
38
44
|
|
|
39
45
|
Examples:
|
|
40
|
-
npx q-ai-note
|
|
46
|
+
npx @qnote/q-ai-note
|
|
47
|
+
q-ai-note .
|
|
41
48
|
q-ai-note --port 3200
|
|
49
|
+
q-ai-note ./my-data --port 3200
|
|
42
50
|
PORT=3200 q-ai-note
|
|
43
51
|
`);
|
|
44
52
|
}
|
|
@@ -48,8 +56,14 @@ function bootstrap() {
|
|
|
48
56
|
printHelp();
|
|
49
57
|
return;
|
|
50
58
|
}
|
|
59
|
+
if (options.dataDir) {
|
|
60
|
+
process.env.Q_AI_NOTE_DATA_DIR = options.dataDir;
|
|
61
|
+
}
|
|
51
62
|
startServer(options.port);
|
|
52
63
|
console.log(`q-ai-note is ready at http://localhost:${options.port}`);
|
|
64
|
+
if (options.dataDir) {
|
|
65
|
+
console.log(`data dir: ${options.dataDir}`);
|
|
66
|
+
}
|
|
53
67
|
}
|
|
54
68
|
bootstrap();
|
|
55
69
|
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAQhD,SAAS,SAAS,CAAC,IAAc;IAC/B,MAAM,OAAO,GAAe;QAC1B,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC;QACtC,IAAI,EAAE,KAAK;QACX,OAAO,EAAE,SAAS;KACnB,CAAC;IAEF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACxC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,QAAQ,EAAE,CAAC;YACrC,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;YACpB,SAAS;QACX,CAAC;QACD,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,QAAQ,EAAE,CAAC;YACrC,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACzB,IAAI,IAAI,EAAE,CAAC;gBACT,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;gBAC1B,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,CAAC,EAAE,CAAC;oBACtC,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;oBACpB,CAAC,IAAI,CAAC,CAAC;gBACT,CAAC;YACH,CAAC;YACD,SAAS;QACX,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;YAC7C,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACtC,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,SAAS;IAChB,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;;;CAiBb,CAAC,CAAC;AACH,CAAC;AAED,SAAS,SAAS;IAChB,MAAM,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACjD,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,SAAS,EAAE,CAAC;QACZ,OAAO;IACT,CAAC;IAED,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;QACpB,OAAO,CAAC,GAAG,CAAC,kBAAkB,GAAG,OAAO,CAAC,OAAO,CAAC;IACnD,CAAC;IAED,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1B,OAAO,CAAC,GAAG,CAAC,0CAA0C,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IACtE,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;QACpB,OAAO,CAAC,GAAG,CAAC,aAAa,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;IAC9C,CAAC;AACH,CAAC;AAED,SAAS,EAAE,CAAC"}
|
package/dist/server/db.d.ts
CHANGED
|
@@ -1,6 +1,17 @@
|
|
|
1
|
-
|
|
1
|
+
type Row = any;
|
|
2
|
+
interface RunResult {
|
|
3
|
+
changes: number;
|
|
4
|
+
}
|
|
5
|
+
interface Statement {
|
|
6
|
+
all: (...params: unknown[]) => Row[];
|
|
7
|
+
get: (...params: unknown[]) => Row | undefined;
|
|
8
|
+
run: (...params: unknown[]) => RunResult;
|
|
9
|
+
}
|
|
2
10
|
export declare function getResolvedDbPath(): string;
|
|
3
|
-
export declare const db:
|
|
11
|
+
export declare const db: {
|
|
12
|
+
prepare: (sql: string) => Statement;
|
|
13
|
+
};
|
|
4
14
|
export declare function initDb(): void;
|
|
5
15
|
export declare function closeDb(): void;
|
|
16
|
+
export {};
|
|
6
17
|
//# sourceMappingURL=db.d.ts.map
|
package/dist/server/db.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../../src/server/db.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../../src/server/db.ts"],"names":[],"mappings":"AAIA,KAAK,GAAG,GAAG,GAAG,CAAC;AAWf,UAAU,SAAS;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,UAAU,SAAS;IACjB,GAAG,EAAE,CAAC,GAAG,MAAM,EAAE,OAAO,EAAE,KAAK,GAAG,EAAE,CAAC;IACrC,GAAG,EAAE,CAAC,GAAG,MAAM,EAAE,OAAO,EAAE,KAAK,GAAG,GAAG,SAAS,CAAC;IAC/C,GAAG,EAAE,CAAC,GAAG,MAAM,EAAE,OAAO,EAAE,KAAK,SAAS,CAAC;CAC1C;AA2cD,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C;AAED,eAAO,MAAM,EAAE;mBACE,MAAM;CACtB,CAAC;AAEF,wBAAgB,MAAM,SAErB;AAED,wBAAgB,OAAO,SAEtB"}
|
package/dist/server/db.js
CHANGED
|
@@ -1,106 +1,455 @@
|
|
|
1
|
-
import Database from 'better-sqlite3';
|
|
2
1
|
import fs from 'fs';
|
|
3
2
|
import os from 'os';
|
|
4
3
|
import path from 'path';
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
4
|
+
const DEFAULT_DATA_DIR = path.join(os.homedir(), '.q-ai-note', 'data');
|
|
5
|
+
function getDataDir() {
|
|
6
|
+
const fromCli = process.env.Q_AI_NOTE_DATA_DIR || process.env.PERSONAL_AI_NOTEBOOK_DATA_DIR;
|
|
7
|
+
if (fromCli && fromCli.trim()) {
|
|
8
|
+
return path.resolve(fromCli);
|
|
9
|
+
}
|
|
10
|
+
return DEFAULT_DATA_DIR;
|
|
11
|
+
}
|
|
12
|
+
function stableStringify(input) {
|
|
13
|
+
const normalize = (value) => {
|
|
14
|
+
if (Array.isArray(value)) {
|
|
15
|
+
return value.map((item) => normalize(item));
|
|
16
|
+
}
|
|
17
|
+
if (value && typeof value === 'object') {
|
|
18
|
+
const obj = value;
|
|
19
|
+
return Object.keys(obj)
|
|
20
|
+
.sort()
|
|
21
|
+
.reduce((acc, key) => {
|
|
22
|
+
acc[key] = normalize(obj[key]);
|
|
23
|
+
return acc;
|
|
24
|
+
}, {});
|
|
25
|
+
}
|
|
26
|
+
return value;
|
|
27
|
+
};
|
|
28
|
+
return JSON.stringify(normalize(input), null, 2);
|
|
29
|
+
}
|
|
30
|
+
function ensureDir(dir) {
|
|
31
|
+
if (!fs.existsSync(dir)) {
|
|
32
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
function readJsonFile(filePath) {
|
|
36
|
+
if (!fs.existsSync(filePath)) {
|
|
37
|
+
return [];
|
|
38
|
+
}
|
|
39
|
+
try {
|
|
40
|
+
const text = fs.readFileSync(filePath, 'utf-8');
|
|
41
|
+
const parsed = JSON.parse(text);
|
|
42
|
+
return Array.isArray(parsed) ? parsed : [];
|
|
43
|
+
}
|
|
44
|
+
catch {
|
|
45
|
+
return [];
|
|
46
|
+
}
|
|
17
47
|
}
|
|
18
|
-
|
|
19
|
-
const
|
|
20
|
-
|
|
21
|
-
fs.
|
|
48
|
+
function writeJsonFile(filePath, value) {
|
|
49
|
+
const tmp = `${filePath}.tmp`;
|
|
50
|
+
fs.writeFileSync(tmp, stableStringify(value));
|
|
51
|
+
fs.renameSync(tmp, filePath);
|
|
52
|
+
}
|
|
53
|
+
class FileDb {
|
|
54
|
+
loaded = false;
|
|
55
|
+
dataDir = getDataDir();
|
|
56
|
+
files = {
|
|
57
|
+
sandboxes: '',
|
|
58
|
+
work_items: '',
|
|
59
|
+
diaries: '',
|
|
60
|
+
chats: '',
|
|
61
|
+
chat_sandbox_relations: '',
|
|
62
|
+
operations: '',
|
|
63
|
+
};
|
|
64
|
+
data = {
|
|
65
|
+
sandboxes: [],
|
|
66
|
+
work_items: [],
|
|
67
|
+
diaries: [],
|
|
68
|
+
chats: [],
|
|
69
|
+
chat_sandbox_relations: [],
|
|
70
|
+
operations: [],
|
|
71
|
+
};
|
|
72
|
+
sandboxById = new Map();
|
|
73
|
+
workItemById = new Map();
|
|
74
|
+
diaryById = new Map();
|
|
75
|
+
chatById = new Map();
|
|
76
|
+
operationById = new Map();
|
|
77
|
+
ensureLoaded() {
|
|
78
|
+
if (this.loaded)
|
|
79
|
+
return;
|
|
80
|
+
this.dataDir = getDataDir();
|
|
81
|
+
ensureDir(this.dataDir);
|
|
82
|
+
this.files = {
|
|
83
|
+
sandboxes: path.join(this.dataDir, 'sandboxes.json'),
|
|
84
|
+
work_items: path.join(this.dataDir, 'work-items.json'),
|
|
85
|
+
diaries: path.join(this.dataDir, 'diaries.json'),
|
|
86
|
+
chats: path.join(this.dataDir, 'chats.json'),
|
|
87
|
+
chat_sandbox_relations: path.join(this.dataDir, 'chat-sandbox-relations.json'),
|
|
88
|
+
operations: path.join(this.dataDir, 'operations.json'),
|
|
89
|
+
};
|
|
90
|
+
this.data.sandboxes = readJsonFile(this.files.sandboxes);
|
|
91
|
+
this.data.work_items = readJsonFile(this.files.work_items);
|
|
92
|
+
this.data.diaries = readJsonFile(this.files.diaries);
|
|
93
|
+
this.data.chats = readJsonFile(this.files.chats);
|
|
94
|
+
this.data.chat_sandbox_relations = readJsonFile(this.files.chat_sandbox_relations);
|
|
95
|
+
this.data.operations = readJsonFile(this.files.operations);
|
|
96
|
+
this.rebuildIndex();
|
|
97
|
+
this.loaded = true;
|
|
98
|
+
}
|
|
99
|
+
rebuildIndex() {
|
|
100
|
+
this.sandboxById = new Map(this.data.sandboxes.map((row) => [String(row.id), row]));
|
|
101
|
+
this.workItemById = new Map(this.data.work_items.map((row) => [String(row.id), row]));
|
|
102
|
+
this.diaryById = new Map(this.data.diaries.map((row) => [String(row.id), row]));
|
|
103
|
+
this.chatById = new Map(this.data.chats.map((row) => [String(row.id), row]));
|
|
104
|
+
this.operationById = new Map(this.data.operations.map((row) => [String(row.id), row]));
|
|
105
|
+
}
|
|
106
|
+
persist() {
|
|
107
|
+
const byIdAsc = (a, b) => String(a.id).localeCompare(String(b.id));
|
|
108
|
+
const workSort = (a, b) => `${a.sandbox_id || ''}/${a.parent_id || ''}/${a.created_at || ''}/${a.id || ''}`
|
|
109
|
+
.localeCompare(`${b.sandbox_id || ''}/${b.parent_id || ''}/${b.created_at || ''}/${b.id || ''}`);
|
|
110
|
+
const chatSort = (a, b) => `${a.created_at || ''}/${a.id || ''}`.localeCompare(`${b.created_at || ''}/${b.id || ''}`);
|
|
111
|
+
writeJsonFile(this.files.sandboxes, [...this.data.sandboxes].sort(byIdAsc));
|
|
112
|
+
writeJsonFile(this.files.work_items, [...this.data.work_items].sort(workSort));
|
|
113
|
+
writeJsonFile(this.files.diaries, [...this.data.diaries].sort(chatSort));
|
|
114
|
+
writeJsonFile(this.files.chats, [...this.data.chats].sort(chatSort));
|
|
115
|
+
writeJsonFile(this.files.chat_sandbox_relations, [...this.data.chat_sandbox_relations].sort((a, b) => `${a.sandbox_id || ''}/${a.chat_id || ''}`.localeCompare(`${b.sandbox_id || ''}/${b.chat_id || ''}`)));
|
|
116
|
+
writeJsonFile(this.files.operations, [...this.data.operations].sort((a, b) => `${a.created_at || ''}/${a.id || ''}`.localeCompare(`${b.created_at || ''}/${b.id || ''}`)));
|
|
117
|
+
}
|
|
118
|
+
n(sql) {
|
|
119
|
+
return sql.replace(/\s+/g, ' ').trim().toLowerCase();
|
|
120
|
+
}
|
|
121
|
+
asRun(changes) {
|
|
122
|
+
this.rebuildIndex();
|
|
123
|
+
this.persist();
|
|
124
|
+
return { changes };
|
|
125
|
+
}
|
|
126
|
+
deleteWorkItemCascade(itemId) {
|
|
127
|
+
const children = this.data.work_items.filter((row) => String(row.parent_id || '') === itemId);
|
|
128
|
+
for (const child of children) {
|
|
129
|
+
this.deleteWorkItemCascade(String(child.id));
|
|
130
|
+
}
|
|
131
|
+
this.data.work_items = this.data.work_items.filter((row) => String(row.id) !== itemId);
|
|
132
|
+
}
|
|
133
|
+
selectAll(sql, params) {
|
|
134
|
+
const n = this.n(sql);
|
|
135
|
+
this.ensureLoaded();
|
|
136
|
+
if (n.startsWith('select * from sandboxes order by updated_at desc')) {
|
|
137
|
+
return [...this.data.sandboxes].sort((a, b) => String(b.updated_at).localeCompare(String(a.updated_at)));
|
|
138
|
+
}
|
|
139
|
+
if (n.startsWith('select * from work_items where sandbox_id = ? order by created_at asc')) {
|
|
140
|
+
const sandboxId = String(params[0] || '');
|
|
141
|
+
return this.data.work_items
|
|
142
|
+
.filter((row) => String(row.sandbox_id) === sandboxId)
|
|
143
|
+
.sort((a, b) => String(a.created_at).localeCompare(String(b.created_at)));
|
|
144
|
+
}
|
|
145
|
+
if (n.startsWith('select * from operations where sandbox_id = ? order by created_at desc limit ?')) {
|
|
146
|
+
const sandboxId = String(params[0] || '');
|
|
147
|
+
const limit = Number(params[1] || 30);
|
|
148
|
+
return this.data.operations
|
|
149
|
+
.filter((row) => String(row.sandbox_id) === sandboxId)
|
|
150
|
+
.sort((a, b) => String(b.created_at).localeCompare(String(a.created_at)))
|
|
151
|
+
.slice(0, limit);
|
|
152
|
+
}
|
|
153
|
+
if (n.startsWith('select * from operations where sandbox_id = ? order by created_at desc')) {
|
|
154
|
+
const sandboxId = String(params[0] || '');
|
|
155
|
+
return this.data.operations
|
|
156
|
+
.filter((row) => String(row.sandbox_id) === sandboxId)
|
|
157
|
+
.sort((a, b) => String(b.created_at).localeCompare(String(a.created_at)));
|
|
158
|
+
}
|
|
159
|
+
if (n.startsWith('select * from operations order by created_at desc limit ?')) {
|
|
160
|
+
const limit = Number(params[0] || 30);
|
|
161
|
+
return [...this.data.operations].sort((a, b) => String(b.created_at).localeCompare(String(a.created_at))).slice(0, limit);
|
|
162
|
+
}
|
|
163
|
+
if (n.startsWith('select * from diaries where 1=1')) {
|
|
164
|
+
let rows = [...this.data.diaries];
|
|
165
|
+
let i = 0;
|
|
166
|
+
if (n.includes('sandbox_id = ?')) {
|
|
167
|
+
const sandboxId = String(params[i++] || '');
|
|
168
|
+
rows = rows.filter((row) => String(row.sandbox_id || '') === sandboxId);
|
|
169
|
+
}
|
|
170
|
+
if (n.includes('processed = ?')) {
|
|
171
|
+
const processed = Number(params[i++] || 0);
|
|
172
|
+
rows = rows.filter((row) => Number(row.processed || 0) === processed);
|
|
173
|
+
}
|
|
174
|
+
return rows.sort((a, b) => String(b.created_at).localeCompare(String(a.created_at)));
|
|
175
|
+
}
|
|
176
|
+
if (n.startsWith('select c.* from chats c left join chat_sandbox_relations r on r.chat_id = c.id where r.chat_id is null order by c.created_at desc limit 20')) {
|
|
177
|
+
const related = new Set(this.data.chat_sandbox_relations.map((row) => String(row.chat_id)));
|
|
178
|
+
return this.data.chats
|
|
179
|
+
.filter((row) => !related.has(String(row.id)))
|
|
180
|
+
.sort((a, b) => String(b.created_at).localeCompare(String(a.created_at)))
|
|
181
|
+
.slice(0, 20);
|
|
182
|
+
}
|
|
183
|
+
if (n.startsWith('select id, name from sandboxes')) {
|
|
184
|
+
return this.data.sandboxes.map((row) => ({ id: row.id, name: row.name }));
|
|
185
|
+
}
|
|
186
|
+
if (n.startsWith('select name, status, priority, assignee from work_items where sandbox_id = ? order by created_at desc limit 80')) {
|
|
187
|
+
const sandboxId = String(params[0] || '');
|
|
188
|
+
return this.data.work_items
|
|
189
|
+
.filter((row) => String(row.sandbox_id) === sandboxId)
|
|
190
|
+
.sort((a, b) => String(b.created_at).localeCompare(String(a.created_at)))
|
|
191
|
+
.slice(0, 80)
|
|
192
|
+
.map((row) => ({ name: row.name, status: row.status, priority: row.priority, assignee: row.assignee }));
|
|
193
|
+
}
|
|
194
|
+
if (n.startsWith('select content, created_at from diaries where sandbox_id = ? order by created_at desc limit 20')) {
|
|
195
|
+
const sandboxId = String(params[0] || '');
|
|
196
|
+
return this.data.diaries
|
|
197
|
+
.filter((row) => String(row.sandbox_id || '') === sandboxId)
|
|
198
|
+
.sort((a, b) => String(b.created_at).localeCompare(String(a.created_at)))
|
|
199
|
+
.slice(0, 20)
|
|
200
|
+
.map((row) => ({ content: row.content, created_at: row.created_at }));
|
|
201
|
+
}
|
|
202
|
+
if (n.startsWith('select chat_id from chat_sandbox_relations where sandbox_id = ?')) {
|
|
203
|
+
const sandboxId = String(params[0] || '');
|
|
204
|
+
return this.data.chat_sandbox_relations
|
|
205
|
+
.filter((row) => String(row.sandbox_id) === sandboxId)
|
|
206
|
+
.map((row) => ({ chat_id: row.chat_id }));
|
|
207
|
+
}
|
|
208
|
+
if (n.startsWith('select * from chats where id in')) {
|
|
209
|
+
const ids = new Set(params.map((p) => String(p)));
|
|
210
|
+
return this.data.chats
|
|
211
|
+
.filter((row) => ids.has(String(row.id)))
|
|
212
|
+
.sort((a, b) => String(a.created_at).localeCompare(String(b.created_at)));
|
|
213
|
+
}
|
|
214
|
+
if (n.startsWith('select * from diaries where sandbox_id = ? order by created_at desc limit 50')) {
|
|
215
|
+
const sandboxId = String(params[0] || '');
|
|
216
|
+
return this.data.diaries
|
|
217
|
+
.filter((row) => String(row.sandbox_id || '') === sandboxId)
|
|
218
|
+
.sort((a, b) => String(b.created_at).localeCompare(String(a.created_at)))
|
|
219
|
+
.slice(0, 50);
|
|
220
|
+
}
|
|
221
|
+
if (n.startsWith('select id, name, parent_id from work_items where sandbox_id = ?')) {
|
|
222
|
+
const sandboxId = String(params[0] || '');
|
|
223
|
+
return this.data.work_items
|
|
224
|
+
.filter((row) => String(row.sandbox_id) === sandboxId)
|
|
225
|
+
.map((row) => ({ id: row.id, name: row.name, parent_id: row.parent_id ?? null }));
|
|
226
|
+
}
|
|
227
|
+
throw new Error(`Unsupported SQL(all): ${sql}`);
|
|
228
|
+
}
|
|
229
|
+
selectOne(sql, params) {
|
|
230
|
+
const n = this.n(sql);
|
|
231
|
+
this.ensureLoaded();
|
|
232
|
+
if (n.startsWith('select * from sandboxes where id = ?')) {
|
|
233
|
+
return this.sandboxById.get(String(params[0] || ''));
|
|
234
|
+
}
|
|
235
|
+
if (n.startsWith('select * from work_items where id = ?')) {
|
|
236
|
+
return this.workItemById.get(String(params[0] || ''));
|
|
237
|
+
}
|
|
238
|
+
if (n.startsWith('select * from diaries where id = ?')) {
|
|
239
|
+
return this.diaryById.get(String(params[0] || ''));
|
|
240
|
+
}
|
|
241
|
+
if (n.startsWith('select * from operations where id = ?')) {
|
|
242
|
+
return this.operationById.get(String(params[0] || ''));
|
|
243
|
+
}
|
|
244
|
+
if (n.startsWith('select id, name from sandboxes where id = ?')) {
|
|
245
|
+
const sandbox = this.sandboxById.get(String(params[0] || ''));
|
|
246
|
+
return sandbox ? { id: sandbox.id, name: sandbox.name } : undefined;
|
|
247
|
+
}
|
|
248
|
+
if (n.startsWith('select id from work_items where id = ? and sandbox_id = ?')) {
|
|
249
|
+
const itemId = String(params[0] || '');
|
|
250
|
+
const sandboxId = String(params[1] || '');
|
|
251
|
+
const item = this.workItemById.get(itemId);
|
|
252
|
+
if (!item || String(item.sandbox_id) !== sandboxId)
|
|
253
|
+
return undefined;
|
|
254
|
+
return { id: item.id };
|
|
255
|
+
}
|
|
256
|
+
if (n.startsWith('select * from work_items where id = ? and sandbox_id = ?')) {
|
|
257
|
+
const itemId = String(params[0] || '');
|
|
258
|
+
const sandboxId = String(params[1] || '');
|
|
259
|
+
const item = this.workItemById.get(itemId);
|
|
260
|
+
return item && String(item.sandbox_id) === sandboxId ? item : undefined;
|
|
261
|
+
}
|
|
262
|
+
if (n.startsWith('select id from operations where sandbox_id = ? order by created_at desc limit 1')) {
|
|
263
|
+
const sandboxId = String(params[0] || '');
|
|
264
|
+
const latest = this.data.operations
|
|
265
|
+
.filter((row) => String(row.sandbox_id) === sandboxId)
|
|
266
|
+
.sort((a, b) => String(b.created_at).localeCompare(String(a.created_at)))[0];
|
|
267
|
+
return latest ? { id: latest.id } : undefined;
|
|
268
|
+
}
|
|
269
|
+
throw new Error(`Unsupported SQL(get): ${sql}`);
|
|
270
|
+
}
|
|
271
|
+
execute(sql, params) {
|
|
272
|
+
const n = this.n(sql);
|
|
273
|
+
this.ensureLoaded();
|
|
274
|
+
if (n.startsWith('insert into sandboxes')) {
|
|
275
|
+
const [id, name, description, created_at, updated_at] = params;
|
|
276
|
+
this.data.sandboxes.push({ id, name, description, created_at, updated_at });
|
|
277
|
+
return this.asRun(1);
|
|
278
|
+
}
|
|
279
|
+
if (n.startsWith('update sandboxes set name = coalesce')) {
|
|
280
|
+
const [name, description, updatedAt, sandboxId] = params;
|
|
281
|
+
const row = this.sandboxById.get(String(sandboxId || ''));
|
|
282
|
+
if (!row)
|
|
283
|
+
return { changes: 0 };
|
|
284
|
+
row.name = name ?? row.name;
|
|
285
|
+
row.description = description ?? row.description;
|
|
286
|
+
row.updated_at = updatedAt;
|
|
287
|
+
return this.asRun(1);
|
|
288
|
+
}
|
|
289
|
+
if (n.startsWith('delete from sandboxes where id = ?')) {
|
|
290
|
+
const sandboxId = String(params[0] || '');
|
|
291
|
+
if (!this.sandboxById.has(sandboxId))
|
|
292
|
+
return { changes: 0 };
|
|
293
|
+
this.data.sandboxes = this.data.sandboxes.filter((row) => String(row.id) !== sandboxId);
|
|
294
|
+
const itemIds = this.data.work_items.filter((row) => String(row.sandbox_id) === sandboxId).map((row) => String(row.id));
|
|
295
|
+
this.data.work_items = this.data.work_items.filter((row) => String(row.sandbox_id) !== sandboxId);
|
|
296
|
+
this.data.operations = this.data.operations.filter((row) => String(row.sandbox_id) !== sandboxId);
|
|
297
|
+
this.data.chat_sandbox_relations = this.data.chat_sandbox_relations.filter((row) => String(row.sandbox_id) !== sandboxId);
|
|
298
|
+
this.data.diaries = this.data.diaries.map((row) => String(row.sandbox_id || '') === sandboxId ? { ...row, sandbox_id: null } : row);
|
|
299
|
+
if (itemIds.length) {
|
|
300
|
+
this.data.diaries = this.data.diaries.map((row) => itemIds.includes(String(row.work_item_id || '')) ? { ...row, work_item_id: null } : row);
|
|
301
|
+
}
|
|
302
|
+
return this.asRun(1);
|
|
303
|
+
}
|
|
304
|
+
if (n.startsWith('insert into work_items') && n.includes("'pending'") && n.includes("'[]'") && n.includes("'{}'")) {
|
|
305
|
+
if (params.length === 9) {
|
|
306
|
+
const [id, sandbox_id, parent_id, name, description, assignee, priority, created_at, updated_at] = params;
|
|
307
|
+
this.data.work_items.push({
|
|
308
|
+
id, sandbox_id, parent_id: parent_id ?? null, name, description, assignee,
|
|
309
|
+
status: 'pending', priority, tags: '[]', extra_data: '{}', created_at, updated_at,
|
|
310
|
+
});
|
|
311
|
+
return this.asRun(1);
|
|
312
|
+
}
|
|
313
|
+
if (params.length === 6) {
|
|
314
|
+
const [id, sandbox_id, name, description, created_at, updated_at] = params;
|
|
315
|
+
this.data.work_items.push({
|
|
316
|
+
id, sandbox_id, parent_id: null, name, description, assignee: '',
|
|
317
|
+
status: 'pending', priority: 'medium', tags: '[]', extra_data: '{}', created_at, updated_at,
|
|
318
|
+
});
|
|
319
|
+
return this.asRun(1);
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
if (n.startsWith('insert into work_items')) {
|
|
323
|
+
const [id, sandbox_id, parent_id, name, description, assignee, status, priority, tags, extra_data, created_at, updated_at] = params;
|
|
324
|
+
this.data.work_items.push({
|
|
325
|
+
id, sandbox_id, parent_id: parent_id ?? null, name, description, assignee, status, priority,
|
|
326
|
+
tags: tags ?? '[]', extra_data: extra_data ?? '{}', created_at, updated_at
|
|
327
|
+
});
|
|
328
|
+
return this.asRun(1);
|
|
329
|
+
}
|
|
330
|
+
if (n.startsWith('update sandboxes set updated_at = ? where id = ?')) {
|
|
331
|
+
const [updatedAt, sandboxId] = params;
|
|
332
|
+
const row = this.sandboxById.get(String(sandboxId || ''));
|
|
333
|
+
if (!row)
|
|
334
|
+
return { changes: 0 };
|
|
335
|
+
row.updated_at = updatedAt;
|
|
336
|
+
return this.asRun(1);
|
|
337
|
+
}
|
|
338
|
+
if (n.startsWith('insert into operations')) {
|
|
339
|
+
const cols = n.slice(n.indexOf('(') + 1, n.indexOf(')')).replace(/\s/g, '').split(',');
|
|
340
|
+
const row = {};
|
|
341
|
+
cols.forEach((col, idx) => { row[col] = params[idx] ?? null; });
|
|
342
|
+
this.data.operations.push(row);
|
|
343
|
+
return this.asRun(1);
|
|
344
|
+
}
|
|
345
|
+
if (n.startsWith('update work_items set name = coalesce') && n.includes('where id = ?')) {
|
|
346
|
+
const [name, description, assignee, status, priority, tags, extra_data, parent_id, updated_at, id] = params;
|
|
347
|
+
const row = this.workItemById.get(String(id || ''));
|
|
348
|
+
if (!row)
|
|
349
|
+
return { changes: 0 };
|
|
350
|
+
row.name = name ?? row.name;
|
|
351
|
+
row.description = description ?? row.description;
|
|
352
|
+
row.assignee = assignee ?? row.assignee;
|
|
353
|
+
row.status = status ?? row.status;
|
|
354
|
+
row.priority = priority ?? row.priority;
|
|
355
|
+
row.tags = tags ?? row.tags;
|
|
356
|
+
row.extra_data = extra_data ?? row.extra_data;
|
|
357
|
+
row.parent_id = parent_id === null ? row.parent_id : (parent_id ?? row.parent_id);
|
|
358
|
+
row.updated_at = updated_at;
|
|
359
|
+
return this.asRun(1);
|
|
360
|
+
}
|
|
361
|
+
if (n.startsWith('update work_items set name = ?, description = ?, assignee = ?, status = ?, priority = ?, tags = ?, extra_data = ?, parent_id = ?, updated_at = ? where id = ?')) {
|
|
362
|
+
const [name, description, assignee, status, priority, tags, extra_data, parent_id, updated_at, id] = params;
|
|
363
|
+
const row = this.workItemById.get(String(id || ''));
|
|
364
|
+
if (!row)
|
|
365
|
+
return { changes: 0 };
|
|
366
|
+
Object.assign(row, { name, description, assignee, status, priority, tags, extra_data, parent_id, updated_at });
|
|
367
|
+
return this.asRun(1);
|
|
368
|
+
}
|
|
369
|
+
if (n.startsWith('delete from work_items where id = ?')) {
|
|
370
|
+
const itemId = String(params[0] || '');
|
|
371
|
+
if (!this.workItemById.has(itemId))
|
|
372
|
+
return { changes: 0 };
|
|
373
|
+
this.deleteWorkItemCascade(itemId);
|
|
374
|
+
this.data.diaries = this.data.diaries.map((row) => String(row.work_item_id || '') === itemId ? { ...row, work_item_id: null } : row);
|
|
375
|
+
return this.asRun(1);
|
|
376
|
+
}
|
|
377
|
+
if (n.startsWith('delete from operations where id = ?')) {
|
|
378
|
+
const operationId = String(params[0] || '');
|
|
379
|
+
const before = this.data.operations.length;
|
|
380
|
+
this.data.operations = this.data.operations.filter((row) => String(row.id) !== operationId);
|
|
381
|
+
return this.asRun(before === this.data.operations.length ? 0 : 1);
|
|
382
|
+
}
|
|
383
|
+
if (n.startsWith('insert into diaries')) {
|
|
384
|
+
const [id, sandbox_id, work_item_id, content, created_at] = params;
|
|
385
|
+
this.data.diaries.push({ id, sandbox_id, work_item_id, content, processed: 0, created_at });
|
|
386
|
+
return this.asRun(1);
|
|
387
|
+
}
|
|
388
|
+
if (n.startsWith('update diaries set processed = 1 where id = ?')) {
|
|
389
|
+
const row = this.diaryById.get(String(params[0] || ''));
|
|
390
|
+
if (!row)
|
|
391
|
+
return { changes: 0 };
|
|
392
|
+
row.processed = 1;
|
|
393
|
+
return this.asRun(1);
|
|
394
|
+
}
|
|
395
|
+
if (n.startsWith('insert into chats')) {
|
|
396
|
+
const [id, role, content, created_at] = params;
|
|
397
|
+
this.data.chats.push({ id, role, content, created_at });
|
|
398
|
+
return this.asRun(1);
|
|
399
|
+
}
|
|
400
|
+
if (n.startsWith('insert or ignore into chat_sandbox_relations')) {
|
|
401
|
+
const [chat_id, sandbox_id] = params;
|
|
402
|
+
const exists = this.data.chat_sandbox_relations.some((row) => String(row.chat_id) === String(chat_id) && String(row.sandbox_id) === String(sandbox_id));
|
|
403
|
+
if (exists)
|
|
404
|
+
return { changes: 0 };
|
|
405
|
+
this.data.chat_sandbox_relations.push({ chat_id, sandbox_id });
|
|
406
|
+
return this.asRun(1);
|
|
407
|
+
}
|
|
408
|
+
if (n.startsWith('update work_items set parent_id = ?, updated_at = ? where id = ?')) {
|
|
409
|
+
const [parent_id, updated_at, id] = params;
|
|
410
|
+
const row = this.workItemById.get(String(id || ''));
|
|
411
|
+
if (!row)
|
|
412
|
+
return { changes: 0 };
|
|
413
|
+
row.parent_id = parent_id ?? null;
|
|
414
|
+
row.updated_at = updated_at;
|
|
415
|
+
return this.asRun(1);
|
|
416
|
+
}
|
|
417
|
+
if (n.startsWith('update work_items set name = coalesce(?, name), description = coalesce(?, description), updated_at = ? where id = ?')) {
|
|
418
|
+
const [name, description, updated_at, id] = params;
|
|
419
|
+
const row = this.workItemById.get(String(id || ''));
|
|
420
|
+
if (!row)
|
|
421
|
+
return { changes: 0 };
|
|
422
|
+
row.name = name ?? row.name;
|
|
423
|
+
row.description = description ?? row.description;
|
|
424
|
+
row.updated_at = updated_at;
|
|
425
|
+
return this.asRun(1);
|
|
426
|
+
}
|
|
427
|
+
throw new Error(`Unsupported SQL(run): ${sql}`);
|
|
428
|
+
}
|
|
429
|
+
prepare(sql) {
|
|
430
|
+
return {
|
|
431
|
+
all: (...params) => this.selectAll(sql, params),
|
|
432
|
+
get: (...params) => this.selectOne(sql, params),
|
|
433
|
+
run: (...params) => this.execute(sql, params),
|
|
434
|
+
};
|
|
435
|
+
}
|
|
436
|
+
close() {
|
|
437
|
+
if (!this.loaded)
|
|
438
|
+
return;
|
|
439
|
+
this.persist();
|
|
440
|
+
}
|
|
22
441
|
}
|
|
442
|
+
const fileDb = new FileDb();
|
|
23
443
|
export function getResolvedDbPath() {
|
|
24
|
-
return
|
|
444
|
+
return getDataDir();
|
|
25
445
|
}
|
|
26
|
-
export const db =
|
|
27
|
-
|
|
446
|
+
export const db = {
|
|
447
|
+
prepare: (sql) => fileDb.prepare(sql),
|
|
448
|
+
};
|
|
28
449
|
export function initDb() {
|
|
29
|
-
|
|
30
|
-
CREATE TABLE IF NOT EXISTS sandboxes (
|
|
31
|
-
id TEXT PRIMARY KEY,
|
|
32
|
-
name TEXT NOT NULL,
|
|
33
|
-
description TEXT DEFAULT '',
|
|
34
|
-
created_at TEXT NOT NULL,
|
|
35
|
-
updated_at TEXT NOT NULL
|
|
36
|
-
);
|
|
37
|
-
|
|
38
|
-
CREATE TABLE IF NOT EXISTS work_items (
|
|
39
|
-
id TEXT PRIMARY KEY,
|
|
40
|
-
sandbox_id TEXT NOT NULL,
|
|
41
|
-
parent_id TEXT,
|
|
42
|
-
name TEXT NOT NULL,
|
|
43
|
-
description TEXT DEFAULT '',
|
|
44
|
-
assignee TEXT DEFAULT '',
|
|
45
|
-
status TEXT DEFAULT 'pending',
|
|
46
|
-
priority TEXT DEFAULT 'medium',
|
|
47
|
-
tags TEXT DEFAULT '[]',
|
|
48
|
-
extra_data TEXT DEFAULT '{}',
|
|
49
|
-
created_at TEXT NOT NULL,
|
|
50
|
-
updated_at TEXT NOT NULL,
|
|
51
|
-
FOREIGN KEY (sandbox_id) REFERENCES sandboxes(id) ON DELETE CASCADE,
|
|
52
|
-
FOREIGN KEY (parent_id) REFERENCES work_items(id) ON DELETE CASCADE
|
|
53
|
-
);
|
|
54
|
-
|
|
55
|
-
CREATE TABLE IF NOT EXISTS diaries (
|
|
56
|
-
id TEXT PRIMARY KEY,
|
|
57
|
-
sandbox_id TEXT,
|
|
58
|
-
work_item_id TEXT,
|
|
59
|
-
content TEXT NOT NULL,
|
|
60
|
-
processed INTEGER DEFAULT 0,
|
|
61
|
-
created_at TEXT NOT NULL,
|
|
62
|
-
FOREIGN KEY (sandbox_id) REFERENCES sandboxes(id) ON DELETE SET NULL,
|
|
63
|
-
FOREIGN KEY (work_item_id) REFERENCES work_items(id) ON DELETE SET NULL
|
|
64
|
-
);
|
|
65
|
-
|
|
66
|
-
CREATE TABLE IF NOT EXISTS chats (
|
|
67
|
-
id TEXT PRIMARY KEY,
|
|
68
|
-
role TEXT NOT NULL,
|
|
69
|
-
content TEXT NOT NULL,
|
|
70
|
-
created_at TEXT NOT NULL
|
|
71
|
-
);
|
|
72
|
-
|
|
73
|
-
CREATE TABLE IF NOT EXISTS chat_sandbox_relations (
|
|
74
|
-
chat_id TEXT NOT NULL,
|
|
75
|
-
sandbox_id TEXT NOT NULL,
|
|
76
|
-
PRIMARY KEY (chat_id, sandbox_id),
|
|
77
|
-
FOREIGN KEY (chat_id) REFERENCES chats(id) ON DELETE CASCADE,
|
|
78
|
-
FOREIGN KEY (sandbox_id) REFERENCES sandboxes(id) ON DELETE CASCADE
|
|
79
|
-
);
|
|
80
|
-
|
|
81
|
-
CREATE TABLE IF NOT EXISTS operations (
|
|
82
|
-
id TEXT PRIMARY KEY,
|
|
83
|
-
sandbox_id TEXT NOT NULL,
|
|
84
|
-
operation_type TEXT NOT NULL,
|
|
85
|
-
data_before TEXT,
|
|
86
|
-
data_after TEXT,
|
|
87
|
-
created_at TEXT NOT NULL,
|
|
88
|
-
FOREIGN KEY (sandbox_id) REFERENCES sandboxes(id) ON DELETE CASCADE
|
|
89
|
-
);
|
|
90
|
-
|
|
91
|
-
CREATE TABLE IF NOT EXISTS settings (
|
|
92
|
-
key TEXT PRIMARY KEY,
|
|
93
|
-
value TEXT
|
|
94
|
-
);
|
|
95
|
-
|
|
96
|
-
CREATE INDEX IF NOT EXISTS idx_work_items_sandbox ON work_items(sandbox_id);
|
|
97
|
-
CREATE INDEX IF NOT EXISTS idx_work_items_parent ON work_items(parent_id);
|
|
98
|
-
CREATE INDEX IF NOT EXISTS idx_diaries_sandbox ON diaries(sandbox_id);
|
|
99
|
-
CREATE INDEX IF NOT EXISTS idx_diaries_processed ON diaries(processed);
|
|
100
|
-
CREATE INDEX IF NOT EXISTS idx_chats_created ON chats(created_at);
|
|
101
|
-
`);
|
|
450
|
+
// lazy-loaded on first query; kept for compatibility
|
|
102
451
|
}
|
|
103
452
|
export function closeDb() {
|
|
104
|
-
|
|
453
|
+
fileDb.close();
|
|
105
454
|
}
|
|
106
455
|
//# sourceMappingURL=db.js.map
|
package/dist/server/db.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"db.js","sourceRoot":"","sources":["../../src/server/db.ts"],"names":[],"mappings":"AAAA,OAAO,QAAsC,MAAM,gBAAgB,CAAC;AACpE,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAEpC,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC/D,SAAS,SAAS;IAChB,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC;IAC/F,IAAI,YAAY,IAAI,YAAY,CAAC,IAAI,EAAE,EAAE,CAAC;QACxC,OAAO,YAAY,CAAC;IACtB,CAAC;IAED,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC;IAClG,IAAI,aAAa,IAAI,aAAa,CAAC,IAAI,EAAE,EAAE,CAAC;QAC1C,OAAO,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,cAAc,CAAC,CAAC;IAClD,CAAC;IAED,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE,cAAc,CAAC,CAAC;AACvE,CAAC;AAED,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;AAC3B,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;AACnC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;IAC1B,EAAE,CAAC,SAAS,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;AAC3C,CAAC;AAED,MAAM,UAAU,iBAAiB;IAC/B,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,CAAC,MAAM,EAAE,GAAiB,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC;AAErD,EAAE,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;AAEhC,MAAM,UAAU,MAAM;IACpB,EAAE,CAAC,IAAI,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwEP,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,OAAO;IACrB,EAAE,CAAC,KAAK,EAAE,CAAC;AACb,CAAC"}
|
|
1
|
+
{"version":3,"file":"db.js","sourceRoot":"","sources":["../../src/server/db.ts"],"names":[],"mappings":"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"}
|
package/dist/web/app.js
CHANGED
|
@@ -624,8 +624,8 @@ function initApp() {
|
|
|
624
624
|
document.getElementById('sandbox-dialog').close();
|
|
625
625
|
});
|
|
626
626
|
|
|
627
|
-
|
|
628
|
-
e
|
|
627
|
+
const createSandbox = async (e) => {
|
|
628
|
+
e?.preventDefault?.();
|
|
629
629
|
const name = document.getElementById('new-sandbox-name').value;
|
|
630
630
|
const description = document.getElementById('new-sandbox-desc').value;
|
|
631
631
|
const dialog = document.getElementById('sandbox-dialog');
|
|
@@ -642,7 +642,10 @@ function initApp() {
|
|
|
642
642
|
} catch (error) {
|
|
643
643
|
alert('创建失败: ' + error.message);
|
|
644
644
|
}
|
|
645
|
-
}
|
|
645
|
+
};
|
|
646
|
+
|
|
647
|
+
document.getElementById('sandbox-dialog')?.addEventListener('submit', createSandbox);
|
|
648
|
+
document.getElementById('confirm-sandbox-btn')?.addEventListener('click', createSandbox);
|
|
646
649
|
|
|
647
650
|
document.getElementById('add-item-btn')?.addEventListener('click', () => {
|
|
648
651
|
document.getElementById('item-dialog-title').textContent = '添加任务';
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@qnote/q-ai-note",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.2",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "AI-assisted personal work sandbox and diary system",
|
|
6
6
|
"main": "dist/server/index.js",
|
|
@@ -25,7 +25,6 @@
|
|
|
25
25
|
"access": "public"
|
|
26
26
|
},
|
|
27
27
|
"dependencies": {
|
|
28
|
-
"better-sqlite3": "^11.0.0",
|
|
29
28
|
"express": "^4.18.2",
|
|
30
29
|
"uuid": "^9.0.0",
|
|
31
30
|
"vue": "^3.5.29"
|
|
@@ -33,7 +32,6 @@
|
|
|
33
32
|
"devDependencies": {
|
|
34
33
|
"@playwright/test": "^1.58.2",
|
|
35
34
|
"@testing-library/dom": "^9.3.0",
|
|
36
|
-
"@types/better-sqlite3": "^7.6.8",
|
|
37
35
|
"@types/express": "^4.17.21",
|
|
38
36
|
"@types/node": "^20.10.0",
|
|
39
37
|
"@types/uuid": "^9.0.7",
|