@lemoncat7/dsh-partner 2.11.6 → 2.21.5
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 +3 -0
- package/docs/character-cards-and-renewal.md +1 -1
- package/docs/qq-attention.md +51 -0
- package/docs/qq-channel.md +80 -0
- package/docs/releases/2.11.7.md +9 -0
- package/docs/releases/2.12.0.md +14 -0
- package/docs/releases/2.13.0.md +9 -0
- package/docs/releases/2.14.0.md +9 -0
- package/docs/releases/2.15.0.md +9 -0
- package/docs/releases/2.15.1.md +9 -0
- package/docs/releases/2.16.0.md +18 -0
- package/docs/releases/2.17.0.md +23 -0
- package/docs/releases/2.17.1.md +9 -0
- package/docs/releases/2.18.0.md +9 -0
- package/docs/releases/2.18.1.md +5 -0
- package/docs/releases/2.19.0.md +14 -0
- package/docs/releases/2.19.1.md +7 -0
- package/docs/releases/2.19.2.md +9 -0
- package/docs/releases/2.19.3.md +5 -0
- package/docs/releases/2.20.0.md +10 -0
- package/docs/releases/2.20.1.md +8 -0
- package/docs/releases/2.21.0.md +7 -0
- package/docs/releases/2.21.1.md +8 -0
- package/docs/releases/2.21.2.md +10 -0
- package/docs/releases/2.21.3.md +7 -0
- package/docs/releases/2.21.4.md +8 -0
- package/docs/releases/2.21.5.md +15 -0
- package/docs/tool-entry-compatibility.md +11 -0
- package/lib/agent-runtime.d.ts +17 -0
- package/lib/agent-runtime.d.ts.map +1 -1
- package/lib/agent-runtime.js +313 -52
- package/lib/agent-runtime.js.map +1 -1
- package/lib/api.d.ts +1 -0
- package/lib/api.d.ts.map +1 -1
- package/lib/api.js +93 -27
- package/lib/api.js.map +1 -1
- package/lib/channel-message.d.ts +14 -0
- package/lib/channel-message.d.ts.map +1 -1
- package/lib/channel-message.js.map +1 -1
- package/lib/channels/delivery-policy.js +1 -1
- package/lib/channels/delivery-policy.js.map +1 -1
- package/lib/channels/direct/dispatcher.d.ts +2 -2
- package/lib/channels/direct/dispatcher.d.ts.map +1 -1
- package/lib/channels/direct/dispatcher.js +13 -4
- package/lib/channels/direct/dispatcher.js.map +1 -1
- package/lib/channels/direct/login.d.ts.map +1 -1
- package/lib/channels/direct/login.js +4 -0
- package/lib/channels/direct/login.js.map +1 -1
- package/lib/channels/direct/media.d.ts +2 -0
- package/lib/channels/direct/media.d.ts.map +1 -1
- package/lib/channels/direct/media.js +27 -23
- package/lib/channels/direct/media.js.map +1 -1
- package/lib/channels/direct/message-format.js +127 -127
- package/lib/channels/direct/message-format.js.map +1 -1
- package/lib/channels/direct/transport.d.ts +26 -3
- package/lib/channels/direct/transport.d.ts.map +1 -1
- package/lib/channels/direct/transport.js +31 -5
- package/lib/channels/direct/transport.js.map +1 -1
- package/lib/channels/manager.d.ts +26 -0
- package/lib/channels/manager.d.ts.map +1 -1
- package/lib/channels/manager.js +538 -148
- package/lib/channels/manager.js.map +1 -1
- package/lib/channels/notification-delivery.d.ts +4 -0
- package/lib/channels/notification-delivery.d.ts.map +1 -1
- package/lib/channels/notification-delivery.js +15 -5
- package/lib/channels/notification-delivery.js.map +1 -1
- package/lib/channels/notification-route.d.ts.map +1 -1
- package/lib/channels/notification-route.js +10 -4
- package/lib/channels/notification-route.js.map +1 -1
- package/lib/channels/notification-timeout.d.ts.map +1 -1
- package/lib/channels/notification-timeout.js +2 -0
- package/lib/channels/notification-timeout.js.map +1 -1
- package/lib/channels/outbound-media.d.ts.map +1 -1
- package/lib/channels/outbound-media.js +2 -0
- package/lib/channels/outbound-media.js.map +1 -1
- package/lib/channels/qq/action-catalog.d.ts +38 -0
- package/lib/channels/qq/action-catalog.d.ts.map +1 -0
- package/lib/channels/qq/action-catalog.js +2731 -0
- package/lib/channels/qq/action-catalog.js.map +1 -0
- package/lib/channels/qq/actions.d.ts +21 -0
- package/lib/channels/qq/actions.d.ts.map +1 -0
- package/lib/channels/qq/actions.js +226 -0
- package/lib/channels/qq/actions.js.map +1 -0
- package/lib/channels/qq/affection-adapter.d.ts +3 -0
- package/lib/channels/qq/affection-adapter.d.ts.map +1 -0
- package/lib/channels/qq/affection-adapter.js +16 -0
- package/lib/channels/qq/affection-adapter.js.map +1 -0
- package/lib/channels/qq/attention-classifier.d.ts +10 -0
- package/lib/channels/qq/attention-classifier.d.ts.map +1 -0
- package/lib/channels/qq/attention-classifier.js +62 -0
- package/lib/channels/qq/attention-classifier.js.map +1 -0
- package/lib/channels/qq/authority.d.ts +10 -0
- package/lib/channels/qq/authority.d.ts.map +1 -0
- package/lib/channels/qq/authority.js +50 -0
- package/lib/channels/qq/authority.js.map +1 -0
- package/lib/channels/qq/autonomy.d.ts +30 -0
- package/lib/channels/qq/autonomy.d.ts.map +1 -0
- package/lib/channels/qq/autonomy.js +88 -0
- package/lib/channels/qq/autonomy.js.map +1 -0
- package/lib/channels/qq/catalog.d.ts +14 -0
- package/lib/channels/qq/catalog.d.ts.map +1 -0
- package/lib/channels/qq/catalog.js +34 -0
- package/lib/channels/qq/catalog.js.map +1 -0
- package/lib/channels/qq/connection.d.ts +28 -0
- package/lib/channels/qq/connection.d.ts.map +1 -0
- package/lib/channels/qq/connection.js +200 -0
- package/lib/channels/qq/connection.js.map +1 -0
- package/lib/channels/qq/identity-binding.d.ts +14 -0
- package/lib/channels/qq/identity-binding.d.ts.map +1 -0
- package/lib/channels/qq/identity-binding.js +58 -0
- package/lib/channels/qq/identity-binding.js.map +1 -0
- package/lib/channels/qq/latency.d.ts +22 -0
- package/lib/channels/qq/latency.d.ts.map +1 -0
- package/lib/channels/qq/latency.js +21 -0
- package/lib/channels/qq/latency.js.map +1 -0
- package/lib/channels/qq/message.d.ts +6 -0
- package/lib/channels/qq/message.d.ts.map +1 -0
- package/lib/channels/qq/message.js +49 -0
- package/lib/channels/qq/message.js.map +1 -0
- package/lib/channels/qq/reply-rules.d.ts +30 -0
- package/lib/channels/qq/reply-rules.d.ts.map +1 -0
- package/lib/channels/qq/reply-rules.js +72 -0
- package/lib/channels/qq/reply-rules.js.map +1 -0
- package/lib/channels/qq/reply-tool.d.ts +6 -0
- package/lib/channels/qq/reply-tool.d.ts.map +1 -0
- package/lib/channels/qq/reply-tool.js +113 -0
- package/lib/channels/qq/reply-tool.js.map +1 -0
- package/lib/channels/qq/settings.d.ts +42 -0
- package/lib/channels/qq/settings.d.ts.map +1 -0
- package/lib/channels/qq/settings.js +68 -0
- package/lib/channels/qq/settings.js.map +1 -0
- package/lib/channels/qq/sticker-adapter.d.ts +5 -0
- package/lib/channels/qq/sticker-adapter.d.ts.map +1 -0
- package/lib/channels/qq/sticker-adapter.js +43 -0
- package/lib/channels/qq/sticker-adapter.js.map +1 -0
- package/lib/channels/qq/transport.d.ts +29 -0
- package/lib/channels/qq/transport.d.ts.map +1 -0
- package/lib/channels/qq/transport.js +187 -0
- package/lib/channels/qq/transport.js.map +1 -0
- package/lib/channels/reply-access.d.ts +25 -0
- package/lib/channels/reply-access.d.ts.map +1 -0
- package/lib/channels/reply-access.js +29 -0
- package/lib/channels/reply-access.js.map +1 -0
- package/lib/channels/weixin/connect.d.ts +3 -1
- package/lib/channels/weixin/connect.d.ts.map +1 -1
- package/lib/character/activity-tool.d.ts +7 -0
- package/lib/character/activity-tool.d.ts.map +1 -0
- package/lib/character/activity-tool.js +38 -0
- package/lib/character/activity-tool.js.map +1 -0
- package/lib/character/affection-adapter.d.ts +13 -0
- package/lib/character/affection-adapter.d.ts.map +1 -0
- package/lib/character/affection-adapter.js +13 -0
- package/lib/character/affection-adapter.js.map +1 -0
- package/lib/character/affection-context.d.ts +7 -0
- package/lib/character/affection-context.d.ts.map +1 -0
- package/lib/character/affection-context.js +33 -0
- package/lib/character/affection-context.js.map +1 -0
- package/lib/character/affection.d.ts +47 -0
- package/lib/character/affection.d.ts.map +1 -0
- package/lib/character/affection.js +41 -0
- package/lib/character/affection.js.map +1 -0
- package/lib/character/conversation-behavior.d.ts +1 -1
- package/lib/character/conversation-behavior.d.ts.map +1 -1
- package/lib/character/conversation-behavior.js +5 -3
- package/lib/character/conversation-behavior.js.map +1 -1
- package/lib/character/domain.d.ts +5 -0
- package/lib/character/domain.d.ts.map +1 -1
- package/lib/character/domain.js +21 -4
- package/lib/character/domain.js.map +1 -1
- package/lib/character/identity-guide.d.ts +4 -0
- package/lib/character/identity-guide.d.ts.map +1 -0
- package/lib/character/identity-guide.js +14 -0
- package/lib/character/identity-guide.js.map +1 -0
- package/lib/character/idle-contact.d.ts +12 -5
- package/lib/character/idle-contact.d.ts.map +1 -1
- package/lib/character/idle-contact.js +50 -21
- package/lib/character/idle-contact.js.map +1 -1
- package/lib/character/post-reply.d.ts +19 -0
- package/lib/character/post-reply.d.ts.map +1 -0
- package/lib/character/post-reply.js +33 -0
- package/lib/character/post-reply.js.map +1 -0
- package/lib/character/preview.d.ts.map +1 -1
- package/lib/character/preview.js +9 -1
- package/lib/character/preview.js.map +1 -1
- package/lib/character/relationship-adapter.d.ts +18 -0
- package/lib/character/relationship-adapter.d.ts.map +1 -0
- package/lib/character/relationship-adapter.js +18 -0
- package/lib/character/relationship-adapter.js.map +1 -0
- package/lib/character/sleep-service.d.ts +35 -0
- package/lib/character/sleep-service.d.ts.map +1 -0
- package/lib/character/sleep-service.js +278 -0
- package/lib/character/sleep-service.js.map +1 -0
- package/lib/character/sleep.d.ts +43 -0
- package/lib/character/sleep.d.ts.map +1 -0
- package/lib/character/sleep.js +36 -0
- package/lib/character/sleep.js.map +1 -0
- package/lib/character/state-policy.d.ts +4 -0
- package/lib/character/state-policy.d.ts.map +1 -0
- package/lib/character/state-policy.js +14 -0
- package/lib/character/state-policy.js.map +1 -0
- package/lib/character/store.d.ts.map +1 -1
- package/lib/character/store.js +3 -3
- package/lib/character/store.js.map +1 -1
- package/lib/chat/conversation.js +1 -1
- package/lib/chat/conversation.js.map +1 -1
- package/lib/chat/protocol.d.ts +8 -0
- package/lib/chat/protocol.d.ts.map +1 -1
- package/lib/chat/protocol.js +24 -5
- package/lib/chat/protocol.js.map +1 -1
- package/lib/chat/sticker-adapter.d.ts +34 -0
- package/lib/chat/sticker-adapter.d.ts.map +1 -0
- package/lib/chat/sticker-adapter.js +30 -0
- package/lib/chat/sticker-adapter.js.map +1 -0
- package/lib/chat/tools.d.ts +2 -1
- package/lib/chat/tools.d.ts.map +1 -1
- package/lib/chat/tools.js +59 -13
- package/lib/chat/tools.js.map +1 -1
- package/lib/client-api.d.ts +21 -1
- package/lib/client-api.d.ts.map +1 -1
- package/lib/client-api.js.map +1 -1
- package/lib/client.d.ts.map +1 -1
- package/lib/client.js +6388 -2685
- package/lib/client.js.map +4 -4
- package/lib/collaboration/composition.d.ts +2 -0
- package/lib/collaboration/composition.d.ts.map +1 -1
- package/lib/collaboration/composition.js +32 -10
- package/lib/collaboration/composition.js.map +1 -1
- package/lib/collaboration/tool-discovery.d.ts +12 -0
- package/lib/collaboration/tool-discovery.d.ts.map +1 -0
- package/lib/collaboration/tool-discovery.js +148 -0
- package/lib/collaboration/tool-discovery.js.map +1 -0
- package/lib/companions/identity-tool.d.ts +176 -0
- package/lib/companions/identity-tool.d.ts.map +1 -0
- package/lib/companions/identity-tool.js +67 -0
- package/lib/companions/identity-tool.js.map +1 -0
- package/lib/companions/identity.d.ts +24 -0
- package/lib/companions/identity.d.ts.map +1 -0
- package/lib/companions/identity.js +49 -0
- package/lib/companions/identity.js.map +1 -0
- package/lib/companions/management-tool.d.ts +1 -1
- package/lib/companions/management-tool.d.ts.map +1 -1
- package/lib/companions/management-tool.js +4 -2
- package/lib/companions/management-tool.js.map +1 -1
- package/lib/companions/management.d.ts +21 -9
- package/lib/companions/management.d.ts.map +1 -1
- package/lib/companions/management.js +18 -4
- package/lib/companions/management.js.map +1 -1
- package/lib/companions/service.js +1 -0
- package/lib/companions/service.js.map +1 -1
- package/lib/companions/session-configuration.js +2 -2
- package/lib/companions/session-configuration.js.map +1 -1
- package/lib/domain.d.ts +37 -1
- package/lib/domain.d.ts.map +1 -1
- package/lib/domain.js +6 -0
- package/lib/domain.js.map +1 -1
- package/lib/execution/agent-support.d.ts +1 -1
- package/lib/execution/agent-support.d.ts.map +1 -1
- package/lib/execution/agent-support.js +7 -2
- package/lib/execution/agent-support.js.map +1 -1
- package/lib/execution/operation-tool-access.d.ts +13 -0
- package/lib/execution/operation-tool-access.d.ts.map +1 -0
- package/lib/execution/operation-tool-access.js +49 -0
- package/lib/execution/operation-tool-access.js.map +1 -0
- package/lib/execution/service.d.ts.map +1 -1
- package/lib/execution/service.js +2 -10
- package/lib/execution/service.js.map +1 -1
- package/lib/execution/tool-access-adapter.d.ts +23 -0
- package/lib/execution/tool-access-adapter.d.ts.map +1 -0
- package/lib/execution/tool-access-adapter.js +25 -0
- package/lib/execution/tool-access-adapter.js.map +1 -0
- package/lib/heartbeat.js +1 -1
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +32 -2
- package/lib/index.js.map +1 -1
- package/lib/memory-domain.d.ts +1 -0
- package/lib/memory-domain.d.ts.map +1 -1
- package/lib/memory-prompt-context.js +1 -0
- package/lib/memory-prompt-context.js.map +1 -1
- package/lib/memory-reflection.d.ts.map +1 -1
- package/lib/memory-reflection.js +16 -5
- package/lib/memory-reflection.js.map +1 -1
- package/lib/memory-scope.d.ts +2 -1
- package/lib/memory-scope.d.ts.map +1 -1
- package/lib/memory-scope.js +3 -1
- package/lib/memory-scope.js.map +1 -1
- package/lib/memory-store.d.ts +1 -1
- package/lib/observation-knowledge-entry.d.ts +2 -0
- package/lib/observation-knowledge-entry.d.ts.map +1 -0
- package/lib/observation-knowledge-entry.js +13 -0
- package/lib/observation-knowledge-entry.js.map +1 -0
- package/lib/observation-loop.d.ts.map +1 -1
- package/lib/observation-loop.js +3 -0
- package/lib/observation-loop.js.map +1 -1
- package/lib/storage/split-state.d.ts +1 -0
- package/lib/storage/split-state.d.ts.map +1 -1
- package/lib/storage/split-state.js +9 -2
- package/lib/storage/split-state.js.map +1 -1
- package/lib/store.d.ts.map +1 -1
- package/lib/store.js +7 -0
- package/lib/store.js.map +1 -1
- package/lib/ui/affection-panel.d.ts +10 -0
- package/lib/ui/affection-panel.d.ts.map +1 -0
- package/lib/ui/affection-panel.js +44 -0
- package/lib/ui/affection-panel.js.map +1 -0
- package/lib/ui/capability-editor.d.ts.map +1 -1
- package/lib/ui/capability-editor.js +1 -1
- package/lib/ui/capability-editor.js.map +1 -1
- package/lib/ui/channels-panel.d.ts.map +1 -1
- package/lib/ui/channels-panel.js +13 -9
- package/lib/ui/channels-panel.js.map +1 -1
- package/lib/ui/character-editor.d.ts +3 -1
- package/lib/ui/character-editor.d.ts.map +1 -1
- package/lib/ui/character-editor.js +20 -18
- package/lib/ui/character-editor.js.map +1 -1
- package/lib/ui/character-memory-editor.d.ts +6 -1
- package/lib/ui/character-memory-editor.d.ts.map +1 -1
- package/lib/ui/character-memory-editor.js +17 -11
- package/lib/ui/character-memory-editor.js.map +1 -1
- package/lib/ui/companion-draft.d.ts +3 -0
- package/lib/ui/companion-draft.d.ts.map +1 -1
- package/lib/ui/companion-draft.js +1 -1
- package/lib/ui/companion-draft.js.map +1 -1
- package/lib/ui/identity-editor.d.ts.map +1 -1
- package/lib/ui/identity-editor.js +12 -6
- 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/memory-panel.d.ts.map +1 -1
- package/lib/ui/memory/memory-panel.js +5 -3
- package/lib/ui/memory/memory-panel.js.map +1 -1
- package/lib/ui/push-draft.d.ts +5 -5
- package/lib/ui/qq-capability-settings.d.ts +9 -0
- package/lib/ui/qq-capability-settings.d.ts.map +1 -0
- package/lib/ui/qq-capability-settings.js +24 -0
- package/lib/ui/qq-capability-settings.js.map +1 -0
- package/lib/ui/qq-channel-settings.d.ts +13 -0
- package/lib/ui/qq-channel-settings.d.ts.map +1 -0
- package/lib/ui/qq-channel-settings.js +51 -0
- package/lib/ui/qq-channel-settings.js.map +1 -0
- package/lib/ui/qq-identity-binding.d.ts +9 -0
- package/lib/ui/qq-identity-binding.d.ts.map +1 -0
- package/lib/ui/qq-identity-binding.js +6 -0
- package/lib/ui/qq-identity-binding.js.map +1 -0
- package/lib/ui/qq-voice-reply-settings.d.ts +9 -0
- package/lib/ui/qq-voice-reply-settings.d.ts.map +1 -0
- package/lib/ui/qq-voice-reply-settings.js +23 -0
- package/lib/ui/qq-voice-reply-settings.js.map +1 -0
- package/lib/ui/role-reference.js +1 -1
- package/lib/ui/role-reference.js.map +1 -1
- package/lib/ui/sleep-editor.d.ts +10 -0
- package/lib/ui/sleep-editor.d.ts.map +1 -0
- package/lib/ui/sleep-editor.js +45 -0
- package/lib/ui/sleep-editor.js.map +1 -0
- package/package.json +33 -5
package/README.md
CHANGED
|
@@ -39,8 +39,11 @@ dsh plugin --profile web add @lemoncat7/dsh-partner@latest
|
|
|
39
39
|
- [Bark 单向通知](docs/bark-notifications.md)
|
|
40
40
|
- [持续关注检查与执行流程](docs/concern-workflow.md)
|
|
41
41
|
- [MCP 服务](docs/mcp.md)
|
|
42
|
+
- [知识库与 SSH 统一工具入口兼容](docs/tool-entry-compatibility.md)
|
|
42
43
|
- [存储迁移](docs/storage-migration.md)
|
|
43
44
|
- [任务生命周期与交付](docs/lifecycle-recovery.md)
|
|
44
45
|
- [架构与隐私边界](docs/architecture.md)
|
|
45
46
|
- [版本与发布说明](https://github.com/lemoncat7/dsh-partner/releases)
|
|
46
47
|
- [发布维护约定](docs/releases/README.md)
|
|
48
|
+
|
|
49
|
+
QQ 接入说明见 [QQ 渠道(SnowLuma / OneBot v11)](docs/qq-channel.md):正向 WebSocket 同时收发消息,填写 WS 地址与对应 Token 即可,无需单独填写 HTTP API。配置按连接、私聊、群聊、表情、权限和发送消息分层展示;群聊默认关闭,开启后选择群组及触发方式。
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
|
|
7
7
|
通用示例只用于创作起点。试聊使用伙伴模型,最多保留八组对话,不使用工具、不写入正式记忆,也不会发送到渠道。独立试聊支持预览未保存的草稿。
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
“当前相处状态”统一放在记忆页,共用上方记忆范围和学习开关;角色聊天开启时,后台记忆提炼一并维护当前话题、明确关系及必要的近期互动,不增加独立任务或串行调用。默认折叠,背景与固定内容按需展开;已有角色状态原位保留,固定内容仅由用户修改,并使用版本检查保护较新的编辑。长期事实、偏好与约定仍进入有证据的长期记忆,相处状态不重复人格卡或长期画像。做梦独立保存联想,不得将梦中内容当成共同经历。学习关闭后暂停自动整理;角色聊天关闭后停止状态注入,但已有内容仍可查看、修改。
|
|
10
10
|
|
|
11
11
|
## 每日上下文焕新
|
|
12
12
|
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
# QQ 群聊接话:会话归属与本地语义(2.21.3)
|
|
2
|
+
|
|
3
|
+
2.21.2 的逐条加权抽签会误拦截呼唤、赞叹和追问。2.21.3 改为会话归属优先,不再对正在进行的聊天逐条抽签。
|
|
4
|
+
|
|
5
|
+
## 路由顺序
|
|
6
|
+
|
|
7
|
+
1. 真实 @ 伙伴、引用伙伴已确认发送的消息、直接叫角色名或归属账号使用关系称呼:进入回复流程。
|
|
8
|
+
2. 真实 @ 他人、引用已确认属于其他成员的消息:旁听。引用对象仅来自实际收发记录,不能通过文本 CQ 码或伪造引用字段指定。
|
|
9
|
+
3. 同一群内按发言人保留最近成功发送的对话,持续五分钟;其他人插话不会清除它,也不能继承它。明确转向他人或要求停止会结束此人的接话状态。仅入队、发送失败或选择旁听不会延长窗口。
|
|
10
|
+
4. 没有明确归属的新消息由本地分类器辅助识别呼唤、交流、对别人说、结束、背景消息。正在聊天时不把“好的”“哇太棒了”等逐条重新分类。
|
|
11
|
+
5. 只有置信分值至少 0.72 且第一、第二类别差值至少 0.35 的否定分类可以拦截新话题。其他不确定结果、超时、服务不可用均交给正常回复模型结合上下文判断。这些分值不是经过概率校准的准确率。
|
|
12
|
+
|
|
13
|
+
进入回复流程不保证每条必回。角色聊天启用时,自主群聊的 `partner_chat_reply` 可以使用 `messages: []` 安静结束;只有当前可信来源路由属于自主白名单群时允许,私聊和浏览器消息不允许借此空回复。不会向 QQ 发送“决定旁听”等技术提示,不增加常驻工具。
|
|
14
|
+
|
|
15
|
+
## 模型与验证范围
|
|
16
|
+
|
|
17
|
+
采用冻结的 `Xenova/paraphrase-multilingual-MiniLM-L12-v2` INT8 ONNX 编码器,加本地训练的 L2 正则化 softmax 分类头。不是完整 SetFit 微调,也没有直接套用论文训练模型。分类头用仓库中 197 条通用中英文及少量日文样本训练,不将用户私有聊天上传或写入训练集。
|
|
18
|
+
|
|
19
|
+
独立编写的 40 条测试样例包含最近漏回的短句,分类准确率 90%;23 条呼唤/交流样例在这一小样本内全部归入正向类别。不能据此承诺真实群聊零漏判。完整结果(包括错误)见 `ops/attention/evaluation-report.json`;测试集不参与训练。另有路由测试验证换人、过期、不同群、发送失败、引用真实性、故障放行与权限边界。
|
|
20
|
+
|
|
21
|
+
本机离线单条平均约 6.4 ms、P95 约 8.8 ms,进程峰值 RSS 约 541 MiB;容器实测可能不同。模型 118,308,126 字节、分词器 17,082,913 字节。服务只处理短文本,不生成回复、不执行 QQ 操作、不保存聊天;运行中无需联网下载。正式回复仍使用原模型,不能据此保证总回复时间低于 5 秒。
|
|
22
|
+
|
|
23
|
+
## 部署
|
|
24
|
+
|
|
25
|
+
`ops/attention/` 提供 Dockerfile、compose、固定模型修订与 SHA256、训练及验证脚本。权重不塞入 npm 插件包。
|
|
26
|
+
|
|
27
|
+
```sh
|
|
28
|
+
cd ops/attention
|
|
29
|
+
python3 download-model.py
|
|
30
|
+
docker compose up -d --build
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
Compose 使用外部 `appnet`,不映射宿主机端口;限制 1 CPU、768 MiB 内存、禁止额外 swap,非 root、只读运行。宿主机设置 `DSH_PARTNER_ATTENTION_URL=http://partner-attention:8092`,或在 `$DSH_HOME/partner/local-attention.json` 写入:
|
|
34
|
+
|
|
35
|
+
```json
|
|
36
|
+
{"url":"http://partner-attention:8092"}
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
重新加载伙伴插件后读取配置。未配置则仅使用会话路由并对不确定消息放行。客户端总超时 1.2 秒;失败后 30 秒内降级,不反复等待。单进程最多一个分类请求在途,繁忙时也降级放行。通过 `/health` 检查就绪。停用时先移除配置并重载插件,再停止分类服务。
|
|
40
|
+
|
|
41
|
+
源码与样本修改后,可安装 requirements.txt,运行 train.py、evaluate.py 重新生成分类头和报告。不得把测试样例添加进训练集后继续宣称原测试集准确率。
|
|
42
|
+
|
|
43
|
+
## 参考与许可
|
|
44
|
+
|
|
45
|
+
- [Addressee and Response Selection for Multi-Party Conversation](https://aclanthology.org/D16-1231/)
|
|
46
|
+
- [A Large-Scale Corpus for Conversation Disentanglement](https://aclanthology.org/P19-1374/)
|
|
47
|
+
- [SetFit](https://huggingface.co/docs/setfit/en/index):少样本分类思路参考,本实现没有微调编码器。
|
|
48
|
+
- [句向量模型及 Apache-2.0 许可](https://huggingface.co/sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2)
|
|
49
|
+
- [ONNX 转换权重](https://huggingface.co/Xenova/paraphrase-multilingual-MiniLM-L12-v2),固定修订 `2c4055b12046f11709e9df2c122e59ffbdc2f900`。
|
|
50
|
+
|
|
51
|
+
本实现借鉴对话分流与对象识别的设计原则;它不是上述论文算法的完整复现。归属账号只影响关系设定与已有授权,接话判断不会授予工具权限。
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
# QQ 渠道(SnowLuma / OneBot v11)
|
|
2
|
+
|
|
3
|
+
伙伴作为客户端连接 SnowLuma 的 **正向 Universal WebSocket**。同一条连接接收消息并调用 OneBot API,无需额外填写 HTTP API,也无需反向连接或开放 DSH 回调端口。
|
|
4
|
+
|
|
5
|
+
1. 在 SnowLuma 登录 QQ,启用正向 WebSocket(角色 `Universal`)。
|
|
6
|
+
2. 打开「伙伴 → 渠道 → QQ → 配置」。
|
|
7
|
+
3. 填写地址(同一 Docker 网络例如 `ws://snowluma:3001`)和该 **WS 服务**的 Access Token。HTTP 与 WS 的 Token 可能不同。跨公网连接应使用 `wss://`。
|
|
8
|
+
4. 测试连接、保存并启用。令牌仅存入 DSH 凭据库。
|
|
9
|
+
5. 群聊:开启群聊回复并选择接入群;加入自主回复白名单的群放行所有成员,其他已接入群需要审批发言账号。私聊:需要时单独开启,再核对好友的配对码并批准;只使用群聊时关闭私聊回复。
|
|
10
|
+
|
|
11
|
+
默认自动发现好友私聊;高级设置可限制为一个联系人 QQ 号。群聊默认关闭,可在分层设置中开启;群临时私聊、非好友私聊、匿名群消息和自身消息不触发伙伴。安装腾讯官方 `dsh-qqbot` 插件不是此渠道的前置条件,两者各自配置、独立连接。
|
|
12
|
+
|
|
13
|
+
渠道直接复用伙伴的身份、人格卡、记忆、工具、提问和通知路由;角色分段文字和表情包按原顺序发送。QQ 无法原地编辑普通消息,所以不伪造进度卡或额外发送“正在思考”。
|
|
14
|
+
|
|
15
|
+
支持普通文本、QQ 系统表情的文字说明、图片/表情图片发送、文件发送,以及带受支持 QQ 媒体下载地址的入站附件。附件接收限制沿用每批最多 8 个、总计 64 MB;缺少可用下载地址、超限或无法下载时会提示失败,不会悄悄忽略附件后执行文字。模型输出的 CQ 字符串按普通文字发送。
|
|
16
|
+
|
|
17
|
+
连接中断后自动退避重连,API 请求按 echo 匹配回执,发送接口不会在连接层自动重放。OneBot WS 是实时事件流,不能保证补回断线期间的消息;如发生掉线,请重发尚未收到回复的消息。处理失败后沿用伙伴的暂停/投递恢复机制,已开始执行的消息不会再次执行工具。
|
|
18
|
+
|
|
19
|
+
官方参考:https://snowluma.github.io/zh/docs/guide/connect-bot
|
|
20
|
+
|
|
21
|
+
## 分层配置
|
|
22
|
+
|
|
23
|
+
首页只显示账号状态和分类入口,详细设置在下一层,返回保留未保存的草稿,关闭时提示保存状态。
|
|
24
|
+
|
|
25
|
+
- **连接与账号**:测试/更新 WS 地址及令牌、启停、重连;移除渠道放在折叠项中。留空令牌保留原凭据,更新时核对同一 QQ 账号。
|
|
26
|
+
- **私聊回复**:默认开启,只有批准后的好友才能触发伙伴。
|
|
27
|
+
- **群聊回复 → 选择群组**:默认关闭,从已加入的群选择(最多 100 个);默认仅真正 @ 机器人时回复,可改为回复群内每条消息。可控制回复时是否 @ 发言人。
|
|
28
|
+
- **表情与图片**:分别控制原生 QQ 系统表情和图片/人格表情包发送。
|
|
29
|
+
- **访问权限**:填写多个归属账号;私聊核对配对码后批准。白名单群成员无需逐人批准,其他已接入群需要审批发言账号;已有记录可单独屏蔽。
|
|
30
|
+
- **发送消息**:从已授权的接收人选择好友或群成员,发送文字或原生 QQ 表情。表情目录支持分类、搜索、预览和加载更多;点击最终发送按钮才会发送。群成员接收项表示发送到对应群,不是私聊该成员。
|
|
31
|
+
|
|
32
|
+
默认每个群、每位私聊联系人使用独立会话,以群名或联系人名命名。「会话与记忆」中可选择哪些私聊用户、群聊使用本地主会话;未选择的对象继续独立。保存后对后续消息生效,取消勾选可接回原独立会话。启用记忆时,各会话共享该伙伴已整理的长期记忆,升级合并旧群记忆,不拼接原始聊天、不删除旧会话文件。群消息标注群号和发言人;群内任务的通知仍固定返回来源群。私聊的“最近联系人”自动路由不会选择群成员。身份、人格和已有工具权限仍沿用该伙伴的配置,共用工作目录;如需独立资料和身份,可使用单独伙伴。
|
|
33
|
+
|
|
34
|
+
群回复开启并选中群后,白名单群成员无需逐人配对;非白名单群需要审批发言账号。私聊与各群的账号审批分别记录,不互相继承。若连接创建时限制了固定私聊联系人,则仍只监听该联系人;要启用群聊需使用未限制联系人的连接。
|
|
35
|
+
|
|
36
|
+
原生表情目录来自 SnowLuma `fetch_sys_faces`,发送使用 `face` 消息段;经典预览使用目录的 `em_code` 对应 QQ 图片 CDN,无法加载的表情显示名称和编号。模型文本中的 CQ 字符串仍按文字发送,不强制每轮发表情。
|
|
37
|
+
|
|
38
|
+
## 自主回复白名单
|
|
39
|
+
|
|
40
|
+
「群聊回复 → 自主回复白名单」从已选群组中勾选。白名单群无需 @,普通消息进入有界的话题观察窗口;所有未屏蔽成员的发言均进入本地对话归属判断,连续聊天优先接续;可选本地语义分类辅助判断新话题,不另发远程大模型判断请求。真正回复使用所配置的独立或主会话,以及伙伴的角色和记忆;归属账号附加关系设定与既有授权工具,其他成员只提供当前会话回复工具。无需先 @ 或配对,群内聊天许可不授予私有能力。
|
|
41
|
+
|
|
42
|
+
每个群最多保留最近 16 条背景,每条最多 1200 字;判断至少间隔 15 秒,自主回复后至少间隔 45 秒,伙伴正在处理任务时不插入自主消息。明确 @ 不受自主判断影响。没有每日回复次数上限。
|
|
43
|
+
|
|
44
|
+
## 渠道表情适配器
|
|
45
|
+
|
|
46
|
+
`StickerAdapters` 默认委托伙伴的 `StickerLibrary`,渠道通过 `register(platform, factory)` 提供 `list` 和 `resolve`,工具按实际消息来源选择适配器,本地聊天或未知来源始终使用默认库。
|
|
47
|
+
|
|
48
|
+
QQ 的「表情与图片 → 聊天表情来源」默认选择 QQ 优先,也可改回默认库。QQ 目录优先提供 `fetch_custom_face_detail` 的收藏和 `fetch_sys_faces` 的系统表情;模型通过 `partner_stickers` 查找、查看并用 `partner_chat_reply` 发送。默认内置表情有匹配的原生对应项时也会适配;自定义上传图片保持原样。目录缓存最多五分钟,更新渠道配置会失效。
|
|
49
|
+
|
|
50
|
+
系统表情走 `face` 消息段,收藏表情走 `send_custom_face`,两者保留发送顺序、来源账号和渠道绑定。目录查询失败或找不到匹配可在发送前回退默认库;发送结果未知时不再补发默认图片,避免重复消息。QQ 当前无收藏时仍可使用系统表情。原生表情的页面展示使用宿主正常正文元素。
|
|
51
|
+
|
|
52
|
+
## 私有能力
|
|
53
|
+
|
|
54
|
+
在「QQ 设置 → 私有能力」启用总开关,再按分类选择单项能力,保存后生效。仅归属账号及系统自主执行可在已有授权范围内调用。关闭总开关不会影响已开启的文字、表情与当前会话语音回复;后者在「聊天回复 → 语音回复」独立设置。伙伴通过 `partner_qq` 先查目录,再查参数,最后调用;无需向每次对话注入全部 API 参数。
|
|
55
|
+
|
|
56
|
+
- **QQ 空间**:可浏览动态、发表说说、点赞、评论和管理自己的说说;默认发表范围为好友可见,可调整。空间访问范围由当前 QQ 账号决定。
|
|
57
|
+
- **语音**:本地音频文件发送到已授权私聊或已选群;QQ AI 音色生成及发送用于群。点击「读取 QQ 音色」选择默认音色,也可让伙伴选择。
|
|
58
|
+
- **其他分类**:聊天互动、记录、账号与好友资料、群资料、公告待办、群管理、文件及群相册。管理与删除操作独立开启,且受 QQ 实际权限约束。
|
|
59
|
+
|
|
60
|
+
未实现和凭据类接口不对伙伴开放。文件上传只读取伙伴工作目录内的非隐藏普通文件,不支持任意 URL 或远程容器路径。结果未知的对外操作不会自动重发;可在「最近操作记录」确认状态,再核对 QQ 实际结果。
|
|
61
|
+
|
|
62
|
+
自主接话判断与后台记忆整理独立;面板的「当前任务」显示记忆、归档、初始化或运行中的会话,最近判断显示接续、语义判断、降级放行或旁听原因。连续消息逐条进入本地判断,不会因接话冷却或伙伴忙碌直接跳过;判断可自主选择不回复。群白名单的所有未屏蔽成员都可进入接话判断;其他已接入群按发言账号审批,私聊由独立开关和配对控制。
|
|
63
|
+
|
|
64
|
+
AI 仅注册一个 `partner_qq` 入口。`list` 默认返回已开启的分类与数量,带 `category` / `query` 时最多返回 20 项操作概要(`offset` 翻页),`describe` 才返回单项参数。完整 89 项 API schema 不进入每轮工具定义。
|
|
65
|
+
|
|
66
|
+
## 归属账号
|
|
67
|
+
|
|
68
|
+
在 QQ 配置的“访问权限”中填写一个或多个归属 QQ 号,保存即可;留空关闭。只填写账号,不另写哥哥、弟弟等关系,不区分私聊或群聊。角色设定描述角色本身;具体关系、称呼和相处方式沿用身份中的独立「关系设定」,修改身份后同步使用新设定。
|
|
69
|
+
|
|
70
|
+
识别依据是渠道真实发言账号,昵称、自称和引用不改变归属。其他人按人物性格与各自交往相处。绑定决定是否附加关系以及能否使用既有授权的私有工具,不绕过私聊开关、群白名单或主会话选择。本地对话保持原设定。
|
|
71
|
+
|
|
72
|
+
## 工具入口与耗时诊断
|
|
73
|
+
|
|
74
|
+
启用“统一伙伴工具入口”后,模型常驻 `partner_tools` 和 `partner_channel_access`。前者按分类查询、describe 查看参数、call 调用真实能力;后者只根据真实渠道与当前发言账号返回已授权能力,不接受自报 QQ 号。默认适配器沿用既有授权;QQ 普通成员只查询和调用聊天、表情、语音能力,归属账号与可信自主任务可使用原本已授权的能力。工具实际执行仍复查当前权限,经过原审批与取消流程。换人不改变顶层工具表,也不改变身份或记忆配置。
|
|
75
|
+
|
|
76
|
+
群消息逐条通过会话归属与本地语义判断,不再使用独立远程模型门控。`channels/status` 的 `qqLatency` 保留最近 20 条消息的处理耗时;`beforeHandleMs` 包括前置队列与身份核验,`decisionMs` 是本地接话判断,`decisionMethod` 为 `local`、`decisionScore` 为规则结果或语义分类分值(不是接话抽签概率),`agent` 区分伙伴队列、输入准备、模型与空闲等待、回合结束后的等待、状态提交和出站准备。`sendMs` 包括投递记账、渠道校验、发送确认与完成记账,不能直接视为网络延迟。追加到运行中回合的消息标记 `steered`,不额外发送技术提示。
|
|
77
|
+
|
|
78
|
+
### 会话归属与本地语义(2.21.3)
|
|
79
|
+
|
|
80
|
+
已替换 2.21.2 的逐条评分抽签:明确呼唤、引用伙伴消息与正在进行的对话优先接续;按群和发言人保留五分钟成功回复窗口,换人插话不会清空。新话题由可选本地语义分类器辅助判断;低置信度或故障时交给正式回复模型,后者可以选择旁听而不发送消息。详情、资源占用与测试限制见 [QQ 接话设计](qq-attention.md)。
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# 2.11.7 — AI 生成人格与人工草稿分离
|
|
2
|
+
|
|
3
|
+
- 可在聊天中描述想要的人格,由伙伴通过 `partner_identity` 读取、生成并保存自己的完整身份;无需开启伙伴管理权限。支持人格正文、聊天偏好、背景资料、基本身份及闲时联系设置,其他工具能力保持原样。
|
|
4
|
+
- 页面编辑人工草稿,保存时同时应用到实际身份。AI 只编辑生效内容,不改人工原稿;旧身份在第一次修改前保留为草稿。页面可查看生效版本,也可将其复制到编辑区后手动保存为原稿。
|
|
5
|
+
- 身份保存带版本检查;并发编辑不会静默覆盖。页面保存是完整替换,AI 局部修改会保留未指定字段,数组完整替换。已授权的伙伴管理工具也支持人格配置,并保留目标的人工草稿。
|
|
6
|
+
- 免打扰可独立开关,关闭时保留时段。旧配置默认保留原先免打扰行为。
|
|
7
|
+
- 取消闲时主动联系每日上限,旧配置中的 dailyLimit 不再限制发送。仍遵守空闲间隔、用户未回复不追发、会话忙碌等待及渠道授权规则。
|
|
8
|
+
|
|
9
|
+
验证:身份生成与应用、旧身份原稿保留、重启持久化、页面保存、并发冲突、跨伙伴隔离、权限字段拒绝及免打扰/无限次回归测试;生产页面只进行不落盘交互验证,不发送渠道测试消息。
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# 2.12.0 — 自主睡眠与梦境
|
|
2
|
+
|
|
3
|
+
身份新增“睡眠与做梦”。角色可在聊天中调用 `partner_sleep` 自主选择休息 5–720 分钟,不设固定睡眠时间;后台也会在空闲时低频判断是否想休息,模型可以选择继续清醒。
|
|
4
|
+
|
|
5
|
+
- 已启用角色聊天的旧身份默认开启睡眠与做梦,工作型身份默认关闭;用户可单独修改开关。设置遵守人工草稿/生效身份的分离规则。
|
|
6
|
+
- 睡眠只暂停闲时主动搭话,不限制工具、任务、定时交付或直接回复。真实用户消息唤醒;时长结束自然醒;页面也可叫醒。未完成的排队/执行任务会阻止入睡。
|
|
7
|
+
- 移除身份里的固定免打扰时段,旧时段不再控制闲时联系。没有每日联系次数上限,未回复不连续追发的规则保持。
|
|
8
|
+
- 梦境仅从本会话已有的有效记忆产生虚构联想和主观感受。独立存储最近 12 个梦,不写入事实记忆、不执行每日终审、不触发上下文焕新、不自动发送梦境报告。记忆关闭或没有可用记忆时只休息。
|
|
9
|
+
- 梦境按会话隔离;共享同一个真实会话的渠道可共享梦境。聊天只提供近期一个梦作为非事实参考,并要求谈到时明确是梦或联想。睡眠与梦境在重启后保留。
|
|
10
|
+
- 用户叫醒或修改人格时,过期的后台结果不再写入。截断/断流不是成功;失败不会无限重试。
|
|
11
|
+
|
|
12
|
+
后台每分钟检查状态,一次最多发起一个模型请求。只有空闲至少 15 分钟、最近两天有活动且没有执行任务的角色才会进入自主判断;同一段活动只判断一次,两次判断至少间隔一小时。这是控制后台开销的检查节奏,不是强制入睡时间。梦境使用当前伙伴模型,最多生成一次;记忆整理流程继续独立运行。
|
|
13
|
+
|
|
14
|
+
验证包含自主判断、消息/手动唤醒、自然醒、并发失效、重启恢复、会话隔离、独立存储及闲时发送拦截;页面验证使用拦截保存与模拟状态,不向正式渠道发送测试消息。
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# 2.13.0
|
|
2
|
+
|
|
3
|
+
- 新增 QQ 渠道,通过 SnowLuma / OneBot v11 正向 Universal WebSocket 接收好友私聊与发送回复。
|
|
4
|
+
- QQ 配置只需 WS 地址和 WS Token,提供连接测试与可选固定联系人;复用凭据库和联系人配对授权。
|
|
5
|
+
- 复用伙伴人格、记忆、工具、分段聊天、表情包及通知流程;QQ群消息不会触发伙伴。
|
|
6
|
+
- 共享收发连接、关联 API 回执、断线退避重连、检查登录账号与好友身份;按文本段发送,避免 CQ 字符串被解释为动作。
|
|
7
|
+
- 图片和文件以字节上传,兼容 DSH 与 SnowLuma 分属不同容器;发送结果逐项确认。
|
|
8
|
+
|
|
9
|
+
验证:TypeScript/客户端构建、841 项自动化测试通过(含 9 项 QQ 协议测试);真实 SnowLuma 的 WS 连接与账号检查通过;QQ 配置弹窗通过手机/桌面、浅色/深色检查。
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# 2.14.0 · QQ 分层配置与群聊
|
|
2
|
+
|
|
3
|
+
QQ 渠道新增分层设置:总览 → 连接/私聊/群聊/表情/权限/发送,群列表放在群聊的下一级。支持深浅色、小屏布局、明确的开关状态、草稿关闭保护及配置冲突检查。
|
|
4
|
+
|
|
5
|
+
群聊默认关闭,仅选择的群可触发;默认被 @ 才回复,可选择回复全部已授权成员消息。成员按群单独配对,群会话不合并私聊模型历史和会话记忆,群通知固定返回来源。现有私聊连接保持兼容。
|
|
6
|
+
|
|
7
|
+
提供私聊、群聊、回复 @、系统表情、图片/表情包开关,以及手动文字/原生 QQ 表情发送。目录来自 SnowLuma,支持分类搜索和预览,发送前核对当前 QQ 身份、群/好友关系及授权,等待 API 回执。浏览不会发送消息。
|
|
8
|
+
|
|
9
|
+
验证包括模拟 OneBot 的路由、权限、媒体及群上下文测试,手机/桌面深浅色浏览器检查和线上只读目录查询;没有向真实联系人发送测试消息。
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# 2.15.0 · QQ 会话选择与渠道表情适配
|
|
2
|
+
|
|
3
|
+
新增「会话与记忆」:默认每个群、每位私聊用户使用独立会话,以群名/联系人名命名;勾选指定用户或群才接入主会话。取消勾选接回原独立会话,原始记录保留。所有会话沿用该伙伴长期记忆,升级合并旧群记忆但不拼接聊天原文。群消息保留发言人来源,群内交付仍返回来源群。
|
|
4
|
+
|
|
5
|
+
新增「自主回复白名单」:指定群不必 @,无工具的模型先判断接话时机,需要时再交给伙伴回复。普通成员消息作为背景,已授权成员才能触发操作;无效判断、超时和繁忙时保持安静。保留明确 @ 回复方式,不限制伙伴正常回复时的工具。
|
|
6
|
+
|
|
7
|
+
表情工具新增渠道适配层:默认库保持兼容,QQ 默认优先系统表情及收藏表情包,支持浏览、查看和原生发送,目录不可用可回退默认库。原生表情与文字保持原顺序;发送未确认时不会重复补发图片。
|
|
8
|
+
|
|
9
|
+
修正未保存提示的白底及表单、开关、底部按钮对齐,提示背景随当前主题。
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# 2.15.1
|
|
2
|
+
|
|
3
|
+
- 群聊接话判断不再继承正式对话的高推理强度,按模型能力选择关闭或低推理;输出预算由 120 提高到 1024 token。超时、截断、格式错误与主动旁听分别显示,授权不足和忙碌跳过也有原因。
|
|
4
|
+
- 渠道面板显示最近一次群聊判断及主动联系未送达状态。
|
|
5
|
+
- QQ 主会话选择在下一次主动联系检查时生效,不再等待用户先发私聊。
|
|
6
|
+
- 主动联系增加只读发送前检查。只有确认尚未发出的离线失败,在连接恢复后每 30 秒检查补发;沿用原正文、原接收人,最多保留一小时的自动补发有效期。
|
|
7
|
+
- 设置变化、新用户消息、会话变化、睡眠及撤销授权会阻止旧主动消息重发。发送结果不明、旧版未标记安全状态的记录不会自动补发。
|
|
8
|
+
|
|
9
|
+
运行环境排查:QQ 在 13:18 因 GPU 子进程反复退出而崩溃,随后 SnowLuma 注入失败,导致群消息未到达伙伴。部署移除了 `--disable-software-rasterizer`,保留软件渲染回退;`ops/snowluma-qq-rehook.*` 提供 supervisor 事件恢复,在 QQ 更换进程后等待 20 秒再重连桥接组件。需要持续观察是否仍有客户端崩溃;不把一次恢复视为长期稳定性证明。
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# 2.16.0
|
|
2
|
+
|
|
3
|
+
- QQ 自主接话不再被整个伙伴的忙碌状态提前丢弃。已授权发言正常交给判断模型,需要接话时由现有会话队列处理;未授权成员、冷却和模型判断保持原有规则。
|
|
4
|
+
- 渠道面板显示当前任务来源:后台记忆、回合归档、会话准备或具体运行会话。
|
|
5
|
+
- 修复角色记忆超过 20 条剧情事件导致后台整理持续重试。自动生成的摘要去重并保留近期条目,完整对话仍在日志中,手动编辑限制与固定记忆保护不变。
|
|
6
|
+
- 新增 `partner_qq` 工具,以 list / describe / call 发现并调用 89 项经过筛选的 SnowLuma 能力,按空间、语音、互动、消息记录、资料、群资料、公告、管理、文件和相册分组。
|
|
7
|
+
- 自主能力总开关和每项操作独立配置,旧渠道默认关闭;语音可选 QQ AI 音色,空间发布默认好友可见。配置位于渠道 → QQ 设置 → 自主能力。
|
|
8
|
+
- 私聊与群操作受已有授权、群白名单和渠道开关约束;消息 ID 操作先验证来源会话;跨伙伴调用、未列出的接口和凭据接口不可用。群成员管理由所选群与单项管理权限授权。
|
|
9
|
+
- 媒体来自伙伴工作目录内普通非隐藏文件,单文件 16 MB、每次最多 9 个、总计 32 MB;读取实际文件后以 base64 传输,不将工作目录路径交给 QQ 容器。
|
|
10
|
+
- 对外操作先持久化调用标识;断线或超时结果不明时保留记录并禁止相同调用自动重发。确认记录保留 30 天,未确认记录持续保留;页面显示最近 20 条。此机制不替代跨调用业务去重。
|
|
11
|
+
|
|
12
|
+
QQ AI 文字转语音是群能力;私聊支持已有音频文件。操作是否可用还取决于 SnowLuma 版本、QQ 账号和群权限、网络及平台限制。未进行真实发帖、评论、语音或管理操作测试。
|
|
13
|
+
|
|
14
|
+
本次环境排障还修正了 SnowLuma 容器继承的失效 Tailscale DNS:Compose 固定 `223.5.5.5` 与 `119.29.29.29`,当前容器同步应用;保持 `appnet`。修正后在线只读检查确认 QQ 空间说说列表、好友动态和 30 个 AI 音色均可读取。
|
|
15
|
+
|
|
16
|
+
AI 仅注册一个 `partner_qq` 入口。`list` 默认返回已开启的分类与数量,带 `category` / `query` 时最多返回 20 项操作概要(`offset` 翻页),`describe` 才返回单项参数。完整 89 项 API schema 不进入每轮工具定义。
|
|
17
|
+
|
|
18
|
+
伙伴「能力组合」新增可选的「按需加载伙伴工具」。开启后只常驻目录入口与聊天回复/表情,工作工具按分类发现,再 load 原工具;最多保留 4 项最近加载的工作工具。仍通过 DSH 原工具注册与执行流程运行,保留审批、能力撤回、超时、取消、输出和终结回合语义。旧伙伴未设置开关时保持原工具展示;本次先为莫殇开启。原生宿主、SSH/知识库等独立插件工具不由此功能收缩。
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# 2.17.0
|
|
2
|
+
|
|
3
|
+
## 闲时自主活动
|
|
4
|
+
|
|
5
|
+
身份中的「闲时主动联系」升级为「闲时自主活动」,沿用原有开关、目标会话和间隔,无需重新配置。间隔现在表示概率升到 100% 所需的空闲时间,不是平均活动间隔:每分钟以 `min(100%, 完整空闲分钟 / 间隔 × 100%)` 抽取一次。以 60 分钟为例,第 1 分钟约 1.7%,第 30 分钟 50%,第 60 分钟 100%;因为每分钟抽取,实际平均会明显提前。未抽中不调用模型。
|
|
6
|
+
|
|
7
|
+
抽中后重置周期,由角色选择聊天、调用已授权的 QQ 或其他工具,或者安静结束;不限制每日次数,也不要求用户回复后才能继续其他活动。新对话、最近完成的回合和已有活动会重置空闲计时。睡眠、前台任务和聊天运行期间等待,后台记忆整理不再阻挡闲时活动。检查结果和活动领取均持久化,同一分钟重复检查、并发检查、重启不会重复抽取或补发未知结果。
|
|
8
|
+
|
|
9
|
+
普通回复依旧发往所选会话;其他工具按自身权限、联系人和群范围执行,不自动扩大授权。新增按需发现的 `partner_activity_finish`,用工具回执安静结束,无需发送“无需回复”等特殊文本。只有当前系统自主活动可以使用,不能跳过用户消息和工作任务。
|
|
10
|
+
|
|
11
|
+
QQ 单项能力没有固定概率。AI 在用户对话、任务或自主活动被唤起后,根据场景选择查询和调用。配置页补充了这一区别。
|
|
12
|
+
|
|
13
|
+
## 人格生成与对话
|
|
14
|
+
|
|
15
|
+
角色聊天区域说明:用户在正式聊天里提出身份、关系、性格和语气要求,AI 读取当前生效身份和按需返回的写作指导,按「身份、相处方式、说话习惯、避免的表达、对话参考」生成并应用。通用需求示例可选中复制;手工编辑继续保留。AI 只修改生效内容,页面草稿不受影响。
|
|
16
|
+
|
|
17
|
+
验证工具按需加载前后完整人格提示完全一致,包括对话示例和聊天偏好。加强工具操作后的角色连续性:如实说明结果但不自动变成操作报告;遇到“太像 AI”反馈直接改进接话,不作自我分析。试聊使用同一份本轮接话规则。修正渠道说明固定称微信的问题。
|
|
18
|
+
|
|
19
|
+
自主活动拥有独立的本轮上下文标识,避免沿用上一条用户消息的“必须回复”提示;恢复用户对话时恢复正常回复要求。
|
|
20
|
+
|
|
21
|
+
## 验证
|
|
22
|
+
|
|
23
|
+
测试覆盖概率边界、并发/重启、未命中检查持久化、睡眠/忙碌、无新消息继续活动、后台记忆不阻塞、渠道静默投递、原生 ToolRuntime 终结语义、AI 写入与草稿隔离、工具发现前后人格一致及活动/用户上下文切换。实际对外 QQ 发送不作为部署测试。
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# 2.17.1
|
|
2
|
+
|
|
3
|
+
- 将身份 → 角色聊天中的“相处记忆”合并到记忆页,改为“当前相处状态”,默认折叠。共用记忆范围与学习开关,不新增定时任务或模型请求。
|
|
4
|
+
- 主要展示当前话题与关系;背景、近期互动与固定内容按需展开。保留现有数据库、接口、固定内容和手动修改保护,不批量清洗历史。
|
|
5
|
+
- 自动整理明确区分长期事实、当前接话状态与梦境。相处状态不重复人格卡或长期画像,不猜测关系,不把梦里的内容当成共同经历。
|
|
6
|
+
- 编辑时保留草稿,可撤销;未保存或正在处理时锁定范围选择,避免写错会话。并发更新仍需重新读取,不能覆盖后台的新状态。
|
|
7
|
+
- 角色聊天关闭时保留内容但不注入对话;学习关闭时保留已有状态但暂停自动整理。上下文焕新继续沿用现有安全检查。
|
|
8
|
+
|
|
9
|
+
梦境仍在身份 → 睡眠与做梦中查看。做梦产生联想,不能替代长期记忆或相处状态。
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# 2.18.0
|
|
2
|
+
|
|
3
|
+
QQ 渠道 → 访问权限新增可选的“身份关系绑定”。填写主归属 QQ 号及这个人在人设中的关系(例如角色是弟弟,对应关系为“哥哥”)。只有绑定账号对应这层专属关系;对其他人的态度由人物性格与实际交往决定,不额外规定冷淡或亲近。
|
|
4
|
+
|
|
5
|
+
- 私聊与群聊从渠道真实发送者和已存消息来源判定,不采用昵称、自称或正文中的号码;共用会话仍逐轮区分发言人。
|
|
6
|
+
- 绑定不授予配对、工具或主会话权限;默认关闭,旧配置继续生效,关闭后保留填写内容。
|
|
7
|
+
- 设置在后续回合生效;本地网页对话保持原有身份。群聊自主活动没有明确个人对象时不推定为绑定人。
|
|
8
|
+
- 群聊接话判断沿用同一绑定规则。记忆提炼携带 QQ 关系归属,不允许其他成员的轮次改写共享状态中的绑定关系;不迁移历史记忆。
|
|
9
|
+
- 关系是提示词中的明确约束,并非身份认证或新的访问权限。渠道授权与工具权限仍分别管理。
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# 2.19.0
|
|
2
|
+
|
|
3
|
+
角色与关系分开保存:角色设定只描述自身身份、性格、语气和通用示例;身份新增独立「关系设定」,描述与用户的关系、称呼和专属相处方式。默认适配器合并使用;QQ 适配器仅在真实发送账号匹配访问权限中的任一归属 QQ 时附加关系,群聊与私聊通用。未绑定或未知发送者不附加关系。原有工具授权仍是上限,不强制陌生人冷淡。
|
|
4
|
+
|
|
5
|
+
- 页面与 AI 共享一份生效身份,不再维护独立草稿。AI 使用 partner_identity 分别编辑 characterCard.roleText 与顶层 relationshipText;页面直接展示最新设定,正在编辑时保留未保存内容并提示版本冲突,防止覆盖。旧草稿仅保留在部署备份中。生成指导与参考说明同步更新。
|
|
6
|
+
- 试聊可选择普通会话、QQ 归属账号、QQ 其他账号;不投递渠道、不写正式记忆。
|
|
7
|
+
- 旧的独立 characterCard.relationship 兼容读取;显式清空新字段可取消旧关系。旧自由文本中的关系不自动猜测删除,页面提示人工或 AI 拆分,旧文本不丢弃。
|
|
8
|
+
- 每轮根据持久化消息来源核验发送者,不采用昵称、自称、引用或群号;共享会话切换不追加系统头。QQ 非归属对象不自动附加共享相处状态和用户画像。历史消息和显式记忆检索仍保留,不把关系选择器当作记忆访问权限。
|
|
9
|
+
|
|
10
|
+
QQ 归属支持多个账号(最多 100 个)。未归属 QQ 用户只获得当前会话的文字、表情与语音回复工具:模型请求不提供私有工具,执行入口使用 DSH 单调拒绝 guard 重新核验账号,阻断旧工具调用、按需发现与代码入口。已核验归属账号及系统发起的自主活动/内部任务沿用既有能力开关与授权。群聊自主接话仍按实际发言人核验,不因机器人决定回复而获得自主执行权限。
|
|
11
|
+
|
|
12
|
+
工具提供同样通过渠道适配器:默认保持会话既有工具;QQ 自行判定归属或系统自主执行,决定提供既有完整工具还是受限回复工具。模型装配与真实执行共用适配器结果。未归属聊天也不能通过记忆整理新建、停止或修改关注任务;含未归属发言的每日终审不变更关注,已归属发言仍可在逐轮整理中维护关注。
|
|
13
|
+
|
|
14
|
+
配置页面分为「聊天回复」与「私有能力」,标明适用对象。新增当前会话语音工具,只接受文字/音色,固定真实回复目标,不接受文件、URL、收件人或任意 API;群内直接使用 QQ 文字转语音,私聊借用所选已接入群的音色合成后仅发送到私聊。普通语音开关独立于私有能力,后者继续控制音频文件、空间、管理等操作。
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
# 2.19.1
|
|
2
|
+
|
|
3
|
+
QQ 聊天许可按三种情况判断:私聊需要账号审批;自主回复白名单群放行所有成员,无需逐人配对;其他已接入群需要审批发言账号。私聊与各群的审批分别记录,不互相继承;明确屏蔽的成员仍不回复。群白名单无需 @,由伙伴判断是否接话,不保证每条必回;其他群沿用 @ / 全部消息的触发设置。
|
|
4
|
+
|
|
5
|
+
入站、文字、分段、表情、语音、原群通知和闲时联系共用许可判断;发送前重新核对群白名单、账号审批、开关与屏蔽状态,撤销后不继续发送。真实来源决定接收群,不创建隐式私聊授权、不转到其他会话。排队消息也读取最新设置。
|
|
6
|
+
|
|
7
|
+
群内许可只允许正常回复,不增加私有工具或关系权限。页面明确区分群接入范围、白名单、账号审批与归属账号。升级保留现有私聊开关、群列表和审批记录。
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# 2.19.2
|
|
2
|
+
|
|
3
|
+
降低 QQ 收发链路的本地等待:OneBot 的文字、图片等消息段已在同一个事件内,直接交接处理,不再等待一秒拼接窗口或每轮轮询后的一秒休眠。Matrix 附件拼接保持原行为。
|
|
4
|
+
|
|
5
|
+
QQ 按真实聊天目标分别准备输入;一个群的接话判断不会阻塞另一个群或私聊的准备。同一聊天仍按顺序处理,整条渠道共用 100 组积压上限。同一伙伴的模型执行继续串行,不并发改写共享上下文。
|
|
6
|
+
|
|
7
|
+
状态未改变时跳过磁盘提交与变更通知;收到消息时将最近联系时间和防重收据合并为一次持久化。实际修改仍校验、原子写入并同步到磁盘,发送前的账号、好友、群成员、审批和归属权限校验保持有效。
|
|
8
|
+
|
|
9
|
+
新增不包含消息正文或令牌的 `[qq-latency]` 分段日志:WS 到处理队列、接口验证、模型输入准备、模型回合、回合后处理及发送耗时。日志用于区分本地排队、磁盘处理与模型等待,不承诺固定回复时间。
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
# 2.20.0
|
|
2
|
+
|
|
3
|
+
- 开启统一伙伴工具入口后,模型常驻 `partner_tools`(查询/调用)与 `partner_channel_access`(当前渠道账号能力)两个入口。聊天、表情、语音和工作工具都经入口调用。
|
|
4
|
+
- 默认渠道沿用既有授权,QQ 按可信发言来源实时过滤能力;归属账号、普通成员和可信自主任务仍各自遵守原权限。账号切换不再切换 native/PTC 或增删顶层工具。
|
|
5
|
+
- 原工具仍在 DSH 运行时执行,保留原参数校验、审批、取消、结果展示、附加上下文与回合终结。兼容 `load` 为查询说明,不再改变顶层工具集合。
|
|
6
|
+
- 连续消息追加到当前回合时,不再往渠道发送“已插入当前处理”提示。
|
|
7
|
+
- 并行执行独立 QQ 身份检查,合并首次通知记录与发送尝试的落盘,减少未变化伙伴的目录扫描;权限核验、原子提交、同步落盘与恢复语义保留。
|
|
8
|
+
- 渠道状态接口提供最近 20 条消息的阶段耗时,仅记录消息 ID、耗时与结果,不记录正文或凭据,便于区分模型判断、会话收尾、状态保存与发送等待。
|
|
9
|
+
|
|
10
|
+
此前生成结束后约 11 秒的等待已定位在会话收尾到发送记录建立之间;历史日志不能进一步确定具体阻塞点。本版增加阶段计时供下一轮实测,不宣称已达到 5 秒回复。
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
# 2.20.1
|
|
2
|
+
|
|
3
|
+
- 闲时自主活动区分独立活动和联系对方:未收到新回复不再被提示为停止所有活动的理由,可依据兴趣浏览动态、分享感想或自然联系;仍可选择休息,不设置发消息、发说说或调用工具的次数指标。
|
|
4
|
+
- 每轮附上本伙伴当前已开启的 QQ 自主能力摘要,仅包含启用渠道的启用操作;具体参数按需查询,执行仍经过实时权限、目标范围和宿主审批。
|
|
5
|
+
- 引导每轮重新判断,避免照抄历史的“不打扰”结论;安静结束记录实际活动或本轮休息依据,记录不投递到渠道。
|
|
6
|
+
- 保留两个常驻工具入口、原触发概率、睡眠规则和防重复投递行为。
|
|
7
|
+
|
|
8
|
+
提示改进不保证模型一定采取某种行动;实际行为需通过后续自然触发记录观察。
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
# 2.21.0
|
|
2
|
+
|
|
3
|
+
- 角色聊天新增好感度、等级与进度条。每个伙伴独立保存一份进度;同一伙伴适用的渠道与多个归属账号共用该伙伴的进度,不跨伙伴共享。
|
|
4
|
+
- 通用适配器默认参与;QQ 适配器只接纳核验的归属账号。群聊、私聊共用,普通 QQ 成员不累计、不应用加成,面向整个群的自主活动不借用归属身份。
|
|
5
|
+
- 角色聊天开启时默认累计,初始 20/100。有效对话完成后 +1,同一伙伴每 10 分钟最多累计一次;失败、中断、试聊、梦境和自主活动不加分,不追算历史,不因离线扣分。关闭功能保留进度。
|
|
6
|
+
- 五个等级对应自然接话、分享兴趣、主动话题、关心与语音、默契互动。适用对象的闲时自主活动概率乘以 1 + 好感度/100,上限仍为 100%;不绕过原睡眠、忙碌、渠道开关与权限检查,不强制发送。
|
|
7
|
+
- 好感度是独立运行状态,不因身份编辑或上下文焕新丢失,不触发工具重新注册;不使用额外模型请求评分。界面只在对应面板可见时每 30 秒读取进度。
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
# 2.21.2
|
|
2
|
+
|
|
3
|
+
- 好感度缩成角色设定下方的小进度条,保留等级、累计开关与错误重试,不再单独占一个设置分段。
|
|
4
|
+
- 群聊自主接话改用本地加权评分,不再额外调用模型。结合称呼、提问、归属账号、好感度、近期成功回复、字符二元组话题相似度判断;不确定时按分数概率接话,同一消息固定抽签值。
|
|
5
|
+
- 明确 @ 或直接叫角色名优先接话;@ 他人不抢话。只有实际成功发送才建立两分钟内逐渐衰减的连续聊天加分,换人说话撤销。每条已接纳消息都进入判断,不因伙伴忙碌或冷却跳过。
|
|
6
|
+
- 最近群聊判断展示本地分数与接话概率,延迟诊断记录判断方式与分数。归属与好感度不改变工具权限。
|
|
7
|
+
- 闲时活动更积极探索已经开启的私有能力,仍遵守渠道权限、用户要求和发送去重,不强制每轮发消息或说说。
|
|
8
|
+
- 保留 2.21.1 的知识库统一工具入口兼容。
|
|
9
|
+
|
|
10
|
+
验证:覆盖本地评分、固定抽签、发送失败与权限撤销不建立连续聊天加分、结构化 @ 与引用、忙碌时逐条处理;好感度界面验证浅色/深色及手机/桌面布局。
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
# 2.21.3
|
|
2
|
+
|
|
3
|
+
- QQ 群聊改用会话归属、连续对话状态和可选本地语义分类,不再对正常接续逐条抽签。明确叫名、关系称呼、引用伙伴消息直接进入处理。
|
|
4
|
+
- 按群及发言人分别保留成功回复后的五分钟对话窗口,其他成员插话不会清空或继承;发送失败、旁听不延长窗口,明确转向他人或停止会结束对应状态。
|
|
5
|
+
- 分类不确定、忙碌或不可用时放行至正式回复模型。语义服务独立限额运行,支持中文及多语言编码,无额外远程大模型判定调用。
|
|
6
|
+
- 自主群聊允许通过原聊天回复入口提交空消息选择旁听,不发送技术提示;私聊、浏览器来源和非白名单群不能使用该路径。常驻工具数量和权限不变。
|
|
7
|
+
- 引用对象根据实际收发记录核验;本地判定显示具体接话原因。使用与评估范围见 docs/qq-attention.md。
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# 2.21.5 · 好感度与主动延续
|
|
2
|
+
|
|
3
|
+
开启「闲时自主活动」及角色好感度后,正常回复成功送达会获得一次主动延续抽签。默认渠道沿用好感度适配器;QQ 只对已核验的归属账号生效。每个伙伴独立计算,多个归属账号共享同一进度;同一伙伴最多保留一项待执行机会。
|
|
4
|
+
|
|
5
|
+
概率为 `0.05 + 0.40 × (好感度 / 100)²`,20 分约 6.6%,60 分约 19.4%,100 分为 45%。这是唤起自主决策的概率,不是必定再发一条消息。抽中后可自然延续话题、发表情或语音、使用已开启的私有能力,也可安静结束。工具权限与原配置一致,不添加顶层工具,不增加每日联系上限。
|
|
6
|
+
|
|
7
|
+
随机等待 20–90 秒后,由现有每分钟自主调度检查执行;因此实际开始时间可能再延后不足一分钟。忙碌时短暂等待,超过送达后三分钟仍未开始则取消。待执行延续会暂缓同一伙伴的普通闲时抽签,开始后也会更新闲时活动时间,避免两个自主流程抢跑。
|
|
8
|
+
|
|
9
|
+
发送失败、静默结果、内部通知、主动延续自身不再触发抽签。每次抽签的命中和未命中都会持久保存,重启不重抽。任何会话的新输入、睡眠、取消归属、关闭好感度或自主活动、身份版本变化、目标会话变化会使旧机会失效;发送及 QQ 私有工具执行前再次核验实时权限。用户提出的安静、告别和停止要求由自主决策结合对话遵守,抽中也不强制发送。
|
|
10
|
+
|
|
11
|
+
网页正常回复在会话回合结束并空闲后登记;渠道回复在文本、表情与附件全部交付成功后登记。延续始终回到原始会话,普通闲时活动继续使用设置中的目标会话。
|
|
12
|
+
|
|
13
|
+
验证:概率边界、命中与未命中去重、并发领取、跨会话打断、忙碌/过期、原始目标、睡眠/权限撤销、归属群身份、持久化与发送成功/失败/静默回归;未向真实 QQ 发送测试消息。
|
|
14
|
+
|
|
15
|
+
保留生产 2.21.4 的 knowledge/ssh 操作级工具入口兼容与原权限边界。
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# 知识库与 SSH 工具入口兼容
|
|
2
|
+
|
|
3
|
+
伙伴沿用当前会话实际可见的 `knowledge`、`ssh` 工具,不注册重复的旧工具,也不接管原插件的授权逻辑。新版使用 `list → describe → call`;`tool` 是内部操作名,`arguments` 是原操作参数。旧版本仍真实暴露独立工具时,保留原调用方式。
|
|
4
|
+
|
|
5
|
+
通过 `partner_tools` 调用时,`name` 为 `knowledge` 或 `ssh`,`argumentsJson` 为该入口完整参数的 JSON 字符串。代码模式使用实际生成的 `tools.knowledge` 或 `tools.ssh`。协作指令中的临时 SSH 授权和执行也遵守这个规则,不再要求调用未注册的顶层 `ssh_request_temporary_access`。
|
|
6
|
+
|
|
7
|
+
fork Skill 的 `allowed-tools` 由同一个操作级策略适配:旧 `knowledge_*` 映射到知识库入口,旧 `ssh_*` 和明确列出的 SSH 文件传输操作映射到 SSH 入口。映射不修改 Skill、不扩大权限:目录可查询,但只能 describe/call 原白名单里的操作。其他插件的 `file_*` 不会自动获得 SSH 权限;显式允许入口名称时,仍受父级可见范围和原插件业务权限限制。
|
|
8
|
+
|
|
9
|
+
模型可见工具过滤与执行守卫同时生效,未允许的作用域 MCP 工具也会被拒绝。空白名单不能因稍后注册新工具而恢复访问。主机权限、任务绑定临时授权、文件操作审批、知识库挂载范围、笔记预览与确认流程保持原样;持续关注检查依旧只读,不能借统一入口写入或访问笔记。
|
|
10
|
+
|
|
11
|
+
验证使用真实 DSH ToolRuntime 检查操作级拒绝、父级撤权、作用域工具、空白名单、守卫销毁和伙伴入口嵌套调用。不会连接真实 SSH 主机或写入用户知识文档。
|
package/lib/agent-runtime.d.ts
CHANGED
|
@@ -79,6 +79,7 @@ export declare class PartnerAgentRuntime {
|
|
|
79
79
|
private readonly reflection?;
|
|
80
80
|
private readonly concerns?;
|
|
81
81
|
private readonly composer?;
|
|
82
|
+
private readonly latestPostReplyInput;
|
|
82
83
|
private readonly handles;
|
|
83
84
|
private readonly queues;
|
|
84
85
|
private readonly heartbeatQueues;
|
|
@@ -89,7 +90,9 @@ export declare class PartnerAgentRuntime {
|
|
|
89
90
|
private readonly restoredCompositionJobs;
|
|
90
91
|
private readonly disposeAgentListener;
|
|
91
92
|
private readonly disposeConfigurationListener;
|
|
93
|
+
private readonly disposeToolAuthority;
|
|
92
94
|
private readonly disposeAssemblyListener;
|
|
95
|
+
private readonly autonomousAssemblyContexts;
|
|
93
96
|
private readonly rebuildingAssemblies;
|
|
94
97
|
private readonly configurations;
|
|
95
98
|
private readonly characterContexts;
|
|
@@ -101,8 +104,14 @@ export declare class PartnerAgentRuntime {
|
|
|
101
104
|
private questionAnswerer;
|
|
102
105
|
constructor(ctx: RuntimeContext, store: PartnerStore, defaultCwd: string, memory?: PartnerMemoryStore | undefined, reflection?: MemoryReflectionService | undefined, concerns?: PartnerConcernStore | undefined, composer?: PartnerAgentComposer | undefined);
|
|
103
106
|
setQuestionAnswerer(answerer: PartnerQuestionAnswerer): void;
|
|
107
|
+
/** Cancel pending/claimed continuations as soon as another real input is admitted. */
|
|
108
|
+
cancelPostReply(companionId: string, keepUserMessageId?: string): Promise<void>;
|
|
109
|
+
localReplyDisplayed(source: NonNullable<PartnerReply['postReplySource']>): Promise<void>;
|
|
110
|
+
/** Called only after delivery succeeds; autonomous notices never carry this provenance. */
|
|
111
|
+
replyDelivered(source: NonNullable<PartnerReply['postReplySource']>): Promise<void>;
|
|
104
112
|
/** Use the existing timer and real conversation; never impersonate user input. */
|
|
105
113
|
idleContact(companionId: string, timeZone?: string): Promise<void>;
|
|
114
|
+
idleContactDeliveryCurrent(origin: NonNullable<PartnerReply['idleContactOrigin']>): Promise<boolean>;
|
|
106
115
|
reply(companion: Companion, channelId: string, userId: string, message: PartnerInboundMessage, progress?: ReplyProgress): Promise<PartnerReply>;
|
|
107
116
|
steer(companion: Companion, channelId: string, userId: string, message: PartnerInboundMessage): Promise<boolean>;
|
|
108
117
|
private deliverSteering;
|
|
@@ -156,11 +165,17 @@ export declare class PartnerAgentRuntime {
|
|
|
156
165
|
prepareAgentTurn(agent: Agent, turn: number, signal: AbortSignal): Promise<void>;
|
|
157
166
|
/** Also used by assembly: never return a model-facing snapshot before setup. */
|
|
158
167
|
prepareAgentAssembly(agent: Agent, signal: AbortSignal): Promise<boolean>;
|
|
168
|
+
private readonly replyPresentations;
|
|
159
169
|
private readonly contextRevisions;
|
|
160
170
|
private prepareConversationContext;
|
|
161
171
|
/** Catch up visible legacy/interrupted turns before the final review; retries use stable IDs. */
|
|
162
172
|
prepareRenewalMemory(companionId: string): Promise<void>;
|
|
163
173
|
renewReviewedContexts(companionId: string, day: string): Promise<number>;
|
|
174
|
+
companionActivity(companionId: string): {
|
|
175
|
+
kind: string;
|
|
176
|
+
label: string;
|
|
177
|
+
sessionId?: string;
|
|
178
|
+
}[];
|
|
164
179
|
isCompanionBusy(companionId: string): boolean;
|
|
165
180
|
private releaseCompanion;
|
|
166
181
|
resetChannel(channelId: string): Promise<void>;
|
|
@@ -169,7 +184,9 @@ export declare class PartnerAgentRuntime {
|
|
|
169
184
|
private drive;
|
|
170
185
|
private rememberMessageOrigin;
|
|
171
186
|
private persistInbound;
|
|
187
|
+
reconcileQqSessions(): Promise<void>;
|
|
172
188
|
private ensureSession;
|
|
189
|
+
private nameQqSession;
|
|
173
190
|
private ensureAgent;
|
|
174
191
|
private ensureAgentReady;
|
|
175
192
|
private composeRestoredAgent;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-runtime.d.ts","sourceRoot":"","sources":["../src/agent-runtime.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"agent-runtime.d.ts","sourceRoot":"","sources":["../src/agent-runtime.ts"],"names":[],"mappings":"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"}
|