luckytri 1.0.8 → 1.1.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.
Files changed (100) hide show
  1. package/README.en.md +1 -1
  2. package/README.md +1 -1
  3. package/docs/en/CHANGELOG.md +44 -24
  4. package/docs/en/architecture.md +4 -0
  5. package/docs/en/cognition.md +34 -0
  6. package/docs/en/guide.md +8 -6
  7. package/docs/zh/CHANGELOG.md +44 -24
  8. package/docs/zh/architecture.md +4 -0
  9. package/docs/zh/cognition.md +34 -0
  10. package/docs/zh/guide.md +8 -6
  11. package/package.json +112 -112
  12. package/public/app/assets/ChatsPage-DH4ZPRXB.js +3 -0
  13. package/public/app/assets/{Empty-C7yzOBzy.js → Empty-DRsHeX-L.js} +1 -1
  14. package/public/app/assets/Field-BfIUcaNa.js +1 -0
  15. package/public/app/assets/HeartPage-BxgSUJJ_.js +1 -0
  16. package/public/app/assets/LifePage-CAKr8h_q.js +1 -0
  17. package/public/app/assets/MemoryPage-CFq8L_TC.js +1 -0
  18. package/public/app/assets/NaturePage-BU1iDno3.js +3 -0
  19. package/public/app/assets/PeoplePage-C6i_nAfr.js +1 -0
  20. package/public/app/assets/PluginsPage-DRV8lzk3.js +2 -0
  21. package/public/app/assets/SystemPage-21AlQBiC.js +1 -0
  22. package/public/app/assets/SystemPage-CMcuUdLm.css +1 -0
  23. package/public/app/assets/TimePage-DUzjLnZV.js +3 -0
  24. package/public/app/assets/index-WAvrlAcO.js +4 -0
  25. package/public/app/assets/{knowledge-BJOIyuJo.js → knowledge-V_blbx9R.js} +1 -1
  26. package/public/app/assets/media-C7j5HqxK.js +1 -0
  27. package/public/app/assets/{mind-DtTVrW6Z.js → mind-BBAstMqH.js} +1 -1
  28. package/public/app/index.html +3 -3
  29. package/public/guide.en.html +13 -5
  30. package/public/guide.html +12 -5
  31. package/public/tutorial.en.md +3 -1
  32. package/public/tutorial.md +3 -1
  33. package/server/core/backoff.js +123 -0
  34. package/server/core/context-builder.js +307 -288
  35. package/server/core/contribution-check.js +50 -0
  36. package/server/core/conversation-cues.js +377 -385
  37. package/server/core/conversation-grounding.js +547 -304
  38. package/server/core/dialogue-context.js +247 -244
  39. package/server/core/dialogue-contract.js +33 -9
  40. package/server/core/embedding.js +246 -0
  41. package/server/core/expression-strategy.js +90 -0
  42. package/server/core/initiative-context.js +88 -68
  43. package/server/core/model-json.js +223 -190
  44. package/server/core/model-manager.js +256 -56
  45. package/server/core/model-presets.js +1045 -900
  46. package/server/core/orchestrator.js +41 -3
  47. package/server/core/persona-manager.js +364 -359
  48. package/server/core/reader-check.js +166 -62
  49. package/server/core/reply-delivery.js +688 -537
  50. package/server/core/repository.js +36 -0
  51. package/server/core/response-generator.js +101 -92
  52. package/server/core/response-validator.js +18 -3
  53. package/server/core/retired-prompts.js +53 -51
  54. package/server/core/time-expressions.js +143 -0
  55. package/server/core/turn-processor.js +175 -5
  56. package/server/core/turn.js +299 -44
  57. package/server/core/understanding.js +85 -0
  58. package/server/core/working-memory.js +149 -0
  59. package/server/i18n/decisions.js +225 -209
  60. package/server/i18n/errors.js +14 -0
  61. package/server/i18n/models.js +120 -111
  62. package/server/knowledge/api.js +362 -342
  63. package/server/knowledge/embedding-profile.js +158 -114
  64. package/server/knowledge/manager.js +6 -1
  65. package/server/mind/api.js +68 -0
  66. package/server/mind/continuity.js +634 -562
  67. package/server/mind/day-planner.js +52 -3
  68. package/server/mind/episodes.js +242 -0
  69. package/server/mind/expression-grounding.js +24 -21
  70. package/server/mind/index.js +13 -2
  71. package/server/mind/initiative.js +356 -338
  72. package/server/mind/life/index.js +6 -0
  73. package/server/mind/meetings.js +1112 -1069
  74. package/server/mind/memory.js +1091 -888
  75. package/server/mind/recall/index.js +776 -0
  76. package/server/mind/recall/schema.js +132 -0
  77. package/server/mind/recall/sources.js +220 -0
  78. package/server/mind/recall/store.js +368 -0
  79. package/server/mind/salience.js +202 -201
  80. package/server/mind/schema.js +568 -567
  81. package/server/mind/self.js +537 -496
  82. package/server/mind/time/activity-recall.js +65 -0
  83. package/server/mind/time/index.js +6 -2
  84. package/server/mind/time/tasks.js +36 -10
  85. package/server/mind/time/works.js +528 -527
  86. package/server/mind/view.js +63 -17
  87. package/server/storage/archive.js +1 -1
  88. package/public/app/assets/ChatsPage-CshdtTzV.js +0 -3
  89. package/public/app/assets/Field-BjFv4Rfn.js +0 -1
  90. package/public/app/assets/HeartPage-eqo6ru16.js +0 -1
  91. package/public/app/assets/LifePage-CN8GE5NK.js +0 -1
  92. package/public/app/assets/MemoryPage-CCpMN4Wg.js +0 -1
  93. package/public/app/assets/NaturePage-C0JqdBTR.js +0 -3
  94. package/public/app/assets/PeoplePage-BXGBbO4u.js +0 -1
  95. package/public/app/assets/PluginsPage-Dksp5AV5.js +0 -2
  96. package/public/app/assets/SystemPage-BenIyTvk.css +0 -1
  97. package/public/app/assets/SystemPage-Cd7aa8eE.js +0 -1
  98. package/public/app/assets/TimePage-Bs_zImb4.js +0 -3
  99. package/public/app/assets/index-CyRtYxP3.js +0 -4
  100. package/public/app/assets/media-Bwtx8blz.js +0 -1
package/README.en.md CHANGED
@@ -94,7 +94,7 @@ The full design is in [Her life](docs/en/her-life.md) and [Architecture and exte
94
94
 
95
95
  Recent work focuses on continuity and clearer conversation. Account-based recognition links public encounters across groups and private chats. Relationships, forms of address, her own views and private promises retain their sources and visibility boundaries. An ordinary greeting need not bring back unfinished tasks or demonstrate how much she remembers.
96
96
 
97
- **Conversation fixes in 1.0.8:** Attend to the current speaker, follow-up messages and quotations; explain plainly when someone cannot follow. Another bot's interpretation does not replace the person's confirmation, and a conversation can pause when there is nothing new to add. Reading, writing and game references require the appropriate material: waiting for a manuscript does not become a writing project, and reading notes are not game-client operation. See the [changelog](docs/en/CHANGELOG.md). These changes still need testing in everyday interaction; automated scores are not a guarantee of conversation quality.
97
+ **1.1.0 update:** She is the same person in every room. She knows her mood, energy and who she is close to, and she knows what just happened elsewhere. She does not usually mention another place; when the person in front of her was there, she decides whether to continue. Recall can search by meaning. Only an embedding API key is required, and conversation and keyword recall still run without one. See the [changelog](docs/en/CHANGELOG.md).
98
98
 
99
99
  | Area | What it does today |
100
100
  | ------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
package/README.md CHANGED
@@ -94,7 +94,7 @@ flowchart LR
94
94
 
95
95
  近期更新集中在让相处更连贯、说话更清楚。她按账号认出同一个人,在不同群与私聊间衔接公开经历;关系、称呼、自己的看法和私人约定分别保留来源与可见范围。普通问候不需要带出旧任务,每次开口也不需要证明自己记住了多少事。
96
96
 
97
- **1.0.8 的对话修复:** 优先理解当前说话人的问题、连续补充与引用;对方说没听懂,就换成能直接理解的话。其他机器人的猜测不代替本人确认;没有新内容时可以停下来。阅读、写作与游戏资料各自核对真实材料,等待来稿不会被执行成创作,也不会把阅读笔记说成操作游戏客户端。完整变化见 [版本记录](docs/zh/CHANGELOG.md)。这些修复仍需真实相处检验,项目不把自动评分当作回复质量的保证。
97
+ **1.1.0 更新:** 她在每个房间都是同一个人,知道自己的心情、精力和亲近的人,也知道刚刚在别处发生的事;一般不主动提起别的地方,眼前就是当时那个人时由她决定要不要接着说。回忆可以按意思检索;只填写向量密钥即可,没有向量模型时对话和关键词回忆照常进行。完整变化见 [版本记录](docs/zh/CHANGELOG.md)。
98
98
 
99
99
  | 方面 | 现在能做什么 |
100
100
  | ------------ | --------------------------------------------------------------------------------------------------------- |
@@ -1,6 +1,27 @@
1
1
  <p align="right"><a href="../zh/CHANGELOG.md">中文</a> · <b>English</b></p>
2
2
 
3
- # Changelog
3
+ # Changelog
4
+
5
+ ## 1.1.0 — 2026-10-11
6
+
7
+ - She is the same person in every room. What was just said elsewhere comes into the current turn, and she knows it. She does not usually bring another place up here. When the person in front of her was part of it, she may continue or leave it unsaid. Private wording, secrets and another account's history still stay out.
8
+ - Every turn carries her own state: awake or asleep, energy, mood, what she is living for, and the people she is close to. That is for her, not a report to recite.
9
+ - Memory uses one rebuildable index. Facts, meetings, episodes, self, thoughts, diaries and promises can be found by meaning, words and who is present. Without an embedding model, keyword recall and recent context still answer, and conversation continues.
10
+ - The embedding service needs only an API key. Address, model and 1024 dimensions are chosen from the chat service. Those requests use their own lane and do not block replies.
11
+ - An affair is an episode thread from its start to its outcome. A follow-up that comes due is only a candidate and still passes the existing initiative gates. A lesson must cite lived experience, the same experience is used once, and two independent pieces establish it.
12
+ - Background failures no longer retry in a loop. Conversation stays ahead of upkeep, a permanent model error pauses that model, and a schedule clash takes the nearest free slot. The database schema moves to version 5 and copies the whole file before upgrading.
13
+
14
+ ## 1.0.9 — 2026-10-11
15
+
16
+ - In follow-ups, answer the new detail without repeating limitations already explained; answer a question about source or feelings directly.
17
+ - Discuss project proposals using the details actually given, without inventing the other person's existing game mechanics or assignment. If a first bot reply misses a newly delivered passage or question, retry once for that content; empty confirmations still stop.
18
+ - For a concrete story excerpt, describe the visible events before clarifying that the larger plot is unknown.
19
+ - Reject duplicate JSON fields so a later `bubbles` field cannot silently replace an answer. Queued messages can see replies already delivered before their turn starts, reducing repeated acknowledgments and corrections.
20
+ - Distinguish questions, proposals, feelings and corrections. Reviews retain the necessary original words and participants to check mistaken adaptations and unsupported apologies. When a follow-up omits a work's title, use the immediately delivered reply to that same person in the same conversation to find reading records, returning only the reading fact, not the reply's text. Select old summaries by the current topic while preserving address agreements separately.
21
+ - Check repeated bot confirmations before they produce emotional changes. Verify new actions claimed in proactive drafts against activity records; old wishes cannot prove execution. Preserve history and readable source dates during review.
22
+ - Retain earlier repair constraints. Keep a shortened original reply only after every check passes again. Historical evaluations exclude future memories and self-feedback, record code fingerprints, and fail explicitly when requested cases are missing.
23
+ - Remove the unavailable OpenCode Zen Space Bunny Free and Step 5 Preview Free presets. On startup, remove their saved profiles while preserving other models and the default.
24
+ - Add a separate Volcengine Ark Agent Plan category with its auto-router and all 14 current text model IDs/aliases. Use the dedicated `/api/plan/v3` Responses API, official context sizes and vision capabilities; exclude Coding Plan, models already being retired, and image, video, speech and embedding models.
4
25
 
5
26
  ## 1.0.8 — 2026-10-10
6
27
 
@@ -11,17 +32,17 @@
11
32
  - Recall relevant historical work versions without denying earlier reading because recent records are incomplete or revealing unrelated private text. Exclude unrelated web material from game progress and sharing while retaining the archive.
12
33
  - Distinguish someone else's writing from her own reading promise. Waiting for a manuscript does not execute as writing or substitute another or older book. New self-expressions check actions and participants rather than turning wishes into completed experiences.
13
34
  - Update both READMEs, capability boundaries and the release badge; expand historical replay, sequential group scenarios and regression coverage. Transcripts and model reports remain local.
14
-
35
+
15
36
  ## 1.0.7 — 2026-10-09
16
-
17
- - Ground understanding in the current messages, supplements, speakers and quote chains before choosing a response. Corrections address the actual question instead of substituting apologies or abstract monologues.
18
- - Keep single topical remarks out of the enduring self's core and prevent extracted replies from becoming fixed scripts. Related recollections, cross-conversation continuity and disclosure boundaries remain available.
19
- - Exclude known bots from human room-style statistics and end empty bot confirmation loops. An explicit addressed stop ends the current turn; a renewed question can still receive a reply.
20
- - Preserve provenance and uncertainty in game-content presentation. Current activities and work fragments distinguish reference reading and model-generated material from client operation or completion.
21
- - Rewrite the latest rejected draft, allow requested factual repetition, and keep contradiction repairs confined to relevant questions. Conversation endings no longer receive an unrelated confusion fallback.
22
- - Add full-corpus review, historical replay and sequential conversation evaluation tools. Paid model checks run explicitly; private transcripts and reports stay local and are excluded from release artifacts.
23
-
24
- ## 1.0.5 — 2026-10-07
37
+
38
+ - Ground understanding in the current messages, supplements, speakers and quote chains before choosing a response. Corrections address the actual question instead of substituting apologies or abstract monologues.
39
+ - Keep single topical remarks out of the enduring self's core and prevent extracted replies from becoming fixed scripts. Related recollections, cross-conversation continuity and disclosure boundaries remain available.
40
+ - Exclude known bots from human room-style statistics and end empty bot confirmation loops. An explicit addressed stop ends the current turn; a renewed question can still receive a reply.
41
+ - Preserve provenance and uncertainty in game-content presentation. Current activities and work fragments distinguish reference reading and model-generated material from client operation or completion.
42
+ - Rewrite the latest rejected draft, allow requested factual repetition, and keep contradiction repairs confined to relevant questions. Conversation endings no longer receive an unrelated confusion fallback.
43
+ - Add full-corpus review, historical replay and sequential conversation evaluation tools. Paid model checks run explicitly; private transcripts and reports stay local and are excluded from release artifacts.
44
+
45
+ ## 1.0.5 — 2026-10-07
25
46
 
26
47
  - Fixed bound relationships being forgotten when the person was absent from the current conversation. Chat, initiative, solitude, diaries and reviews recall the same account-based ledger by name and role.
27
48
  - Distinguished current relationship facts from past opinions and personal feelings. Historical denials and jokes remain in history; relationship-related replies are checked against current knowledge while preserving her choices about interaction and address.
@@ -35,19 +56,18 @@
35
56
  - Update and restart stages and validates the official release before stopping, saves a verified data restore point, and switches programs. Failed startup attempts restoration of the previous code and data. Source/npm installs and instance configuration remain intact; repeated clicks coalesce and CLI launches retain managed updates.
36
57
  - Added privacy, same-name identity, recovery, real installed-package switching and viewport regression checks. Archive checks verify bytes before parsing SQLite, so damaged files do not expose raw schema errors.
37
58
 
38
-
39
- ## 1.0.3 — 2026-10-06
40
-
41
- - Group personas become thoughts about each place. She selectively adds, revises or lets go of impressions, wishes, preferences, questions and boundaries from local encounters, retaining reasons, sources and versions. Her overall personality remains shared; copied legacy personas stay only in history.
42
- - Manual update checks in system runtime settings show the installed and latest npm versions and release notes. Checks cache and coalesce requests and recover from failures; they do not install or restart.
43
- - Nature edit allowances come from the server. Audited, idempotent local extra opportunities preserve personality history and other instances' default limits.
44
- - Added source isolation, selective updates, restart persistence, failed update recovery and responsive interface checks.
45
-
46
- ## 1.0.2 — 2026-10-06
47
-
48
- - Streamed full SQLite data packages with validated import previews, retained recovery points and rollback on failure.
49
- - Destination management sign-ins and connection settings are retained. Imported auto replies and plugin grants await review; cancelled, expired and interrupted temporary packages are reclaimed.
50
-
59
+ ## 1.0.3 — 2026-10-06
60
+
61
+ - Group personas become thoughts about each place. She selectively adds, revises or lets go of impressions, wishes, preferences, questions and boundaries from local encounters, retaining reasons, sources and versions. Her overall personality remains shared; copied legacy personas stay only in history.
62
+ - Manual update checks in system runtime settings show the installed and latest npm versions and release notes. Checks cache and coalesce requests and recover from failures; they do not install or restart.
63
+ - Nature edit allowances come from the server. Audited, idempotent local extra opportunities preserve personality history and other instances' default limits.
64
+ - Added source isolation, selective updates, restart persistence, failed update recovery and responsive interface checks.
65
+
66
+ ## 1.0.2 — 2026-10-06
67
+
68
+ - Streamed full SQLite data packages with validated import previews, retained recovery points and rollback on failure.
69
+ - Destination management sign-ins and connection settings are retained. Imported auto replies and plugin grants await review; cancelled, expired and interrupted temporary packages are reclaimed.
70
+
51
71
  ## 1.0.1 — 2026-10-05
52
72
 
53
73
  - Global npm installation runs with `luckytri`, including the server, built WebUI, guides and bundled plugin. User data remains outside the package across updates and reinstalls.
@@ -150,3 +150,7 @@ Nothing above the core changes. The connection option in settings and the readin
150
150
  - The built studio is committed in `public/app/`; run `npm run build:ui` after changing the frontend.
151
151
  - The guide pages are generated by `npm run docs:build` from `docs/zh/guide.md` and `docs/en/guide.md`.
152
152
  - Runtime data, backups, reports and secrets stay on the machine and never enter the repository.
153
+
154
+ ## Cognition and memory
155
+
156
+ How understanding, recall, episodes, lessons and follow-ups fit together is in [Cognition](cognition.md). The recall index is derived. Episodes and self threads stay append-only.
@@ -0,0 +1,34 @@
1
+ <p align="right"><a href="../zh/cognition.md">中文</a> · <b>English</b></p>
2
+
3
+ # Cognition and memory
4
+
5
+ She is still one turn call, not one model call per layer. What was added is a hint while a message is waiting, one recall path, episode threads, working memory, and lessons written in solitude from experience.
6
+
7
+ ## How a message moves
8
+
9
+ 1. It is stored in `core_events`. The speaker's query vector is computed while the batch is waiting.
10
+ 2. Messages in one session become one turn. `understanding.js` joins one person's consecutive lines and notes tone, stance and time expressions. Those are hints.
11
+ 3. `mind/recall` takes vector, full-text and structured candidates together, fuses them by reciprocal rank, then reranks by person, age and source. Permission is applied before ranking.
12
+ 4. Working memory keeps the current stretch verbatim. Older stretches are a summary plus semantic recall. Open episodes appear on a relationship as `goingOn`.
13
+ 5. One turn call. A model sometimes nests `choice` inside `understanding` or `contribution`. Normalization puts the fields back where the contract says they belong.
14
+ 6. The reply is checked and sent. Background consolidation writes facts and episodes. An episode whose follow-up time has arrived, or a promise that is due, is only a candidate during solitude. It still passes the existing initiative gates.
15
+
16
+ When the embedding service is down, recall falls back to full text, structured lookup and recent context. The turn still runs.
17
+
18
+ ## Storage
19
+
20
+ `DATABASE_VERSION` is 5. `mind_index`, `mind_index_fts` and `mind_vectors` are derived and can be rebuilt. `mind_episodes` is append-only: a status change is a new row in the same `thread_id`. `mind_self` gained a `lesson` kind and a `subject`. A lesson must cite experience that did not come from the model. The same experience is used once. Two independent pieces move it from `emerging` to `active`. A counterexample revises it downward.
21
+
22
+ A fact can be archived. Archiving only removes it from ordinary recall. When a person asks for deletion, the source, the index row and the vector are removed together.
23
+
24
+ ## Embeddings
25
+
26
+ The configured embedding model uses the OpenAI-compatible `/embeddings` endpoint, in batches, 2048 dimensions by default. Asking for 1024 works and is similar. The Ark multimodal endpoint takes one item at a time. Cosine between a short chat line and a stored fact is low, so a hit counts when it stands above the median of the nearest batch, with different floors for the speaker, people present, and everyone else. Queries have their own request lane and do not queue behind conversation. Background backfill is paced and slows down on HTTP 429.
27
+
28
+ On a backup copy, with 1024 dimensions and about 40 paraphrased real facts: lexical Recall@5 was 0.475; hybrid recall with feature rerank was 0.950, and the average number returned fell from 12 to about 3.9. There is no separate model reranker.
29
+
30
+ ## What evaluation showed
31
+
32
+ Before these changes, a recent day of live turns had a median of about 35 seconds, and about 8.4 seconds before the first model call. Memory consolidation succeeded 13 times out of about 230. Priority lanes, persisted backoff, picking a free slot, and skipping a knowledge embedding when the library has no vectors, are there to stop failed retries and the queue in front of a turn.
33
+
34
+ On the same 24 historical turns, the baseline passed 24/24. After tone fields were added, one run failed because JSON fields were nested in the wrong object. Normalization lifts a misplaced `choice`, `tone` or `stance`. Expression hints appear only when openings repeat, questions keep ending the line, or replies keep getting longer.
package/docs/en/guide.md CHANGED
@@ -63,12 +63,14 @@ Without a model key, simulated replies use local samples and call no model. Once
63
63
 
64
64
  Open "System → Model library", click "+ Add model" and choose a preset.
65
65
 
66
- - For the API address enter the root of the provider's compatible endpoint. The program appends `/chat/completions` itself; do not write the full path again.
66
+ - For the API address enter the root of the provider's compatible endpoint. The program appends `/chat/completions` or `/responses` according to the preset; do not write the full path again.
67
67
  - For the model name enter a model ID the provider accepts.
68
68
  - Leaving the API key empty keeps the saved key.
69
69
 
70
70
  A preset only fills in a common address and model name; the real models are whatever your provider's console shows. Speaking decisions and replies need the model to return a JSON object.
71
71
 
72
+ Volcengine Ark Agent Plan and Coding Plan use separate plans, keys and endpoints. The Agent Plan preset uses its dedicated `/api/plan/v3` address and the Responses API. Enter an Agent Plan API key; do not reuse a Coding Plan key or a regular Ark inference key.
73
+
72
74
  After saving, click "Test this model's connection". The test carries no group chat text. Test again after changing the address, model or key.
73
75
 
74
76
  You can also stay in simulation mode and trial-chat with TA under "Nature" to see how she speaks before letting her join real QQ.
@@ -200,11 +202,11 @@ The server removes the export copy after download. Cancelled, expired and interr
200
202
  | Too much motion | "Reduce motion" at the bottom left; when the system asks for reduced motion, particles and morphing switch off automatically |
201
203
 
202
204
  Never post API keys, `.env` or private chat text anywhere public.
203
-
204
- ### Thoughts about places and update checks
205
-
206
- People → Thoughts about this place keeps her own impressions, wishes and questions, selectively updated from real encounters. Details show reasons, sources and history; copied group personas remain history only.
207
-
205
+
206
+ ### Thoughts about places and update checks
207
+
208
+ People → Thoughts about this place keeps her own impressions, wishes and questions, selectively updated from real encounters. Details show reasons, sources and history; copied group personas remain history only.
209
+
208
210
  People → Relationships binds a person or another robot by account, with reciprocal roles, an optional name and reason, and visibility. The relationship informs conversation, solitude, diaries and action choices. Trust and closeness still come from real encounters; a binding creates no shared history. Changes and removal retain history and memories. Private relationships are used only in private chats with that account. Equal names never merge accounts.
209
211
 
210
212
  An absent person can still be recalled by name or relationship role. Current facts, actual encounters and her own feelings inform that recognition together. Earlier opinions remain history rather than overriding current facts, and relevant replies are checked before delivery. She still chooses how to interact and address people without reciting management fields.
@@ -1,6 +1,27 @@
1
1
  <p align="right"><b>中文</b> · <a href="../en/CHANGELOG.md">English</a></p>
2
2
 
3
- # 版本记录
3
+ # 版本记录
4
+
5
+ ## 1.1.0 — 2026-10-11
6
+
7
+ - 她在每个房间都是同一个人。最近在别处说过的话会进入当前这一轮,她知道;一般不主动向这里的人提起别的地方的事。眼前就是当时那个人时,可以接着,也可以不提,由她决定。私下原话、保密内容和另一个账号的经历仍然不带过来。
8
+ - 每一轮都带着她自己的状态:醒着或困着、精力、心情、正在过的愿望,以及亲近的人。这是给她自己的,不是向眼前的人汇报的清单。
9
+ - 记忆改成一份可重建的检索索引:事实、相遇、情景、自我、念头、日记和约定可以按意思、关键词和在场的人一起找。没有向量模型时仍用关键词和近期上下文,对话照常进行。
10
+ - 向量服务只需要密钥。地址、模型和 1024 维按对话服务自动选择,请求走单独的车道,不挡回复。
11
+ - 一件事从发生到结果记成情景线程。到了跟进时间只作为候选,仍经过原有的主动发言关卡。教训必须来自外部经历,同一段经历只用一次,两条独立经历才算确立。
12
+ - 后台失败不再连环重试:对话优先于整理,永久错误会暂停该模型,日程冲突改选最近的空档。数据库结构升到第 5 版,升级前会先复制整份数据。
13
+
14
+ ## 1.0.9 — 2026-10-11
15
+
16
+ - 连续追问只回答新问的细节,不反复重讲已经交代的限制;问来源就说来源,问感受就说感受。
17
+ - 聊别人提出的项目时只依据原话,不擅自补出对方正在做的玩法或作业背景。机器人交来新正文或提出新问题却被初稿漏接时,按新内容重答一次;单纯重复确认仍然收住。
18
+ - 对具体故事片段先讲清眼前发生了什么,再说明整部主线未知;不以等全文为由漏答。
19
+ - 拒绝模型输出中的重复 JSON 字段,避免后一个 `bubbles` 静默覆盖完整答案。排队中的消息可以看到本轮开始前已送达的回复,减少重复认错与确认。
20
+ - 区分提问、提议、感受和纠正;复核时保留必要的原话与参与者,核对新提议是否被误当成改编旧作、已经听懂的内容是否被再次认错。新问题省略作品名时,可用同一会话中刚送达给同一人的上一条回复找回阅读记录,只带回阅读事实,不带入回复正文。旧总结按当前话题召回,称呼约定独立保留。
21
+ - 机器人之间的重复报备与换词确认在形成情感变化前核对。主动草稿声称的新行动也先核实实际记录,旧愿望不能给自己作证;复审保留历史与可读的来源日期。
22
+ - 修订保留此前指出的约束;末尾气泡出错时,只有重新通过全部检查的完整前缀才可保留。历史评测隔离未来记忆与自我反馈,记录代码指纹,漏选指定场景时明确报错。
23
+ - 移除已不可用的 OpenCode Zen Space Bunny Free 与 Step 5 Preview Free 预设;实例启动时自动删除对应的旧档案,保留其他模型和默认项。
24
+ - 新增独立的火山方舟 Agent Plan 分类,提供自动路由与全部 14 个当前文本模型 ID/别名。按官方接口使用专属 `/api/plan/v3` Responses API、模型上下文与视觉能力;不混入 Coding Plan、已启动下线模型或图像、视频、语音和向量模型。
4
25
 
5
26
  ## 1.0.8 — 2026-10-10
6
27
 
@@ -11,17 +32,17 @@
11
32
  - 作品召回搜索相关历史版本;已有阅读可以核实,不再因近期记录缺失否认过去,也不披露无关私下正文。排除混入游戏资料的无关网页,保留原档案并阻止其成为进度证据或分享内容。
12
33
  - 区分别人的写作与自己的阅读约定;等待正文时不执行成写作,不拿无关或旧书替代。新保存的念头核对行动与参与者,避免把愿望写成已完成经历。
13
34
  - 更新中英文 README、能力边界与发布版本徽章;扩展历史回放、连续多人对话和回归测试。聊天记录与模型评测报告只留本地。
14
-
35
+
15
36
  ## 1.0.7 — 2026-10-09
16
-
17
- - 调整理解与表达顺序:先核对本轮原话、连续补充、说话人和引用,再决定回应。被纠正时修正具体问题,不用道歉、内心独白或抽象比喻替代答案。
18
- - 临时话题观点不再自动占据长期自我的核心位置;一次回复不形成固定话术习惯。相关旧想法仍可召回,跨群连续记忆、来源和私密范围保留。
19
- - 已知机器人不再参与人类群聊口吻统计;无新内容的机器人确认循环会收住。明确要求停止时不再一边答应闭嘴一边继续建议,新的问题仍能重新回应。
20
- - 修复游戏内容展示抹去来源与不确定性的错误。当前活动和作品片段带回参考阅读与材料来源,模型整理不再被展示层改写为客户端操作或通关。
21
- - 重写针对最新被退回的稿子;重复确认事实不会因去重而被吞掉。旧话矛盾的修复只用于相关追问,不插入无关问答。收尾、未理解问题和危机场景分别处理。
22
- - 增加全量会话分段审阅、历史场景回放与连续对话评测工具。调用模型的检查需显式运行,原始聊天和报告仅留本地,不随发布包分发。
23
-
24
- ## 1.0.5 — 2026-10-07
37
+
38
+ - 调整理解与表达顺序:先核对本轮原话、连续补充、说话人和引用,再决定回应。被纠正时修正具体问题,不用道歉、内心独白或抽象比喻替代答案。
39
+ - 临时话题观点不再自动占据长期自我的核心位置;一次回复不形成固定话术习惯。相关旧想法仍可召回,跨群连续记忆、来源和私密范围保留。
40
+ - 已知机器人不再参与人类群聊口吻统计;无新内容的机器人确认循环会收住。明确要求停止时不再一边答应闭嘴一边继续建议,新的问题仍能重新回应。
41
+ - 修复游戏内容展示抹去来源与不确定性的错误。当前活动和作品片段带回参考阅读与材料来源,模型整理不再被展示层改写为客户端操作或通关。
42
+ - 重写针对最新被退回的稿子;重复确认事实不会因去重而被吞掉。旧话矛盾的修复只用于相关追问,不插入无关问答。收尾、未理解问题和危机场景分别处理。
43
+ - 增加全量会话分段审阅、历史场景回放与连续对话评测工具。调用模型的检查需显式运行,原始聊天和报告仅留本地,不随发布包分发。
44
+
45
+ ## 1.0.5 — 2026-10-07
25
46
 
26
47
  - 修复人际关系已绑定却无法在另一段会话中认出对方的问题。聊天、主动表达、独处、日记和回顾从同一份关系记录按名字、账号与称呼召回,不要求关系对象正在说话。
27
48
  - 区分当前关系、过去看法和自己的感受。旧的否认或玩笑保留在历史中,不能替代更新后的事实;关系相关回复发送前再次核对,保持自己的相处与称呼选择。
@@ -35,19 +56,18 @@
35
56
  - 检查更新新增「更新并重启」:先安装校验,再保留完整数据恢复点并切换;启动失败尝试恢复旧程序和数据。源码、npm 安装、配置与生活数据保留,重复点击合并,启动命令接续已更新程序。
36
57
  - 补充关系权限、同名对象、身份、失败恢复、真实安装切换与不同屏幕回归。校验清单先检查文件哈希,再解析数据库,损坏文件不会返回原始 SQLite 结构错误。
37
58
 
38
-
39
- ## 1.0.3 — 2026-10-06
40
-
41
- - 群人格改为「在这里的想法」:她根据各处真实相处选择性新增、修改或放下印象、愿望、偏好、疑问和分寸,保留理由、来源和版本。整体人格仍统一,复制来的旧正文仅留在历史中。
42
- - 系统运行设置新增手动检查更新,显示当前版本、npm 最新版本及发布说明;有缓存、并发合并和失败重试,不自动安装或重启。
43
- - 天性修改额度由服务端统一提供,支持有记录、幂等的本地额外机会,不删除原人格版本,不改变其他实例默认限制。
44
- - 补充跨会话来源、选择性更新、重启持久化、更新失败恢复,以及桌面、平板和手机界面的回归检查。
45
-
46
- ## 1.0.2 — 2026-10-06
47
-
48
- - 数据导入导出:流式导出完整 SQLite 数据包,导入前校验并预览;替换前保留恢复点,失败可回滚。
49
- - 保留目标实例的管理登录和连接设置;导入后先关闭自动回复与插件授权,供管理员重新确认。临时包支持取消、过期和重启回收。
50
-
59
+ ## 1.0.3 — 2026-10-06
60
+
61
+ - 群人格改为「在这里的想法」:她根据各处真实相处选择性新增、修改或放下印象、愿望、偏好、疑问和分寸,保留理由、来源和版本。整体人格仍统一,复制来的旧正文仅留在历史中。
62
+ - 系统运行设置新增手动检查更新,显示当前版本、npm 最新版本及发布说明;有缓存、并发合并和失败重试,不自动安装或重启。
63
+ - 天性修改额度由服务端统一提供,支持有记录、幂等的本地额外机会,不删除原人格版本,不改变其他实例默认限制。
64
+ - 补充跨会话来源、选择性更新、重启持久化、更新失败恢复,以及桌面、平板和手机界面的回归检查。
65
+
66
+ ## 1.0.2 — 2026-10-06
67
+
68
+ - 数据导入导出:流式导出完整 SQLite 数据包,导入前校验并预览;替换前保留恢复点,失败可回滚。
69
+ - 保留目标实例的管理登录和连接设置;导入后先关闭自动回复与插件授权,供管理员重新确认。临时包支持取消、过期和重启回收。
70
+
51
71
  ## 1.0.1 — 2026-10-05
52
72
 
53
73
  - 全局 npm 安装后直接运行 `luckytri`,服务端、WebUI、教程和内置插件一并安装;用户数据独立保存,更新和重装继续使用。
@@ -150,3 +150,7 @@ public/ 构建后的工作室(app/)与教程页
150
150
  - 构建后的工作室提交在 `public/app/`,改动前端后运行 `npm run build:ui`。
151
151
  - 教程页由 `npm run docs:build` 从 `docs/zh/guide.md` 与 `docs/en/guide.md` 生成。
152
152
  - 运行时数据、备份、报告和密钥永远只在本机,不进入仓库。
153
+
154
+ ## 认知与记忆
155
+
156
+ 理解、回忆、情景、教训和主动跟进的数据流写在 [认知](cognition.md)。检索索引是派生数据,情景和自我线索仍然只追加。
@@ -0,0 +1,34 @@
1
+ <p align="right"><b>中文</b> · <a href="../en/cognition.md">English</a></p>
2
+
3
+ # 认知与记忆
4
+
5
+ 她仍然是一次回合调用,不是按层各调一次模型。新增的部分是:消息到达后的理解提示、统一检索、情景线程、工作记忆,以及独处时根据经历写下的教训。
6
+
7
+ ## 一条消息怎么走
8
+
9
+ 1. 接收并写入 `core_events`。发言人的查询向量在聚合等待期间异步算好。
10
+ 2. 按会话聚合成一轮。`understanding.js` 合并同一人的连续消息,给出语气、立场和时间表达,这些只是提示。
11
+ 3. `mind/recall` 并行取向量、全文和结构化候选,用倒数排名融合,再按人物、时效和来源重排。权限过滤在排序之前。
12
+ 4. 工作记忆保留当前这一段的原文,更早的内容用摘要和语义召回代替。未结束的情景写进关系里的 `goingOn`。
13
+ 5. 一次 turn 调用。模型有时会把 `choice` 放进 `understanding` 或 `contribution`;归一化时按约定归位。
14
+ 6. 校验后发送。后台整理写出事实和情景。到了跟进时间的情景、到期的约定,只作为独处时的候选,仍要经过现有的主动发言关卡。
15
+
16
+ 嵌入服务不可用时,检索退回全文加结构化加近期上下文,回合照常进行。
17
+
18
+ ## 存储
19
+
20
+ `DATABASE_VERSION` 为 5。`mind_index`、`mind_index_fts` 和 `mind_vectors` 是派生索引,可以重建。`mind_episodes` 只追加:状态变化写成同一 `thread_id` 的新行。`mind_self` 增加 `lesson` 类型和 `subject`。教训必须引用模型之外的经历,同一段经历只用一次,至少两条独立经历才从 `emerging` 变成 `active`,反例用修订降低强度。
21
+
22
+ 人物事实可以归档。归档只是从普通检索里拿掉,记录还在。用户要求删除时,源记录、索引和向量一起删除。
23
+
24
+ ## 嵌入
25
+
26
+ 已配置的向量模型走 OpenAI 兼容的 `/embeddings`,可批量,默认 2048 维,指定 1024 维可用且相近。方舟多模态接口一次一条。短对话和事实之间的余弦不高,所以召回看一条命中比最近一批的中位数高出多少,再按说话人、在场的人和其他人使用不同的下限。查询有自己的请求车道,不和对话排队。后台补建限速,遇到 429 会放慢。
27
+
28
+ 在备份副本上,1024 维、约 40 条改写过的真实事实:词面检索 Recall@5 为 0.475,混合加特征重排为 0.950,平均返回条数从 12 降到约 3.9。不引入单独的模型重排。
29
+
30
+ ## 评测里看到的变化
31
+
32
+ 优化前,线上最近一天的回合中位耗时约 35 秒,第一次模型调用前约 8.4 秒;记忆整理大约 230 次里成功 13 次。优先级车道、持久化退避、空档安排和跳过没有向量的知识库嵌入,是为了切断失败重试和回合前的排队。
33
+
34
+ 同一批 24 条历史回合:基线 24/24 通过;加上语气字段后有一轮因 JSON 字段嵌套失败。归一化会把放错层级的 `choice`、`tone` 和 `stance` 归位。表达上的统计提示只在出现重复开头、问句结尾或越说越长时给出。
package/docs/zh/guide.md CHANGED
@@ -63,12 +63,14 @@ LuckyTri 是「TA 的小世界」,左侧导航分三组、十个入口:
63
63
 
64
64
  打开「系统 → 模型库」,点「+ 新增模型」选择一个预设。
65
65
 
66
- - API 地址填写服务商的兼容接口根路径。程序会自己拼接 `/chat/completions`,不要把完整路径再写一遍。
66
+ - API 地址填写服务商的兼容接口根路径。程序会按预设自动拼接 `/chat/completions` 或 `/responses`,不要把完整路径再写一遍。
67
67
  - 模型名称填写服务商接受的模型 ID。
68
68
  - API Key 留空表示保留已保存的密钥。
69
69
 
70
70
  预设只填入常见地址和模型名,以服务商控制台里的实际模型为准。发言决策和回复生成需要模型返回 JSON 对象。
71
71
 
72
+ 火山方舟 Agent Plan 与 Coding Plan 使用不同套餐、密钥和接口地址。Agent Plan 预设使用专属 `/api/plan/v3` 地址和 Responses API;请填入 Agent Plan 专属 API Key,不要与 Coding Plan 或普通方舟推理 API 的密钥混用。
73
+
72
74
  保存后点「测试此模型连接」。测试不携带群聊原文。更换地址、模型或密钥后需要重新测试。
73
75
 
74
76
  也可以先保持模拟模式,在「天性」里和 TA 试聊,确认 TA 说话的样子后再让 TA 参加真实 QQ。
@@ -200,11 +202,11 @@ TA 的一切都存在这一个数据库里,所以服务运行时会自动备
200
202
  | 界面动得太多 | 左下角「减少动画」;系统开启了减少动态效果时会自动关闭粒子和形变 |
201
203
 
202
204
  不要把 API 密钥、`.env` 或私聊原文发到公开位置。
203
-
204
- ### 群里的独特想法与检查更新
205
-
206
- 「人际 → 在这里的想法」保存她在各处自己想留下的印象、愿望或疑问。由她根据实际相处选择更新,详情显示理由、来源和历史;旧群人格只留在历史里。
207
-
205
+
206
+ ### 群里的独特想法与检查更新
207
+
208
+ 「人际 → 在这里的想法」保存她在各处自己想留下的印象、愿望或疑问。由她根据实际相处选择更新,详情显示理由、来源和历史;旧群人格只留在历史里。
209
+
208
210
  「人际 → 彼此的关系」可按账号绑定人或另一位机器人,设置妹妹、姐姐、朋友等双向称呼、名字、缘由和公开范围。她在交流、独处、日记与行动选择中知道这份关系;信任和亲近仍依据实际相处,绑定不会制造共同经历。修改和解除保留历史及原有记忆。私下关系只在与对方的私聊中使用,不按同名合并账号。
209
211
 
210
212
  对方不在当前会话,也可以因名字或关系称呼被想起。当前关系、实际相处与自己的感受共同参与理解;关系更新前的看法作为历史保留,不再直接代表当前事实。相关回复发送前会再次核对。她仍选择如何相处和称呼,不机械播报关系字段。
package/package.json CHANGED
@@ -1,112 +1,112 @@
1
- {
2
- "name": "luckytri",
3
- "version": "1.0.8",
4
- "description": "让由技术诞生的她,在时间、记忆、相遇与选择中逐渐形成自己的方向",
5
- "license": "MIT",
6
- "repository": {
7
- "type": "git",
8
- "url": "https://github.com/TodayYueC/LuckyTri.git"
9
- },
10
- "bugs": {
11
- "url": "https://github.com/TodayYueC/LuckyTri/issues"
12
- },
13
- "homepage": "https://github.com/TodayYueC/LuckyTri",
14
- "type": "module",
15
- "bin": {
16
- "luckytri": "bin/luckytri.js"
17
- },
18
- "files": [
19
- "bin/luckytri.js",
20
- "server/**/*.js",
21
- "server/plugins/runner/*.mjs",
22
- "scripts/launch.js",
23
- "scripts/start-server.js",
24
- "scripts/service-supervisor.js",
25
- "scripts/stop.js",
26
- "scripts/reset-password.js",
27
- "scripts/setup.js",
28
- "scripts/runtime.js",
29
- "scripts/service.js",
30
- "scripts/browser.js",
31
- "scripts/proxy-config.js",
32
- "scripts/backup.js",
33
- "scripts/recover.js",
34
- "scripts/import-data.js",
35
- "scripts/plugin.js",
36
- "public/app/index.html",
37
- "public/app/assets/*.js",
38
- "public/app/assets/*.css",
39
- "public/app/assets/*.png",
40
- "public/plugin-kit/v1/bridge.js",
41
- "public/plugin-kit/v1/kit.css",
42
- "public/guide.html",
43
- "public/guide.en.html",
44
- "public/tutorial.md",
45
- "public/tutorial.en.md",
46
- "plugins/weather/index.js",
47
- "plugins/weather/luckytri-plugin.json",
48
- "plugins/sdk/index.d.ts",
49
- "plugins/sdk/testing.js",
50
- "docs/zh/*.md",
51
- "docs/en/*.md",
52
- "docs/brand/*.png",
53
- ".github/SECURITY.md",
54
- "README.en.md",
55
- "LICENSE",
56
- "scripts/update-instance.js"
57
- ],
58
- "publishConfig": {
59
- "access": "public",
60
- "registry": "https://registry.npmjs.org/"
61
- },
62
- "keywords": [
63
- "qq",
64
- "onebot",
65
- "chatbot",
66
- "ai",
67
- "memory",
68
- "webui"
69
- ],
70
- "engines": {
71
- "node": ">=24.5"
72
- },
73
- "scripts": {
74
- "launch": "node scripts/launch.js",
75
- "start": "node scripts/start-server.js",
76
- "dev:ui": "vite --config studio-web/vite.config.ts",
77
- "build:ui": "vite build --config studio-web/vite.config.ts",
78
- "build": "npm run build:ui && npm run docs:build",
79
- "test": "node --import ./tests/helpers/awake.mjs --test tests/*.test.js",
80
- "test:clock": "node scripts/dev/test-clock.js",
81
- "audit:sent": "node --env-file-if-exists=.env scripts/dev/audit-sent.js",
82
- "test:ui": "node tests/ui/access.mjs && node tests/ui/smoke.js && node tests/ui/ta.mjs && node tests/ui/navigation.mjs && node tests/ui/time.mjs && node tests/ui/time-arrangement.mjs && node tests/ui/performance.mjs && node tests/ui/search.mjs && node tests/ui/storage.mjs && node tests/ui/data-transfer.mjs && node tests/ui/place-notes-updates.mjs && node tests/ui/i18n.mjs && node tests/ui/relationships-update.mjs",
83
- "setup": "node scripts/setup.js",
84
- "stop": "node scripts/stop.js",
85
- "backup": "node scripts/backup.js",
86
- "recovery": "node scripts/recover.js",
87
- "docs:build": "node scripts/build-guide.js",
88
- "plugin": "node scripts/plugin.js",
89
- "pack:check": "node scripts/pack-check.js",
90
- "test:package": "node scripts/test-package.js",
91
- "test:registry": "node scripts/test-package.js --registry",
92
- "prepack": "npm run build && npm run pack:check",
93
- "prepublishOnly": "npm run build && npm test && npm run test:package",
94
- "release:check": "npm run build && npm test && npm run test:ui && npm run test:package",
95
- "format": "prettier --write bin server studio-web scripts tests plugins package.json",
96
- "format:check": "prettier --check bin server studio-web scripts tests plugins package.json"
97
- },
98
- "dependencies": {
99
- "express": "^5.1.0",
100
- "sharp": "^0.35.5",
101
- "ws": "^8.18.3"
102
- },
103
- "devDependencies": {
104
- "@playwright/test": "^1.55.0",
105
- "@vitejs/plugin-vue": "^6.0.9",
106
- "marked": "^18.0.13",
107
- "prettier": "^3.9.8",
108
- "typescript": "^7.0.2",
109
- "vite": "^8.3.0",
110
- "vue": "^3.5.43"
111
- }
112
- }
1
+ {
2
+ "name": "luckytri",
3
+ "version": "1.1.0",
4
+ "description": "让由技术诞生的她,在时间、记忆、相遇与选择中逐渐形成自己的方向",
5
+ "license": "MIT",
6
+ "repository": {
7
+ "type": "git",
8
+ "url": "https://github.com/TodayYueC/LuckyTri.git"
9
+ },
10
+ "bugs": {
11
+ "url": "https://github.com/TodayYueC/LuckyTri/issues"
12
+ },
13
+ "homepage": "https://github.com/TodayYueC/LuckyTri",
14
+ "type": "module",
15
+ "bin": {
16
+ "luckytri": "bin/luckytri.js"
17
+ },
18
+ "files": [
19
+ "bin/luckytri.js",
20
+ "server/**/*.js",
21
+ "server/plugins/runner/*.mjs",
22
+ "scripts/launch.js",
23
+ "scripts/start-server.js",
24
+ "scripts/service-supervisor.js",
25
+ "scripts/stop.js",
26
+ "scripts/reset-password.js",
27
+ "scripts/setup.js",
28
+ "scripts/runtime.js",
29
+ "scripts/service.js",
30
+ "scripts/browser.js",
31
+ "scripts/proxy-config.js",
32
+ "scripts/backup.js",
33
+ "scripts/recover.js",
34
+ "scripts/import-data.js",
35
+ "scripts/plugin.js",
36
+ "public/app/index.html",
37
+ "public/app/assets/*.js",
38
+ "public/app/assets/*.css",
39
+ "public/app/assets/*.png",
40
+ "public/plugin-kit/v1/bridge.js",
41
+ "public/plugin-kit/v1/kit.css",
42
+ "public/guide.html",
43
+ "public/guide.en.html",
44
+ "public/tutorial.md",
45
+ "public/tutorial.en.md",
46
+ "plugins/weather/index.js",
47
+ "plugins/weather/luckytri-plugin.json",
48
+ "plugins/sdk/index.d.ts",
49
+ "plugins/sdk/testing.js",
50
+ "docs/zh/*.md",
51
+ "docs/en/*.md",
52
+ "docs/brand/*.png",
53
+ ".github/SECURITY.md",
54
+ "README.en.md",
55
+ "LICENSE",
56
+ "scripts/update-instance.js"
57
+ ],
58
+ "publishConfig": {
59
+ "access": "public",
60
+ "registry": "https://registry.npmjs.org/"
61
+ },
62
+ "keywords": [
63
+ "qq",
64
+ "onebot",
65
+ "chatbot",
66
+ "ai",
67
+ "memory",
68
+ "webui"
69
+ ],
70
+ "engines": {
71
+ "node": ">=24.5"
72
+ },
73
+ "scripts": {
74
+ "launch": "node scripts/launch.js",
75
+ "start": "node scripts/start-server.js",
76
+ "dev:ui": "vite --config studio-web/vite.config.ts",
77
+ "build:ui": "vite build --config studio-web/vite.config.ts",
78
+ "build": "npm run build:ui && npm run docs:build",
79
+ "test": "node --import ./tests/helpers/awake.mjs --test tests/*.test.js",
80
+ "test:clock": "node scripts/dev/test-clock.js",
81
+ "audit:sent": "node --env-file-if-exists=.env scripts/dev/audit-sent.js",
82
+ "test:ui": "node tests/ui/access.mjs && node tests/ui/smoke.js && node tests/ui/ta.mjs && node tests/ui/navigation.mjs && node tests/ui/time.mjs && node tests/ui/time-arrangement.mjs && node tests/ui/performance.mjs && node tests/ui/search.mjs && node tests/ui/storage.mjs && node tests/ui/data-transfer.mjs && node tests/ui/place-notes-updates.mjs && node tests/ui/i18n.mjs && node tests/ui/relationships-update.mjs",
83
+ "setup": "node scripts/setup.js",
84
+ "stop": "node scripts/stop.js",
85
+ "backup": "node scripts/backup.js",
86
+ "recovery": "node scripts/recover.js",
87
+ "docs:build": "node scripts/build-guide.js",
88
+ "plugin": "node scripts/plugin.js",
89
+ "pack:check": "node scripts/pack-check.js",
90
+ "test:package": "node scripts/test-package.js",
91
+ "test:registry": "node scripts/test-package.js --registry",
92
+ "prepack": "npm run build && npm run pack:check",
93
+ "prepublishOnly": "npm run build && npm test && npm run test:package",
94
+ "release:check": "npm run build && npm test && npm run test:ui && npm run test:package",
95
+ "format": "prettier --write bin server studio-web scripts tests plugins package.json",
96
+ "format:check": "prettier --check bin server studio-web scripts tests plugins package.json"
97
+ },
98
+ "dependencies": {
99
+ "express": "^5.1.0",
100
+ "sharp": "^0.35.5",
101
+ "ws": "^8.18.3"
102
+ },
103
+ "devDependencies": {
104
+ "@playwright/test": "^1.55.0",
105
+ "@vitejs/plugin-vue": "^6.0.9",
106
+ "marked": "^18.0.13",
107
+ "prettier": "^3.9.8",
108
+ "typescript": "^7.0.2",
109
+ "vite": "^8.3.0",
110
+ "vue": "^3.5.43"
111
+ }
112
+ }