luckytri 1.2.4 → 1.3.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.en.md +44 -1
- package/README.md +44 -1
- package/docs/en/CHANGELOG.md +20 -0
- package/docs/zh/CHANGELOG.md +20 -0
- package/package.json +1 -1
- package/public/app/assets/ChatsPage-C5-w410L.js +3 -0
- package/public/app/assets/{Empty-y1vXDIjQ.js → Empty-DSurzLFZ.js} +1 -1
- package/public/app/assets/Field-GuXyA_aS.js +1 -0
- package/public/app/assets/HeartPage-BGmIrxCz.js +1 -0
- package/public/app/assets/LifePage-Dzln-0Y3.js +1 -0
- package/public/app/assets/MemoryPage-QsthmMZ9.js +1 -0
- package/public/app/assets/NaturePage-CIvHjgJa.js +3 -0
- package/public/app/assets/PeoplePage-bIoX24pj.js +1 -0
- package/public/app/assets/PluginsPage-EuJhCovw.js +2 -0
- package/public/app/assets/SystemPage-7t42B-Q3.js +1 -0
- package/public/app/assets/{SystemPage-DNTD2_nj.css → SystemPage-BLMlD1M6.css} +1 -1
- package/public/app/assets/TimePage-CY-SwBq3.js +3 -0
- package/public/app/assets/index-Cn6TppEV.js +4 -0
- package/public/app/assets/{index-cDDC-1dI.css → index-JRbQoSJr.css} +1 -1
- package/public/app/assets/{knowledge-BjD9PkXe.js → knowledge-sUjcjbfI.js} +1 -1
- package/public/app/assets/media-Dh7c41PQ.js +1 -0
- package/public/app/assets/{mind-KkinyNC6.js → mind-BMcoPQNd.js} +1 -1
- package/public/app/index.html +4 -4
- package/public/guide.en.html +3 -3
- package/public/guide.html +3 -3
- package/server/actions/index.js +268 -0
- package/server/app.js +3 -1
- package/server/channels/contract.js +3 -0
- package/server/channels/hub.js +15 -0
- package/server/channels/onebot/adapter.js +162 -21
- package/server/channels/onebot/enrich.js +132 -0
- package/server/channels/onebot/index.js +53 -3
- package/server/channels/onebot/music.js +43 -0
- package/server/core/conversation-grounding.js +1 -1
- package/server/core/dialogue-context.js +158 -1
- package/server/core/dialogue-contract.js +32 -33
- package/server/core/message-scheduler.js +13 -10
- package/server/core/model-manager.js +35 -20
- package/server/core/model-presets.js +154 -1
- package/server/core/orchestrator.js +18 -0
- package/server/core/persona-manager.js +20 -2
- package/server/core/reply-delivery.js +360 -60
- package/server/core/response-generator.js +1 -1
- package/server/core/response-validator.js +85 -17
- package/server/core/turn-processor.js +63 -16
- package/server/core/turn.js +59 -1
- package/server/i18n/decisions.js +10 -5
- package/server/i18n/errors.js +25 -2
- package/server/index.js +30 -0
- package/server/mind/continuity.js +2 -4
- package/server/mind/discretion.js +16 -5
- package/server/mind/guard.js +88 -68
- package/server/mind/memory.js +7 -2
- package/server/mind/recall/index.js +2 -0
- package/server/mind/relationship-context.js +110 -71
- package/server/plugins/zip-file.js +180 -0
- package/server/runtime/update-manager.js +34 -2
- package/server/stickers/api.js +86 -19
- package/server/stickers/library.js +8 -2
- package/server/stickers/offer.js +48 -16
- package/server/stickers/zip-import.js +62 -2
- package/server/studio/auto-update.js +224 -0
- package/server/studio/updates.js +154 -144
- package/server/voice/index.js +255 -0
- package/server/voice/sauc.js +152 -0
- package/server/web/link-reader.js +379 -0
- package/public/app/assets/ChatsPage-C_gKz4mJ.js +0 -3
- package/public/app/assets/Field-CJG5lERx.js +0 -1
- package/public/app/assets/HeartPage-5y3avjSy.js +0 -1
- package/public/app/assets/LifePage-BtwRMDAM.js +0 -1
- package/public/app/assets/MemoryPage-54noDhWz.js +0 -1
- package/public/app/assets/NaturePage-DHK5X2Qw.js +0 -3
- package/public/app/assets/PeoplePage-ZsA7gyxP.js +0 -1
- package/public/app/assets/PluginsPage-BCRRIAhq.js +0 -2
- package/public/app/assets/SystemPage-DWr1TG49.js +0 -1
- package/public/app/assets/TimePage-6MUmtSOT.js +0 -3
- package/public/app/assets/index-BokqwNXF.js +0 -4
- package/public/app/assets/media-Ciozo_yb.js +0 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// Checked against vendor API docs on 2026-10-
|
|
1
|
+
// Checked against vendor API docs on 2026-10-14.
|
|
2
2
|
// maxOutputTokens is the published output ceiling and maxInputTokens is what
|
|
3
3
|
// the window leaves after it, so every preset passes validateModel as is.
|
|
4
4
|
|
|
@@ -38,6 +38,8 @@ const shared = {
|
|
|
38
38
|
};
|
|
39
39
|
|
|
40
40
|
const OPENAI = "https://api.openai.com/v1";
|
|
41
|
+
const ANTHROPIC = "https://api.anthropic.com/v1";
|
|
42
|
+
const GEMINI_OPENAI = "https://generativelanguage.googleapis.com/v1beta/openai";
|
|
41
43
|
const BEDROCK = "https://bedrock-runtime.us-east-1.amazonaws.com/openai/v1";
|
|
42
44
|
const OPENROUTER = "https://openrouter.ai/api/v1";
|
|
43
45
|
const OPENCODE_GO = "https://opencode.ai/zen/go/v1";
|
|
@@ -615,6 +617,157 @@ export const MODEL_CATALOG = [
|
|
|
615
617
|
temperature: 1,
|
|
616
618
|
topP: 0.95,
|
|
617
619
|
},
|
|
620
|
+
|
|
621
|
+
// Anthropic Claude — Messages API, adaptive thinking + output_config.effort.
|
|
622
|
+
// Specs from https://platform.claude.com/docs/en/models/overview (2026-10-14).
|
|
623
|
+
{
|
|
624
|
+
id: "claude-opus-5-5",
|
|
625
|
+
vendor: "Claude",
|
|
626
|
+
label: "Claude Opus 5.5",
|
|
627
|
+
summary:
|
|
628
|
+
"官方推荐主力。自适应思考,默认 medium;支持看图。上下文 1M,输出上限 128K。",
|
|
629
|
+
provider: "anthropic",
|
|
630
|
+
baseUrl: ANTHROPIC,
|
|
631
|
+
model: "claude-opus-5-5",
|
|
632
|
+
apiProtocol: "anthropic",
|
|
633
|
+
...limits(1000000, 128000),
|
|
634
|
+
...shared,
|
|
635
|
+
vision: true,
|
|
636
|
+
thinkingStyle: "anthropic-adaptive",
|
|
637
|
+
tokenField: "max_tokens",
|
|
638
|
+
omitSampling: true,
|
|
639
|
+
reasoningEfforts: ["low", "medium", "high", "xhigh", "max"],
|
|
640
|
+
reasoningEffort: "medium",
|
|
641
|
+
temperature: 1,
|
|
642
|
+
topP: 1,
|
|
643
|
+
},
|
|
644
|
+
{
|
|
645
|
+
id: "claude-sonnet-5-5",
|
|
646
|
+
vendor: "Claude",
|
|
647
|
+
label: "Claude Sonnet 5.5",
|
|
648
|
+
summary:
|
|
649
|
+
"速度与智力的平衡。自适应思考,默认 high;支持看图。上下文 1M,输出上限 128K。",
|
|
650
|
+
provider: "anthropic",
|
|
651
|
+
baseUrl: ANTHROPIC,
|
|
652
|
+
model: "claude-sonnet-5-5",
|
|
653
|
+
apiProtocol: "anthropic",
|
|
654
|
+
...limits(1000000, 128000),
|
|
655
|
+
...shared,
|
|
656
|
+
vision: true,
|
|
657
|
+
thinkingStyle: "anthropic-adaptive",
|
|
658
|
+
tokenField: "max_tokens",
|
|
659
|
+
omitSampling: true,
|
|
660
|
+
reasoningEfforts: ["low", "medium", "high", "xhigh", "max"],
|
|
661
|
+
reasoningEffort: "high",
|
|
662
|
+
temperature: 1,
|
|
663
|
+
topP: 1,
|
|
664
|
+
},
|
|
665
|
+
{
|
|
666
|
+
id: "claude-haiku-5-5",
|
|
667
|
+
vendor: "Claude",
|
|
668
|
+
label: "Claude Haiku 5.5",
|
|
669
|
+
summary:
|
|
670
|
+
"高频低延迟。自适应思考,默认 medium;支持看图。上下文 1M,输出上限 128K。",
|
|
671
|
+
provider: "anthropic",
|
|
672
|
+
baseUrl: ANTHROPIC,
|
|
673
|
+
model: "claude-haiku-5-5",
|
|
674
|
+
apiProtocol: "anthropic",
|
|
675
|
+
...limits(1000000, 128000),
|
|
676
|
+
...shared,
|
|
677
|
+
vision: true,
|
|
678
|
+
thinkingStyle: "anthropic-adaptive",
|
|
679
|
+
tokenField: "max_tokens",
|
|
680
|
+
omitSampling: true,
|
|
681
|
+
reasoningEfforts: ["low", "medium", "high", "xhigh", "max"],
|
|
682
|
+
reasoningEffort: "medium",
|
|
683
|
+
temperature: 1,
|
|
684
|
+
topP: 1,
|
|
685
|
+
},
|
|
686
|
+
{
|
|
687
|
+
id: "claude-fable-5-1",
|
|
688
|
+
vendor: "Claude",
|
|
689
|
+
label: "Claude Fable 5.1",
|
|
690
|
+
summary:
|
|
691
|
+
"长程代理与重推理。自适应思考,默认 high;支持看图。上下文 1M,输出上限 128K。",
|
|
692
|
+
provider: "anthropic",
|
|
693
|
+
baseUrl: ANTHROPIC,
|
|
694
|
+
model: "claude-fable-5-1",
|
|
695
|
+
apiProtocol: "anthropic",
|
|
696
|
+
...limits(1000000, 128000),
|
|
697
|
+
...shared,
|
|
698
|
+
vision: true,
|
|
699
|
+
thinkingStyle: "anthropic-adaptive",
|
|
700
|
+
tokenField: "max_tokens",
|
|
701
|
+
omitSampling: true,
|
|
702
|
+
reasoningEfforts: ["low", "medium", "high", "xhigh", "max"],
|
|
703
|
+
reasoningEffort: "high",
|
|
704
|
+
temperature: 1,
|
|
705
|
+
topP: 1,
|
|
706
|
+
},
|
|
707
|
+
// Google Gemini — OpenAI-compatible endpoint (Bearer). Specs from
|
|
708
|
+
// https://ai.google.dev/gemini-api/docs/models (2026-10-14).
|
|
709
|
+
{
|
|
710
|
+
id: "gemini-4-argon",
|
|
711
|
+
vendor: "Gemini",
|
|
712
|
+
label: "Gemini 4 Argon",
|
|
713
|
+
summary:
|
|
714
|
+
"旗舰推理。思考档 low/medium/high,默认 medium;支持看图。统一 1M 窗口;采样参数会被忽略。",
|
|
715
|
+
provider: "gemini",
|
|
716
|
+
baseUrl: GEMINI_OPENAI,
|
|
717
|
+
model: "gemini-4-argon",
|
|
718
|
+
apiProtocol: "chat",
|
|
719
|
+
...limits(1048576, 65536),
|
|
720
|
+
...shared,
|
|
721
|
+
vision: true,
|
|
722
|
+
thinkingStyle: "openai",
|
|
723
|
+
tokenField: "max_completion_tokens",
|
|
724
|
+
omitSampling: true,
|
|
725
|
+
reasoningEfforts: ["low", "medium", "high"],
|
|
726
|
+
reasoningEffort: "medium",
|
|
727
|
+
temperature: 1,
|
|
728
|
+
topP: 1,
|
|
729
|
+
timeoutMs: 900000,
|
|
730
|
+
},
|
|
731
|
+
{
|
|
732
|
+
id: "gemini-3.8-flash",
|
|
733
|
+
vendor: "Gemini",
|
|
734
|
+
label: "Gemini 3.8 Flash",
|
|
735
|
+
summary:
|
|
736
|
+
"最新 Flash。思考档 low/medium/high,默认 medium;支持看图。输入 1M,输出 64K。",
|
|
737
|
+
provider: "gemini",
|
|
738
|
+
baseUrl: GEMINI_OPENAI,
|
|
739
|
+
model: "gemini-3.8-flash",
|
|
740
|
+
apiProtocol: "chat",
|
|
741
|
+
...limits(1048576, 65536),
|
|
742
|
+
...shared,
|
|
743
|
+
vision: true,
|
|
744
|
+
thinkingStyle: "openai",
|
|
745
|
+
tokenField: "max_completion_tokens",
|
|
746
|
+
reasoningEfforts: ["low", "medium", "high"],
|
|
747
|
+
reasoningEffort: "medium",
|
|
748
|
+
temperature: 1,
|
|
749
|
+
topP: 0.95,
|
|
750
|
+
},
|
|
751
|
+
{
|
|
752
|
+
id: "gemini-3.5-flash-lite",
|
|
753
|
+
vendor: "Gemini",
|
|
754
|
+
label: "Gemini 3.5 Flash-Lite",
|
|
755
|
+
summary:
|
|
756
|
+
"高吞吐、低成本。思考档 low/medium/high,默认 low;支持看图。适合高频回合。",
|
|
757
|
+
provider: "gemini",
|
|
758
|
+
baseUrl: GEMINI_OPENAI,
|
|
759
|
+
model: "gemini-3.5-flash-lite",
|
|
760
|
+
apiProtocol: "chat",
|
|
761
|
+
...limits(1048576, 65536),
|
|
762
|
+
...shared,
|
|
763
|
+
vision: true,
|
|
764
|
+
thinkingStyle: "openai",
|
|
765
|
+
tokenField: "max_completion_tokens",
|
|
766
|
+
reasoningEfforts: ["low", "medium", "high"],
|
|
767
|
+
reasoningEffort: "low",
|
|
768
|
+
temperature: 1,
|
|
769
|
+
topP: 0.95,
|
|
770
|
+
},
|
|
618
771
|
gpt({
|
|
619
772
|
id: "gpt-6-astra",
|
|
620
773
|
vendor: "OpenAI",
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { hearingOn, transcribe, voiceSettings } from "../voice/index.js";
|
|
2
|
+
import { ActionLedger } from "../actions/index.js";
|
|
1
3
|
import { Stickers } from "../stickers/index.js";
|
|
2
4
|
import { settleAftermath } from "../mind/aftermath.js";
|
|
3
5
|
import { randomUUID } from "node:crypto";
|
|
@@ -33,6 +35,7 @@ import { TurnProcessor } from "./turn-processor.js";
|
|
|
33
35
|
import { ReplyDelivery } from "./reply-delivery.js";
|
|
34
36
|
import { Capabilities } from "./capabilities.js";
|
|
35
37
|
import { Perceivers } from "./perceivers.js";
|
|
38
|
+
import { LinkReader } from "../web/link-reader.js";
|
|
36
39
|
|
|
37
40
|
export class ChatSystem {
|
|
38
41
|
constructor(
|
|
@@ -45,6 +48,9 @@ export class ChatSystem {
|
|
|
45
48
|
fetchQuoted,
|
|
46
49
|
fetchImage,
|
|
47
50
|
loadVisionImages: loadImages = loadVisionImages,
|
|
51
|
+
linkReader,
|
|
52
|
+
perform,
|
|
53
|
+
actionsFor,
|
|
48
54
|
now = Date.now,
|
|
49
55
|
} = {},
|
|
50
56
|
) {
|
|
@@ -73,7 +79,12 @@ export class ChatSystem {
|
|
|
73
79
|
this.topics = new TopicTracker(this.repo);
|
|
74
80
|
this.capabilities = new Capabilities(this.repo, { now });
|
|
75
81
|
this.perceivers = new Perceivers(this.repo.db);
|
|
82
|
+
this.links = linkReader || new LinkReader({ db: this.repo.db, now });
|
|
76
83
|
this.send = send;
|
|
84
|
+
// Her non-text actions (poke, reactions, dice…), when the channel has them.
|
|
85
|
+
this.perform = perform;
|
|
86
|
+
this.actionsFor = actionsFor;
|
|
87
|
+
this.actions = new ActionLedger(this.repo.db, { now: () => this.now() });
|
|
77
88
|
this.localDemo = localDemo;
|
|
78
89
|
this.fetchQuoted = fetchQuoted;
|
|
79
90
|
this.fetchImage = fetchImage;
|
|
@@ -94,6 +105,13 @@ export class ChatSystem {
|
|
|
94
105
|
this.turnProcessor = new TurnProcessor(this);
|
|
95
106
|
this.replyDelivery = new ReplyDelivery(this);
|
|
96
107
|
}
|
|
108
|
+
// How the channel hears a voice message, or null when that is off.
|
|
109
|
+
transcriber() {
|
|
110
|
+
const settings = voiceSettings(this.repo);
|
|
111
|
+
return hearingOn(settings)
|
|
112
|
+
? (audio, format) => transcribe(settings, audio, format)
|
|
113
|
+
: null;
|
|
114
|
+
}
|
|
97
115
|
policy(session) {
|
|
98
116
|
const {
|
|
99
117
|
topicBoost: _topicBoost,
|
|
@@ -32,6 +32,24 @@ const PREVIOUS_PLACE_PROMPTS = {
|
|
|
32
32
|
"81749a5f8c7e0769e5bd7a90028f1f9541d0cfa375389c55835b051a9078879a",
|
|
33
33
|
],
|
|
34
34
|
turn: [
|
|
35
|
+
// Round 24: before privacy-announcement root fix.
|
|
36
|
+
"90372c91ebb6fcfcacb05a5426b6521cd599fee9315c798c849304aae0b596ca",
|
|
37
|
+
// Round 23 (1.2.4): the analytic understanding-first turn contract.
|
|
38
|
+
"e76528a24a1a420ed5a5957d039a56b915012b3a83c021689b01acab23eef9ce",
|
|
39
|
+
"fca4a1f65fa7bd8d69745db56c4f4221d70c4b5a9c99892c5411ab76d37fece0",
|
|
40
|
+
"72c7110c21c2825ad814c295550e18feea85007ddb3458da7d99282430fb4826",
|
|
41
|
+
// Earlier built-in turn contracts (rounds 15–23).
|
|
42
|
+
"37d7162c3a7c578c5580585c5cab6be467894e450ea0d21f5612c8543b5b13ab",
|
|
43
|
+
"538a3656db51420a261037fe1c0c3424ff8f3c6ce2d5b6cdc81c1a065ad99a5f",
|
|
44
|
+
"53ae4aad994427fc4cee9a09dddd4ab89e906e0e354d8230ed550000dc7fcf02",
|
|
45
|
+
"647867c213982413c4beda1147aaf9d48e59954d9cd69669958ba0b1de372722",
|
|
46
|
+
"89dc92cdae2a825607a9e4ffd0308d670d05380c980f19d9dec1b1f6de907575",
|
|
47
|
+
"8a9c3bb23e96eeafb205f5c1db6be136badadbbb24db4c01b8b2299530dc7f51",
|
|
48
|
+
"b0d5092156ae8b53a4817ce6b55206e597d2ec9c54e100097b1568908a54550d",
|
|
49
|
+
"cff5c65a9f4471b21579cd6cc33453ca7ae834b51460c36ac3d88394a122a865",
|
|
50
|
+
"d07ceca722d5f67911c177b877dcf5647e5e9e8bfcaa54578e593f010e7e7366",
|
|
51
|
+
"db9891c6742bb2688a4cfba4aa59256347f9df15c7c9b6b0e480fad2695dab1c",
|
|
52
|
+
"f3eb48f19f19102e3573e7b2b1bcdbde3d99d7d324fb859b3667f7df7cf781e0",
|
|
35
53
|
"ee8a56234a82d9794d21b3d62f052132b7b151f6625cdd3eec07dc4c18758e8d",
|
|
36
54
|
"a015b7ac588dc665b83b847410a0cdd7cd7930fd1dd6698463547bbecd706aad",
|
|
37
55
|
"cb9b8f88a6cf5212edc9de49c7f5b8c7f293a1490b57b52118527f396aca736d",
|
|
@@ -136,7 +154,7 @@ export function styleControls(p) {
|
|
|
136
154
|
export const NATURAL_STYLE =
|
|
137
155
|
"回应事情本身,不复述上一句再加感叹。不要点评群友发图、刷屏或聊天方式。不要猜对方想看你出糗,不拿以前的亲近话反过来质问对方。温柔是尊重,不是每句加呀、啦、嘛、唔或省略号。不刻意撒娇,不强行追问,不固定安慰、劝睡。普通的hh、哈哈、嗯、好可以在合适的情境再次使用,不必为了避重换成刻意台词。表情包没看出含义时不点评发送行为。通常把一轮说在一条完整消息里;只有彼此独立的答复分开更清楚时才拆条,同一话题需要补充就放在一起。";
|
|
138
156
|
export const CONTINUITY_GUIDE =
|
|
139
|
-
"【同一个人的连续生活】inner.continuity 是你和眼前的人确实经历过的相处。你在每个地方都是同一个你;places 只说明当时在哪里,sharedMoments 的 theySaid 是对方原话,iSaid 是你确实送达的话。换个地方不会抹掉你的记忆、你的话和自己的承诺,也不要把先前的主观猜测当成原话。privateOrigin
|
|
157
|
+
"【同一个人的连续生活】inner.continuity 是你和眼前的人确实经历过的相处。你在每个地方都是同一个你;places 只说明当时在哪里,sharedMoments 的 theySaid 是对方原话,iSaid 是你确实送达的话。换个地方不会抹掉你的记忆、你的话和自己的承诺,也不要把先前的主观猜测当成原话。privateOrigin 的经历可以留在你心里帮助判断当下,群里不提私事。遇到相似的话题可以自然接续,没被问起时不要突然背诵旧聊天。别人的聊天不算你和他相处,地点也不等于身份。记得一件事不代表记得所有细节,不编造过去,也不向对方讲解记忆机制。inner.justLived 是你刚在别的群里的近况,是公开的,和这里有关就自然提,给句背景;没关系就不提。你不知道的事就是不知道,不要假装知道内情。inner.selfKnown 是你自己的状态、心情和亲近的人,换一个聊天也不会变成另一个人;这是你知道的,不是向别人汇报的清单。";
|
|
140
158
|
export function effectivePersona(p) {
|
|
141
159
|
// Dialogue examples in style sections act as few-shot instructions even
|
|
142
160
|
// when a later rule forbids copying them, so they are dropped here.
|
|
@@ -201,7 +219,7 @@ export function compilePersona(p, { initiating = false } = {}) {
|
|
|
201
219
|
].join("\n");
|
|
202
220
|
}
|
|
203
221
|
const VALIDATION_TASK =
|
|
204
|
-
'按上述程度控制检查回复,不因没有玩梗、没有安慰或没有毒舌而否决普通回答。不因她用一句普通的话带出自己正在过的事而否决。把「我只是助手」或「因为是 AI
|
|
222
|
+
'按上述程度控制检查回复,不因没有玩梗、没有安慰或没有毒舌而否决普通回答。不因她用一句普通的话带出自己正在过的事而否决。把「我只是助手」或「因为是 AI 所以没有心」当成收尾,算问题。重点核对当前时间、说话对象和回复用途:有没有把猜测当事实、捏造自己的经历、仅把用户原话复述再加感叹、用我听着等陪聊口号收尾、说出私下知道的事;暗示自己知道内情却不说(记录里并没有这份信息),算编造;为了保密而声称自己不知道、没听说过(记录里其实知道),也是编造,保密是不说,不是说谎。continuity.recentShared 中 role=assistant 是本人已经说出的话;myPrivateIntentions 是她自己的后续打算。若同一个人刚在别处和她说好一件事,检查这句有没有否认、岔开或敷衍掉该约定;即使没有公开复述私事,也可以用符合约定的方式回应。必须按 speaker 的 ID 核对,不能把另一个人的约定安在眼前人身上。已提供图片画面或视觉观察时,依据画面作答不算编造;没有读到图片时,具体画面细节算编造。不要把简短共鸣一律判成复述;只有没接到内容或与近期回复形成机械套路才退回。不得仅因没有新信息、没有追问或含有某个词就否决。被直接问到的事,看她有没有给出自己的回应,而不是用道歉或内部状态挡掉;不要求面面俱到,回应其中一点、接梗、顶回去、说不知道都可以。不要因为她态度鲜明、开玩笑或没接每个人而否决。亲近表达不自动是求证真假,不能把普通想念接成审查对方诚意;也不强迫回报同等感情。对作品人物、名字和辈分逐项核对,不把仅仅听起来熟悉的姓氏拼上去;缺乏可靠把握时允许直接保留不知道,不用猜测补齐。只指出具体问题,不追求润色。输出 {"ok":true或false,"issues":["具体问题"],"fixed":["可选:有问题时给出改好的话,只删掉或最小改动出问题的那部分,其余原话和她的语气一字不动;改不好就不给"]}。';
|
|
205
223
|
const GROWTH_TASK =
|
|
206
224
|
'【一个人怎样改变】天性是起点,不是冻结的人格。结合这次真正经历和你已留下的自我,若你确实想调整自己以后说话或待人的倾向,可在 JSON 里写 styleShifts:[ {"trait":"warmth|sarcasm|humor|activity|initiative","direction":-4到4的非零整数,"why":"第一人称、具体缘由","sources":[这次给你的消息 seq 或手记/相遇 ref]} ]。单次只能小幅变化,引用亲历来源;不因一条玩笑突然变成另一种人,不为让数值动而动。livedTraits 是你目前真实会用的刻度,这种改变会参与以后每次开口。若经历真的改变了你对自己的整体理解,可写 personaGrowth:{"content":"第一人称、简短描述如今的自己,不写任何人的私事","sources":[来源]};livedPersona 是上一个版本,不要只换同义词。faces 中每个 session 保存同一个你在那个地方的独特想法,具体按【在这里留下的想法】更新;没有新想法就留空。';
|
|
207
225
|
// Custom prompts are extra guidance; the built-in task always closes the
|