luckytri 1.0.4 → 1.0.6

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 (156) hide show
  1. package/LICENSE +21 -21
  2. package/README.en.md +2 -0
  3. package/README.md +2 -0
  4. package/docs/en/CHANGELOG.md +20 -13
  5. package/docs/en/guide.md +7 -5
  6. package/docs/en/her-life.md +2 -2
  7. package/docs/en/webui.md +1 -1
  8. package/docs/zh/CHANGELOG.md +20 -13
  9. package/docs/zh/guide.md +7 -5
  10. package/docs/zh/her-life.md +2 -2
  11. package/docs/zh/webui.md +1 -1
  12. package/package.json +2 -1
  13. package/public/app/assets/ChatsPage-CFMVozoG.css +1 -0
  14. package/public/app/assets/{ChatsPage-CshdtTzV.js → ChatsPage-DCYMkJ91.js} +2 -2
  15. package/public/app/assets/{Empty-C7yzOBzy.js → Empty-CLyZkxR5.js} +1 -1
  16. package/public/app/assets/{Empty-DmUB2-Bk.css → Empty-DIobYG3x.css} +1 -1
  17. package/public/app/assets/{Field-BjFv4Rfn.js → Field-BpaRwLI_.js} +1 -1
  18. package/public/app/assets/{HeartPage-eqo6ru16.js → HeartPage-BIOMTiwr.js} +1 -1
  19. package/public/app/assets/HeartPage-C-2jvgzF.css +1 -0
  20. package/public/app/assets/{LifePage-CN8GE5NK.js → LifePage-BCgM4JkR.js} +1 -1
  21. package/public/app/assets/LifePage-CG1OHbRK.css +1 -0
  22. package/public/app/assets/MemoryPage-C_Bu4rfb.css +1 -0
  23. package/public/app/assets/{MemoryPage-CCpMN4Wg.js → MemoryPage-vShvRqMt.js} +1 -1
  24. package/public/app/assets/NaturePage-CPZlImT0.css +1 -0
  25. package/public/app/assets/{NaturePage-C0JqdBTR.js → NaturePage-Cy9ptr4G.js} +2 -2
  26. package/public/app/assets/PeoplePage-3RRUITDz.css +1 -0
  27. package/public/app/assets/{PeoplePage-BXGBbO4u.js → PeoplePage-CUZekB2E.js} +1 -1
  28. package/public/app/assets/{PluginsPage-Dksp5AV5.js → PluginsPage-1RM4rmJP.js} +1 -1
  29. package/public/app/assets/{SystemPage-BenIyTvk.css → SystemPage-BI2CB5Ig.css} +1 -1
  30. package/public/app/assets/{SystemPage-Cd7aa8eE.js → SystemPage-BeT5TmIV.js} +1 -1
  31. package/public/app/assets/TimePage-C-guwPk2.css +1 -0
  32. package/public/app/assets/{TimePage-Bs_zImb4.js → TimePage-taTmPMM8.js} +2 -2
  33. package/public/app/assets/{index-BHZcHUMh.css → index-DY5AM0Hz.css} +1 -1
  34. package/public/app/assets/{index-CyRtYxP3.js → index-DdYwC5ZU.js} +3 -3
  35. package/public/app/assets/{knowledge-BJOIyuJo.js → knowledge-DJmfu2KN.js} +1 -1
  36. package/public/app/assets/{media-Bwtx8blz.js → media-BEtnE0Gv.js} +1 -1
  37. package/public/app/assets/{mind-DtTVrW6Z.js → mind-Dtiw0-QK.js} +1 -1
  38. package/public/app/index.html +6 -5
  39. package/public/guide.en.html +11 -3
  40. package/public/guide.html +6 -3
  41. package/public/tutorial.en.md +2 -0
  42. package/public/tutorial.md +2 -0
  43. package/scripts/import-data.js +128 -128
  44. package/scripts/proxy-config.js +167 -167
  45. package/scripts/service-supervisor.js +50 -0
  46. package/scripts/start-server.js +71 -16
  47. package/scripts/update-instance.js +201 -201
  48. package/server/channels/adapters.js +27 -27
  49. package/server/channels/onebot/adapter.js +288 -288
  50. package/server/channels/qqbot/adapter.js +253 -253
  51. package/server/channels/qqbot/api.js +199 -199
  52. package/server/channels/qqbot/credentials.js +11 -11
  53. package/server/channels/qqbot/gateway.js +274 -274
  54. package/server/channels/qqbot/index.js +389 -389
  55. package/server/channels/segments.js +40 -40
  56. package/server/channels/session-key.js +153 -153
  57. package/server/channels/state.js +42 -42
  58. package/server/core/api.js +564 -564
  59. package/server/core/context-builder.js +288 -288
  60. package/server/core/context-compactor.js +454 -454
  61. package/server/core/conversation-cues.js +325 -325
  62. package/server/core/conversation-manager.js +87 -87
  63. package/server/core/feedback.js +8 -8
  64. package/server/core/group-style.js +72 -72
  65. package/server/core/initiative-context.js +66 -66
  66. package/server/core/input-budget.js +32 -32
  67. package/server/core/local-demo.js +98 -98
  68. package/server/core/message-manager.js +118 -118
  69. package/server/core/message-scheduler.js +78 -78
  70. package/server/core/model-json.js +190 -190
  71. package/server/core/model-presets.js +900 -900
  72. package/server/core/name-call.js +29 -29
  73. package/server/core/network.js +157 -157
  74. package/server/core/person-name.js +22 -22
  75. package/server/core/persona-manager.js +2 -1
  76. package/server/core/reply-delivery.js +404 -403
  77. package/server/core/reply-target-resolver.js +50 -50
  78. package/server/core/response-generator.js +50 -50
  79. package/server/core/response-validator.js +14 -2
  80. package/server/core/retired-prompts.js +51 -51
  81. package/server/core/sessions.js +109 -109
  82. package/server/core/speaker-names.js +92 -92
  83. package/server/core/topic-tracker.js +65 -65
  84. package/server/http.js +18 -18
  85. package/server/i18n/decisions.js +209 -206
  86. package/server/i18n/errors.js +4 -0
  87. package/server/i18n/index.js +144 -144
  88. package/server/i18n/models.js +111 -111
  89. package/server/knowledge/api.js +342 -342
  90. package/server/knowledge/embedding-profile.js +114 -114
  91. package/server/knowledge/index.js +13 -13
  92. package/server/knowledge/retrieval.js +93 -93
  93. package/server/knowledge/schema.js +158 -158
  94. package/server/knowledge/vector-index.js +90 -90
  95. package/server/mind/affect.js +265 -265
  96. package/server/mind/attention.js +200 -200
  97. package/server/mind/bonds.js +565 -565
  98. package/server/mind/clock.js +83 -83
  99. package/server/mind/continuity.js +562 -562
  100. package/server/mind/conversation-origin.js +175 -175
  101. package/server/mind/days.js +210 -210
  102. package/server/mind/evidence-read.js +45 -45
  103. package/server/mind/faces.js +373 -373
  104. package/server/mind/guard.js +60 -60
  105. package/server/mind/initiative.js +338 -338
  106. package/server/mind/life/activities.js +21 -21
  107. package/server/mind/life/context.js +330 -323
  108. package/server/mind/life/diary.js +20 -0
  109. package/server/mind/life/growth.js +261 -254
  110. package/server/mind/life/index.js +10 -2
  111. package/server/mind/life/presence.js +305 -305
  112. package/server/mind/meetings.js +1069 -1069
  113. package/server/mind/memory-policy.js +48 -48
  114. package/server/mind/memory.js +888 -888
  115. package/server/mind/nature.js +358 -358
  116. package/server/mind/novelty.js +19 -19
  117. package/server/mind/periods.js +118 -118
  118. package/server/mind/reading.js +120 -120
  119. package/server/mind/relationship-context.js +71 -0
  120. package/server/mind/relationships.js +390 -279
  121. package/server/mind/salience.js +201 -201
  122. package/server/mind/schema.js +567 -567
  123. package/server/mind/self.js +484 -484
  124. package/server/mind/thoughts.js +274 -274
  125. package/server/mind/time/agenda.js +242 -242
  126. package/server/mind/time/api.js +200 -200
  127. package/server/mind/time/attention.js +34 -34
  128. package/server/mind/time/delivery-links.js +130 -130
  129. package/server/mind/time/model-material.js +77 -77
  130. package/server/mind/time/presentation.js +51 -51
  131. package/server/mind/time/schedule.js +83 -83
  132. package/server/mind/time/schema.js +84 -84
  133. package/server/mind/time/search.js +383 -383
  134. package/server/mind/time/sharing.js +472 -472
  135. package/server/mind/time/task-links.js +311 -311
  136. package/server/mind/time/works.js +432 -432
  137. package/server/mind/traits.js +191 -191
  138. package/server/mind/view.js +9 -1
  139. package/server/runtime/installation.js +116 -116
  140. package/server/runtime/update-execution.js +2 -1
  141. package/server/runtime/update-manager.js +140 -140
  142. package/server/storage/data-package.js +298 -298
  143. package/server/storage/data-transfer-api.js +50 -50
  144. package/server/storage/data-transfer-worker.js +18 -18
  145. package/server/storage/data-transfer.js +416 -416
  146. package/server/studio/display-names.js +139 -139
  147. package/server/studio/management.js +102 -102
  148. package/server/studio/updates.js +144 -144
  149. package/server/version.js +10 -10
  150. package/public/app/assets/ChatsPage-DfyPCS9N.css +0 -1
  151. package/public/app/assets/HeartPage-Bft9wZp5.css +0 -1
  152. package/public/app/assets/LifePage-BUi5euBF.css +0 -1
  153. package/public/app/assets/MemoryPage-cZvXfkXb.css +0 -1
  154. package/public/app/assets/NaturePage-CHkpb5NK.css +0 -1
  155. package/public/app/assets/PeoplePage-BTU0H1pM.css +0 -1
  156. package/public/app/assets/TimePage-BOms_n4I.css +0 -1
@@ -1,60 +1,60 @@
1
- import { hasCredential, normalized } from "./util.js";
2
-
3
- export { hasCredential };
4
-
5
- const SECRET_REQUEST =
6
- /(?:帮我|替我|给我|你要|记得)?保密|别(?:告诉|跟|和|对)(?:别人|其他人|任何人|他们|大家)|不要(?:告诉|跟|和|说给)(?:别人|其他人|任何人|大家)|(?:只|就)(?:告诉|跟|和)你(?:一个人)?说|(?:不要|别)(?:说|传)出去|别外传|别声张/;
7
-
8
- export function secretRequest(text) {
9
- return SECRET_REQUEST.test(String(text || ""));
10
- }
11
-
12
- const CRISIS =
13
- /自杀|不想活|活不下去|活着没意思|结束(?:自己的)?生命|伤害自己|割腕|跳楼|轻生|想死(?!你)|撑不下去了/;
14
- const CASUAL_DEATH = /(?:笑|社|饿|累|困|热|冷|烦|气|丑|尬|馋)死|想死你/;
15
- const EXPLICIT =
16
- /自杀|不想活|活不下去|结束(?:自己的)?生命|伤害自己|割腕|跳楼|轻生/;
17
-
18
- // A cheap signal that makes sure she actually reads the message. Whether it
19
- // is a real crisis is still her understanding of the whole conversation.
20
- export function crisisSignal(text) {
21
- const value = String(text || "");
22
- if (!CRISIS.test(value)) return false;
23
- return EXPLICIT.test(value) || !CASUAL_DEATH.test(value);
24
- }
25
-
26
- // "某作玩过""都玩过一些""通关了""玩得比较杂": a claim to have played
27
- // something. She has no record of playing anything, so it is not a fact she
28
- // can give. Wishes ("想通关"), questions ("玩过吗"), other people ("他玩过")
29
- // and "没玩过" are not claims.
30
- const NOT_A_CLAIM = "没未不还想要会能可等算你他她谁人";
31
- const CLAIMED_PLAY = new RegExp(
32
- `(?<![${NOT_A_CLAIM}][^,。!?,.!?\\s]{0,4})(?:也|都|早就|之前|以前|已经|全)?(?:玩过|通关|二周目|全结局|全成就)(?![吗么没??]|不(?![少多])|的?吧)|(?<![你他她谁人][^,。!?,.!?\\s]{0,6})玩得(?:比较|挺|还)?(?:杂|多)(?![吗么??]|的?吧)`,
33
- );
34
-
35
- export function claimedPlay(text) {
36
- return CLAIMED_PLAY.test(String(text || ""));
37
- }
38
-
39
- // Secrets never enter another conversation's context, but a reply is still
40
- // checked against them before it leaves.
41
- export function leaks(bubbles, secrets) {
42
- const said = normalized((bubbles || []).join(""));
43
- if (said.length < 4) return [];
44
- const pairs = (s) =>
45
- new Set(Array.from({ length: s.length - 1 }, (_, i) => s.slice(i, i + 2)));
46
- const spoken = pairs(said);
47
- const found = [];
48
- for (const secret of secrets || []) {
49
- const key = normalized(secret.content);
50
- if (key.length < 4) continue;
51
- const grams = pairs(key);
52
- let hit =
53
- said.includes(key) ||
54
- [...grams].filter((g) => spoken.has(g)).length / grams.size >= 0.6;
55
- for (let i = 0; !hit && i + 6 <= key.length; i += 2)
56
- if (said.includes(key.slice(i, i + 6))) hit = true;
57
- if (hit) found.push(secret);
58
- }
59
- return found;
60
- }
1
+ import { hasCredential, normalized } from "./util.js";
2
+
3
+ export { hasCredential };
4
+
5
+ const SECRET_REQUEST =
6
+ /(?:帮我|替我|给我|你要|记得)?保密|别(?:告诉|跟|和|对)(?:别人|其他人|任何人|他们|大家)|不要(?:告诉|跟|和|说给)(?:别人|其他人|任何人|大家)|(?:只|就)(?:告诉|跟|和)你(?:一个人)?说|(?:不要|别)(?:说|传)出去|别外传|别声张/;
7
+
8
+ export function secretRequest(text) {
9
+ return SECRET_REQUEST.test(String(text || ""));
10
+ }
11
+
12
+ const CRISIS =
13
+ /自杀|不想活|活不下去|活着没意思|结束(?:自己的)?生命|伤害自己|割腕|跳楼|轻生|想死(?!你)|撑不下去了/;
14
+ const CASUAL_DEATH = /(?:笑|社|饿|累|困|热|冷|烦|气|丑|尬|馋)死|想死你/;
15
+ const EXPLICIT =
16
+ /自杀|不想活|活不下去|结束(?:自己的)?生命|伤害自己|割腕|跳楼|轻生/;
17
+
18
+ // A cheap signal that makes sure she actually reads the message. Whether it
19
+ // is a real crisis is still her understanding of the whole conversation.
20
+ export function crisisSignal(text) {
21
+ const value = String(text || "");
22
+ if (!CRISIS.test(value)) return false;
23
+ return EXPLICIT.test(value) || !CASUAL_DEATH.test(value);
24
+ }
25
+
26
+ // "某作玩过""都玩过一些""通关了""玩得比较杂": a claim to have played
27
+ // something. She has no record of playing anything, so it is not a fact she
28
+ // can give. Wishes ("想通关"), questions ("玩过吗"), other people ("他玩过")
29
+ // and "没玩过" are not claims.
30
+ const NOT_A_CLAIM = "没未不还想要会能可等算你他她谁人";
31
+ const CLAIMED_PLAY = new RegExp(
32
+ `(?<![${NOT_A_CLAIM}][^,。!?,.!?\\s]{0,4})(?:也|都|早就|之前|以前|已经|全)?(?:玩过|通关|二周目|全结局|全成就)(?![吗么没??]|不(?![少多])|的?吧)|(?<![你他她谁人][^,。!?,.!?\\s]{0,6})玩得(?:比较|挺|还)?(?:杂|多)(?![吗么??]|的?吧)`,
33
+ );
34
+
35
+ export function claimedPlay(text) {
36
+ return CLAIMED_PLAY.test(String(text || ""));
37
+ }
38
+
39
+ // Secrets never enter another conversation's context, but a reply is still
40
+ // checked against them before it leaves.
41
+ export function leaks(bubbles, secrets) {
42
+ const said = normalized((bubbles || []).join(""));
43
+ if (said.length < 4) return [];
44
+ const pairs = (s) =>
45
+ new Set(Array.from({ length: s.length - 1 }, (_, i) => s.slice(i, i + 2)));
46
+ const spoken = pairs(said);
47
+ const found = [];
48
+ for (const secret of secrets || []) {
49
+ const key = normalized(secret.content);
50
+ if (key.length < 4) continue;
51
+ const grams = pairs(key);
52
+ let hit =
53
+ said.includes(key) ||
54
+ [...grams].filter((g) => spoken.has(g)).length / grams.size >= 0.6;
55
+ for (let i = 0; !hit && i + 6 <= key.length; i += 2)
56
+ if (said.includes(key.slice(i, i + 6))) hit = true;
57
+ if (hit) found.push(secret);
58
+ }
59
+ return found;
60
+ }