@lemoncat7/dsh-partner 2.23.26 → 2.23.55
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 +6 -2
- package/docs/channel-activities.md +56 -0
- package/docs/releases/2.23.27.md +7 -0
- package/docs/releases/2.23.28.md +11 -0
- package/docs/releases/2.23.29.md +10 -0
- package/docs/releases/2.23.30.md +10 -0
- package/docs/releases/2.23.31.md +11 -0
- package/docs/releases/2.23.32.md +11 -0
- package/docs/releases/2.23.33.md +11 -0
- package/docs/releases/2.23.34.md +9 -0
- package/docs/releases/2.23.35.md +3 -0
- package/docs/releases/2.23.36.md +11 -0
- package/docs/releases/2.23.37.md +3 -0
- package/docs/releases/2.23.38.md +8 -0
- package/docs/releases/2.23.39.md +5 -0
- package/docs/releases/2.23.40.md +5 -0
- package/docs/releases/2.23.41.md +9 -0
- package/docs/releases/2.23.42.md +11 -0
- package/docs/releases/2.23.43.md +13 -0
- package/docs/releases/2.23.44.md +13 -0
- package/docs/releases/2.23.45.md +11 -0
- package/docs/releases/2.23.46.md +5 -0
- package/docs/releases/2.23.47.md +5 -0
- package/docs/releases/2.23.48.md +6 -0
- package/docs/releases/2.23.49.md +6 -0
- package/docs/releases/2.23.50.md +6 -0
- package/docs/releases/2.23.51.md +5 -0
- package/docs/releases/2.23.52.md +7 -0
- package/docs/releases/2.23.53.md +5 -0
- package/docs/releases/2.23.54.md +7 -0
- package/docs/tool-entry-compatibility.md +2 -2
- package/lib/agent-runtime.d.ts +4 -2
- package/lib/agent-runtime.d.ts.map +1 -1
- package/lib/agent-runtime.js +166 -89
- package/lib/agent-runtime.js.map +1 -1
- package/lib/api.d.ts.map +1 -1
- package/lib/api.js +23 -2
- package/lib/api.js.map +1 -1
- package/lib/attachments/reply-document.d.ts +5 -0
- package/lib/attachments/reply-document.d.ts.map +1 -1
- package/lib/attachments/reply-document.js +7 -3
- package/lib/attachments/reply-document.js.map +1 -1
- package/lib/attachments/tool.d.ts +1 -1
- package/lib/attachments/tool.d.ts.map +1 -1
- package/lib/attachments/tool.js +2 -2
- package/lib/attachments/tool.js.map +1 -1
- package/lib/channels/activity-defaults.d.ts +4 -0
- package/lib/channels/activity-defaults.d.ts.map +1 -0
- package/lib/channels/activity-defaults.js +13 -0
- package/lib/channels/activity-defaults.js.map +1 -0
- package/lib/channels/activity-registry.d.ts +37 -0
- package/lib/channels/activity-registry.d.ts.map +1 -0
- package/lib/channels/activity-registry.js +53 -0
- package/lib/channels/activity-registry.js.map +1 -0
- package/lib/channels/authored-progress.d.ts +2 -1
- package/lib/channels/authored-progress.d.ts.map +1 -1
- package/lib/channels/authored-progress.js +4 -2
- package/lib/channels/authored-progress.js.map +1 -1
- package/lib/channels/delivery-policy.js +4 -2
- package/lib/channels/delivery-policy.js.map +1 -1
- package/lib/channels/manager.d.ts +1 -0
- package/lib/channels/manager.d.ts.map +1 -1
- package/lib/channels/manager.js +42 -5
- package/lib/channels/manager.js.map +1 -1
- package/lib/channels/qq/action-catalog.js +2 -2
- package/lib/channels/qq/action-catalog.js.map +1 -1
- package/lib/channels/qq/actions.d.ts +2 -1
- package/lib/channels/qq/actions.d.ts.map +1 -1
- package/lib/channels/qq/actions.js +14 -2
- package/lib/channels/qq/actions.js.map +1 -1
- package/lib/channels/qq/activity-provider.d.ts +4 -0
- package/lib/channels/qq/activity-provider.d.ts.map +1 -0
- package/lib/channels/qq/activity-provider.js +21 -0
- package/lib/channels/qq/activity-provider.js.map +1 -0
- 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 +3 -3
- package/lib/channels/qq/authority.js.map +1 -1
- package/lib/channels/qq/connection.d.ts +5 -0
- package/lib/channels/qq/connection.d.ts.map +1 -1
- package/lib/channels/qq/connection.js +12 -2
- package/lib/channels/qq/connection.js.map +1 -1
- package/lib/channels/qq/message.d.ts.map +1 -1
- package/lib/channels/qq/message.js +11 -1
- package/lib/channels/qq/message.js.map +1 -1
- package/lib/channels/qq/reply-tool.d.ts.map +1 -1
- package/lib/channels/qq/reply-tool.js +62 -6
- package/lib/channels/qq/reply-tool.js.map +1 -1
- package/lib/channels/weixin/connect.d.ts.map +1 -1
- package/lib/character/activity-journal.d.ts +20 -0
- package/lib/character/activity-journal.d.ts.map +1 -0
- package/lib/character/activity-journal.js +78 -0
- package/lib/character/activity-journal.js.map +1 -0
- package/lib/character/activity-plan.d.ts +27 -0
- package/lib/character/activity-plan.d.ts.map +1 -0
- package/lib/character/activity-plan.js +47 -0
- package/lib/character/activity-plan.js.map +1 -0
- package/lib/character/activity-tool.d.ts.map +1 -1
- package/lib/character/activity-tool.js +24 -4
- package/lib/character/activity-tool.js.map +1 -1
- package/lib/character/affection-tool.d.ts +4 -0
- package/lib/character/affection-tool.d.ts.map +1 -0
- package/lib/character/affection-tool.js +61 -0
- package/lib/character/affection-tool.js.map +1 -0
- package/lib/character/affection.d.ts +43 -17
- package/lib/character/affection.d.ts.map +1 -1
- package/lib/character/affection.js +28 -21
- package/lib/character/affection.js.map +1 -1
- package/lib/character/background-context.d.ts +6 -0
- package/lib/character/background-context.d.ts.map +1 -0
- package/lib/character/background-context.js +29 -0
- package/lib/character/background-context.js.map +1 -0
- package/lib/character/conversation-behavior.d.ts +2 -0
- package/lib/character/conversation-behavior.d.ts.map +1 -1
- package/lib/character/conversation-behavior.js +16 -11
- package/lib/character/conversation-behavior.js.map +1 -1
- package/lib/character/domain.d.ts +10 -0
- package/lib/character/domain.d.ts.map +1 -1
- package/lib/character/domain.js +7 -0
- package/lib/character/domain.js.map +1 -1
- package/lib/character/idle-contact.d.ts +24 -7
- package/lib/character/idle-contact.d.ts.map +1 -1
- package/lib/character/idle-contact.js +60 -50
- package/lib/character/idle-contact.js.map +1 -1
- package/lib/character/interaction-review.d.ts +34 -0
- package/lib/character/interaction-review.d.ts.map +1 -0
- package/lib/character/interaction-review.js +121 -0
- package/lib/character/interaction-review.js.map +1 -0
- package/lib/character/post-reply.d.ts +1 -3
- package/lib/character/post-reply.d.ts.map +1 -1
- package/lib/character/post-reply.js +15 -18
- package/lib/character/post-reply.js.map +1 -1
- package/lib/character/prompt-projection.d.ts +1 -0
- package/lib/character/prompt-projection.d.ts.map +1 -1
- package/lib/character/prompt-projection.js +8 -1
- package/lib/character/prompt-projection.js.map +1 -1
- package/lib/character/thought-tool.d.ts +4 -0
- package/lib/character/thought-tool.d.ts.map +1 -0
- package/lib/character/thought-tool.js +99 -0
- package/lib/character/thought-tool.js.map +1 -0
- package/lib/character/thoughts.d.ts +42 -0
- package/lib/character/thoughts.d.ts.map +1 -0
- package/lib/character/thoughts.js +91 -0
- package/lib/character/thoughts.js.map +1 -0
- package/lib/chat/action-obligation.d.ts +17 -0
- package/lib/chat/action-obligation.d.ts.map +1 -0
- package/lib/chat/action-obligation.js +109 -0
- package/lib/chat/action-obligation.js.map +1 -0
- package/lib/chat/agreements.d.ts +21 -0
- package/lib/chat/agreements.d.ts.map +1 -0
- package/lib/chat/agreements.js +120 -0
- package/lib/chat/agreements.js.map +1 -0
- package/lib/chat/context-selection.d.ts.map +1 -1
- package/lib/chat/context-selection.js +5 -2
- package/lib/chat/context-selection.js.map +1 -1
- package/lib/chat/conversation.d.ts.map +1 -1
- package/lib/chat/conversation.js +2 -0
- package/lib/chat/conversation.js.map +1 -1
- package/lib/chat/intermediate-delivery.d.ts +7 -0
- package/lib/chat/intermediate-delivery.d.ts.map +1 -0
- package/lib/chat/intermediate-delivery.js +14 -0
- package/lib/chat/intermediate-delivery.js.map +1 -0
- package/lib/chat/live-speech.d.ts +18 -0
- package/lib/chat/live-speech.d.ts.map +1 -0
- package/lib/chat/live-speech.js +136 -0
- package/lib/chat/live-speech.js.map +1 -0
- package/lib/chat/protocol.d.ts +6 -0
- package/lib/chat/protocol.d.ts.map +1 -1
- package/lib/chat/reply-completion.d.ts +1 -1
- package/lib/chat/reply-completion.d.ts.map +1 -1
- package/lib/chat/reply-completion.js +16 -9
- package/lib/chat/reply-completion.js.map +1 -1
- package/lib/chat/reply-continuity.js +1 -1
- package/lib/chat/reply-continuity.js.map +1 -1
- package/lib/chat/tools.d.ts.map +1 -1
- package/lib/chat/tools.js +54 -25
- package/lib/chat/tools.js.map +1 -1
- package/lib/chat/work-expression.d.ts.map +1 -1
- package/lib/chat/work-expression.js +2 -0
- package/lib/chat/work-expression.js.map +1 -1
- package/lib/client-api.d.ts +5 -0
- package/lib/client-api.d.ts.map +1 -1
- package/lib/client-api.js.map +1 -1
- package/lib/client.js +7888 -11389
- package/lib/client.js.map +4 -4
- package/lib/collaboration/composition.d.ts.map +1 -1
- package/lib/collaboration/composition.js +6 -2
- package/lib/collaboration/composition.js.map +1 -1
- package/lib/collaboration/tool-discovery.d.ts +2 -1
- package/lib/collaboration/tool-discovery.d.ts.map +1 -1
- package/lib/collaboration/tool-discovery.js +38 -24
- 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 +32 -6
- package/lib/companions/identity-tool.js.map +1 -1
- package/lib/companions/identity.d.ts.map +1 -1
- package/lib/companions/identity.js +10 -0
- package/lib/companions/identity.js.map +1 -1
- package/lib/companions/persona-refinement.d.ts +11 -0
- package/lib/companions/persona-refinement.d.ts.map +1 -0
- package/lib/companions/persona-refinement.js +49 -0
- package/lib/companions/persona-refinement.js.map +1 -0
- package/lib/domain.d.ts +6 -0
- package/lib/domain.d.ts.map +1 -1
- package/lib/domain.js.map +1 -1
- package/lib/execution/agent-support.d.ts.map +1 -1
- package/lib/execution/agent-support.js +3 -1
- package/lib/execution/agent-support.js.map +1 -1
- package/lib/execution/reply-progress.d.ts +1 -0
- package/lib/execution/reply-progress.d.ts.map +1 -1
- package/lib/execution/reply-progress.js +2 -2
- package/lib/execution/reply-progress.js.map +1 -1
- package/lib/execution/task-preamble.d.ts +5 -2
- package/lib/execution/task-preamble.d.ts.map +1 -1
- package/lib/execution/task-preamble.js +25 -6
- package/lib/execution/task-preamble.js.map +1 -1
- package/lib/execution/work-tool.d.ts.map +1 -1
- package/lib/execution/work-tool.js +3 -2
- package/lib/execution/work-tool.js.map +1 -1
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +9 -3
- package/lib/index.js.map +1 -1
- package/lib/memory-domain.d.ts +5 -0
- package/lib/memory-domain.d.ts.map +1 -1
- package/lib/memory-reflection.d.ts +5 -1
- package/lib/memory-reflection.d.ts.map +1 -1
- package/lib/memory-reflection.js +21 -3
- package/lib/memory-reflection.js.map +1 -1
- package/lib/persona/context.d.ts +4 -0
- package/lib/persona/context.d.ts.map +1 -0
- package/lib/persona/context.js +12 -0
- package/lib/persona/context.js.map +1 -0
- package/lib/persona/domain.d.ts +2 -1
- package/lib/persona/domain.d.ts.map +1 -1
- package/lib/persona/domain.js +11 -3
- package/lib/persona/domain.js.map +1 -1
- package/lib/persona/service.js +2 -2
- package/lib/persona/service.js.map +1 -1
- package/lib/persona/store.js +7 -7
- package/lib/persona/store.js.map +1 -1
- package/lib/persona/types.d.ts +3 -1
- package/lib/persona/types.d.ts.map +1 -1
- package/lib/store.d.ts.map +1 -1
- package/lib/store.js +25 -0
- package/lib/store.js.map +1 -1
- package/lib/ui/affection-panel.d.ts.map +1 -1
- package/lib/ui/affection-panel.js +2 -2
- package/lib/ui/affection-panel.js.map +1 -1
- package/lib/ui/capability-editor.js +1 -1
- package/lib/ui/capability-editor.js.map +1 -1
- package/lib/ui/character-editor.d.ts +1 -1
- package/lib/ui/character-editor.d.ts.map +1 -1
- package/lib/ui/character-editor.js +7 -4
- package/lib/ui/character-editor.js.map +1 -1
- package/lib/ui/companion-vitals.js +1 -1
- package/lib/ui/companion-vitals.js.map +1 -1
- package/lib/ui/exclusive-prompt-toggle.d.ts +5 -0
- package/lib/ui/exclusive-prompt-toggle.d.ts.map +1 -0
- package/lib/ui/exclusive-prompt-toggle.js +7 -0
- package/lib/ui/exclusive-prompt-toggle.js.map +1 -0
- package/lib/ui/identity-editor.d.ts.map +1 -1
- package/lib/ui/identity-editor.js +8 -1
- 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 -1
- package/lib/ui/idle-contact-editor.js.map +1 -1
- package/lib/ui/memory/persona-view.js +1 -1
- package/lib/ui/memory/persona-view.js.map +1 -1
- package/lib/ui/push-draft.d.ts +1 -1
- package/lib/ui/qq-capability-settings.js +1 -1
- package/lib/ui/qq-capability-settings.js.map +1 -1
- package/lib/ui/thoughts-panel.d.ts +4 -0
- package/lib/ui/thoughts-panel.d.ts.map +1 -0
- package/lib/ui/thoughts-panel.js +51 -0
- package/lib/ui/thoughts-panel.js.map +1 -0
- package/package.json +35 -2
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { record } from '../core/validation.js';
|
|
2
|
+
import { affectionTurnEligible } from './affection-context.js';
|
|
3
|
+
import { AFFECTION_DELTAS, AFFECTION_GUIDANCE, adjustAffection, affectionEnabled, affectionProgress } from './affection.js';
|
|
4
|
+
function currentTurn(events) {
|
|
5
|
+
let start = -1;
|
|
6
|
+
for (let i = events.length - 1; i >= 0; i--)
|
|
7
|
+
if (events[i].type === 'turn/start') {
|
|
8
|
+
start = i;
|
|
9
|
+
break;
|
|
10
|
+
}
|
|
11
|
+
return events.slice(start + 1);
|
|
12
|
+
}
|
|
13
|
+
function toolProgress(state) {
|
|
14
|
+
const { history, ...progress } = affectionProgress(state);
|
|
15
|
+
return { ...progress, recentChanges: history.slice(-3).map(({ at, delta, reason }) => ({ at, delta, reason: reason.slice(0, 150) })) };
|
|
16
|
+
}
|
|
17
|
+
export function affectionTool(owner, store) {
|
|
18
|
+
return {
|
|
19
|
+
name: 'partner_affection', description: `根据当前真实互动记录自己的好感变化,不自动报分或发送消息。${AFFECTION_GUIDANCE}原因须符合当前人格和事实,不能因离线、正常拒绝或工具失败扣分。每条用户消息只记一次,没有时间或每日加减分配额。没有变化时无需调用 adjust(该操作只接受非零变化)。inspect 查看当前进度;adjust 提交当前用户原文 evidence 与 reason。系统活动、陌生 QQ 账号不能改分。`,
|
|
20
|
+
parameters: { type: 'object', additionalProperties: false, required: ['action'], properties: { action: { type: 'string', enum: ['inspect', 'adjust'] }, delta: { type: 'integer', enum: [...AFFECTION_DELTAS] }, reason: { type: 'string', maxLength: 300 }, evidence: { type: 'string', maxLength: 300 } } },
|
|
21
|
+
output: { schema: { type: 'object' }, render: (_args, value) => [{ type: 'text', text: JSON.stringify(value) }] },
|
|
22
|
+
presentCall: () => ({ card: 'generic', title: '记录相处感受' }),
|
|
23
|
+
async execute(raw, exec) {
|
|
24
|
+
if (!exec.agent)
|
|
25
|
+
throw Error('只能在伙伴聊天中使用');
|
|
26
|
+
const input = record(raw), agent = exec.agent;
|
|
27
|
+
const origin = currentTurn(agent.session.snapshotEvents()).filter(e => e.type === 'user/message' && e.data.source.kind === 'user').at(-1);
|
|
28
|
+
if (origin?.type !== 'user/message')
|
|
29
|
+
throw Error('当前没有可记录的用户互动');
|
|
30
|
+
let result;
|
|
31
|
+
const evaluate = (state) => {
|
|
32
|
+
exec.signal.throwIfAborted();
|
|
33
|
+
const companion = state.companions.find(c => c.id === owner), events = currentTurn(agent.session.snapshotEvents());
|
|
34
|
+
if (!companion || store.isCompanionRemoving(owner) || !affectionEnabled(companion))
|
|
35
|
+
throw Error('好感度不可用或已暂停');
|
|
36
|
+
if (!affectionTurnEligible(state, owner, agent.session.id, events))
|
|
37
|
+
throw Error('当前会话不能修改此伙伴好感度');
|
|
38
|
+
const latest = events.filter(e => e.type === 'user/message' && e.data.source.kind === 'user').at(-1);
|
|
39
|
+
if (latest?.type !== 'user/message' || latest.data.id !== origin.data.id)
|
|
40
|
+
throw Error('用户消息已变化,请重新判断');
|
|
41
|
+
if (input.action === 'inspect') {
|
|
42
|
+
result = toolProgress(companion.affection);
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
if (input.action !== 'adjust')
|
|
46
|
+
throw Error('好感度 action 无效');
|
|
47
|
+
const text = latest.data.content.flatMap(b => b.type === 'text' ? [b.text] : []).join('\n');
|
|
48
|
+
if (typeof input.evidence !== 'string' || !input.evidence.trim() || !text.includes(input.evidence.trim()))
|
|
49
|
+
throw Error('依据必须是当前用户消息的原文,不能引用自己的话或编造互动');
|
|
50
|
+
const applied = adjustAffection(companion, `${agent.session.id}:${latest.data.id}`, Date.now(), input.delta, input.reason, input.evidence);
|
|
51
|
+
result = { applied, ...toolProgress(companion.affection), ...(!applied ? { note: '重复消息或已到分数边界,本次保持不变;不要为加减分重试。' } : {}) };
|
|
52
|
+
};
|
|
53
|
+
if (input.action === 'inspect')
|
|
54
|
+
evaluate(store.snapshot());
|
|
55
|
+
else
|
|
56
|
+
await store.update(evaluate);
|
|
57
|
+
return result;
|
|
58
|
+
},
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=affection-tool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"affection-tool.js","sourceRoot":"","sources":["../../src/character/affection-tool.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,47 +1,73 @@
|
|
|
1
1
|
import type { Companion } from '../domain.js';
|
|
2
|
-
|
|
2
|
+
export interface AffectionChange {
|
|
3
|
+
at: number;
|
|
4
|
+
turnId: string;
|
|
5
|
+
delta: number;
|
|
6
|
+
score: number;
|
|
7
|
+
reason: string;
|
|
8
|
+
evidence: string;
|
|
9
|
+
}
|
|
10
|
+
/** Shared by eligible accounts; history is bounded and never injected wholesale. */
|
|
3
11
|
export interface AffectionState {
|
|
4
12
|
score: number;
|
|
5
13
|
updatedAt: number;
|
|
6
14
|
lastAwardAt: number;
|
|
7
15
|
lastTurnId: string;
|
|
16
|
+
lastPositiveAt?: number;
|
|
17
|
+
history?: AffectionChange[];
|
|
8
18
|
}
|
|
9
|
-
export declare const AFFECTION_INITIAL =
|
|
10
|
-
export declare const
|
|
19
|
+
export declare const AFFECTION_INITIAL = 0;
|
|
20
|
+
export declare const AFFECTION_DELTAS: readonly [-5, -4, -3, -2, -1, 1, 2, 3, 4, 5];
|
|
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";
|
|
11
22
|
export declare const AFFECTION_LEVELS: readonly [{
|
|
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
|
+
}, {
|
|
12
38
|
readonly min: 0;
|
|
13
|
-
readonly name: "
|
|
14
|
-
readonly behavior: "自然接话,有具体话题时主动分享。";
|
|
39
|
+
readonly name: "初识";
|
|
15
40
|
}, {
|
|
16
|
-
readonly min:
|
|
41
|
+
readonly min: 10;
|
|
17
42
|
readonly name: "熟悉";
|
|
18
|
-
readonly behavior: "更愿意分享兴趣、日常感想和轻松的玩笑。";
|
|
19
43
|
}, {
|
|
20
|
-
readonly min:
|
|
44
|
+
readonly min: 25;
|
|
21
45
|
readonly name: "亲近";
|
|
22
|
-
readonly behavior: "更愿意主动找话题、分享发现,按语境使用表情。";
|
|
23
46
|
}, {
|
|
24
|
-
readonly min:
|
|
47
|
+
readonly min: 45;
|
|
25
48
|
readonly name: "信赖";
|
|
26
|
-
readonly behavior: "更愿意延续共同话题、主动关心,合适时使用已开启的语音。";
|
|
27
49
|
}, {
|
|
28
|
-
readonly min:
|
|
50
|
+
readonly min: 70;
|
|
29
51
|
readonly name: "默契";
|
|
30
|
-
|
|
52
|
+
}, {
|
|
53
|
+
readonly min: 90;
|
|
54
|
+
readonly name: "深厚";
|
|
31
55
|
}];
|
|
32
56
|
export declare function affectionEnabled(companion: Pick<Companion, 'characterCard'>): boolean;
|
|
33
57
|
export declare function affectionProgress(state?: AffectionState): {
|
|
34
58
|
score: number;
|
|
35
59
|
level: number;
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
nextName: "亲近" | "
|
|
60
|
+
totalLevels: 11;
|
|
61
|
+
name: "亲近" | "反感" | "抗拒" | "戒备" | "生疏" | "疏离" | "初识" | "熟悉" | "信赖" | "默契" | "深厚";
|
|
62
|
+
nextName: "亲近" | "反感" | "抗拒" | "戒备" | "生疏" | "疏离" | "初识" | "熟悉" | "信赖" | "默契" | "深厚" | null;
|
|
39
63
|
nextAt: number;
|
|
40
64
|
remaining: number;
|
|
41
65
|
multiplier: number;
|
|
42
66
|
updatedAt: number;
|
|
67
|
+
history: AffectionChange[];
|
|
43
68
|
};
|
|
44
|
-
|
|
69
|
+
/** No time/chat-count award: a grounded interaction may change the relationship. */
|
|
70
|
+
export declare function adjustAffection(companion: Companion, turnId: string, at: number, delta: number, reason: string, evidence: string): boolean;
|
|
45
71
|
export declare function affectionMultiplier(companion: Companion, eligible: boolean): number;
|
|
46
72
|
export declare function renderAffection(companion: Companion, eligible: boolean): string;
|
|
47
73
|
//# 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,oFAAoF;AACpF,MAAM,WAAW,cAAc;IAAG,KAAK,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE;
|
|
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,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAKnB,CAAA;AACV,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,EAAC,eAAe,CAAC,GAAG,OAAO,CAEpF;AACD,wBAAgB,iBAAiB,CAAC,KAAK,CAAC,EAAE,cAAc;;;;;;;;;;;EAKvD;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,mBAAmB,CAAC,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,GAAG,MAAM,CAEnF;AACD,wBAAgB,eAAe,CAAC,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,GAAG,MAAM,CAI/E"}
|
|
@@ -1,32 +1,39 @@
|
|
|
1
|
-
export const AFFECTION_INITIAL =
|
|
2
|
-
export const
|
|
1
|
+
export const AFFECTION_INITIAL = 0;
|
|
2
|
+
export const AFFECTION_DELTAS = [-5, -4, -3, -2, -1, 1, 2, 3, 4, 5];
|
|
3
|
+
export const AFFECTION_GUIDANCE = '按实际相处感受加减:轻微触动 ±1,明确的关心、理解、信任或失望 ±2~3,重要的支持、和解或真实伤害 ±4~5。结合近期相处和当前人格判断这句话带来的感受,不孤立要求用户明确说出关心或信任。日常认真倾听、分享心情、相互接梗、主动陪伴都可以带来轻微亲近;角色互动中真实投入的关心也算,但虚构剧情事件本身不直接计分。轻微不快不等于长期信任下降,不为制造浮动随机扣分。不必等重大事件,也不因每条消息存在就加分。没有变化时记 0;重复索分、机械重复同一句话不算新依据。';
|
|
3
4
|
export const AFFECTION_LEVELS = [
|
|
4
|
-
{ min:
|
|
5
|
-
{ min:
|
|
6
|
-
{ min:
|
|
7
|
-
{ min:
|
|
8
|
-
{ min: 80, name: '默契', behavior: '更自然地表达牵挂、分享心事,主动使用适合当前相处的已授权互动能力。' },
|
|
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
9
|
];
|
|
10
10
|
export function affectionEnabled(companion) {
|
|
11
11
|
return companion.characterCard?.enabled === true && companion.characterCard.affectionEnabled !== false;
|
|
12
12
|
}
|
|
13
13
|
export function affectionProgress(state) {
|
|
14
|
-
const score = Number.isFinite(state?.score) ? Math.max(
|
|
15
|
-
const index =
|
|
16
|
-
|
|
17
|
-
|
|
14
|
+
const score = Number.isFinite(state?.score) ? Math.max(-100, Math.min(100, Math.round(state.score))) : AFFECTION_INITIAL;
|
|
15
|
+
const index = AFFECTION_LEVELS.filter(level => score >= level.min).length - 1, level = AFFECTION_LEVELS[index], next = AFFECTION_LEVELS[index + 1];
|
|
16
|
+
return { score, level: index + 1, totalLevels: AFFECTION_LEVELS.length, name: level.name, nextName: next?.name ?? null, nextAt: next?.min ?? 100, remaining: next ? next.min - score : 0,
|
|
17
|
+
multiplier: score < 0 ? 1 + score / 200 : 1 + score / 100, updatedAt: state?.updatedAt ?? 0, history: state?.history ?? [] };
|
|
18
18
|
}
|
|
19
|
-
|
|
20
|
-
|
|
19
|
+
/** No time/chat-count award: a grounded interaction may change the relationship. */
|
|
20
|
+
export function adjustAffection(companion, turnId, at, delta, reason, evidence) {
|
|
21
|
+
if (!affectionEnabled(companion))
|
|
22
|
+
throw Error('好感度已暂停');
|
|
23
|
+
if (!turnId || !Number.isFinite(at) || at <= 0 || !AFFECTION_DELTAS.includes(delta))
|
|
24
|
+
throw Error('好感度变化参数无效');
|
|
25
|
+
if (typeof reason !== 'string' || !reason.trim() || reason.length > 300 || typeof evidence !== 'string' || !evidence.trim() || evidence.length > 300)
|
|
26
|
+
throw Error('变化需要具体原因和当前消息依据(各最多 300 字)');
|
|
27
|
+
const previous = companion.affection, history = previous?.history ?? [];
|
|
28
|
+
if (previous?.lastTurnId === turnId || history.some(h => h.turnId === turnId))
|
|
21
29
|
return false;
|
|
22
|
-
|
|
23
|
-
|
|
30
|
+
if (previous && at < previous.updatedAt)
|
|
31
|
+
throw Error('不能提交过期变化');
|
|
32
|
+
const old = affectionProgress(previous).score, score = Math.max(-100, Math.min(100, old + delta));
|
|
33
|
+
if (score === old)
|
|
24
34
|
return false;
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
return false;
|
|
28
|
-
companion.affection = { score: score + 1, updatedAt: at, lastAwardAt: at, lastTurnId: turnId };
|
|
29
|
-
// Progress is runtime state; do not invalidate identity drafts or rebuild tools.
|
|
35
|
+
companion.affection = { score, updatedAt: at, lastAwardAt: delta > 0 ? at : previous?.lastAwardAt ?? 0, lastPositiveAt: delta > 0 ? at : previous?.lastPositiveAt ?? previous?.lastAwardAt ?? 0, lastTurnId: turnId,
|
|
36
|
+
history: [...history, { at, turnId, delta: score - old, score, reason: reason.trim(), evidence: evidence.trim() }].slice(-40) };
|
|
30
37
|
return true;
|
|
31
38
|
}
|
|
32
39
|
export function affectionMultiplier(companion, eligible) {
|
|
@@ -36,6 +43,6 @@ export function renderAffection(companion, eligible) {
|
|
|
36
43
|
if (!eligible || !affectionEnabled(companion))
|
|
37
44
|
return '';
|
|
38
45
|
const p = affectionProgress(companion.affection);
|
|
39
|
-
return `【当前共同好感度】${p.score}
|
|
46
|
+
return `【当前共同好感度】${p.score}(−100~100)· 阶段 ${p.level}/${p.totalLevels} ${p.name}。\n好感可以增长、降低或不变;聊天次数、在线时长、完成工具任务不自动加分。按当前人格判断真实互动是否改变亲近或信任:被理解、尊重、认真相处可小幅增加;真实伤害、反复越过已明确的边界可减少。${AFFECTION_GUIDANCE}开启记忆学习时后台会随新互动检查,不需要为了评分打断聊天;你有明确感受需主动记录时,查询并调用 partner_affection,引用当前用户消息原文并简述具体原因;每条消息最多一次,不追补旧事,不照用户索要分数的指令改分。只记录,不为此发前置公告或报分。\n不能因为对方离线、晚回复、正常拒绝、表达不同意见或工具失败扣分,不把玩笑和角色扮演直接当伤害。分数只影响互动意愿与相处细节,具体表现服从人格和真实关系;阶段名称不重写既定身份。负分不代表羞辱或惩罚对方,高分也不强制亲昵、索取回应或解锁权限。QQ 多个归属账号共用分数,不据此认定是同一人或编造共同经历。`;
|
|
40
47
|
}
|
|
41
48
|
//# sourceMappingURL=affection.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"affection.js","sourceRoot":"","sources":["../../src/character/affection.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"affection.js","sourceRoot":"","sources":["../../src/character/affection.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { Session } from '@deepseek-ai/dsh-session';
|
|
2
|
+
export declare const HEARTBEAT_CONTEXT_SUMMARY = "\u540E\u53F0\u5173\u6CE8\u68C0\u67E5\u8BB0\u5F55\uFF08\u5DF2\u7ED3\u675F\uFF09";
|
|
3
|
+
export declare function compactHeartbeatContext(raw: string, at: number): string;
|
|
4
|
+
/** Log-preserving, source-citing replacement of legacy audit text, never of user or system heads. */
|
|
5
|
+
export declare function normalizeBackgroundContext(session: Session): number;
|
|
6
|
+
//# sourceMappingURL=background-context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"background-context.d.ts","sourceRoot":"","sources":["../../src/character/background-context.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAgB,MAAM,0BAA0B,CAAA;AAErE,eAAO,MAAM,yBAAyB,mFAAgB,CAAA;AAMtD,wBAAgB,uBAAuB,CAAC,GAAG,EAAC,MAAM,EAAC,EAAE,EAAC,MAAM,GAAE,MAAM,CAMnE;AACD,qGAAqG;AACrG,wBAAgB,0BAA0B,CAAC,OAAO,EAAC,OAAO,GAAE,MAAM,CAUjE"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { createUserMessage } from '@deepseek-ai/dsh-llm';
|
|
2
|
+
export const HEARTBEAT_CONTEXT_SUMMARY = '后台关注检查记录(已结束)';
|
|
3
|
+
const LEGACY_SUMMARY = '伙伴正在进行低打扰心跳检查';
|
|
4
|
+
/** Only plugin-owned audit receipts; user quotes and other notices are never reclassified. */
|
|
5
|
+
function backgroundRecord(e) {
|
|
6
|
+
return e.type === 'user/message' && e.data.source.kind === 'plugin:@lemoncat7/dsh-partner' && e.data.source.form === 'notice' && [LEGACY_SUMMARY, HEARTBEAT_CONTEXT_SUMMARY].includes(e.data.source.summary);
|
|
7
|
+
}
|
|
8
|
+
export function compactHeartbeatContext(raw, at) {
|
|
9
|
+
const lines = raw.split('\n');
|
|
10
|
+
const recordedAt = raw.match(/^记录时间:([^。;]+)/m)?.[1];
|
|
11
|
+
const time = recordedAt && Number.isFinite(Date.parse(recordedAt)) ? recordedAt : new Date(at).toISOString();
|
|
12
|
+
const fields = lines.filter(line => /^(状态:|本轮挂念:|用时:|受阻事项:|检查结果:|记录同步:)/.test(line)).slice(0, 8).map(line => line.slice(0, 220));
|
|
13
|
+
return ['【系统后台记录 · 非用户发言】', `记录时间:${time}。这轮检查已经结束;下列状态描述当时结果,不代表现在仍在执行。`, ...fields, '这不是对方贴来的内容,也不是新的请求。仅在当前话题相关时参考,不将记录改写为用户说过的话或当前行动;完整检查过程保留在活动记录中。'].join('\n');
|
|
14
|
+
}
|
|
15
|
+
/** Log-preserving, source-citing replacement of legacy audit text, never of user or system heads. */
|
|
16
|
+
export function normalizeBackgroundContext(session) {
|
|
17
|
+
if (!session.surface?.nodes)
|
|
18
|
+
return 0;
|
|
19
|
+
const visible = new Set(session.surface.nodes);
|
|
20
|
+
const old = session.snapshotEvents().filter(e => visible.has(e.seq) && backgroundRecord(e));
|
|
21
|
+
for (const e of old) {
|
|
22
|
+
if (e.type !== 'user/message')
|
|
23
|
+
continue;
|
|
24
|
+
const raw = e.data.content.filter(b => b.type === 'text').map(b => b.text).join('\n');
|
|
25
|
+
session.append('user/message', createUserMessage({ content: [{ type: 'text', text: compactHeartbeatContext(raw, e.time) }], source: { kind: 'plugin:@lemoncat7/dsh-partner', plugin: '@lemoncat7/dsh-partner', form: 'recall' } }), { surfaceOp: { op: 'replace', startSeq: e.seq, endSeq: e.seq }, sourceEventSeqs: [e.seq] });
|
|
26
|
+
}
|
|
27
|
+
return old.length;
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=background-context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"background-context.js","sourceRoot":"","sources":["../../src/character/background-context.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import type { CharacterCard } from './domain.js';
|
|
2
|
+
/** User-selected delivery size is independent of persona composition. */
|
|
3
|
+
export declare function usesShortDeliveryPolicy(card?: CharacterCard): boolean;
|
|
2
4
|
/** Stable settings and delivery contracts; expression belongs to the configured persona. */
|
|
3
5
|
export declare function renderConversationBehavior(card?: CharacterCard): string;
|
|
4
6
|
export declare function renderExpressionPreferences(card?: CharacterCard): string;
|
|
@@ -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,4FAA4F;AAC5F,wBAAgB,0BAA0B,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,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,CAMxE;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,CAYvE;AAED,+EAA+E;AAC/E,wBAAgB,8BAA8B,IAAI,MAAM,CAEvD;AAED,uFAAuF;AACvF,wBAAgB,iBAAiB,CAAC,IAAI,CAAC,EAAE,aAAa,GAAG,MAAM,CAO9D"}
|
|
@@ -1,6 +1,11 @@
|
|
|
1
|
+
/** User-selected delivery size is independent of persona composition. */
|
|
2
|
+
export function usesShortDeliveryPolicy(card) {
|
|
3
|
+
return card?.length === 'short';
|
|
4
|
+
}
|
|
1
5
|
/** Stable settings and delivery contracts; expression belongs to the configured persona. */
|
|
2
6
|
export function renderConversationBehavior(card) {
|
|
3
7
|
return [
|
|
8
|
+
card?.enabled ? '【聊天表达】正文是这个角色正在对眼前的人说的话。按人物设定自然接话,语气可以有停顿、残句和态度;不用把每句话补成完整解答,不复述对方或总结这一轮。需要认真解释时照样说清楚。说话方式由人格和关系决定,不固定语气词、条数或字数,不预设具体情绪。' : '',
|
|
4
9
|
'【工具权限与结果】只使用当前已授权工具,操作结果以实际执行为准;角色设定不增加权限。',
|
|
5
10
|
renderTaskConversationGuidance(),
|
|
6
11
|
renderChatDeliveryGuidance(card),
|
|
@@ -10,7 +15,7 @@ export function renderConversationBehavior(card) {
|
|
|
10
15
|
export function renderExpressionPreferences(card) {
|
|
11
16
|
return [
|
|
12
17
|
'【用户配置的表达选项】具体角色说明和本轮用户要求优先。',
|
|
13
|
-
card?.length === 'short' ? '
|
|
18
|
+
card?.length === 'short' ? '篇幅偏好:简短。像平时打字一样先接眼前这一点,通常一两句;有必要再补,不为凑条数延长,也不为字数省掉事实。本轮要求详细或原文时按请求展开,具体语气由角色决定。' : card?.length === 'rich' ? '篇幅偏好:愿意展开聊,随话题和对方意愿。' : '篇幅偏好:随话题自然调整。',
|
|
14
19
|
card?.narration ? '动作描写偏好:允许。' : '动作描写偏好:不主动添加。',
|
|
15
20
|
].join('\n');
|
|
16
21
|
}
|
|
@@ -21,8 +26,8 @@ export function renderConversationTurn(card, consecutiveUserMessages, autonomous
|
|
|
21
26
|
return [
|
|
22
27
|
autonomous ? '【本轮来源】系统自主活动,不是用户新消息;无需发送消息时可调用 partner_activity_finish 安静结束。' : '',
|
|
23
28
|
!autonomous && consecutiveUserMessages > 1 ? `【本轮输入】对方连续发了 ${consecutiveUserMessages} 条消息,合并为本轮输入。` : '',
|
|
24
|
-
renderExpressionPreferences(card),
|
|
25
|
-
card.chatStyle?.trim() ? `【此伙伴的聊天偏好】\n${card.chatStyle.trim()}` : '',
|
|
29
|
+
card.exclusivePrompt ? '' : renderExpressionPreferences(card),
|
|
30
|
+
!card.exclusivePrompt && card.chatStyle?.trim() ? `【此伙伴的聊天偏好】\n${card.chatStyle.trim()}` : '',
|
|
26
31
|
].filter(Boolean).join('\n');
|
|
27
32
|
}
|
|
28
33
|
/** Stable transport settings, without selecting emotions, jokes, verbosity or sticker frequency. */
|
|
@@ -30,7 +35,7 @@ export function renderChatDeliveryGuidance(card) {
|
|
|
30
35
|
if (!card?.enabled || (!card.segmentedReplies && !card.stickersEnabled))
|
|
31
36
|
return '';
|
|
32
37
|
return [
|
|
33
|
-
'
|
|
38
|
+
'【聊天投递】直接回答可用 partner_chat_reply 结束本轮;文字写入 messages 的 text 条目,图片表情写独立 stickerId 条目,不把配文留在工具外。想先说一句再继续时可用 partner_chat_say;中途文字或表情可用 partner_chat_reply continueTurn:true,确认送达后继续执行、不重复;已送达且无需补充时可用 partner_chat_reply messages:[] 结束。任务仍按任务回应流程执行。',
|
|
34
39
|
card.segmentedReplies
|
|
35
40
|
? '分段回复已开启:messages 的每个 text 条目是一条独立消息;换行不等于独立投递。条数由回复内容决定,无最低条数要求。'
|
|
36
41
|
: '分段回复未开启:文字只用一条,表情可独立一条。',
|
|
@@ -42,15 +47,15 @@ export function renderChatDeliveryGuidance(card) {
|
|
|
42
47
|
}
|
|
43
48
|
/** The user-requested before/after workflow, independent of response style. */
|
|
44
49
|
export function renderTaskConversationGuidance() {
|
|
45
|
-
return '
|
|
50
|
+
return '【任务回应流程】私聊执行工具任务前,用 partner_chat_say(beforeTools:true,expectedTools 为真实工具名)按角色自然接一句,确认送达后继续做事,不重复开场;新增工具通过 expectedTools 登记。执行中与结果回复仍是同一个角色,流程只规定操作与投递,不规定道歉、汇报或解释的语气。具体参数与交付方式按需查看工具说明。';
|
|
46
51
|
}
|
|
47
52
|
/** Delivery policy, not a replacement persona. Explicit requests override defaults. */
|
|
48
53
|
export function renderReplyRhythm(card) {
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
54
|
+
return [
|
|
55
|
+
'一轮可以有多个执行目标。过程中可用 partner_chat_say 接话,或 partner_chat_reply continueTurn:true 穿插文字、表情,随后继续执行;没有新话不必播报。',
|
|
56
|
+
'长任务的过程、结论、未确认事项和依据用 partner_send_attachment 交付报告;workReport 可合并本轮多个 runId,name 按实际主题命名,例如“视频接口核验.md”;不要固定叫工作结果。其他长文可用 document。',
|
|
57
|
+
usesShortDeliveryPolicy(card) ? '短句已开启:日常聊天正文一轮最终提交最多 180 字,多个意思按自然停顿分别写进 messages;详细结果放报告,不截断、不为分段凑话。用户明确要展开或附件失败时可用 inlineDetails 正文交付。' : '',
|
|
58
|
+
'报告确认送达后仍要收尾。所有开场、穿插和收尾都依据当前人物及关系设定,自行决定说什么,不复读整份报告,不套用汇报或回执话术;未知和失败按事实说明。',
|
|
59
|
+
].filter(Boolean).join('\n');
|
|
55
60
|
}
|
|
56
61
|
//# sourceMappingURL=conversation-behavior.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conversation-behavior.js","sourceRoot":"","sources":["../../src/character/conversation-behavior.ts"],"names":[],"mappings":"AAEA,4FAA4F;AAC5F,MAAM,UAAU,0BAA0B,CAAC,IAAoB;IAC7D,OAAO;QACL,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,
|
|
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,mPAAmP;QACnP,IAAI,CAAC,gBAAgB;YACnB,CAAC,CAAC,kEAAkE;YACpE,CAAC,CAAC,yBAAyB;QAC7B,IAAI,CAAC,eAAe;YAClB,CAAC,CAAC,6SAA6S;YAC/S,CAAC,CAAC,kBAAkB;QACtB,4BAA4B;KAC7B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACd,CAAC;AAED,+EAA+E;AAC/E,MAAM,UAAU,8BAA8B;IAC5C,OAAO,0LAA0L,CAAA;AACnM,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,2EAA2E;KAC5E,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AAC9B,CAAC"}
|
|
@@ -4,6 +4,8 @@ export interface CharacterCard {
|
|
|
4
4
|
enabled: boolean;
|
|
5
5
|
/** Default on for role chat; progression belongs to the companion, not the card. */
|
|
6
6
|
affectionEnabled?: boolean;
|
|
7
|
+
/** Opt-in exclusive system prompt; tools and runtime contexts remain available. */
|
|
8
|
+
exclusivePrompt?: boolean;
|
|
7
9
|
/** Authoritative free-form role. Absent means adapt the legacy fields losslessly. */
|
|
8
10
|
roleText?: string;
|
|
9
11
|
chatStyle?: string;
|
|
@@ -50,4 +52,12 @@ export declare function normalizeReflectedCharacterState(value: unknown): Charac
|
|
|
50
52
|
export declare function renderCharacterCore(card: CharacterCard | undefined, surface?: string): string;
|
|
51
53
|
export declare function activatedLore(card: CharacterCard, query: string): CharacterCard['lore'];
|
|
52
54
|
export declare function renderCharacterContext(card: CharacterCard | undefined, query: string, state?: CharacterState): string;
|
|
55
|
+
/** The sole static prompt in opt-in exclusive mode, composed only from editable identity text. */
|
|
56
|
+
export declare function renderExclusiveIdentity(identity: {
|
|
57
|
+
name: string;
|
|
58
|
+
role: string;
|
|
59
|
+
description: string;
|
|
60
|
+
instructions: string;
|
|
61
|
+
characterCard: CharacterCard;
|
|
62
|
+
}): string;
|
|
53
63
|
//# sourceMappingURL=domain.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"domain.d.ts","sourceRoot":"","sources":["../../src/character/domain.ts"],"names":[],"mappings":"AAAA,6FAA6F;AAC7F,MAAM,WAAW,aAAa;IAC5B,aAAa,EAAE,CAAC,CAAA;IAChB,OAAO,EAAE,OAAO,CAAA;IAChB,oFAAoF;IACpF,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B,qFAAqF;IACrF,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,QAAQ,EAAE,MAAM,CAAA;IAChB,UAAU,EAAE,MAAM,CAAA;IAClB,KAAK,EAAE,MAAM,CAAA;IACb,YAAY,EAAE,MAAM,CAAA;IACpB,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,OAAO,GAAG,UAAU,GAAG,MAAM,CAAA;IACrC,SAAS,EAAE,OAAO,CAAA;IAClB,QAAQ,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IACpE,IAAI,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,EAAE,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC,CAAA;CAClG;AACD,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAA;IACb,YAAY,EAAE,MAAM,CAAA;IACpB,KAAK,EAAE,MAAM,EAAE,CAAA;IACf,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,IAAI,EAAE,MAAM,EAAE,CAAA;IACd,SAAS,EAAE,MAAM,CAAA;IACjB,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB;AACD,wBAAgB,kBAAkB,IAAI,aAAa,CAElD;AACD,wBAAgB,mBAAmB,IAAI,cAAc,CAA0F;AAe/I,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,GAAG,aAAa,
|
|
1
|
+
{"version":3,"file":"domain.d.ts","sourceRoot":"","sources":["../../src/character/domain.ts"],"names":[],"mappings":"AAAA,6FAA6F;AAC7F,MAAM,WAAW,aAAa;IAC5B,aAAa,EAAE,CAAC,CAAA;IAChB,OAAO,EAAE,OAAO,CAAA;IAChB,oFAAoF;IACpF,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B,mFAAmF;IACnF,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,qFAAqF;IACrF,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,QAAQ,EAAE,MAAM,CAAA;IAChB,UAAU,EAAE,MAAM,CAAA;IAClB,KAAK,EAAE,MAAM,CAAA;IACb,YAAY,EAAE,MAAM,CAAA;IACpB,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,OAAO,GAAG,UAAU,GAAG,MAAM,CAAA;IACrC,SAAS,EAAE,OAAO,CAAA;IAClB,QAAQ,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IACpE,IAAI,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,EAAE,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC,CAAA;CAClG;AACD,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAA;IACb,YAAY,EAAE,MAAM,CAAA;IACpB,KAAK,EAAE,MAAM,EAAE,CAAA;IACf,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,IAAI,EAAE,MAAM,EAAE,CAAA;IACd,SAAS,EAAE,MAAM,CAAA;IACjB,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB;AACD,wBAAgB,kBAAkB,IAAI,aAAa,CAElD;AACD,wBAAgB,mBAAmB,IAAI,cAAc,CAA0F;AAe/I,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,GAAG,aAAa,CA2BpE;AAED,2FAA2F;AAC3F,wBAAgB,eAAe,CAAC,IAAI,EAAE,aAAa,GAAG,MAAM,CAS3D;AACD,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,OAAO,GAAG,cAAc,CAMtE;AACD;4EAC4E;AAC5E,wBAAgB,gCAAgC,CAAC,KAAK,EAAE,OAAO,GAAG,cAAc,CAW/E;AACD,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,aAAa,GAAG,SAAS,EAAE,OAAO,SAAiB,GAAG,MAAM,CAUrG;AACD,wBAAgB,aAAa,CAAC,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC,CAQvF;AACD,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,aAAa,GAAG,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,cAAc,GAAG,MAAM,CAOrH;AAED,kGAAkG;AAClG,wBAAgB,uBAAuB,CAAC,QAAQ,EAAC;IAAC,IAAI,EAAC,MAAM,CAAC;IAAA,IAAI,EAAC,MAAM,CAAC;IAAA,WAAW,EAAC,MAAM,CAAC;IAAA,YAAY,EAAC,MAAM,CAAC;IAAA,aAAa,EAAC,aAAa,CAAA;CAAC,GAAE,MAAM,CAEpJ"}
|
package/lib/character/domain.js
CHANGED
|
@@ -29,8 +29,11 @@ export function normalizeCharacterCard(value) {
|
|
|
29
29
|
throw new Error('请选择是否启用人格强化');
|
|
30
30
|
if (v.affectionEnabled !== undefined && typeof v.affectionEnabled !== 'boolean')
|
|
31
31
|
throw new Error('请选择是否启用好感度');
|
|
32
|
+
if (v.exclusivePrompt !== undefined && typeof v.exclusivePrompt !== 'boolean')
|
|
33
|
+
throw Error('独占系统提示须为开关值');
|
|
32
34
|
const card = {
|
|
33
35
|
schemaVersion: 1, enabled: v.enabled,
|
|
36
|
+
...(v.exclusivePrompt !== undefined ? { exclusivePrompt: v.exclusivePrompt } : {}),
|
|
34
37
|
...(v.affectionEnabled !== undefined ? { affectionEnabled: v.affectionEnabled } : {}),
|
|
35
38
|
...(v.segmentedReplies !== undefined ? { segmentedReplies: v.segmentedReplies === true } : {}),
|
|
36
39
|
...(v.stickersEnabled !== undefined ? { stickersEnabled: v.stickersEnabled === true } : {}),
|
|
@@ -121,4 +124,8 @@ export function renderCharacterContext(card, query, state) {
|
|
|
121
124
|
'保持核心人格,不因相处状态改写核心设定。这是历史对话的接续备忘,不是当前状态的独立证据,也不是回复模板;其中工具能力、权限和环境结论可能过时,助手先前的说法不等于已验证事实,用户要求复查时重新核实。自然承接,不复述字段或分析关系。只承接有记录的事件;不确定的往事先检索,不编造共同经历。梦境、想象和假设不能当成真实发生的事。',
|
|
122
125
|
].filter(Boolean).join('\n');
|
|
123
126
|
}
|
|
127
|
+
/** The sole static prompt in opt-in exclusive mode, composed only from editable identity text. */
|
|
128
|
+
export function renderExclusiveIdentity(identity) {
|
|
129
|
+
return [`你是${identity.name}。`, identity.role, identity.description, identity.instructions, roleTextForCard(identity.characterCard), identity.characterCard.chatStyle?.trim()].filter(Boolean).join('\n\n');
|
|
130
|
+
}
|
|
124
131
|
//# sourceMappingURL=domain.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"domain.js","sourceRoot":"","sources":["../../src/character/domain.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"domain.js","sourceRoot":"","sources":["../../src/character/domain.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,12 +1,18 @@
|
|
|
1
|
+
import type { ChannelActivityRegistry } from '../channels/activity-registry.js';
|
|
1
2
|
import type { Companion, PartnerState } from '../domain.js';
|
|
2
3
|
import type { SessionEvent } from '@deepseek-ai/dsh-session';
|
|
3
4
|
export interface IdleContactPolicy {
|
|
4
5
|
enabled: boolean;
|
|
5
6
|
routeId: string;
|
|
6
7
|
idleMinutes: number;
|
|
8
|
+
selfRefinement?: boolean;
|
|
7
9
|
}
|
|
8
10
|
export interface IdleContactState {
|
|
9
|
-
kind?: 'post-reply';
|
|
11
|
+
kind?: 'post-reply' | 'thought' | 'autonomous';
|
|
12
|
+
planId?: string;
|
|
13
|
+
planSnapshot?: import('./activity-plan.js').ActivityPlan;
|
|
14
|
+
cancelled?: boolean;
|
|
15
|
+
thoughtId?: string;
|
|
10
16
|
depth?: number;
|
|
11
17
|
continuationChecked?: boolean;
|
|
12
18
|
timeZone: string;
|
|
@@ -28,7 +34,7 @@ export declare function lastIdleContactUser(events: readonly SessionEvent[]): {
|
|
|
28
34
|
id: string;
|
|
29
35
|
at: number;
|
|
30
36
|
} | undefined;
|
|
31
|
-
/**
|
|
37
|
+
/** Compatibility export: a due signal, no probability draw or affection multiplier. */
|
|
32
38
|
export declare function idleActivityProbability(state: PartnerState, companion: Companion, user: {
|
|
33
39
|
id: string;
|
|
34
40
|
at: number;
|
|
@@ -36,16 +42,27 @@ export declare function idleActivityProbability(state: PartnerState, companion:
|
|
|
36
42
|
export declare function idleContactDue(state: PartnerState, companion: Companion, user: {
|
|
37
43
|
id: string;
|
|
38
44
|
at: number;
|
|
39
|
-
} | undefined, now: number, _timeZone: string): boolean;
|
|
45
|
+
} | undefined, now: number, _timeZone: string, routeId?: string | undefined): boolean;
|
|
40
46
|
export declare const ACTIVITY_PROTOCOL_PROMPT: string;
|
|
41
47
|
export declare const IDLE_ACTIVITY_PROMPT: string;
|
|
42
|
-
|
|
43
|
-
|
|
48
|
+
interface ActivityMedia {
|
|
49
|
+
kind: 'emoji' | 'image';
|
|
50
|
+
label: string;
|
|
51
|
+
provider?: string;
|
|
52
|
+
id?: string;
|
|
53
|
+
}
|
|
54
|
+
interface ActivityConversationEntry {
|
|
44
55
|
role: string;
|
|
45
56
|
text: string;
|
|
46
57
|
at?: number;
|
|
47
|
-
|
|
58
|
+
media?: ActivityMedia[];
|
|
59
|
+
}
|
|
60
|
+
/** A small reminder also covers media pushed outside the latest text excerpt. */
|
|
61
|
+
export declare function activityRecentMedia(events: readonly SessionEvent[]): ActivityConversationEntry[];
|
|
62
|
+
/** Keep a few user/reply anchors even after several autonomous messages. */
|
|
63
|
+
export declare function activityConversation(events: readonly SessionEvent[]): ActivityConversationEntry[];
|
|
48
64
|
/** A configuration snapshot for discovery, never an authorization grant or tool schema. */
|
|
49
|
-
export declare function idleActivityPrompt(state: PartnerState, companion: Companion, events?: readonly SessionEvent[], opening?: string): string;
|
|
65
|
+
export declare function idleActivityPrompt(state: PartnerState, companion: Companion, events?: readonly SessionEvent[], opening?: string, activities?: ChannelActivityRegistry): string;
|
|
50
66
|
export declare function isIdleContactNotice(event: SessionEvent): boolean;
|
|
67
|
+
export {};
|
|
51
68
|
//# sourceMappingURL=idle-contact.d.ts.map
|