luckytri 1.0.0 → 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/.github/SECURITY.md +4 -4
- package/README.en.md +252 -250
- package/README.md +252 -250
- package/bin/luckytri.js +5 -1
- package/docs/en/CHANGELOG.md +8 -0
- package/docs/en/connect.md +18 -18
- package/docs/en/guide.md +202 -216
- package/docs/en/npm-release.md +25 -25
- package/docs/zh/CHANGELOG.md +8 -0
- package/docs/zh/connect.md +17 -17
- package/docs/zh/guide.md +202 -216
- package/docs/zh/npm-release.md +33 -33
- package/package.json +110 -108
- package/plugins/sdk/index.d.ts +155 -155
- package/plugins/sdk/testing.js +58 -58
- package/plugins/weather/index.js +82 -82
- package/plugins/weather/luckytri-plugin.json +29 -29
- package/public/app/assets/ChatsPage-BhlJHseG.js +3 -0
- package/public/app/assets/Empty-DP6WMGHi.js +2 -0
- package/public/app/assets/Field-CtbdqaiB.js +1 -0
- package/public/app/assets/HeartPage-32BeTPn2.js +1 -0
- package/public/app/assets/LifePage-CxSm0XKI.js +1 -0
- package/public/app/assets/MemoryPage-BeKBcPCY.js +1 -0
- package/public/app/assets/NaturePage-NEPYl2HS.js +3 -0
- package/public/app/assets/PeoplePage-DxtpekwM.js +1 -0
- package/public/app/assets/PluginsPage-CVVQwEBI.css +1 -0
- package/public/app/assets/PluginsPage-DksEZbUU.js +2 -0
- package/public/app/assets/{SystemPage-CAMPoYqM.css → SystemPage-BkRu0Rvx.css} +1 -1
- package/public/app/assets/SystemPage-BvzJlHuY.js +1 -0
- package/public/app/assets/TimePage-7-awH5XL.js +3 -0
- package/public/app/assets/index-4rItIkD-.js +4 -0
- package/public/app/assets/{index-YDz1ree1.css → index-DY4e15Kh.css} +1 -1
- package/public/app/assets/{knowledge-DG0e0uKw.js → knowledge-C6_HvoyB.js} +1 -1
- package/public/app/assets/media-SMfTT-yc.js +1 -0
- package/public/app/index.html +3 -3
- package/public/guide.en.html +72 -99
- package/public/guide.html +44 -86
- package/public/tutorial.en.md +25 -39
- package/public/tutorial.md +25 -39
- package/scripts/backup.js +311 -311
- package/scripts/browser.js +41 -41
- package/scripts/import-data.js +128 -0
- package/scripts/launch.js +101 -94
- package/scripts/plugin.js +150 -150
- package/scripts/reset-password.js +22 -0
- package/scripts/runtime.js +25 -25
- package/scripts/service.js +56 -47
- package/scripts/setup.js +50 -50
- package/scripts/start-server.js +41 -41
- package/scripts/stop.js +36 -36
- package/server/app.js +112 -96
- package/server/auth.js +217 -0
- package/server/channels/contract.js +57 -57
- package/server/channels/hub.js +165 -165
- package/server/channels/index.js +28 -25
- package/server/channels/onebot/index.js +335 -336
- package/server/channels/onebot/token.js +22 -3
- package/server/core/capabilities.js +208 -208
- package/server/core/events.js +64 -60
- package/server/core/image-preprocessor.js +208 -208
- package/server/core/model-manager.js +1213 -1213
- package/server/core/net-guard.js +49 -49
- package/server/core/orchestrator.js +569 -569
- package/server/core/perceivers.js +91 -91
- package/server/core/persona-manager.js +243 -243
- package/server/core/repository.js +293 -293
- package/server/core/response-validator.js +508 -508
- package/server/core/turn-processor.js +630 -630
- package/server/core/turn.js +236 -236
- package/server/core/vision-manager.js +633 -633
- package/server/i18n/errors.js +548 -497
- package/server/i18n/labels.js +649 -653
- package/server/index.js +151 -102
- package/server/knowledge/manager.js +386 -386
- package/server/knowledge/schema.js +12 -8
- package/server/local-access.js +32 -0
- package/server/mind/anticipations.js +507 -507
- package/server/mind/api.js +703 -703
- package/server/mind/budget.js +152 -152
- package/server/mind/context-selection.js +61 -61
- package/server/mind/day-planner.js +324 -324
- package/server/mind/evidence.js +148 -148
- package/server/mind/index.js +445 -445
- package/server/mind/life/diary.js +786 -786
- package/server/mind/life/index.js +1049 -1049
- package/server/mind/observations.js +84 -84
- package/server/mind/own-day.js +324 -324
- package/server/mind/own-voice.js +318 -318
- package/server/mind/senses.js +53 -53
- package/server/mind/time/activity-clock.js +196 -196
- package/server/mind/time/availability.js +69 -69
- package/server/mind/time/commitment-review.js +198 -198
- package/server/mind/time/executor.js +512 -512
- package/server/mind/time/experiences.js +128 -128
- package/server/mind/time/games.js +562 -562
- package/server/mind/time/index.js +739 -739
- package/server/mind/time/intent.js +166 -166
- package/server/mind/time/kinds.js +171 -171
- package/server/mind/time/plugin-activity.js +207 -207
- package/server/mind/time/tasks.js +587 -587
- package/server/mind/util.js +110 -110
- package/server/mind/view.js +273 -273
- package/server/paths.js +102 -102
- package/server/plugins/api.js +204 -204
- package/server/plugins/host.js +967 -967
- package/server/plugins/install.js +295 -295
- package/server/plugins/manifest.js +201 -201
- package/server/plugins/permissions.js +42 -42
- package/server/plugins/runner/guard.mjs +36 -36
- package/server/plugins/runner/worker.mjs +250 -250
- package/server/plugins/schema.js +91 -91
- package/server/plugins/zip.js +112 -112
- package/server/startup-lock.js +118 -118
- package/server/storage/archive.js +242 -241
- package/server/storage/backup-cleanup-worker.js +8 -8
- package/server/storage/backup-cleanup.js +415 -414
- package/server/storage/backup-lock.js +76 -76
- package/server/storage/backup-scheduler.js +131 -131
- package/server/storage/data-package.js +298 -0
- package/server/storage/data-transfer-api.js +50 -0
- package/server/storage/data-transfer-worker.js +18 -0
- package/server/storage/data-transfer.js +415 -0
- package/server/storage/store.js +202 -199
- package/server/studio/readiness.js +181 -190
- package/server/studio/settings.js +236 -236
- package/public/app/assets/ChatsPage-C-FcRapR.js +0 -3
- package/public/app/assets/Empty-CpP5kQHH.js +0 -2
- package/public/app/assets/Field-D4gY-INU.js +0 -1
- package/public/app/assets/HeartPage-CPy_thQd.js +0 -1
- package/public/app/assets/LifePage-CxWvwmSf.js +0 -1
- package/public/app/assets/MemoryPage-DC4rhQ68.js +0 -1
- package/public/app/assets/NaturePage-IvYw04Zq.js +0 -3
- package/public/app/assets/PeoplePage-Cqefm9-q.js +0 -1
- package/public/app/assets/PluginsPage-DKSaKvXb.js +0 -2
- package/public/app/assets/PluginsPage-HyBe5D8w.css +0 -1
- package/public/app/assets/SystemPage-CJmtJkrK.js +0 -1
- package/public/app/assets/TimePage-Cw44inM4.js +0 -3
- package/public/app/assets/index-BheRW-1t.js +0 -4
- package/public/app/assets/media-BzPDBm7e.js +0 -1
|
@@ -1,84 +1,84 @@
|
|
|
1
|
-
import { createHash, randomUUID } from "node:crypto";
|
|
2
|
-
import { hasCredential, text } from "./util.js";
|
|
3
|
-
|
|
4
|
-
const DAY = 86400000;
|
|
5
|
-
const DEDUPE = 6 * 3600000;
|
|
6
|
-
const DAILY = 24;
|
|
7
|
-
|
|
8
|
-
// Something a plugin says happened, cited as "o:<id>". Append-only: undoing
|
|
9
|
-
// it leaves a tombstone, and it never counts as the kind of outside evidence
|
|
10
|
-
// that moves her traits.
|
|
11
|
-
export class Observations {
|
|
12
|
-
constructor(mind) {
|
|
13
|
-
this.mind = mind;
|
|
14
|
-
this.db = mind.db;
|
|
15
|
-
}
|
|
16
|
-
add(
|
|
17
|
-
{ pluginId, summary, detail = "", discretion = "open" },
|
|
18
|
-
now = Date.now(),
|
|
19
|
-
) {
|
|
20
|
-
const words = text(summary, 300);
|
|
21
|
-
const more = text(detail, 1200);
|
|
22
|
-
if (!words || hasCredential(words + more))
|
|
23
|
-
return { rejected: "这段经历没有可保留的内容" };
|
|
24
|
-
const hash = createHash("sha256")
|
|
25
|
-
.update(`${pluginId}\n${words}`)
|
|
26
|
-
.digest("hex");
|
|
27
|
-
const again = this.db
|
|
28
|
-
.prepare(
|
|
29
|
-
"SELECT id FROM mind_observations WHERE plugin_id=? AND hash=? AND revoked=0 AND created>?",
|
|
30
|
-
)
|
|
31
|
-
.get(pluginId, hash, now - DEDUPE);
|
|
32
|
-
if (again) return { ref: `o:${again.id}`, duplicate: true };
|
|
33
|
-
const used = this.db
|
|
34
|
-
.prepare(
|
|
35
|
-
"SELECT COUNT(*) n FROM mind_observations WHERE plugin_id=? AND created>? AND created<=?",
|
|
36
|
-
)
|
|
37
|
-
.get(pluginId, now - DAY, now).n;
|
|
38
|
-
if (used >= DAILY) return { rejected: "今天从这里记下的经历已经够多了" };
|
|
39
|
-
const id = randomUUID();
|
|
40
|
-
this.db
|
|
41
|
-
.prepare(
|
|
42
|
-
"INSERT INTO mind_observations(id,created,plugin_id,summary,detail,discretion,hash,revoked) VALUES (?,?,?,?,?,?,?,0)",
|
|
43
|
-
)
|
|
44
|
-
.run(
|
|
45
|
-
id,
|
|
46
|
-
now,
|
|
47
|
-
pluginId,
|
|
48
|
-
words,
|
|
49
|
-
more,
|
|
50
|
-
discretion === "private" ? "private" : "open",
|
|
51
|
-
hash,
|
|
52
|
-
);
|
|
53
|
-
this.mind.store.revision++;
|
|
54
|
-
return { ref: `o:${id}` };
|
|
55
|
-
}
|
|
56
|
-
recent({ since = 0, before = Date.now(), limit = 6, session = "" } = {}) {
|
|
57
|
-
return this.db
|
|
58
|
-
.prepare(
|
|
59
|
-
"SELECT * FROM mind_observations WHERE revoked=0 AND created>? AND created<=? ORDER BY created DESC LIMIT ?",
|
|
60
|
-
)
|
|
61
|
-
.all(since, before, Math.max(1, Math.min(24, limit)))
|
|
62
|
-
.filter((row) => session === "" || row.discretion !== "private")
|
|
63
|
-
.map((row) => ({
|
|
64
|
-
ref: `o:${row.id}`,
|
|
65
|
-
created: row.created,
|
|
66
|
-
summary: row.summary,
|
|
67
|
-
...(row.detail ? { detail: row.detail } : {}),
|
|
68
|
-
...(row.discretion === "private" ? { private: true } : {}),
|
|
69
|
-
}));
|
|
70
|
-
}
|
|
71
|
-
get(id) {
|
|
72
|
-
return this.db
|
|
73
|
-
.prepare("SELECT * FROM mind_observations WHERE id=?")
|
|
74
|
-
.get(id);
|
|
75
|
-
}
|
|
76
|
-
revoke(id) {
|
|
77
|
-
const row = this.get(id);
|
|
78
|
-
if (!row || row.revoked) throw Error("这段经历不存在");
|
|
79
|
-
this.db
|
|
80
|
-
.prepare("UPDATE mind_observations SET revoked=1 WHERE id=?")
|
|
81
|
-
.run(id);
|
|
82
|
-
return row.summary;
|
|
83
|
-
}
|
|
84
|
-
}
|
|
1
|
+
import { createHash, randomUUID } from "node:crypto";
|
|
2
|
+
import { hasCredential, text } from "./util.js";
|
|
3
|
+
|
|
4
|
+
const DAY = 86400000;
|
|
5
|
+
const DEDUPE = 6 * 3600000;
|
|
6
|
+
const DAILY = 24;
|
|
7
|
+
|
|
8
|
+
// Something a plugin says happened, cited as "o:<id>". Append-only: undoing
|
|
9
|
+
// it leaves a tombstone, and it never counts as the kind of outside evidence
|
|
10
|
+
// that moves her traits.
|
|
11
|
+
export class Observations {
|
|
12
|
+
constructor(mind) {
|
|
13
|
+
this.mind = mind;
|
|
14
|
+
this.db = mind.db;
|
|
15
|
+
}
|
|
16
|
+
add(
|
|
17
|
+
{ pluginId, summary, detail = "", discretion = "open" },
|
|
18
|
+
now = Date.now(),
|
|
19
|
+
) {
|
|
20
|
+
const words = text(summary, 300);
|
|
21
|
+
const more = text(detail, 1200);
|
|
22
|
+
if (!words || hasCredential(words + more))
|
|
23
|
+
return { rejected: "这段经历没有可保留的内容" };
|
|
24
|
+
const hash = createHash("sha256")
|
|
25
|
+
.update(`${pluginId}\n${words}`)
|
|
26
|
+
.digest("hex");
|
|
27
|
+
const again = this.db
|
|
28
|
+
.prepare(
|
|
29
|
+
"SELECT id FROM mind_observations WHERE plugin_id=? AND hash=? AND revoked=0 AND created>?",
|
|
30
|
+
)
|
|
31
|
+
.get(pluginId, hash, now - DEDUPE);
|
|
32
|
+
if (again) return { ref: `o:${again.id}`, duplicate: true };
|
|
33
|
+
const used = this.db
|
|
34
|
+
.prepare(
|
|
35
|
+
"SELECT COUNT(*) n FROM mind_observations WHERE plugin_id=? AND created>? AND created<=?",
|
|
36
|
+
)
|
|
37
|
+
.get(pluginId, now - DAY, now).n;
|
|
38
|
+
if (used >= DAILY) return { rejected: "今天从这里记下的经历已经够多了" };
|
|
39
|
+
const id = randomUUID();
|
|
40
|
+
this.db
|
|
41
|
+
.prepare(
|
|
42
|
+
"INSERT INTO mind_observations(id,created,plugin_id,summary,detail,discretion,hash,revoked) VALUES (?,?,?,?,?,?,?,0)",
|
|
43
|
+
)
|
|
44
|
+
.run(
|
|
45
|
+
id,
|
|
46
|
+
now,
|
|
47
|
+
pluginId,
|
|
48
|
+
words,
|
|
49
|
+
more,
|
|
50
|
+
discretion === "private" ? "private" : "open",
|
|
51
|
+
hash,
|
|
52
|
+
);
|
|
53
|
+
this.mind.store.revision++;
|
|
54
|
+
return { ref: `o:${id}` };
|
|
55
|
+
}
|
|
56
|
+
recent({ since = 0, before = Date.now(), limit = 6, session = "" } = {}) {
|
|
57
|
+
return this.db
|
|
58
|
+
.prepare(
|
|
59
|
+
"SELECT * FROM mind_observations WHERE revoked=0 AND created>? AND created<=? ORDER BY created DESC LIMIT ?",
|
|
60
|
+
)
|
|
61
|
+
.all(since, before, Math.max(1, Math.min(24, limit)))
|
|
62
|
+
.filter((row) => session === "" || row.discretion !== "private")
|
|
63
|
+
.map((row) => ({
|
|
64
|
+
ref: `o:${row.id}`,
|
|
65
|
+
created: row.created,
|
|
66
|
+
summary: row.summary,
|
|
67
|
+
...(row.detail ? { detail: row.detail } : {}),
|
|
68
|
+
...(row.discretion === "private" ? { private: true } : {}),
|
|
69
|
+
}));
|
|
70
|
+
}
|
|
71
|
+
get(id) {
|
|
72
|
+
return this.db
|
|
73
|
+
.prepare("SELECT * FROM mind_observations WHERE id=?")
|
|
74
|
+
.get(id);
|
|
75
|
+
}
|
|
76
|
+
revoke(id) {
|
|
77
|
+
const row = this.get(id);
|
|
78
|
+
if (!row || row.revoked) throw Error("这段经历不存在");
|
|
79
|
+
this.db
|
|
80
|
+
.prepare("UPDATE mind_observations SET revoked=1 WHERE id=?")
|
|
81
|
+
.run(id);
|
|
82
|
+
return row.summary;
|
|
83
|
+
}
|
|
84
|
+
}
|