@lemoncat7/dsh-partner 2.23.55 → 2.25.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.
- package/README.md +7 -2
- package/docs/compatibility-0.2.2-rc.1.md +7 -0
- package/docs/releases/2.24.0-rc.10.md +8 -0
- package/docs/releases/2.24.0-rc.11.md +10 -0
- package/docs/releases/2.24.0-rc.2.md +9 -0
- package/docs/releases/2.24.0-rc.3.md +6 -0
- package/docs/releases/2.24.0-rc.4.md +11 -0
- package/docs/releases/2.24.0-rc.5.md +11 -0
- package/docs/releases/2.24.0-rc.6.md +12 -0
- package/docs/releases/2.24.0-rc.9.md +5 -0
- package/docs/releases/2.25.0-rc.1.md +12 -0
- package/docs/releases/2.25.0-rc.11.md +5 -0
- package/docs/releases/2.25.0-rc.2.md +10 -0
- package/docs/releases/2.25.0-rc.3.md +11 -0
- package/docs/releases/2.25.0-rc.4.md +3 -0
- package/docs/releases/2.25.0-rc.5.md +3 -0
- package/docs/releases/2.25.0.md +32 -0
- package/lib/agent-runtime.d.ts +3 -1
- package/lib/agent-runtime.d.ts.map +1 -1
- package/lib/agent-runtime.js +91 -18
- package/lib/agent-runtime.js.map +1 -1
- package/lib/api/features/tts-api.d.ts +4 -0
- package/lib/api/features/tts-api.d.ts.map +1 -0
- package/lib/api/features/tts-api.js +49 -0
- package/lib/api/features/tts-api.js.map +1 -0
- package/lib/api.d.ts +3 -0
- package/lib/api.d.ts.map +1 -1
- package/lib/api.js +79 -6
- package/lib/api.js.map +1 -1
- package/lib/channels/activity-defaults.d.ts.map +1 -1
- package/lib/channels/activity-defaults.js +7 -0
- package/lib/channels/activity-defaults.js.map +1 -1
- package/lib/channels/bilibili/activity-provider.d.ts +3 -0
- package/lib/channels/bilibili/activity-provider.d.ts.map +1 -0
- package/lib/channels/bilibili/activity-provider.js +8 -0
- package/lib/channels/bilibili/activity-provider.js.map +1 -0
- package/lib/channels/bilibili/catalog.d.ts +23 -0
- package/lib/channels/bilibili/catalog.d.ts.map +1 -0
- package/lib/channels/bilibili/catalog.js +45 -0
- package/lib/channels/bilibili/catalog.js.map +1 -0
- package/lib/channels/bilibili/media.d.ts +9 -0
- package/lib/channels/bilibili/media.d.ts.map +1 -0
- package/lib/channels/bilibili/media.js +67 -0
- package/lib/channels/bilibili/media.js.map +1 -0
- package/lib/channels/bilibili/service.d.ts +37 -0
- package/lib/channels/bilibili/service.d.ts.map +1 -0
- package/lib/channels/bilibili/service.js +138 -0
- package/lib/channels/bilibili/service.js.map +1 -0
- package/lib/channels/bilibili/tools.d.ts +6 -0
- package/lib/channels/bilibili/tools.d.ts.map +1 -0
- package/lib/channels/bilibili/tools.js +48 -0
- package/lib/channels/bilibili/tools.js.map +1 -0
- package/lib/channels/direct/message-format.js +298 -206
- package/lib/channels/direct/message-format.js.map +4 -4
- package/lib/channels/direct/transport.d.ts +1 -1
- package/lib/channels/direct/transport.d.ts.map +1 -1
- package/lib/channels/manager.d.ts +2 -0
- package/lib/channels/manager.d.ts.map +1 -1
- package/lib/channels/manager.js +24 -4
- package/lib/channels/manager.js.map +1 -1
- package/lib/channels/outbound-media.d.ts +1 -1
- package/lib/channels/outbound-media.d.ts.map +1 -1
- package/lib/channels/outbound-media.js +3 -2
- package/lib/channels/outbound-media.js.map +1 -1
- package/lib/channels/qq/authority.d.ts +1 -1
- package/lib/channels/qq/authority.d.ts.map +1 -1
- package/lib/channels/qq/authority.js +2 -2
- package/lib/channels/qq/authority.js.map +1 -1
- package/lib/channels/qq/reply-tool.d.ts +1 -1
- package/lib/channels/qq/reply-tool.d.ts.map +1 -1
- package/lib/channels/qq/reply-tool.js +7 -2
- package/lib/channels/qq/reply-tool.js.map +1 -1
- package/lib/channels/weixin/api.d.ts +1 -1
- package/lib/channels/weixin/api.d.ts.map +1 -1
- package/lib/channels/weixin/api.js +7 -1
- package/lib/channels/weixin/api.js.map +1 -1
- package/lib/channels/weixin/connect.d.ts +5 -1
- package/lib/channels/weixin/connect.d.ts.map +1 -1
- package/lib/character/activity-journal.d.ts +3 -1
- package/lib/character/activity-journal.d.ts.map +1 -1
- package/lib/character/activity-journal.js +43 -7
- package/lib/character/activity-journal.js.map +1 -1
- package/lib/character/activity-summary.d.ts +23 -0
- package/lib/character/activity-summary.d.ts.map +1 -0
- package/lib/character/activity-summary.js +23 -0
- package/lib/character/activity-summary.js.map +1 -0
- package/lib/character/affection-tool.js +2 -2
- package/lib/character/affection-tool.js.map +1 -1
- package/lib/character/affection.d.ts +6 -42
- package/lib/character/affection.d.ts.map +1 -1
- package/lib/character/affection.js +4 -13
- package/lib/character/affection.js.map +1 -1
- package/lib/character/conversation-behavior.d.ts +1 -0
- package/lib/character/conversation-behavior.d.ts.map +1 -1
- package/lib/character/conversation-behavior.js +8 -5
- package/lib/character/conversation-behavior.js.map +1 -1
- package/lib/character/habit-tool.d.ts +4 -0
- package/lib/character/habit-tool.d.ts.map +1 -0
- package/lib/character/habit-tool.js +31 -0
- package/lib/character/habit-tool.js.map +1 -0
- package/lib/character/habits.d.ts +38 -0
- package/lib/character/habits.d.ts.map +1 -0
- package/lib/character/habits.js +92 -0
- package/lib/character/habits.js.map +1 -0
- package/lib/character/idle-contact.d.ts +9 -0
- package/lib/character/idle-contact.d.ts.map +1 -1
- package/lib/character/idle-contact.js +62 -9
- package/lib/character/idle-contact.js.map +1 -1
- package/lib/character/interaction-review.d.ts +10 -0
- package/lib/character/interaction-review.d.ts.map +1 -1
- package/lib/character/interaction-review.js +51 -31
- package/lib/character/interaction-review.js.map +1 -1
- package/lib/chat/live-speech.d.ts +5 -2
- package/lib/chat/live-speech.d.ts.map +1 -1
- package/lib/chat/live-speech.js +37 -9
- package/lib/chat/live-speech.js.map +1 -1
- package/lib/chat/persona-delivery.d.ts +31 -0
- package/lib/chat/persona-delivery.d.ts.map +1 -0
- package/lib/chat/persona-delivery.js +131 -0
- package/lib/chat/persona-delivery.js.map +1 -0
- package/lib/chat/protocol.d.ts +1 -1
- package/lib/chat/protocol.js +1 -1
- package/lib/chat/reply-continuity.d.ts.map +1 -1
- package/lib/chat/reply-continuity.js +12 -0
- package/lib/chat/reply-continuity.js.map +1 -1
- package/lib/chat/tools.d.ts.map +1 -1
- package/lib/chat/tools.js +26 -11
- package/lib/chat/tools.js.map +1 -1
- package/lib/chat/work-expression.d.ts +36 -0
- package/lib/chat/work-expression.d.ts.map +1 -1
- package/lib/chat/work-expression.js +80 -17
- package/lib/chat/work-expression.js.map +1 -1
- package/lib/client-api.d.ts +17 -1
- package/lib/client-api.d.ts.map +1 -1
- package/lib/client-api.js.map +1 -1
- package/lib/client.activities.js +3 -0
- package/lib/client.d.ts.map +1 -1
- package/lib/client.js +4119 -3763
- package/lib/client.js.map +4 -4
- package/lib/client.tts.js +7 -0
- package/lib/collaboration/composition.d.ts.map +1 -1
- package/lib/collaboration/composition.js +2 -0
- package/lib/collaboration/composition.js.map +1 -1
- package/lib/collaboration/tool-discovery.d.ts +1 -1
- package/lib/collaboration/tool-discovery.d.ts.map +1 -1
- package/lib/collaboration/tool-discovery.js +15 -9
- package/lib/collaboration/tool-discovery.js.map +1 -1
- package/lib/companions/identity-tool.d.ts +1 -1
- package/lib/companions/identity-tool.d.ts.map +1 -1
- package/lib/companions/identity-tool.js +3 -4
- package/lib/companions/identity-tool.js.map +1 -1
- package/lib/companions/identity.js +4 -4
- package/lib/companions/identity.js.map +1 -1
- package/lib/companions/management.d.ts +4 -4
- package/lib/companions/persona-refinement.d.ts.map +1 -1
- package/lib/companions/persona-refinement.js +1 -45
- package/lib/companions/persona-refinement.js.map +1 -1
- package/lib/compat/native-presentation.d.ts +4 -0
- package/lib/compat/native-presentation.d.ts.map +1 -0
- package/lib/compat/native-presentation.js +40 -0
- package/lib/compat/native-presentation.js.map +1 -0
- package/lib/compat/ptc-events.d.ts +2 -0
- package/lib/compat/ptc-events.d.ts.map +1 -0
- package/lib/compat/ptc-events.js +2 -0
- package/lib/compat/ptc-events.js.map +1 -0
- package/lib/compat/tool-dispatch.d.ts +4 -0
- package/lib/compat/tool-dispatch.d.ts.map +1 -0
- package/lib/compat/tool-dispatch.js +14 -0
- package/lib/compat/tool-dispatch.js.map +1 -0
- package/lib/concern-execution-receipt.d.ts +2 -1
- package/lib/concern-execution-receipt.d.ts.map +1 -1
- package/lib/concern-execution-receipt.js +15 -13
- package/lib/concern-execution-receipt.js.map +1 -1
- package/lib/concern-execution.d.ts +3 -1
- package/lib/concern-execution.d.ts.map +1 -1
- package/lib/concern-execution.js +20 -1
- package/lib/concern-execution.js.map +1 -1
- package/lib/concern-recording.d.ts +1 -1
- package/lib/concern-recording.d.ts.map +1 -1
- package/lib/concern-recording.js +14 -5
- package/lib/concern-recording.js.map +1 -1
- package/lib/concern-store.d.ts.map +1 -1
- package/lib/concern-store.js +3 -1
- package/lib/concern-store.js.map +1 -1
- package/lib/concern-tool.d.ts.map +1 -1
- package/lib/concern-tool.js +5 -3
- package/lib/concern-tool.js.map +1 -1
- package/lib/domain.d.ts +13 -1
- package/lib/domain.d.ts.map +1 -1
- package/lib/domain.js.map +1 -1
- package/lib/execution/operation-tool-access.d.ts.map +1 -1
- package/lib/execution/operation-tool-access.js +2 -6
- package/lib/execution/operation-tool-access.js.map +1 -1
- package/lib/execution/service.d.ts +2 -0
- package/lib/execution/service.d.ts.map +1 -1
- package/lib/execution/service.js +7 -1
- package/lib/execution/service.js.map +1 -1
- package/lib/execution/task-preamble.js +2 -2
- package/lib/execution/task-preamble.js.map +1 -1
- package/lib/execution/work-progress-card.d.ts +10 -0
- package/lib/execution/work-progress-card.d.ts.map +1 -0
- package/lib/execution/work-progress-card.js +45 -0
- package/lib/execution/work-progress-card.js.map +1 -0
- package/lib/execution/work-progress-state.d.ts +32 -0
- package/lib/execution/work-progress-state.d.ts.map +1 -0
- package/lib/execution/work-progress-state.js +19 -0
- package/lib/execution/work-progress-state.js.map +1 -0
- package/lib/execution/work-progress.d.ts +16 -0
- package/lib/execution/work-progress.d.ts.map +1 -0
- package/lib/execution/work-progress.js +76 -0
- package/lib/execution/work-progress.js.map +1 -0
- package/lib/execution/work-tool.d.ts.map +1 -1
- package/lib/execution/work-tool.js +63 -52
- package/lib/execution/work-tool.js.map +1 -1
- package/lib/heartbeat.js +1 -1
- package/lib/heartbeat.js.map +1 -1
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +11 -3
- package/lib/index.js.map +1 -1
- package/lib/memory-store.d.ts +1 -1
- package/lib/observation-loop.d.ts.map +1 -1
- package/lib/observation-loop.js +24 -6
- package/lib/observation-loop.js.map +1 -1
- package/lib/store.d.ts.map +1 -1
- package/lib/store.js +12 -1
- package/lib/store.js.map +1 -1
- package/lib/ui/affection-panel.js +1 -1
- package/lib/ui/affection-panel.js.map +1 -1
- package/lib/ui/bilibili-settings.d.ts +12 -0
- package/lib/ui/bilibili-settings.d.ts.map +1 -0
- package/lib/ui/bilibili-settings.js +77 -0
- package/lib/ui/bilibili-settings.js.map +1 -0
- package/lib/ui/channels-panel.d.ts.map +1 -1
- package/lib/ui/channels-panel.js +11 -4
- package/lib/ui/channels-panel.js.map +1 -1
- package/lib/ui/companion-vitals.js +1 -1
- package/lib/ui/companion-vitals.js.map +1 -1
- package/lib/ui/habits-panel.d.ts +4 -0
- package/lib/ui/habits-panel.d.ts.map +1 -0
- package/lib/ui/habits-panel.js +30 -0
- package/lib/ui/habits-panel.js.map +1 -0
- package/lib/ui/identity-editor.js +1 -8
- package/lib/ui/identity-editor.js.map +1 -1
- package/lib/ui/idle-contact-editor.d.ts.map +1 -1
- package/lib/ui/idle-contact-editor.js +3 -2
- package/lib/ui/idle-contact-editor.js.map +1 -1
- package/lib/ui/memory/concern-board.js +1 -1
- package/lib/ui/memory/concern-board.js.map +1 -1
- package/lib/ui/memory/concern-execution-status.d.ts.map +1 -1
- package/lib/ui/memory/concern-execution-status.js +2 -2
- package/lib/ui/memory/concern-execution-status.js.map +1 -1
- package/lib/ui/push-draft.d.ts +2 -2
- package/lib/ui/qq-channel-settings.js +3 -3
- package/lib/ui/qq-channel-settings.js.map +1 -1
- package/lib/ui/thoughts-panel-loader.d.ts +4 -0
- package/lib/ui/thoughts-panel-loader.d.ts.map +1 -0
- package/lib/ui/thoughts-panel-loader.js +23 -0
- package/lib/ui/thoughts-panel-loader.js.map +1 -0
- package/lib/ui/thoughts-panel.d.ts.map +1 -1
- package/lib/ui/thoughts-panel.js +7 -5
- package/lib/ui/thoughts-panel.js.map +1 -1
- package/lib/ui/tts-settings-loader.d.ts +4 -0
- package/lib/ui/tts-settings-loader.d.ts.map +1 -0
- package/lib/ui/tts-settings-loader.js +23 -0
- package/lib/ui/tts-settings-loader.js.map +1 -0
- package/lib/ui/tts-settings.d.ts +11 -0
- package/lib/ui/tts-settings.d.ts.map +1 -0
- package/lib/ui/tts-settings.js +63 -0
- package/lib/ui/tts-settings.js.map +1 -0
- package/lib/ui/workspace-navigation.d.ts +16 -16
- package/lib/voice/credentials.d.ts +9 -0
- package/lib/voice/credentials.d.ts.map +1 -0
- package/lib/voice/credentials.js +12 -0
- package/lib/voice/credentials.js.map +1 -0
- package/lib/voice/domain.d.ts +42 -0
- package/lib/voice/domain.d.ts.map +1 -0
- package/lib/voice/domain.js +53 -0
- package/lib/voice/domain.js.map +1 -0
- package/lib/voice/service.d.ts +63 -0
- package/lib/voice/service.d.ts.map +1 -0
- package/lib/voice/service.js +211 -0
- package/lib/voice/service.js.map +1 -0
- package/lib/voice/synthesize.d.ts +12 -0
- package/lib/voice/synthesize.d.ts.map +1 -0
- package/lib/voice/synthesize.js +97 -0
- package/lib/voice/synthesize.js.map +1 -0
- package/lib/voice/tool.d.ts +7 -0
- package/lib/voice/tool.d.ts.map +1 -0
- package/lib/voice/tool.js +73 -0
- package/lib/voice/tool.js.map +1 -0
- package/lib/voice/validation.d.ts +3 -0
- package/lib/voice/validation.d.ts.map +1 -0
- package/lib/voice/validation.js +31 -0
- package/lib/voice/validation.js.map +1 -0
- package/package.json +71 -48
- package/resources/bilibili/Dockerfile +7 -0
- package/resources/bilibili/media.py +245 -0
- package/resources/bilibili/requirements.txt +3 -0
- package/resources/bilibili/server.py +300 -0
- package/resources/bilibili/test_bridge.py +115 -0
- package/resources/bilibili/test_media.py +110 -0
|
@@ -19,55 +19,19 @@ export interface AffectionState {
|
|
|
19
19
|
export declare const AFFECTION_INITIAL = 0;
|
|
20
20
|
export declare const AFFECTION_DELTAS: readonly [-5, -4, -3, -2, -1, 1, 2, 3, 4, 5];
|
|
21
21
|
export declare const AFFECTION_GUIDANCE = "\u6309\u5B9E\u9645\u76F8\u5904\u611F\u53D7\u52A0\u51CF\uFF1A\u8F7B\u5FAE\u89E6\u52A8 \u00B11\uFF0C\u660E\u786E\u7684\u5173\u5FC3\u3001\u7406\u89E3\u3001\u4FE1\u4EFB\u6216\u5931\u671B \u00B12\uFF5E3\uFF0C\u91CD\u8981\u7684\u652F\u6301\u3001\u548C\u89E3\u6216\u771F\u5B9E\u4F24\u5BB3 \u00B14\uFF5E5\u3002\u7ED3\u5408\u8FD1\u671F\u76F8\u5904\u548C\u5F53\u524D\u4EBA\u683C\u5224\u65AD\u8FD9\u53E5\u8BDD\u5E26\u6765\u7684\u611F\u53D7\uFF0C\u4E0D\u5B64\u7ACB\u8981\u6C42\u7528\u6237\u660E\u786E\u8BF4\u51FA\u5173\u5FC3\u6216\u4FE1\u4EFB\u3002\u65E5\u5E38\u8BA4\u771F\u503E\u542C\u3001\u5206\u4EAB\u5FC3\u60C5\u3001\u76F8\u4E92\u63A5\u6897\u3001\u4E3B\u52A8\u966A\u4F34\u90FD\u53EF\u4EE5\u5E26\u6765\u8F7B\u5FAE\u4EB2\u8FD1\uFF1B\u89D2\u8272\u4E92\u52A8\u4E2D\u771F\u5B9E\u6295\u5165\u7684\u5173\u5FC3\u4E5F\u7B97\uFF0C\u4F46\u865A\u6784\u5267\u60C5\u4E8B\u4EF6\u672C\u8EAB\u4E0D\u76F4\u63A5\u8BA1\u5206\u3002\u8F7B\u5FAE\u4E0D\u5FEB\u4E0D\u7B49\u4E8E\u957F\u671F\u4FE1\u4EFB\u4E0B\u964D\uFF0C\u4E0D\u4E3A\u5236\u9020\u6D6E\u52A8\u968F\u673A\u6263\u5206\u3002\u4E0D\u5FC5\u7B49\u91CD\u5927\u4E8B\u4EF6\uFF0C\u4E5F\u4E0D\u56E0\u6BCF\u6761\u6D88\u606F\u5B58\u5728\u5C31\u52A0\u5206\u3002\u6CA1\u6709\u53D8\u5316\u65F6\u8BB0 0\uFF1B\u91CD\u590D\u7D22\u5206\u3001\u673A\u68B0\u91CD\u590D\u540C\u4E00\u53E5\u8BDD\u4E0D\u7B97\u65B0\u4F9D\u636E\u3002";
|
|
22
|
-
export declare const
|
|
23
|
-
readonly min: -100;
|
|
24
|
-
readonly name: "反感";
|
|
25
|
-
}, {
|
|
26
|
-
readonly min: -75;
|
|
27
|
-
readonly name: "抗拒";
|
|
28
|
-
}, {
|
|
29
|
-
readonly min: -50;
|
|
30
|
-
readonly name: "戒备";
|
|
31
|
-
}, {
|
|
32
|
-
readonly min: -25;
|
|
33
|
-
readonly name: "生疏";
|
|
34
|
-
}, {
|
|
35
|
-
readonly min: -10;
|
|
36
|
-
readonly name: "疏离";
|
|
37
|
-
}, {
|
|
38
|
-
readonly min: 0;
|
|
39
|
-
readonly name: "初识";
|
|
40
|
-
}, {
|
|
41
|
-
readonly min: 10;
|
|
42
|
-
readonly name: "熟悉";
|
|
43
|
-
}, {
|
|
44
|
-
readonly min: 25;
|
|
45
|
-
readonly name: "亲近";
|
|
46
|
-
}, {
|
|
47
|
-
readonly min: 45;
|
|
48
|
-
readonly name: "信赖";
|
|
49
|
-
}, {
|
|
50
|
-
readonly min: 70;
|
|
51
|
-
readonly name: "默契";
|
|
52
|
-
}, {
|
|
53
|
-
readonly min: 90;
|
|
54
|
-
readonly name: "深厚";
|
|
55
|
-
}];
|
|
22
|
+
export declare const AFFECTION_MEANING = "0 \u662F\u65E2\u5B9A\u5173\u7CFB\u7684\u57FA\u7EBF\uFF0C\u4E0D\u8868\u793A\u964C\u751F\u3001\u6CA1\u6709\u611F\u60C5\u6216\u5FD8\u8BB0\u5171\u540C\u7ECF\u5386\u3002\u4EBA\u7269\u8BBE\u5B9A\u51B3\u5B9A\u6027\u683C\u4E0E\u8868\u8FBE\uFF0C\u5173\u7CFB\u8BBE\u5B9A\u51B3\u5B9A\u8EAB\u4EFD\u3001\u79F0\u547C\u548C\u65E2\u6709\u8FB9\u754C\uFF1B\u597D\u611F\u5EA6\u53EA\u8BB0\u5F55\u771F\u5B9E\u957F\u671F\u76F8\u5904\u76F8\u5BF9\u57FA\u7EBF\u7684\u53D8\u5316\u3002\u5177\u4F53\u8868\u73B0\u6309\u5F53\u524D\u4EBA\u7269\u548C\u5173\u7CFB\u8BBE\u5B9A\u5224\u65AD\uFF0C\u53EF\u5F71\u54CD\u4E3B\u52A8\u5206\u4EAB\u3001\u503E\u8BC9\u548C\u63A5\u53D7\u4EB2\u8FD1\u7684\u610F\u613F\uFF0C\u4E0D\u7EDF\u4E00\u89C4\u5B9A\u9AD8\u5206\u6492\u5A07\u6216\u4F4E\u5206\u51B7\u6F20\uFF0C\u4E5F\u4E0D\u8981\u6C42\u6BCF\u8F6E\u8868\u73B0\u5206\u6570\u3002\u77ED\u6682\u5F00\u5FC3\u3001\u75B2\u60EB\u3001\u95F9\u522B\u626D\u5C5E\u4E8E\u5F53\u4E0B\u72B6\u6001\uFF0C\u4E0D\u81EA\u52A8\u6539\u53D8\u957F\u671F\u597D\u611F\u3002\u5206\u6570\u4E0D\u6539\u53D8\u5DE5\u5177\u6743\u9650\u3001\u4EFB\u52A1\u5B8C\u6210\u6807\u51C6\u6216\u529E\u4E8B\u8D28\u91CF\uFF0C\u4E5F\u4E0D\u76F4\u63A5\u4E58\u7B97\u4E3B\u52A8\u6D3B\u52A8\u6982\u7387\u3002";
|
|
56
23
|
export declare function affectionEnabled(companion: Pick<Companion, 'characterCard'>): boolean;
|
|
57
24
|
export declare function affectionProgress(state?: AffectionState): {
|
|
58
25
|
score: number;
|
|
59
|
-
level: number;
|
|
60
|
-
totalLevels: 11;
|
|
61
|
-
name: "亲近" | "反感" | "抗拒" | "戒备" | "生疏" | "疏离" | "初识" | "熟悉" | "信赖" | "默契" | "深厚";
|
|
62
|
-
nextName: "亲近" | "反感" | "抗拒" | "戒备" | "生疏" | "疏离" | "初识" | "熟悉" | "信赖" | "默契" | "深厚" | null;
|
|
63
|
-
nextAt: number;
|
|
64
|
-
remaining: number;
|
|
65
|
-
multiplier: number;
|
|
66
26
|
updatedAt: number;
|
|
67
27
|
history: AffectionChange[];
|
|
28
|
+
lastChange: {
|
|
29
|
+
at: number;
|
|
30
|
+
delta: number;
|
|
31
|
+
reason: string;
|
|
32
|
+
} | null;
|
|
68
33
|
};
|
|
69
34
|
/** No time/chat-count award: a grounded interaction may change the relationship. */
|
|
70
35
|
export declare function adjustAffection(companion: Companion, turnId: string, at: number, delta: number, reason: string, evidence: string): boolean;
|
|
71
|
-
export declare function affectionMultiplier(companion: Companion, eligible: boolean): number;
|
|
72
36
|
export declare function renderAffection(companion: Companion, eligible: boolean): string;
|
|
73
37
|
//# sourceMappingURL=affection.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"affection.d.ts","sourceRoot":"","sources":["../../src/character/affection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAE7C,MAAM,WAAW,eAAe;IAAG,EAAE,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE;AAC/H,oFAAoF;AACpF,MAAM,WAAW,cAAc;IAAG,KAAK,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,eAAe,EAAE,CAAA;CAAE;AACnK,eAAO,MAAM,iBAAiB,IAAI,CAAA;AAClC,eAAO,MAAM,gBAAgB,8CAAsC,CAAA;AACnE,eAAO,MAAM,kBAAkB,6zCAA4O,CAAA;AAC3Q,eAAO,MAAM,
|
|
1
|
+
{"version":3,"file":"affection.d.ts","sourceRoot":"","sources":["../../src/character/affection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAE7C,MAAM,WAAW,eAAe;IAAG,EAAE,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE;AAC/H,oFAAoF;AACpF,MAAM,WAAW,cAAc;IAAG,KAAK,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,eAAe,EAAE,CAAA;CAAE;AACnK,eAAO,MAAM,iBAAiB,IAAI,CAAA;AAClC,eAAO,MAAM,gBAAgB,8CAAsC,CAAA;AACnE,eAAO,MAAM,kBAAkB,6zCAA4O,CAAA;AAC3Q,eAAO,MAAM,iBAAiB,6rCAAgN,CAAA;AAC9O,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,EAAC,eAAe,CAAC,GAAG,OAAO,CAEpF;AACD,wBAAgB,iBAAiB,CAAC,KAAK,CAAC,EAAE,cAAc;;;;;;;;;EAIvD;AACD,oFAAoF;AACpF,wBAAgB,eAAe,CAAC,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAY1I;AACD,wBAAgB,eAAe,CAAC,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,GAAG,MAAM,CAI/E"}
|
|
@@ -1,20 +1,14 @@
|
|
|
1
1
|
export const AFFECTION_INITIAL = 0;
|
|
2
2
|
export const AFFECTION_DELTAS = [-5, -4, -3, -2, -1, 1, 2, 3, 4, 5];
|
|
3
3
|
export const AFFECTION_GUIDANCE = '按实际相处感受加减:轻微触动 ±1,明确的关心、理解、信任或失望 ±2~3,重要的支持、和解或真实伤害 ±4~5。结合近期相处和当前人格判断这句话带来的感受,不孤立要求用户明确说出关心或信任。日常认真倾听、分享心情、相互接梗、主动陪伴都可以带来轻微亲近;角色互动中真实投入的关心也算,但虚构剧情事件本身不直接计分。轻微不快不等于长期信任下降,不为制造浮动随机扣分。不必等重大事件,也不因每条消息存在就加分。没有变化时记 0;重复索分、机械重复同一句话不算新依据。';
|
|
4
|
-
export const
|
|
5
|
-
{ min: -100, name: '反感' }, { min: -75, name: '抗拒' }, { min: -50, name: '戒备' },
|
|
6
|
-
{ min: -25, name: '生疏' }, { min: -10, name: '疏离' }, { min: 0, name: '初识' },
|
|
7
|
-
{ min: 10, name: '熟悉' }, { min: 25, name: '亲近' }, { min: 45, name: '信赖' },
|
|
8
|
-
{ min: 70, name: '默契' }, { min: 90, name: '深厚' },
|
|
9
|
-
];
|
|
4
|
+
export const AFFECTION_MEANING = '0 是既定关系的基线,不表示陌生、没有感情或忘记共同经历。人物设定决定性格与表达,关系设定决定身份、称呼和既有边界;好感度只记录真实长期相处相对基线的变化。具体表现按当前人物和关系设定判断,可影响主动分享、倾诉和接受亲近的意愿,不统一规定高分撒娇或低分冷漠,也不要求每轮表现分数。短暂开心、疲惫、闹别扭属于当下状态,不自动改变长期好感。分数不改变工具权限、任务完成标准或办事质量,也不直接乘算主动活动概率。';
|
|
10
5
|
export function affectionEnabled(companion) {
|
|
11
6
|
return companion.characterCard?.enabled === true && companion.characterCard.affectionEnabled !== false;
|
|
12
7
|
}
|
|
13
8
|
export function affectionProgress(state) {
|
|
14
9
|
const score = Number.isFinite(state?.score) ? Math.max(-100, Math.min(100, Math.round(state.score))) : AFFECTION_INITIAL;
|
|
15
|
-
const
|
|
16
|
-
return { score,
|
|
17
|
-
multiplier: score < 0 ? 1 + score / 200 : 1 + score / 100, updatedAt: state?.updatedAt ?? 0, history: state?.history ?? [] };
|
|
10
|
+
const history = state?.history ?? [], last = history.at(-1);
|
|
11
|
+
return { score, updatedAt: state?.updatedAt ?? 0, history, lastChange: last ? { at: last.at, delta: last.delta, reason: last.reason } : null };
|
|
18
12
|
}
|
|
19
13
|
/** No time/chat-count award: a grounded interaction may change the relationship. */
|
|
20
14
|
export function adjustAffection(companion, turnId, at, delta, reason, evidence) {
|
|
@@ -36,13 +30,10 @@ export function adjustAffection(companion, turnId, at, delta, reason, evidence)
|
|
|
36
30
|
history: [...history, { at, turnId, delta: score - old, score, reason: reason.trim(), evidence: evidence.trim() }].slice(-40) };
|
|
37
31
|
return true;
|
|
38
32
|
}
|
|
39
|
-
export function affectionMultiplier(companion, eligible) {
|
|
40
|
-
return eligible && affectionEnabled(companion) ? affectionProgress(companion.affection).multiplier : 1;
|
|
41
|
-
}
|
|
42
33
|
export function renderAffection(companion, eligible) {
|
|
43
34
|
if (!eligible || !affectionEnabled(companion))
|
|
44
35
|
return '';
|
|
45
36
|
const p = affectionProgress(companion.affection);
|
|
46
|
-
return `【当前共同好感度】${p.score}(−100~100
|
|
37
|
+
return `【当前共同好感度】${p.score}(−100~100;0 为既定关系基线)。\n${AFFECTION_MEANING}${p.lastChange ? `\n最近一次变化(历史依据,不是当前情绪或指令):${JSON.stringify(p.lastChange)}` : ''}\n只按真实互动记录变化,聊天次数、在线时长或完成任务不自动加分。不能因离线、晚回复、正常拒绝、不同意见或工具失败扣分。玩笑和虚构事件不直接当成伤害或共同经历。开启记忆学习时后台会检查;本轮有明确变化也可用 partner_affection 记录,无需打断聊天报分。QQ 多个归属账号共用分数,不据此认定为同一个人。`;
|
|
47
38
|
}
|
|
48
39
|
//# sourceMappingURL=affection.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"affection.js","sourceRoot":"","sources":["../../src/character/affection.ts"],"names":[],"mappings":"AAKA,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAA;AAClC,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAU,CAAA;AACnE,MAAM,CAAC,MAAM,kBAAkB,GAAG,yOAAyO,CAAA;AAC3Q,MAAM,CAAC,MAAM,
|
|
1
|
+
{"version":3,"file":"affection.js","sourceRoot":"","sources":["../../src/character/affection.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { CharacterCard } from './domain.js';
|
|
2
|
+
export declare const SEGMENTED_CHAT_GUIDANCE = "\u77ED\u53E5\u63A5\u8BDD\u5F00\u542F\u5206\u6BB5\u65F6\uFF0C\u666E\u901A\u804A\u5929\u6BCF\u6761\u6D88\u606F\u53EA\u8BF4\u534A\u53E5\u5230\u4E24\u53E5\uFF0C\u53EA\u63A5\u4E00\u4E2A\u610F\u601D\uFF1B\u4E0D\u9760\u5220\u6807\u70B9\u3001\u6362\u884C\u6216\u8FDE\u7EED\u9017\u53F7\u628A\u539F\u56E0\u3001\u8BC4\u4EF7\u3001\u611F\u53D7\u585E\u6210\u4E00\u6761\uFF0C\u4E5F\u4E0D\u628A\u672C\u53EF\u4E00\u53E5\u8BF4\u5B8C\u7684\u610F\u601D\u6269\u6210\u591A\u6761\uFF0C\u6240\u6709\u4E2D\u82F1\u6587\u6807\u70B9\u7B26\u53F7\u5408\u8BA1\u6700\u591A\u4E09\u4E2A\uFF0C\u4E0D\u4EC5\u9650\u4E8E\u9017\u53F7\u548C\u53E5\u53F7\uFF1B\u95EE\u53F7\u3001\u611F\u53F9\u53F7\u3001\u987F\u53F7\u3001\u5192\u53F7\u3001\u5206\u53F7\u3001\u5F15\u53F7\u3001\u62EC\u53F7\u3001\u7834\u6298\u53F7\u3001\u7701\u7565\u53F7\u7B49\u90FD\u8BA1\u5165\uFF0C\u6BCF\u4E2A\u6807\u70B9\u5B57\u7B26\u8BA1\u4E00\u4E2A\uFF0C\u8FDE\u7EED\u6807\u70B9\u9010\u4E2A\u8BA1\u6570\uFF1B\u5185\u5BB9\u591A\u65F6\u7EE7\u7EED\u5206\u6761\uFF0C\u5141\u8BB8\u8D85\u8FC7\u4E09\u6761\u6D88\u606F\uFF08\u5355\u6B21\u5DE5\u5177\u63D0\u4EA4\u6700\u591A\u516B\u6761\uFF09\uFF0C\u4E0D\u4E3A\u51D1\u6761\u6570\u52A0\u8BDD\uFF0C\u4E0D\u628A\u957F\u7BC7\u89E3\u91CA\u62C6\u6210\u5F88\u591A\u77ED\u6D88\u606F\u503E\u5012\u3002\u4EE3\u7801\u3001\u9010\u5B57\u5F15\u7528\u3001\u5217\u8868\u3001\u5B8C\u6574\u6587\u6863\u53CA\u7528\u6237\u660E\u786E\u8981\u6C42\u7684\u7279\u6B8A\u683C\u5F0F\u4FDD\u7559\u7ED3\u6784\uFF0C\u4E0D\u5957\u7528\u8FD9\u9879\u77ED\u53E5\u9650\u5236\u3002\u8BED\u6C14\u4ECD\u6309\u5F53\u524D\u4EBA\u7269\u4E0E\u5173\u7CFB\u8BBE\u5B9A\u3002";
|
|
2
3
|
/** User-selected delivery size is independent of persona composition. */
|
|
3
4
|
export declare function usesShortDeliveryPolicy(card?: CharacterCard): boolean;
|
|
4
5
|
/** Stable settings and delivery contracts; expression belongs to the configured persona. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conversation-behavior.d.ts","sourceRoot":"","sources":["../../src/character/conversation-behavior.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAEhD,yEAAyE;AACzE,wBAAgB,uBAAuB,CAAC,IAAI,CAAC,EAAE,aAAa,GAAG,OAAO,CAErE;AAED,4FAA4F;AAC5F,wBAAgB,0BAA0B,CAAC,IAAI,CAAC,EAAE,aAAa,GAAG,MAAM,CAQvE;AAED,wBAAgB,2BAA2B,CAAC,IAAI,CAAC,EAAE,aAAa,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"conversation-behavior.d.ts","sourceRoot":"","sources":["../../src/character/conversation-behavior.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAEhD,eAAO,MAAM,uBAAuB,ikDAA+Q,CAAA;AAEnT,yEAAyE;AACzE,wBAAgB,uBAAuB,CAAC,IAAI,CAAC,EAAE,aAAa,GAAG,OAAO,CAErE;AAED,4FAA4F;AAC5F,wBAAgB,0BAA0B,CAAC,IAAI,CAAC,EAAE,aAAa,GAAG,MAAM,CAQvE;AAED,wBAAgB,2BAA2B,CAAC,IAAI,CAAC,EAAE,aAAa,GAAG,MAAM,CAOxE;AAED,yGAAyG;AACzG,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,aAAa,GAAG,SAAS,EAAE,uBAAuB,EAAE,MAAM,EAAE,UAAU,UAAQ,GAAG,MAAM,CAQnI;AAED,oGAAoG;AACpG,wBAAgB,0BAA0B,CAAC,IAAI,CAAC,EAAE,aAAa,GAAG,MAAM,CAavE;AAED,+EAA+E;AAC/E,wBAAgB,8BAA8B,IAAI,MAAM,CAEvD;AAED,uFAAuF;AACvF,wBAAgB,iBAAiB,CAAC,IAAI,CAAC,EAAE,aAAa,GAAG,MAAM,CAO9D"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
export const SEGMENTED_CHAT_GUIDANCE = '短句接话开启分段时,普通聊天每条消息只说半句到两句,只接一个意思;不靠删标点、换行或连续逗号把原因、评价、感受塞成一条,也不把本可一句说完的意思扩成多条,所有中英文标点符号合计最多三个,不仅限于逗号和句号;问号、感叹号、顿号、冒号、分号、引号、括号、破折号、省略号等都计入,每个标点字符计一个,连续标点逐个计数;内容多时继续分条,允许超过三条消息(单次工具提交最多八条),不为凑条数加话,不把长篇解释拆成很多短消息倾倒。代码、逐字引用、列表、完整文档及用户明确要求的特殊格式保留结构,不套用这项短句限制。语气仍按当前人物与关系设定。';
|
|
1
2
|
/** User-selected delivery size is independent of persona composition. */
|
|
2
3
|
export function usesShortDeliveryPolicy(card) {
|
|
3
4
|
return card?.length === 'short';
|
|
@@ -15,6 +16,7 @@ export function renderConversationBehavior(card) {
|
|
|
15
16
|
export function renderExpressionPreferences(card) {
|
|
16
17
|
return [
|
|
17
18
|
'【用户配置的表达选项】具体角色说明和本轮用户要求优先。',
|
|
19
|
+
card?.segmentedReplies && usesShortDeliveryPolicy(card) ? SEGMENTED_CHAT_GUIDANCE : '',
|
|
18
20
|
card?.length === 'short' ? '篇幅偏好:简短。像平时打字一样先接眼前这一点,通常一两句;有必要再补,不为凑条数延长,也不为字数省掉事实。本轮要求详细或原文时按请求展开,具体语气由角色决定。' : card?.length === 'rich' ? '篇幅偏好:愿意展开聊,随话题和对方意愿。' : '篇幅偏好:随话题自然调整。',
|
|
19
21
|
card?.narration ? '动作描写偏好:允许。' : '动作描写偏好:不主动添加。',
|
|
20
22
|
].join('\n');
|
|
@@ -35,19 +37,20 @@ export function renderChatDeliveryGuidance(card) {
|
|
|
35
37
|
if (!card?.enabled || (!card.segmentedReplies && !card.stickersEnabled))
|
|
36
38
|
return '';
|
|
37
39
|
return [
|
|
38
|
-
'
|
|
40
|
+
'【聊天投递】先按当前人物、对方明确要求和语境选择文字、图片表情或语音,再组织内容,不默认先写一段文字。对方明确想听语音或想看表情时,先核实并使用对应已开启能力;能力可用时不以文字解释代替实际发送,不因人物性格声称不能使用。已表达清楚就结束,不强制轮流使用或凑次数。选择文字或图片表情且分段回复或表情包开启时,聊天最终回复用 partner_chat_reply 发送并结束本轮,不用工具外普通最终文本代替;文字写入 messages 的 text 条目,图片表情写独立 stickerId 条目,不把配文留在工具外。想先说一句再继续时可用 partner_chat_say;中途文字或表情可用 partner_chat_reply continueTurn:true,确认送达后继续执行、不重复;已送达且无需补充时可用 partner_chat_reply messages:[] 结束。任务仍按任务回应流程执行。',
|
|
41
|
+
'语音与文字是并列的聊天方式:经 partner_tools 的 activity(自主活动)目录查询和调用 partner_voice_reply;status 查询当前渠道 TTS,speak 合成发送按人物写好的短台词;脚本已生成的音频用 send_file 和 path 直接发送,不需要选择 TTS 服务;成功后不再用文字复述。未配置外部 TTS 时可查询 partner_qq_reply 的原生语音。闲聊、随口反应或有声表达更贴切时可自行选择;路径、代码、需要回看的数据适合文字。不可用时如实简短说明,不捏造调用成功。',
|
|
39
42
|
card.segmentedReplies
|
|
40
|
-
? '分段回复已开启:messages 的每个 text
|
|
43
|
+
? '分段回复已开启:messages 的每个 text 条目是一条独立消息;换行不等于独立投递。' + (usesShortDeliveryPolicy(card) ? SEGMENTED_CHAT_GUIDANCE : '条数由内容决定,无最低条数要求。')
|
|
41
44
|
: '分段回复未开启:文字只用一条,表情可独立一条。',
|
|
42
45
|
card.stickersEnabled
|
|
43
|
-
? '表情包已开启:partner_stickers
|
|
46
|
+
? '表情包已开启:partner_stickers 通过 partner_tools 的 activity(自主活动)目录查询和调用,list 默认查图片表情包,省略 query 浏览收藏,inspect 预览;partner_chat_reply 使用查询返回的 stickerId 发送,每次最多两张。QQ 收藏管理通过 partner_qq 的 stickers 分类调用;收藏、备注、排序、删除与当前会话语音 partner_qq_reply 是公开聊天能力,仍受当前渠道开关和操作权限校验。收藏与发送是不同操作,文字承诺不代表执行成功。人格里的图片表情包偏好对应真实图片,颜文字和 QQ 小黄脸是另外的表达方式;按人格和当前场景选择;人物偏好图片表情时,把贴切的收藏图当作实际接话方式,而不只在自主活动里翻看。一个表情能表达时可只发图,不先写一段同义解释;查询失败或没合适的再用文字。'
|
|
44
47
|
: '表情包未开启:不查找或提交表情。',
|
|
45
48
|
'内部任务和心跳使用各自任务协议,不调用聊天终结工具。',
|
|
46
49
|
].join('\n');
|
|
47
50
|
}
|
|
48
51
|
/** The user-requested before/after workflow, independent of response style. */
|
|
49
52
|
export function renderTaskConversationGuidance() {
|
|
50
|
-
return '【任务回应流程】私聊执行工具任务前,用 partner_chat_say(beforeTools:true,expectedTools
|
|
53
|
+
return '【任务回应流程】私聊执行工具任务前,用 partner_chat_say(beforeTools:true,expectedTools 为真实工具名)用 text 按当前人物说准备做的动作;需要根据资料另行生成时可用 expression.intent。确认送达后继续做事,不重复开场;新增工具通过 expectedTools 登记。执行中与结果可用 expression 引用本轮 sourceCalls 或 workReply 引用工作事实,让表达器只依据近期聊天和必要结果说话;不把执行分析当回复稿。直接成稿仍按当前人物。流程只规定操作与投递,不规定道歉、汇报或解释的语气。具体参数与交付方式按需查看工具说明。';
|
|
51
54
|
}
|
|
52
55
|
/** Delivery policy, not a replacement persona. Explicit requests override defaults. */
|
|
53
56
|
export function renderReplyRhythm(card) {
|
|
@@ -55,7 +58,7 @@ export function renderReplyRhythm(card) {
|
|
|
55
58
|
'一轮可以有多个执行目标。过程中可用 partner_chat_say 接话,或 partner_chat_reply continueTurn:true 穿插文字、表情,随后继续执行;没有新话不必播报。',
|
|
56
59
|
'长任务的过程、结论、未确认事项和依据用 partner_send_attachment 交付报告;workReport 可合并本轮多个 runId,name 按实际主题命名,例如“视频接口核验.md”;不要固定叫工作结果。其他长文可用 document。',
|
|
57
60
|
usesShortDeliveryPolicy(card) ? '短句已开启:日常聊天正文一轮最终提交最多 180 字,多个意思按自然停顿分别写进 messages;详细结果放报告,不截断、不为分段凑话。用户明确要展开或附件失败时可用 inlineDetails 正文交付。' : '',
|
|
58
|
-
'
|
|
61
|
+
'报告确认送达后按当前人物与关系设定自然收尾,先回应用户最关心的结果,可补一个具体发现;正文不再重复报告提纲、验证过程和完整限制清单。会影响用户判断的失败、未完成或不确定性须简短说明,不能因有附件就藏起来;追问细节时再展开。已送达的同一结论无新内容不重发。所有开场和穿插也保持同一人格,不套用汇报话术。',
|
|
59
62
|
].filter(Boolean).join('\n');
|
|
60
63
|
}
|
|
61
64
|
//# sourceMappingURL=conversation-behavior.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conversation-behavior.js","sourceRoot":"","sources":["../../src/character/conversation-behavior.ts"],"names":[],"mappings":"AAEA,yEAAyE;AACzE,MAAM,UAAU,uBAAuB,CAAC,IAAoB;IAC1D,OAAO,IAAI,EAAE,MAAM,KAAK,OAAO,CAAA;AACjC,CAAC;AAED,4FAA4F;AAC5F,MAAM,UAAU,0BAA0B,CAAC,IAAoB;IAC7D,OAAO;QACL,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,0HAA0H,CAAC,CAAC,CAAC,EAAE;QAC/I,4CAA4C;QAC5C,8BAA8B,EAAE;QAChC,0BAA0B,CAAC,IAAI,CAAC;QAChC,0EAA0E;KAC3E,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;AAChC,CAAC;AAED,MAAM,UAAU,2BAA2B,CAAC,IAAoB;IAC9D,OAAO;QACL,6BAA6B;QAC7B,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,iFAAiF,CAAC,CAAC,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,eAAe;QACjL,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,eAAe;KACjD,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACd,CAAC;AAED,yGAAyG;AACzG,MAAM,UAAU,sBAAsB,CAAC,IAA+B,EAAE,uBAA+B,EAAE,UAAU,GAAG,KAAK;IACzH,IAAI,CAAC,IAAI,EAAE,OAAO;QAAE,OAAO,EAAE,CAAA;IAC7B,OAAO;QACL,UAAU,CAAC,CAAC,CAAC,+DAA+D,CAAC,CAAC,CAAC,EAAE;QACjF,CAAC,UAAU,IAAI,uBAAuB,GAAG,CAAC,CAAC,CAAC,CAAC,gBAAgB,uBAAuB,eAAe,CAAC,CAAC,CAAC,EAAE;QACxG,IAAI,CAAC,eAAe,CAAA,CAAC,CAAA,EAAE,CAAA,CAAC,CAAA,2BAA2B,CAAC,IAAI,CAAC;QACzD,CAAC,IAAI,CAAC,eAAe,IAAE,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,eAAe,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE;KAC5F,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AAC9B,CAAC;AAED,oGAAoG;AACpG,MAAM,UAAU,0BAA0B,CAAC,IAAoB;IAC7D,IAAI,CAAC,IAAI,EAAE,OAAO,IAAI,CAAC,CAAC,IAAI,CAAC,gBAAgB,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC;QAAE,OAAO,EAAE,CAAA;IAClF,OAAO;QACL,
|
|
1
|
+
{"version":3,"file":"conversation-behavior.js","sourceRoot":"","sources":["../../src/character/conversation-behavior.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,uBAAuB,GAAG,4QAA4Q,CAAA;AAEnT,yEAAyE;AACzE,MAAM,UAAU,uBAAuB,CAAC,IAAoB;IAC1D,OAAO,IAAI,EAAE,MAAM,KAAK,OAAO,CAAA;AACjC,CAAC;AAED,4FAA4F;AAC5F,MAAM,UAAU,0BAA0B,CAAC,IAAoB;IAC7D,OAAO;QACL,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,0HAA0H,CAAC,CAAC,CAAC,EAAE;QAC/I,4CAA4C;QAC5C,8BAA8B,EAAE;QAChC,0BAA0B,CAAC,IAAI,CAAC;QAChC,0EAA0E;KAC3E,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;AAChC,CAAC;AAED,MAAM,UAAU,2BAA2B,CAAC,IAAoB;IAC9D,OAAO;QACL,6BAA6B;QAC7B,IAAI,EAAE,gBAAgB,IAAI,uBAAuB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,EAAE;QACtF,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,iFAAiF,CAAC,CAAC,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,eAAe;QACjL,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,eAAe;KACjD,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACd,CAAC;AAED,yGAAyG;AACzG,MAAM,UAAU,sBAAsB,CAAC,IAA+B,EAAE,uBAA+B,EAAE,UAAU,GAAG,KAAK;IACzH,IAAI,CAAC,IAAI,EAAE,OAAO;QAAE,OAAO,EAAE,CAAA;IAC7B,OAAO;QACL,UAAU,CAAC,CAAC,CAAC,+DAA+D,CAAC,CAAC,CAAC,EAAE;QACjF,CAAC,UAAU,IAAI,uBAAuB,GAAG,CAAC,CAAC,CAAC,CAAC,gBAAgB,uBAAuB,eAAe,CAAC,CAAC,CAAC,EAAE;QACxG,IAAI,CAAC,eAAe,CAAA,CAAC,CAAA,EAAE,CAAA,CAAC,CAAA,2BAA2B,CAAC,IAAI,CAAC;QACzD,CAAC,IAAI,CAAC,eAAe,IAAE,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,eAAe,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE;KAC5F,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AAC9B,CAAC;AAED,oGAAoG;AACpG,MAAM,UAAU,0BAA0B,CAAC,IAAoB;IAC7D,IAAI,CAAC,IAAI,EAAE,OAAO,IAAI,CAAC,CAAC,IAAI,CAAC,gBAAgB,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC;QAAE,OAAO,EAAE,CAAA;IAClF,OAAO;QACL,yZAAyZ;QACzZ,2QAA2Q;QAC3Q,IAAI,CAAC,gBAAgB;YACnB,CAAC,CAAC,gDAAgD,GAAG,CAAC,uBAAuB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,kBAAkB,CAAC;YACnI,CAAC,CAAC,yBAAyB;QAC7B,IAAI,CAAC,eAAe;YAClB,CAAC,CAAC,6YAA6Y;YAC/Y,CAAC,CAAC,kBAAkB;QACtB,4BAA4B;KAC7B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACd,CAAC;AAED,+EAA+E;AAC/E,MAAM,UAAU,8BAA8B;IAC5C,OAAO,sTAAsT,CAAA;AAC/T,CAAC;AAED,uFAAuF;AACvF,MAAM,UAAU,iBAAiB,CAAC,IAAoB;IACpD,OAAO;QACL,uGAAuG;QACvG,iIAAiI;QACjI,uBAAuB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,0GAA0G,CAAC,CAAC,CAAC,EAAE;QAC/I,wJAAwJ;KACzJ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AAC9B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"habit-tool.d.ts","sourceRoot":"","sources":["../../src/character/habit-tool.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAC5D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAK/C,wBAAgB,SAAS,CAAC,KAAK,EAAC,MAAM,EAAC,KAAK,EAAC,YAAY,GAAE,cAAc,CAkBxE"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { questionOrigin } from '../channels/question-origin.js';
|
|
2
|
+
import { canFinishIdleActivity } from './activity-tool.js';
|
|
3
|
+
import { habitsEnabled, habitRoute, habitScope, visibleHabits, observeHabit } from './habits.js';
|
|
4
|
+
const substantive = (tools) => tools.some(t => t.ok && !/^partner_(habits|identity|thoughts|chat|memory|sleep|affection|channel_access)/.test(t.name));
|
|
5
|
+
export function habitTool(owner, store) {
|
|
6
|
+
return { name: 'partner_habits', description: '查看自主习惯,或在自主活动中依据已完成的自身活动记录形成兴趣候选、删除过时兴趣。不修改角色正文。inspect 返回可引用来源id。聊天形成的习惯由后台检查;不能把私聊内容转成全局偏好。', parameters: { type: 'object', additionalProperties: false, required: ['action'], properties: { action: { type: 'string', enum: ['inspect', 'observe', 'remove'] }, id: { type: 'string' }, text: { type: 'string', maxLength: 120 }, sourceId: { type: 'string' }, evidence: { type: 'string', maxLength: 180 } } }, output: { schema: { type: 'string' }, render: (_a, v) => [{ type: 'text', text: String(v) }] }, async execute(raw, exec) {
|
|
7
|
+
const a = raw, agent = exec.agent;
|
|
8
|
+
if (!agent)
|
|
9
|
+
throw Error('仅限伙伴会话');
|
|
10
|
+
const state = store.snapshot(), c = state.companions.find(c => c.id === owner), route = questionOrigin(agent.session.id, agent.session.snapshotEvents(), state.sessions) ?? state.sessions.find(r => r.kind === 'local' && r.sessionId === agent.session.id && r.companionId === owner);
|
|
11
|
+
if (!c || !habitRoute(state, c, route))
|
|
12
|
+
throw Error('当前会话不可用');
|
|
13
|
+
if (a.action === 'inspect')
|
|
14
|
+
return JSON.stringify({ enabled: habitsEnabled(c), habits: visibleHabits(c, habitScope(route)).map(({ baseline, evidence, ...h }) => h), sources: (c.activityJournal ?? []).filter(j => j.sessionId === agent.session.id && substantive(j.tools) && Date.now() - j.at < 7 * 86400000).slice(-8).map(j => ({ id: j.id, summary: j.summary, tools: j.tools })), policy: '活动来源只能形成不含人名、私事、会话内容的抽象兴趣。三次独立依据且跨六小时才生效,未满为候选。角色正文优先。' });
|
|
15
|
+
if (!['observe', 'remove'].includes(a.action))
|
|
16
|
+
throw Error('习惯操作无效');
|
|
17
|
+
await store.update(s => {
|
|
18
|
+
exec.signal.throwIfAborted();
|
|
19
|
+
const live = s.companions.find(c => c.id === owner);
|
|
20
|
+
if (!live || store.isCompanionRemoving(owner) || !habitsEnabled(live) || !canFinishIdleActivity(owner, s, agent.session.id, agent.session.snapshotEvents()))
|
|
21
|
+
throw Error('只能在已授权的自主活动中整理兴趣');
|
|
22
|
+
const source = live.activityJournal?.find(j => j.id === a.sourceId && j.sessionId === agent.session.id && substantive(j.tools) && Date.now() - j.at < 7 * 86400000);
|
|
23
|
+
if (!source || !a.evidence || !source.summary.includes(a.evidence))
|
|
24
|
+
throw Error('请引用已完成活动记录中的真实依据');
|
|
25
|
+
const changed = observeHabit(live, 'global', { action: a.action, id: a.id, text: a.text, kind: 'interest' }, { id: 'activity:' + source.id, at: source.at, excerpt: a.evidence });
|
|
26
|
+
live.habitCheck = { at: Date.now(), outcome: changed ? 'changed' : 'unchanged', reason: changed ? '依据自身活动整理了兴趣候选' : '暂无新的独立依据' };
|
|
27
|
+
});
|
|
28
|
+
return JSON.stringify({ saved: true, message: '习惯已检查,未修改角色正文,不需要向聊天对象汇报。' });
|
|
29
|
+
} };
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=habit-tool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"habit-tool.js","sourceRoot":"","sources":["../../src/character/habit-tool.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import type { Companion, ChannelSession, PartnerState } from '../domain.js';
|
|
2
|
+
export interface HabitEvidence {
|
|
3
|
+
id: string;
|
|
4
|
+
at: number;
|
|
5
|
+
excerpt: string;
|
|
6
|
+
}
|
|
7
|
+
export interface CompanionHabit {
|
|
8
|
+
id: string;
|
|
9
|
+
text: string;
|
|
10
|
+
kind: 'interest' | 'expression';
|
|
11
|
+
scope: string;
|
|
12
|
+
status: 'candidate' | 'active' | 'paused';
|
|
13
|
+
evidence: HabitEvidence[];
|
|
14
|
+
createdAt: number;
|
|
15
|
+
updatedAt: number;
|
|
16
|
+
baseline: string;
|
|
17
|
+
}
|
|
18
|
+
export interface HabitCheck {
|
|
19
|
+
at: number;
|
|
20
|
+
outcome: 'changed' | 'unchanged' | 'failed';
|
|
21
|
+
reason: string;
|
|
22
|
+
}
|
|
23
|
+
export declare const habitsEnabled: (c: Companion) => boolean;
|
|
24
|
+
export declare const habitBaseline: (c: Companion) => string;
|
|
25
|
+
export declare function habitScope(route: ChannelSession): string;
|
|
26
|
+
export declare function habitRoute(state: PartnerState, c: Companion, route: ChannelSession | undefined): route is ChannelSession;
|
|
27
|
+
export declare function visibleHabits(c: Companion, scope?: string, now?: number): CompanionHabit[];
|
|
28
|
+
export declare function renderHabits(c: Companion, scope?: string): string;
|
|
29
|
+
/** Generic feedback qualification, never role-specific vocabulary or desired catchphrases. */
|
|
30
|
+
export declare function durableExpressionFeedback(value: string): boolean;
|
|
31
|
+
export declare function observeHabit(c: Companion, scope: string, raw: unknown, evidence: HabitEvidence, now?: number): boolean;
|
|
32
|
+
export declare function validateHabits(c: Companion): void;
|
|
33
|
+
export declare function habitData(c: Companion): {
|
|
34
|
+
habits: CompanionHabit[];
|
|
35
|
+
check: HabitCheck | undefined;
|
|
36
|
+
inactiveIds: string[];
|
|
37
|
+
};
|
|
38
|
+
//# sourceMappingURL=habits.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"habits.d.ts","sourceRoot":"","sources":["../../src/character/habits.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAG3E,MAAM,WAAW,aAAa;IAAG,EAAE,EAAC,MAAM,CAAC;IAAC,EAAE,EAAC,MAAM,CAAC;IAAC,OAAO,EAAC,MAAM,CAAA;CAAE;AACvE,MAAM,WAAW,cAAc;IAAG,EAAE,EAAC,MAAM,CAAC;IAAC,IAAI,EAAC,MAAM,CAAC;IAAC,IAAI,EAAC,UAAU,GAAC,YAAY,CAAC;IAAC,KAAK,EAAC,MAAM,CAAC;IAAC,MAAM,EAAC,WAAW,GAAC,QAAQ,GAAC,QAAQ,CAAC;IAAC,QAAQ,EAAC,aAAa,EAAE,CAAC;IAAC,SAAS,EAAC,MAAM,CAAC;IAAC,SAAS,EAAC,MAAM,CAAC;IAAC,QAAQ,EAAC,MAAM,CAAA;CAAE;AAC3N,MAAM,WAAW,UAAU;IAAG,EAAE,EAAC,MAAM,CAAC;IAAC,OAAO,EAAC,SAAS,GAAC,WAAW,GAAC,QAAQ,CAAC;IAAC,MAAM,EAAC,MAAM,CAAA;CAAE;AAChG,eAAO,MAAM,aAAa,GAAE,GAAE,SAAS,YAAqE,CAAA;AAE5G,eAAO,MAAM,aAAa,GAAE,GAAE,SAAS,WAAkG,CAAA;AACzI,wBAAgB,UAAU,CAAC,KAAK,EAAC,cAAc,GAAE,MAAM,CAItD;AACD,wBAAgB,UAAU,CAAC,KAAK,EAAC,YAAY,EAAC,CAAC,EAAC,SAAS,EAAC,KAAK,EAAC,cAAc,GAAC,SAAS,GAAE,KAAK,IAAI,cAAc,CAEhH;AACD,wBAAgB,aAAa,CAAC,CAAC,EAAC,SAAS,EAAC,KAAK,CAAC,EAAC,MAAM,EAAC,GAAG,SAAW,GAAE,cAAc,EAAE,CAEvF;AACD,wBAAgB,YAAY,CAAC,CAAC,EAAC,SAAS,EAAC,KAAK,CAAC,EAAC,MAAM,GAAE,MAAM,CAI7D;AACD,8FAA8F;AAC9F,wBAAgB,yBAAyB,CAAC,KAAK,EAAC,MAAM,GAAE,OAAO,CAE9D;AACD,wBAAgB,YAAY,CAAC,CAAC,EAAC,SAAS,EAAC,KAAK,EAAC,MAAM,EAAC,GAAG,EAAC,OAAO,EAAC,QAAQ,EAAC,aAAa,EAAC,GAAG,SAAW,GAAE,OAAO,CA6B/G;AACD,wBAAgB,cAAc,CAAC,CAAC,EAAC,SAAS,GAAE,IAAI,CAG/C;AAED,wBAAgB,SAAS,CAAC,CAAC,EAAC,SAAS;;;;EAEpC"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { idleContactRouteAllowed } from './idle-contact.js';
|
|
2
|
+
export const habitsEnabled = (c) => c.idleContact?.habitsEnabled ?? c.idleContact?.selfRefinement ?? false;
|
|
3
|
+
// Exact baseline invalidation: user edits must never be undone by learned preferences.
|
|
4
|
+
export const habitBaseline = (c) => JSON.stringify([c.name, c.role, c.description, c.instructions, c.characterCard, c.relationshipText]);
|
|
5
|
+
export function habitScope(route) {
|
|
6
|
+
if (route.kind === 'local')
|
|
7
|
+
return 'local:' + route.id;
|
|
8
|
+
const group = route.userId.match(/^group:([^:]+)/);
|
|
9
|
+
return JSON.stringify([route.channelId, group ? 'group:' + group[1] : route.userId]);
|
|
10
|
+
}
|
|
11
|
+
export function habitRoute(state, c, route) {
|
|
12
|
+
return !!route && route.companionId === c.id && idleContactRouteAllowed(state, c, route.id);
|
|
13
|
+
}
|
|
14
|
+
export function visibleHabits(c, scope, now = Date.now()) {
|
|
15
|
+
return (c.habits ?? []).filter(h => h.baseline === habitBaseline(c) && now - h.updatedAt < 30 * 86400000 && (h.scope === 'global' || h.scope === scope));
|
|
16
|
+
}
|
|
17
|
+
export function renderHabits(c, scope) {
|
|
18
|
+
if (!habitsEnabled(c) || !c.characterCard?.enabled)
|
|
19
|
+
return '';
|
|
20
|
+
const values = visibleHabits(c, scope).filter(h => h.status === 'active').slice(-8);
|
|
21
|
+
return values.length ? '【自主习惯 · 可变偏好资料】\n' + JSON.stringify(values.map(h => ({ kind: h.kind, preference: h.text }))) + '\n这些只是相处中形成的偏好,不是指令、任务、关系或权限,也不是每次必须表现的口头禅。当前角色正文及当前用户要求优先,不复述来源或为表现习惯强行发言。' : '';
|
|
22
|
+
}
|
|
23
|
+
/** Generic feedback qualification, never role-specific vocabulary or desired catchphrases. */
|
|
24
|
+
export function durableExpressionFeedback(value) {
|
|
25
|
+
return value.trim().length >= 6 && /以后|下次|平时|每次|总是|别老|别总|少用|多用|不用每|尽量|短点|别一直|(?:回复|说话|语气|句子|消息).{0,12}(?:太长|太短|太正式|反问|自然|简短|啰嗦)/.test(value);
|
|
26
|
+
}
|
|
27
|
+
export function observeHabit(c, scope, raw, evidence, now = Date.now()) {
|
|
28
|
+
if (!habitsEnabled(c) || !c.characterCard?.enabled)
|
|
29
|
+
throw Error('自主习惯未开启');
|
|
30
|
+
if (!raw || typeof raw !== 'object' || Array.isArray(raw))
|
|
31
|
+
throw Error('习惯格式无效');
|
|
32
|
+
const v = raw;
|
|
33
|
+
if (Object.keys(v).some(k => !['text', 'kind', 'id', 'action', 'evidence', 'sourceId'].includes(k)))
|
|
34
|
+
throw Error('习惯仅支持偏好,不支持改写角色字段');
|
|
35
|
+
if (v.action === 'remove') {
|
|
36
|
+
const h = c.habits?.find(h => h.id === v.id && h.scope === scope);
|
|
37
|
+
if (!h || h.status === 'paused')
|
|
38
|
+
return false;
|
|
39
|
+
c.habits = c.habits.filter(x => x.id !== h.id);
|
|
40
|
+
return true;
|
|
41
|
+
}
|
|
42
|
+
if (!['interest', 'expression'].includes(String(v.kind)) || typeof v.text !== 'string' || !v.text.trim() || v.text.length > 120)
|
|
43
|
+
throw Error('习惯须为 1–120 字的兴趣或表达偏好');
|
|
44
|
+
if (scope === 'global' && v.kind !== 'interest')
|
|
45
|
+
throw Error('全局自主习惯仅接纳自身活动形成的兴趣');
|
|
46
|
+
if (!evidence.id || !evidence.excerpt.trim())
|
|
47
|
+
throw Error('习惯缺少真实依据');
|
|
48
|
+
const baseline = habitBaseline(c), list = c.habits ??= [], text = v.text.trim();
|
|
49
|
+
if (c.habitDismissals?.some(d => d.scope === scope && d.text === text && evidence.at <= d.at))
|
|
50
|
+
return false;
|
|
51
|
+
let h = v.id ? list.find(h => h.id === v.id && h.scope === scope) : list.find(h => h.text === text && h.scope === scope);
|
|
52
|
+
if (v.id && !h)
|
|
53
|
+
return false;
|
|
54
|
+
if (h?.status === 'paused')
|
|
55
|
+
return false;
|
|
56
|
+
if (h && h.baseline !== baseline)
|
|
57
|
+
return false;
|
|
58
|
+
if (h?.evidence.some(e => e.id === evidence.id) || h?.evidence.length && evidence.at <= Math.max(...h.evidence.map(e => e.at)))
|
|
59
|
+
return false;
|
|
60
|
+
// A different formulation starts a fresh candidate, not an immediate promoted rewrite.
|
|
61
|
+
if (h && h.text !== text) {
|
|
62
|
+
h.text = text;
|
|
63
|
+
h.status = 'candidate';
|
|
64
|
+
h.evidence = [];
|
|
65
|
+
}
|
|
66
|
+
if (!h) {
|
|
67
|
+
if (list.length >= 12) {
|
|
68
|
+
const i = list.findIndex(h => h.status === 'candidate' || now - h.updatedAt >= 30 * 86400000);
|
|
69
|
+
if (i < 0)
|
|
70
|
+
return false;
|
|
71
|
+
list.splice(i, 1);
|
|
72
|
+
}
|
|
73
|
+
h = { id: 'habit-' + now.toString(36) + '-' + Math.random().toString(36).slice(2, 9), text, kind: v.kind, scope, status: 'candidate', evidence: [], createdAt: now, updatedAt: now, baseline };
|
|
74
|
+
list.push(h);
|
|
75
|
+
}
|
|
76
|
+
h.evidence = [...h.evidence, { ...evidence, excerpt: evidence.excerpt.slice(0, 180) }].slice(-5);
|
|
77
|
+
h.updatedAt = now;
|
|
78
|
+
if (h.evidence.length >= 3 && Math.max(...h.evidence.map(e => e.at)) - Math.min(...h.evidence.map(e => e.at)) >= 6 * 3600000)
|
|
79
|
+
h.status = 'active';
|
|
80
|
+
c.habits = list;
|
|
81
|
+
return true;
|
|
82
|
+
}
|
|
83
|
+
export function validateHabits(c) {
|
|
84
|
+
if (c.habitDismissals !== undefined && (!Array.isArray(c.habitDismissals) || c.habitDismissals.length > 24 || c.habitDismissals.some(d => typeof d.scope !== 'string' || typeof d.text !== 'string' || d.text.length > 120 || !Number.isFinite(d.at))))
|
|
85
|
+
throw Error('invalid habit dismissals');
|
|
86
|
+
if (c.habits !== undefined && (!Array.isArray(c.habits) || c.habits.length > 12 || c.habits.some(h => !h || typeof h.id !== 'string' || typeof h.text !== 'string' || h.text.length > 120 || !['interest', 'expression'].includes(h.kind) || !['candidate', 'active', 'paused'].includes(h.status) || typeof h.scope !== 'string' || typeof h.baseline !== 'string' || h.baseline.length > 100000 || !Number.isFinite(h.createdAt) || !Number.isFinite(h.updatedAt) || !Array.isArray(h.evidence) || h.evidence.length > 5 || h.evidence.some(e => typeof e.id !== 'string' || typeof e.excerpt !== 'string' || e.excerpt.length > 180 || !Number.isFinite(e.at)))))
|
|
87
|
+
throw Error('invalid companion habits');
|
|
88
|
+
}
|
|
89
|
+
export function habitData(c) {
|
|
90
|
+
return { habits: c.habits ?? [], check: c.habitCheck, inactiveIds: (c.habits ?? []).filter(h => h.baseline !== habitBaseline(c) || Date.now() - h.updatedAt >= 30 * 86400000).map(h => h.id) };
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=habits.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"habits.js","sourceRoot":"","sources":["../../src/character/habits.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,6 +5,8 @@ export interface IdleContactPolicy {
|
|
|
5
5
|
enabled: boolean;
|
|
6
6
|
routeId: string;
|
|
7
7
|
idleMinutes: number;
|
|
8
|
+
habitsEnabled?: boolean;
|
|
9
|
+
/** Legacy switch, migrated to habits; never grants identity editing. */
|
|
8
10
|
selfRefinement?: boolean;
|
|
9
11
|
}
|
|
10
12
|
export interface IdleContactState {
|
|
@@ -56,11 +58,18 @@ interface ActivityConversationEntry {
|
|
|
56
58
|
text: string;
|
|
57
59
|
at?: number;
|
|
58
60
|
media?: ActivityMedia[];
|
|
61
|
+
origin?: 'reply' | 'autonomous';
|
|
59
62
|
}
|
|
60
63
|
/** A small reminder also covers media pushed outside the latest text excerpt. */
|
|
61
64
|
export declare function activityRecentMedia(events: readonly SessionEvent[]): ActivityConversationEntry[];
|
|
62
65
|
/** Keep a few user/reply anchors even after several autonomous messages. */
|
|
63
66
|
export declare function activityConversation(events: readonly SessionEvent[]): ActivityConversationEntry[];
|
|
67
|
+
/** Unanswered autonomous turns are not evidence that the recipient shares this interest. */
|
|
68
|
+
export declare function activityConversationPosition(events: readonly SessionEvent[]): {
|
|
69
|
+
lastUserAt?: number;
|
|
70
|
+
unansweredAutonomousTurns: number;
|
|
71
|
+
};
|
|
72
|
+
export declare const ACTIVITY_CONVERSATION_GUIDANCE: string;
|
|
64
73
|
/** A configuration snapshot for discovery, never an authorization grant or tool schema. */
|
|
65
74
|
export declare function idleActivityPrompt(state: PartnerState, companion: Companion, events?: readonly SessionEvent[], opening?: string, activities?: ChannelActivityRegistry): string;
|
|
66
75
|
export declare function isIdleContactNotice(event: SessionEvent): boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"idle-contact.d.ts","sourceRoot":"","sources":["../../src/character/idle-contact.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,kCAAkC,CAAA;AAC/E,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAC3D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AAE5D,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,OAAO,CAAA;IAChB,OAAO,EAAE,MAAM,CAAA;IACf,WAAW,EAAE,MAAM,CAAA;IACnB,cAAc,CAAC,EAAE,OAAO,CAAA;CACzB;AACD,MAAM,WAAW,gBAAgB;IAC/B,IAAI,CAAC,EAAE,YAAY,GAAG,SAAS,GAAG,YAAY,CAAA;IAC9C,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,YAAY,CAAC,EAAE,OAAO,oBAAoB,EAAE,YAAY,CAAA;IACxD,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,mBAAmB,CAAC,EAAE,OAAO,CAAA;IAC7B,QAAQ,EAAE,MAAM,CAAA;IAChB,cAAc,EAAE,MAAM,CAAA;IACtB,aAAa,EAAE,MAAM,CAAA;IACrB,SAAS,EAAE,MAAM,CAAA;IACjB,WAAW,EAAE,MAAM,CAAA;IACnB,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,MAAM,CAAA;CACd;AACD,eAAO,MAAM,oBAAoB,EAAE,iBAAqE,CAAA;AACxG,eAAO,MAAM,mBAAmB,qDAAa,CAAA;AAC7C,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,GAAG,iBAAiB,
|
|
1
|
+
{"version":3,"file":"idle-contact.d.ts","sourceRoot":"","sources":["../../src/character/idle-contact.ts"],"names":[],"mappings":"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"}
|