@zhin.js/agent 1.1.14 → 1.1.16
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 +5 -4
- package/lib/activity-feedback/adapter-integration.d.ts +33 -10
- package/lib/activity-feedback/adapter-integration.d.ts.map +1 -1
- package/lib/activity-feedback/adapter-integration.js +90 -88
- package/lib/activity-feedback/adapter-integration.js.map +1 -1
- package/lib/activity-feedback/ai-bus.d.ts +2 -1
- package/lib/activity-feedback/ai-bus.d.ts.map +1 -1
- package/lib/activity-feedback/ai-bus.js +14 -3
- package/lib/activity-feedback/ai-bus.js.map +1 -1
- package/lib/activity-feedback/index.d.ts +3 -3
- package/lib/activity-feedback/index.d.ts.map +1 -1
- package/lib/activity-feedback/index.js +2 -2
- package/lib/activity-feedback/index.js.map +1 -1
- package/lib/activity-feedback/manager.d.ts +0 -5
- package/lib/activity-feedback/manager.d.ts.map +1 -1
- package/lib/activity-feedback/manager.js +21 -17
- package/lib/activity-feedback/manager.js.map +1 -1
- package/lib/activity-feedback/turn-event-projector.d.ts +11 -0
- package/lib/activity-feedback/turn-event-projector.d.ts.map +1 -0
- package/lib/activity-feedback/turn-event-projector.js +58 -0
- package/lib/activity-feedback/turn-event-projector.js.map +1 -0
- package/lib/ai-event-subscriber.d.ts +2 -2
- package/lib/ai-event-subscriber.d.ts.map +1 -1
- package/lib/ai-event-subscriber.js +1 -1
- package/lib/ai-event-subscriber.js.map +1 -1
- package/lib/authoring/bridge.d.ts.map +1 -1
- package/lib/authoring/bridge.js +15 -4
- package/lib/authoring/bridge.js.map +1 -1
- package/lib/authoring/define-tool.d.ts +8 -3
- package/lib/authoring/define-tool.d.ts.map +1 -1
- package/lib/authoring/define-tool.js +10 -0
- package/lib/authoring/define-tool.js.map +1 -1
- package/lib/authoring/types.d.ts +10 -3
- package/lib/authoring/types.d.ts.map +1 -1
- package/lib/authoring/types.js.map +1 -1
- package/lib/config/zhin-agent-config.d.ts +1 -3
- package/lib/config/zhin-agent-config.d.ts.map +1 -1
- package/lib/config/zhin-agent-defaults.d.ts.map +1 -1
- package/lib/config/zhin-agent-defaults.js +0 -2
- package/lib/config/zhin-agent-defaults.js.map +1 -1
- package/lib/core/agent-core-run.js +1 -1
- package/lib/core/agent-core-run.js.map +1 -1
- package/lib/deferred-worker-runner.d.ts.map +1 -1
- package/lib/deferred-worker-runner.js +2 -15
- package/lib/deferred-worker-runner.js.map +1 -1
- package/lib/deferred-worker-tool-load.d.ts +1 -1
- package/lib/deferred-worker-tool-load.js +1 -1
- package/lib/event/event-emitter.js +1 -1
- package/lib/event/event-emitter.js.map +1 -1
- package/lib/hooks.d.ts +0 -12
- package/lib/hooks.d.ts.map +1 -1
- package/lib/hooks.js.map +1 -1
- package/lib/index.d.ts +8 -11
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +6 -7
- package/lib/index.js.map +1 -1
- package/lib/init/dispose-zhin-agent.d.ts +1 -1
- package/lib/init/dispose-zhin-agent.d.ts.map +1 -1
- package/lib/init/dispose-zhin-agent.js +2 -2
- package/lib/init/dispose-zhin-agent.js.map +1 -1
- package/lib/internal/agent-host.d.ts +0 -3
- package/lib/internal/agent-host.d.ts.map +1 -1
- package/lib/plugin-runtime/agent-host-port.d.ts +8 -0
- package/lib/plugin-runtime/agent-host-port.d.ts.map +1 -1
- package/lib/plugin-runtime/agent-host-port.js.map +1 -1
- package/lib/plugin-runtime/capability-ingress.d.ts +2 -0
- package/lib/plugin-runtime/capability-ingress.d.ts.map +1 -1
- package/lib/plugin-runtime/capability-ingress.js +7 -0
- package/lib/plugin-runtime/capability-ingress.js.map +1 -1
- package/lib/plugin-runtime/capability-tools.d.ts.map +1 -1
- package/lib/plugin-runtime/capability-tools.js +1 -0
- package/lib/plugin-runtime/capability-tools.js.map +1 -1
- package/lib/plugin-runtime/full-agent-turn-engine.d.ts.map +1 -1
- package/lib/plugin-runtime/full-agent-turn-engine.js +31 -29
- package/lib/plugin-runtime/full-agent-turn-engine.js.map +1 -1
- package/lib/plugin-runtime/index.d.ts +1 -0
- package/lib/plugin-runtime/index.d.ts.map +1 -1
- package/lib/plugin-runtime/index.js.map +1 -1
- package/lib/plugin-runtime/workroom-projection-outbound.d.ts +4 -4
- package/lib/plugin-runtime/workroom-projection-outbound.d.ts.map +1 -1
- package/lib/plugin-runtime/workroom-projection-outbound.js +2 -2
- package/lib/plugin-runtime/workroom-projection-outbound.js.map +1 -1
- package/lib/prompt/assembly.d.ts +3 -1
- package/lib/prompt/assembly.d.ts.map +1 -1
- package/lib/prompt/assembly.js +27 -52
- package/lib/prompt/assembly.js.map +1 -1
- package/lib/prompt/index.d.ts +3 -6
- package/lib/prompt/index.d.ts.map +1 -1
- package/lib/prompt/index.js +2 -4
- package/lib/prompt/index.js.map +1 -1
- package/lib/prompt/prompt-assembly-registry.d.ts +14 -6
- package/lib/prompt/prompt-assembly-registry.d.ts.map +1 -1
- package/lib/prompt/prompt-assembly-registry.js +14 -5
- package/lib/prompt/prompt-assembly-registry.js.map +1 -1
- package/lib/prompt/prompt-budget.d.ts +11 -6
- package/lib/prompt/prompt-budget.d.ts.map +1 -1
- package/lib/prompt/prompt-budget.js +42 -11
- package/lib/prompt/prompt-budget.js.map +1 -1
- package/lib/prompt/system-prompt.d.ts +2 -4
- package/lib/prompt/system-prompt.d.ts.map +1 -1
- package/lib/prompt/system-prompt.js +34 -54
- package/lib/prompt/system-prompt.js.map +1 -1
- package/lib/resource-hub/index.d.ts +15 -5
- package/lib/resource-hub/index.d.ts.map +1 -1
- package/lib/resource-hub/index.js +10 -0
- package/lib/resource-hub/index.js.map +1 -1
- package/lib/resource-hub/public-api.d.ts +10 -0
- package/lib/resource-hub/public-api.d.ts.map +1 -0
- package/lib/resource-hub/public-api.js +6 -0
- package/lib/resource-hub/public-api.js.map +1 -0
- package/lib/resource-hub/types.d.ts +2 -1
- package/lib/resource-hub/types.d.ts.map +1 -1
- package/lib/subagent/subagent-runtime.d.ts +13 -1
- package/lib/subagent/subagent-runtime.d.ts.map +1 -1
- package/lib/subagent/subagent-runtime.js +136 -34
- package/lib/subagent/subagent-runtime.js.map +1 -1
- package/lib/subagent/subagent-system-init.js +4 -4
- package/lib/subagent/subagent-system-init.js.map +1 -1
- package/lib/subagent/subagent-system.d.ts +2 -1
- package/lib/subagent/subagent-system.d.ts.map +1 -1
- package/lib/subagent/subagent-system.js +10 -3
- package/lib/subagent/subagent-system.js.map +1 -1
- package/lib/task-executor.d.ts +7 -1
- package/lib/task-executor.d.ts.map +1 -1
- package/lib/task-executor.js +74 -48
- package/lib/task-executor.js.map +1 -1
- package/lib/turn/inbound-queue-runtime.d.ts.map +1 -1
- package/lib/turn/inbound-queue-runtime.js +6 -2
- package/lib/turn/inbound-queue-runtime.js.map +1 -1
- package/lib/turn/inbound-turn-queue.d.ts +1 -0
- package/lib/turn/inbound-turn-queue.d.ts.map +1 -1
- package/lib/turn/inbound-turn-queue.js +14 -4
- package/lib/turn/inbound-turn-queue.js.map +1 -1
- package/lib/turn/index.d.ts +1 -1
- package/lib/turn/index.d.ts.map +1 -1
- package/lib/turn/index.js +1 -1
- package/lib/turn/index.js.map +1 -1
- package/lib/turn/turn-context-bridge.d.ts +0 -2
- package/lib/turn/turn-context-bridge.d.ts.map +1 -1
- package/lib/turn/turn-context-bridge.js +1 -8
- package/lib/turn/turn-context-bridge.js.map +1 -1
- package/lib/turn/turn-ingress.d.ts +3 -1
- package/lib/turn/turn-ingress.d.ts.map +1 -1
- package/lib/turn/turn-ingress.js.map +1 -1
- package/lib/turn/turn-pipeline.d.ts +1 -1
- package/lib/turn/turn-pipeline.d.ts.map +1 -1
- package/lib/turn/turn-pipeline.js +40 -3
- package/lib/turn/turn-pipeline.js.map +1 -1
- package/lib/typing-indicator/index.d.ts +4 -0
- package/lib/typing-indicator/index.d.ts.map +1 -1
- package/lib/typing-indicator/index.js +96 -23
- package/lib/typing-indicator/index.js.map +1 -1
- package/lib/utils/keyed-mutex.d.ts +1 -1
- package/lib/utils/keyed-mutex.d.ts.map +1 -1
- package/lib/utils/keyed-mutex.js +18 -4
- package/lib/utils/keyed-mutex.js.map +1 -1
- package/lib/workroom/journal.d.ts +4 -1
- package/lib/workroom/journal.d.ts.map +1 -1
- package/lib/workroom/journal.js +93 -6
- package/lib/workroom/journal.js.map +1 -1
- package/lib/workroom/kernel-contracts.d.ts +2 -1
- package/lib/workroom/kernel-contracts.d.ts.map +1 -1
- package/lib/workroom/kernel-state.d.ts.map +1 -1
- package/lib/workroom/kernel-state.js +35 -1
- package/lib/workroom/kernel-state.js.map +1 -1
- package/lib/workroom/runtime.d.ts +34 -1
- package/lib/workroom/runtime.d.ts.map +1 -1
- package/lib/workroom/runtime.js +97 -5
- package/lib/workroom/runtime.js.map +1 -1
- package/lib/workroom/workroom-kernel.d.ts +6 -0
- package/lib/workroom/workroom-kernel.d.ts.map +1 -1
- package/lib/workroom/workroom-kernel.js +129 -0
- package/lib/workroom/workroom-kernel.js.map +1 -1
- package/lib/workroom/workroom-run-control.d.ts +69 -0
- package/lib/workroom/workroom-run-control.d.ts.map +1 -0
- package/lib/workroom/workroom-run-control.js +144 -0
- package/lib/workroom/workroom-run-control.js.map +1 -0
- package/lib/workroom/workroom-scheduler.d.ts.map +1 -1
- package/lib/workroom/workroom-scheduler.js +9 -1
- package/lib/workroom/workroom-scheduler.js.map +1 -1
- package/lib/zhin-agent/index.d.ts +2 -5
- package/lib/zhin-agent/index.d.ts.map +1 -1
- package/lib/zhin-agent/index.js +23 -17
- package/lib/zhin-agent/index.js.map +1 -1
- package/package.json +12 -11
- package/lib/agent-prompt/format.d.ts +0 -6
- package/lib/agent-prompt/format.d.ts.map +0 -1
- package/lib/agent-prompt/format.js +0 -40
- package/lib/agent-prompt/format.js.map +0 -1
- package/lib/agent-prompt/index.d.ts +0 -5
- package/lib/agent-prompt/index.d.ts.map +0 -1
- package/lib/agent-prompt/index.js +0 -4
- package/lib/agent-prompt/index.js.map +0 -1
- package/lib/agent-prompt/registry.d.ts +0 -7
- package/lib/agent-prompt/registry.d.ts.map +0 -1
- package/lib/agent-prompt/registry.js +0 -23
- package/lib/agent-prompt/registry.js.map +0 -1
- package/lib/agent-prompt/resolver.d.ts +0 -13
- package/lib/agent-prompt/resolver.d.ts.map +0 -1
- package/lib/agent-prompt/resolver.js +0 -75
- package/lib/agent-prompt/resolver.js.map +0 -1
- package/lib/prompt/define-agent-prompt-section.d.ts +0 -29
- package/lib/prompt/define-agent-prompt-section.d.ts.map +0 -1
- package/lib/prompt/define-agent-prompt-section.js +0 -22
- package/lib/prompt/define-agent-prompt-section.js.map +0 -1
- package/lib/prompt/discover-prompt-sections.d.ts +0 -21
- package/lib/prompt/discover-prompt-sections.d.ts.map +0 -1
- package/lib/prompt/discover-prompt-sections.js +0 -49
- package/lib/prompt/discover-prompt-sections.js.map +0 -1
- package/lib/prompt/prompt-section-loader.d.ts +0 -27
- package/lib/prompt/prompt-section-loader.d.ts.map +0 -1
- package/lib/prompt/prompt-section-loader.js +0 -75
- package/lib/prompt/prompt-section-loader.js.map +0 -1
package/README.md
CHANGED
|
@@ -97,7 +97,7 @@ turn 会跨代执行。
|
|
|
97
97
|
- 🛡️ **6 层 Bash 安全**:`ExecPolicy` 纵深防御(危险黑名单、环境变量剥离、wrapper 剥离、复合命令拆分、只读放行、交互式审批)
|
|
98
98
|
- 📂 **文件访问安全**:`FilePolicy` 路径检查、设备路径拦截、命令读写分类
|
|
99
99
|
- 📋 **精简系统提示词**:`PromptBuilder` 组装 Context、Style、Tools、Safety,并按需注入 Platform、Skills、Memory、Bootstrap
|
|
100
|
-
- 🧩
|
|
100
|
+
- 🧩 **代际提示词能力**:`@zhin.js/prompt-section` 将插件上下文投影到当前 Runtime generation,`order` 与 `retention` 分离,并在 `systemPromptMaxChars` 预算下明确保留或失败
|
|
101
101
|
- 🔌 **框架挂载**:Plugin Runtime (basic/cli) 装配 Agent 服务,通过 Scope+Token 提供
|
|
102
102
|
- 📦 **上下文与记忆**:`ContextRepository`(`agent_messages`)、`AgentSessionStore`;聊天事件从 `ConversationEventStore` 游标消费
|
|
103
103
|
- ⏰ **跟进与定时**:`FollowUpManager`、`PersistentCronEngine`、cron 工具
|
|
@@ -113,9 +113,10 @@ turn 会跨代执行。
|
|
|
113
113
|
|
|
114
114
|
## PromptAssemblyRegistry
|
|
115
115
|
|
|
116
|
-
`buildRichSystemPrompt()`
|
|
117
|
-
|
|
118
|
-
`
|
|
116
|
+
`buildRichSystemPrompt()` 先创建内建分段,再合并当前 Runtime snapshot 中的
|
|
117
|
+
Prompt Section 投影。身份由 owner 与本地名共同决定,重复身份会在组合时被拒绝,
|
|
118
|
+
不存在暗中覆盖。最终内容按 `order` 呈现,并按 `retention` 和 `maxChars`
|
|
119
|
+
执行预算策略。新回合使用新 generation,已开始回合保持原 generation。
|
|
119
120
|
|
|
120
121
|
## 模块化架构(理想蓝图 8 模块)
|
|
121
122
|
|
|
@@ -1,14 +1,37 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Activity Feedback — endpoint 适配器集成(复用 typing-indicator 底层适配器)
|
|
3
3
|
*/
|
|
4
|
-
import type {
|
|
5
|
-
import {
|
|
4
|
+
import type { EndpointControl } from '@zhin.js/core';
|
|
5
|
+
import type { ConversationRef } from '@zhin.js/im-contract';
|
|
6
6
|
import { type TypingIndicator, type TypingIndicatorOptions } from '../typing-indicator/index.js';
|
|
7
7
|
import { PLATFORM_FEATURES, buildTypingSendContent, type PlatformFeatures } from '../typing-indicator/adapter-integration.js';
|
|
8
8
|
import { ActivityFeedbackManager } from './manager.js';
|
|
9
9
|
import type { ActivityFeedbackPhase, ResolvedActivityFeedbackPhaseConfig } from './types.js';
|
|
10
10
|
export { PLATFORM_FEATURES, buildTypingSendContent, type PlatformFeatures };
|
|
11
|
-
|
|
11
|
+
/**
|
|
12
|
+
* Narrow outbound seam used by activity feedback.
|
|
13
|
+
*
|
|
14
|
+
* An Adapter definition selects and constructs Endpoints; it is not a live
|
|
15
|
+
* message sender. Runtime integrations therefore depend on this port instead
|
|
16
|
+
* of importing or fabricating the legacy all-in-one Adapter class.
|
|
17
|
+
*/
|
|
18
|
+
export interface ActivityFeedbackSendPort {
|
|
19
|
+
send(input: Readonly<{
|
|
20
|
+
conversation: ConversationRef;
|
|
21
|
+
content: unknown;
|
|
22
|
+
}>): Promise<string | null | undefined>;
|
|
23
|
+
}
|
|
24
|
+
/** Structural compatibility for callers that still expose legacy sendMessage. */
|
|
25
|
+
export interface LegacyActivityFeedbackSendPort {
|
|
26
|
+
sendMessage(options: Readonly<{
|
|
27
|
+
type: 'private' | 'group';
|
|
28
|
+
id: string;
|
|
29
|
+
context: string;
|
|
30
|
+
endpoint: string;
|
|
31
|
+
content: unknown;
|
|
32
|
+
}>): Promise<string | null | undefined>;
|
|
33
|
+
}
|
|
34
|
+
export type ActivityFeedbackOutbound = ActivityFeedbackSendPort | LegacyActivityFeedbackSendPort;
|
|
12
35
|
export interface PlatformActivityFeedbackStartOptions {
|
|
13
36
|
messageId?: string;
|
|
14
37
|
sessionId: string;
|
|
@@ -31,20 +54,20 @@ export interface PlatformActivityFeedbackManager {
|
|
|
31
54
|
getActiveIndicator?(phase: ActivityFeedbackPhase, options: TypingIndicatorOptions): TypingIndicator | undefined;
|
|
32
55
|
}
|
|
33
56
|
export type BotActivityFeedbackManager = ActivityFeedbackManager | PlatformActivityFeedbackManager;
|
|
34
|
-
export interface EndpointWithActivityFeedback
|
|
57
|
+
export interface EndpointWithActivityFeedback {
|
|
58
|
+
/** Concrete Endpoint identity within one Adapter definition. */
|
|
59
|
+
readonly $id: string;
|
|
60
|
+
/** Runtime IO/control belongs to the concrete Endpoint, never the Adapter definition. */
|
|
61
|
+
readonly control?: EndpointControl;
|
|
35
62
|
$activityFeedback?: BotActivityFeedbackManager;
|
|
36
63
|
}
|
|
37
64
|
export declare class AdapterActivityFeedbackManager {
|
|
38
65
|
private managers;
|
|
39
|
-
enableForEndpoint(endpoint: EndpointWithActivityFeedback, platform: string, outbound?:
|
|
66
|
+
enableForEndpoint(endpoint: EndpointWithActivityFeedback, platform: string, outbound?: ActivityFeedbackOutbound): ActivityFeedbackManager;
|
|
40
67
|
getManager(platform: string, endpointKey: string): ActivityFeedbackManager | undefined;
|
|
41
68
|
stopAll(platform: string, endpointKey: string): Promise<void>;
|
|
42
69
|
clearAll(): void;
|
|
43
70
|
}
|
|
44
|
-
export declare function
|
|
45
|
-
export declare function provideAdapterActivityFeedbackManager(context: GenerationStoreContext): AdapterActivityFeedbackManager;
|
|
46
|
-
/** @deprecated 使用 provideAdapterActivityFeedbackManager 替代 */
|
|
47
|
-
export declare const initAdapterActivityFeedbackManager: () => AdapterActivityFeedbackManager;
|
|
48
|
-
export declare function enableActivityFeedbackForBot(endpoint: EndpointWithActivityFeedback, platform: string, outbound?: OutboundAdapter): ActivityFeedbackManager;
|
|
71
|
+
export declare function enableActivityFeedbackForBot(endpoint: EndpointWithActivityFeedback, platform: string, outbound?: ActivityFeedbackOutbound): ActivityFeedbackManager;
|
|
49
72
|
export declare function isGenericActivityFeedbackManager(manager: BotActivityFeedbackManager): manager is ActivityFeedbackManager;
|
|
50
73
|
//# sourceMappingURL=adapter-integration.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adapter-integration.d.ts","sourceRoot":"","sources":["../../src/activity-feedback/adapter-integration.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"adapter-integration.d.ts","sourceRoot":"","sources":["../../src/activity-feedback/adapter-integration.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,8 +2,7 @@
|
|
|
2
2
|
* Activity Feedback — endpoint 适配器集成(复用 typing-indicator 底层适配器)
|
|
3
3
|
*/
|
|
4
4
|
import { getLogger } from '@zhin.js/logger';
|
|
5
|
-
import {
|
|
6
|
-
import { ReactionTypingIndicatorAdapter, GenericTypingIndicatorAdapter, } from '../typing-indicator/index.js';
|
|
5
|
+
import { MessageTypingIndicator, NativeTypingIndicator, NoneTypingIndicator, ReactionTypingIndicator, } from '../typing-indicator/index.js';
|
|
7
6
|
import { PLATFORM_FEATURES, buildTypingSendContent, } from '../typing-indicator/adapter-integration.js';
|
|
8
7
|
import { ActivityFeedbackManager } from './manager.js';
|
|
9
8
|
const logger = getLogger('ActivityFeedback');
|
|
@@ -34,20 +33,24 @@ function createOutboundSendMessage(endpoint, platform, messages, outbound) {
|
|
|
34
33
|
if (!segments)
|
|
35
34
|
return null;
|
|
36
35
|
const { type, id } = resolveSendTarget(options);
|
|
37
|
-
const sendOptions = {
|
|
38
|
-
type,
|
|
39
|
-
id,
|
|
40
|
-
context: platform,
|
|
41
|
-
endpoint: endpoint.$id,
|
|
42
|
-
content: segments,
|
|
43
|
-
};
|
|
44
36
|
if (outbound) {
|
|
45
|
-
const messageId =
|
|
37
|
+
const messageId = 'send' in outbound
|
|
38
|
+
? await outbound.send({
|
|
39
|
+
conversation: toConversationRef(endpoint, platform, options),
|
|
40
|
+
content: segments,
|
|
41
|
+
})
|
|
42
|
+
: await outbound.sendMessage({
|
|
43
|
+
type,
|
|
44
|
+
id,
|
|
45
|
+
context: platform,
|
|
46
|
+
endpoint: endpoint.$id,
|
|
47
|
+
content: segments,
|
|
48
|
+
});
|
|
46
49
|
if (messageId)
|
|
47
50
|
messages.set(messageId, toMessageRef(endpoint, platform, options, messageId));
|
|
48
|
-
return messageId;
|
|
51
|
+
return messageId ?? null;
|
|
49
52
|
}
|
|
50
|
-
logger.error(`[${platform}] Activity feedback requires
|
|
53
|
+
logger.error(`[${platform}] Activity feedback requires an outbound send port; endpoint ${endpoint.$id} has none`);
|
|
51
54
|
return null;
|
|
52
55
|
}
|
|
53
56
|
catch (error) {
|
|
@@ -56,113 +59,112 @@ function createOutboundSendMessage(endpoint, platform, messages, outbound) {
|
|
|
56
59
|
}
|
|
57
60
|
};
|
|
58
61
|
}
|
|
59
|
-
function registerPlatformAdapters(manager, endpoint, platform,
|
|
62
|
+
function registerPlatformAdapters(manager, endpoint, platform, outbound) {
|
|
60
63
|
const messages = new Map();
|
|
61
64
|
const sendMessage = createOutboundSendMessage(endpoint, platform, messages, outbound);
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
65
|
+
manager.registerAdapter(new EndpointActivityFeedbackAdapter(platform, endpoint, messages, sendMessage));
|
|
66
|
+
}
|
|
67
|
+
/** One adapter selected from the concrete Endpoint control contract, not its platform name. */
|
|
68
|
+
class EndpointActivityFeedbackAdapter {
|
|
69
|
+
platform;
|
|
70
|
+
endpoint;
|
|
71
|
+
messages;
|
|
72
|
+
sendMessage;
|
|
73
|
+
supportedTypes;
|
|
74
|
+
constructor(platform, endpoint, messages, sendMessage) {
|
|
75
|
+
this.platform = platform;
|
|
76
|
+
this.endpoint = endpoint;
|
|
77
|
+
this.messages = messages;
|
|
78
|
+
this.sendMessage = sendMessage;
|
|
79
|
+
const types = [];
|
|
80
|
+
if (endpoint.control?.addReaction && endpoint.control.removeReaction)
|
|
81
|
+
types.push('reaction');
|
|
82
|
+
if (endpoint.control?.typing)
|
|
83
|
+
types.push('typing');
|
|
84
|
+
// Activity messages are transient state, so advertising them without a
|
|
85
|
+
// matching recall operation would leave permanent “processing” debris in IM.
|
|
86
|
+
if (endpoint.control?.recall)
|
|
87
|
+
types.push('message');
|
|
88
|
+
types.push('none');
|
|
89
|
+
this.supportedTypes = types;
|
|
90
|
+
}
|
|
91
|
+
createIndicator(options, config) {
|
|
92
|
+
if (config.type === 'reaction' && this.endpoint.control?.addReaction && this.endpoint.control.removeReaction) {
|
|
93
|
+
return new ReactionTypingIndicator(options, config, async (messageId, emoji, current) => {
|
|
94
|
+
const message = toMessageRef(this.endpoint, this.platform, current, messageId);
|
|
95
|
+
this.messages.set(messageId, message);
|
|
96
|
+
return this.endpoint.control.addReaction(message, emoji, {
|
|
97
|
+
sceneType: current.sceneType,
|
|
98
|
+
channelId: current.groupId,
|
|
70
99
|
});
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
}
|
|
76
|
-
}, async (messageId, reactionId) => {
|
|
77
|
-
const message = messages.get(messageId);
|
|
78
|
-
if (!message)
|
|
79
|
-
return;
|
|
80
|
-
void Promise.resolve(endpoint.control.removeReaction(message, reactionId)).catch((error) => {
|
|
81
|
-
logger.warn(`[${platform}] Failed to remove reaction:`, error);
|
|
100
|
+
}, async (messageId, reactionId) => {
|
|
101
|
+
const message = this.messages.get(messageId);
|
|
102
|
+
if (message)
|
|
103
|
+
await this.endpoint.control.removeReaction(message, reactionId);
|
|
82
104
|
});
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
105
|
+
}
|
|
106
|
+
if (config.type === 'typing' && this.endpoint.control?.typing) {
|
|
107
|
+
return new NativeTypingIndicator(options, config, async (current) => this.endpoint.control.typing(toConversationRef(this.endpoint, this.platform, current), true), async (current) => this.endpoint.control.typing(toConversationRef(this.endpoint, this.platform, current), false));
|
|
108
|
+
}
|
|
109
|
+
if (config.type === 'message' && this.endpoint.control?.recall) {
|
|
110
|
+
return new MessageTypingIndicator(options, config, this.sendMessage, async (messageId) => {
|
|
111
|
+
const message = this.messages.get(messageId);
|
|
112
|
+
if (message)
|
|
113
|
+
await this.endpoint.control.recall(message);
|
|
114
|
+
}, async (messageId, content) => {
|
|
115
|
+
const message = this.messages.get(messageId);
|
|
116
|
+
if (message && this.endpoint.control?.edit)
|
|
117
|
+
await this.endpoint.control.edit(message, content);
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
return new NoneTypingIndicator();
|
|
96
121
|
}
|
|
97
|
-
manager.registerAdapter(new GenericTypingIndicatorAdapter(platform, sendMessage, async (messageId) => {
|
|
98
|
-
const message = messages.get(messageId);
|
|
99
|
-
if (message)
|
|
100
|
-
await endpoint.control?.recall?.(message);
|
|
101
|
-
}, async (messageId, content) => {
|
|
102
|
-
const editBot = endpoint;
|
|
103
|
-
const message = messages.get(messageId);
|
|
104
|
-
if (message && endpoint.control?.edit)
|
|
105
|
-
await endpoint.control.edit(message, content);
|
|
106
|
-
else if (typeof editBot.$updateMessage === 'function')
|
|
107
|
-
await editBot.$updateMessage(messageId, content);
|
|
108
|
-
}));
|
|
109
122
|
}
|
|
110
123
|
function toMessageRef(endpoint, platform, options, id) {
|
|
111
|
-
const target = resolveSendTarget(options);
|
|
112
124
|
return {
|
|
113
|
-
conversation:
|
|
114
|
-
endpoint: { id: endpoint.$id, adapter: platform },
|
|
115
|
-
kind: options.sceneType,
|
|
116
|
-
id: target.id,
|
|
117
|
-
},
|
|
125
|
+
conversation: toConversationRef(endpoint, platform, options),
|
|
118
126
|
id,
|
|
119
127
|
};
|
|
120
128
|
}
|
|
129
|
+
function toConversationRef(endpoint, platform, options) {
|
|
130
|
+
const target = resolveSendTarget(options);
|
|
131
|
+
return {
|
|
132
|
+
endpoint: { id: endpoint.$id, adapter: platform },
|
|
133
|
+
kind: options.sceneType,
|
|
134
|
+
id: target.id,
|
|
135
|
+
};
|
|
136
|
+
}
|
|
121
137
|
export class AdapterActivityFeedbackManager {
|
|
122
138
|
managers = new Map();
|
|
123
139
|
enableForEndpoint(endpoint, platform, outbound) {
|
|
124
|
-
const botKey =
|
|
140
|
+
const botKey = JSON.stringify([platform, endpoint.$id]);
|
|
125
141
|
if (this.managers.has(botKey)) {
|
|
126
142
|
return this.managers.get(botKey);
|
|
127
143
|
}
|
|
128
|
-
const features = PLATFORM_FEATURES[platform] ?? {
|
|
129
|
-
platform,
|
|
130
|
-
supportsReaction: false,
|
|
131
|
-
supportsEdit: false,
|
|
132
|
-
supportsDelete: true,
|
|
133
|
-
supportsTyping: false,
|
|
134
|
-
defaultType: 'message',
|
|
135
|
-
};
|
|
136
144
|
const manager = new ActivityFeedbackManager();
|
|
137
|
-
registerPlatformAdapters(manager, endpoint, platform,
|
|
145
|
+
registerPlatformAdapters(manager, endpoint, platform, outbound);
|
|
138
146
|
this.managers.set(botKey, manager);
|
|
139
147
|
endpoint.$activityFeedback = manager;
|
|
140
148
|
return manager;
|
|
141
149
|
}
|
|
142
150
|
getManager(platform, endpointKey) {
|
|
143
|
-
return this.managers.get(
|
|
151
|
+
return this.managers.get(JSON.stringify([platform, endpointKey]));
|
|
144
152
|
}
|
|
145
153
|
async stopAll(platform, endpointKey) {
|
|
146
|
-
await this.managers.get(
|
|
154
|
+
await this.managers.get(JSON.stringify([platform, endpointKey]))?.stopAll();
|
|
147
155
|
}
|
|
148
156
|
clearAll() {
|
|
149
157
|
this.managers.clear();
|
|
150
158
|
}
|
|
151
159
|
}
|
|
152
|
-
const adapterFeedbackStore = createGenerationStore('zhin.agent.adapter-activity-feedback');
|
|
153
|
-
export function getAdapterActivityFeedbackManager() {
|
|
154
|
-
return adapterFeedbackStore.tryUse() ?? new AdapterActivityFeedbackManager();
|
|
155
|
-
}
|
|
156
|
-
export function provideAdapterActivityFeedbackManager(context) {
|
|
157
|
-
const manager = new AdapterActivityFeedbackManager();
|
|
158
|
-
adapterFeedbackStore.provide(context, manager);
|
|
159
|
-
context.lifecycle.add(() => manager.clearAll());
|
|
160
|
-
return manager;
|
|
161
|
-
}
|
|
162
|
-
/** @deprecated 使用 provideAdapterActivityFeedbackManager 替代 */
|
|
163
|
-
export const initAdapterActivityFeedbackManager = () => new AdapterActivityFeedbackManager();
|
|
164
160
|
export function enableActivityFeedbackForBot(endpoint, platform, outbound) {
|
|
165
|
-
|
|
161
|
+
const existing = endpoint.$activityFeedback;
|
|
162
|
+
if (existing instanceof ActivityFeedbackManager)
|
|
163
|
+
return existing;
|
|
164
|
+
const manager = new ActivityFeedbackManager();
|
|
165
|
+
registerPlatformAdapters(manager, endpoint, platform, outbound);
|
|
166
|
+
endpoint.$activityFeedback = manager;
|
|
167
|
+
return manager;
|
|
166
168
|
}
|
|
167
169
|
export function isGenericActivityFeedbackManager(manager) {
|
|
168
170
|
return manager instanceof ActivityFeedbackManager;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adapter-integration.js","sourceRoot":"","sources":["../../src/activity-feedback/adapter-integration.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAG5C,OAAO,
|
|
1
|
+
{"version":3,"file":"adapter-integration.js","sourceRoot":"","sources":["../../src/activity-feedback/adapter-integration.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { AIEventPayload } from '../ai-event-subscriber.js';
|
|
2
|
-
type AIBusListener = (payload: AIEventPayload) => void
|
|
2
|
+
type AIBusListener = (payload: AIEventPayload) => void | Promise<void>;
|
|
3
3
|
/**
|
|
4
4
|
* Module-level AI event bus for Plugin Runtime consumers that cannot use
|
|
5
5
|
* Plugin ALS / `subscribeAIEvents(plugin, ...)`.
|
|
@@ -12,6 +12,7 @@ export declare class ActivityFeedbackAIBus {
|
|
|
12
12
|
on(event: string, listener: AIBusListener): this;
|
|
13
13
|
off(event: string, listener: AIBusListener): this;
|
|
14
14
|
emit(event: string, payload: AIEventPayload): void;
|
|
15
|
+
dispatch(event: string, payload: AIEventPayload): Promise<void>;
|
|
15
16
|
/** Test helper — clears all listeners. */
|
|
16
17
|
clear(): void;
|
|
17
18
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai-bus.d.ts","sourceRoot":"","sources":["../../src/activity-feedback/ai-bus.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAIhE,KAAK,aAAa,GAAG,CAAC,OAAO,EAAE,cAAc,KAAK,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"ai-bus.d.ts","sourceRoot":"","sources":["../../src/activity-feedback/ai-bus.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAIhE,KAAK,aAAa,GAAG,CAAC,OAAO,EAAE,cAAc,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAEvE;;;;;;GAMG;AACH,qBAAa,qBAAqB;IAChC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAyC;IAEnE,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,GAAG,IAAI;IAUhD,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,GAAG,IAAI;IAKjD,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,GAAG,IAAI;IAI5C,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAyBrE,0CAA0C;IAC1C,KAAK,IAAI,IAAI;CAGd;AAED,eAAO,MAAM,qBAAqB,uBAA8B,CAAC"}
|
|
@@ -23,6 +23,9 @@ export class ActivityFeedbackAIBus {
|
|
|
23
23
|
return this;
|
|
24
24
|
}
|
|
25
25
|
emit(event, payload) {
|
|
26
|
+
void this.dispatch(event, payload);
|
|
27
|
+
}
|
|
28
|
+
async dispatch(event, payload) {
|
|
26
29
|
const set = this.listeners.get(event);
|
|
27
30
|
if (!set || set.size === 0) {
|
|
28
31
|
// 零订阅 = activity-feedback 插件未加载,或运行时装了双份 @zhin.js/agent
|
|
@@ -30,14 +33,22 @@ export class ActivityFeedbackAIBus {
|
|
|
30
33
|
logger.debug(formatCompact({ op: 'ai_bus_no_listener', event }));
|
|
31
34
|
return;
|
|
32
35
|
}
|
|
33
|
-
|
|
36
|
+
// Snapshot before the first await: HMR may replace listeners while an old
|
|
37
|
+
// generation handler is still settling. A live Set iterator would then
|
|
38
|
+
// leak this in-flight event into the newly registered generation.
|
|
39
|
+
const listeners = [...set];
|
|
40
|
+
const pending = listeners.map((listener) => {
|
|
34
41
|
try {
|
|
35
|
-
listener
|
|
42
|
+
// Invoke every snapshot listener before awaiting. Generation admission
|
|
43
|
+
// must be sampled at dispatch ingress, not after an earlier listener settles.
|
|
44
|
+
return Promise.resolve(listener(payload)).catch(() => undefined);
|
|
36
45
|
}
|
|
37
46
|
catch {
|
|
38
47
|
// Listener errors must not break the Agent emit path.
|
|
48
|
+
return Promise.resolve();
|
|
39
49
|
}
|
|
40
|
-
}
|
|
50
|
+
});
|
|
51
|
+
await Promise.all(pending);
|
|
41
52
|
}
|
|
42
53
|
/** Test helper — clears all listeners. */
|
|
43
54
|
clear() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai-bus.js","sourceRoot":"","sources":["../../src/activity-feedback/ai-bus.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAG3D,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC;AAIlC;;;;;;GAMG;AACH,MAAM,OAAO,qBAAqB;IACf,SAAS,GAAG,IAAI,GAAG,EAA8B,CAAC;IAEnE,EAAE,CAAC,KAAa,EAAE,QAAuB;QACvC,IAAI,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACpC,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,GAAG,GAAG,IAAI,GAAG,EAAE,CAAC;YAChB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QACjC,CAAC;QACD,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAClB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,GAAG,CAAC,KAAa,EAAE,QAAuB;QACxC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC5C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC,KAAa,EAAE,OAAuB;QACzC,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACtC,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;YAC3B,wDAAwD;YACxD,4CAA4C;YAC5C,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE,EAAE,EAAE,oBAAoB,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;YACjE,OAAO;QACT,CAAC;QACD,
|
|
1
|
+
{"version":3,"file":"ai-bus.js","sourceRoot":"","sources":["../../src/activity-feedback/ai-bus.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAG3D,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC;AAIlC;;;;;;GAMG;AACH,MAAM,OAAO,qBAAqB;IACf,SAAS,GAAG,IAAI,GAAG,EAA8B,CAAC;IAEnE,EAAE,CAAC,KAAa,EAAE,QAAuB;QACvC,IAAI,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACpC,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,GAAG,GAAG,IAAI,GAAG,EAAE,CAAC;YAChB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QACjC,CAAC;QACD,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAClB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,GAAG,CAAC,KAAa,EAAE,QAAuB;QACxC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC5C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC,KAAa,EAAE,OAAuB;QACzC,KAAK,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACrC,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,KAAa,EAAE,OAAuB;QACnD,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACtC,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;YAC3B,wDAAwD;YACxD,4CAA4C;YAC5C,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE,EAAE,EAAE,oBAAoB,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;YACjE,OAAO;QACT,CAAC;QACD,0EAA0E;QAC1E,uEAAuE;QACvE,kEAAkE;QAClE,MAAM,SAAS,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;QAC3B,MAAM,OAAO,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE;YACzC,IAAI,CAAC;gBACH,uEAAuE;gBACvE,8EAA8E;gBAC9E,OAAO,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;YACnE,CAAC;YAAC,MAAM,CAAC;gBACP,sDAAsD;gBACtD,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;YAC3B,CAAC;QACH,CAAC,CAAC,CAAC;QACH,MAAM,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAC7B,CAAC;IAED,0CAA0C;IAC1C,KAAK;QACH,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;IACzB,CAAC;CACF;AAED,MAAM,CAAC,MAAM,qBAAqB,GAAG,IAAI,qBAAqB,EAAE,CAAC"}
|
|
@@ -5,8 +5,8 @@ export { isActivityFeedbackEnabled } from './schedule-guard.js';
|
|
|
5
5
|
export type { ActivityFeedbackGatePhase } from './schedule-guard.js';
|
|
6
6
|
export { toActivityFeedbackEventContext, resolveActivitySceneType, resolveActivityEventTargets, type ActivityFeedbackEventContext, } from './event-context.js';
|
|
7
7
|
export { resolveSubagentActivityTag, formatSubagentActivityPrefix, withSubagentActivityPrefix, applySubagentActivityPrefixToConfig, resolveActivityFeedbackSessionId, } from './subagent-prefix.js';
|
|
8
|
-
export { ActivityFeedbackManager,
|
|
9
|
-
export { PLATFORM_FEATURES, buildTypingSendContent, enableActivityFeedbackForBot,
|
|
10
|
-
export type { PlatformFeatures, EndpointWithActivityFeedback, PlatformActivityFeedbackManager, PlatformActivityFeedbackStartOptions, BotActivityFeedbackManager, } from './adapter-integration.js';
|
|
8
|
+
export { ActivityFeedbackManager, } from './manager.js';
|
|
9
|
+
export { PLATFORM_FEATURES, buildTypingSendContent, enableActivityFeedbackForBot, isGenericActivityFeedbackManager, } from './adapter-integration.js';
|
|
10
|
+
export type { PlatformFeatures, EndpointWithActivityFeedback, ActivityFeedbackSendPort, PlatformActivityFeedbackManager, PlatformActivityFeedbackStartOptions, BotActivityFeedbackManager, } from './adapter-integration.js';
|
|
11
11
|
export { activityFeedbackAiBus, ActivityFeedbackAIBus } from './ai-bus.js';
|
|
12
12
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/activity-feedback/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,oBAAoB,EACpB,qBAAqB,EACrB,iBAAiB,EACjB,2BAA2B,EAC3B,2BAA2B,EAC3B,sBAAsB,EACtB,mCAAmC,GACpC,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AAErD,OAAO,EACL,kCAAkC,GACnC,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AAChE,YAAY,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AAErE,OAAO,EACL,8BAA8B,EAC9B,wBAAwB,EACxB,2BAA2B,EAC3B,KAAK,4BAA4B,GAClC,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,0BAA0B,EAC1B,4BAA4B,EAC5B,0BAA0B,EAC1B,mCAAmC,EACnC,gCAAgC,GACjC,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,uBAAuB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/activity-feedback/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,oBAAoB,EACpB,qBAAqB,EACrB,iBAAiB,EACjB,2BAA2B,EAC3B,2BAA2B,EAC3B,sBAAsB,EACtB,mCAAmC,GACpC,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AAErD,OAAO,EACL,kCAAkC,GACnC,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AAChE,YAAY,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AAErE,OAAO,EACL,8BAA8B,EAC9B,wBAAwB,EACxB,2BAA2B,EAC3B,KAAK,4BAA4B,GAClC,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,0BAA0B,EAC1B,4BAA4B,EAC5B,0BAA0B,EAC1B,mCAAmC,EACnC,gCAAgC,GACjC,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,uBAAuB,GACxB,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,iBAAiB,EACjB,sBAAsB,EACtB,4BAA4B,EAC5B,gCAAgC,GACjC,MAAM,0BAA0B,CAAC;AAClC,YAAY,EACV,gBAAgB,EAChB,4BAA4B,EAC5B,wBAAwB,EACxB,+BAA+B,EAC/B,oCAAoC,EACpC,0BAA0B,GAC3B,MAAM,0BAA0B,CAAC;AAElC,OAAO,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC"}
|
|
@@ -3,7 +3,7 @@ export { resolveActivityFeedbackPhaseConfig, } from './config-resolver.js';
|
|
|
3
3
|
export { isActivityFeedbackEnabled } from './schedule-guard.js';
|
|
4
4
|
export { toActivityFeedbackEventContext, resolveActivitySceneType, resolveActivityEventTargets, } from './event-context.js';
|
|
5
5
|
export { resolveSubagentActivityTag, formatSubagentActivityPrefix, withSubagentActivityPrefix, applySubagentActivityPrefixToConfig, resolveActivityFeedbackSessionId, } from './subagent-prefix.js';
|
|
6
|
-
export { ActivityFeedbackManager,
|
|
7
|
-
export { PLATFORM_FEATURES, buildTypingSendContent, enableActivityFeedbackForBot,
|
|
6
|
+
export { ActivityFeedbackManager, } from './manager.js';
|
|
7
|
+
export { PLATFORM_FEATURES, buildTypingSendContent, enableActivityFeedbackForBot, isGenericActivityFeedbackManager, } from './adapter-integration.js';
|
|
8
8
|
export { activityFeedbackAiBus, ActivityFeedbackAIBus } from './ai-bus.js';
|
|
9
9
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/activity-feedback/index.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AAErD,OAAO,EACL,kCAAkC,GACnC,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AAGhE,OAAO,EACL,8BAA8B,EAC9B,wBAAwB,EACxB,2BAA2B,GAE5B,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,0BAA0B,EAC1B,4BAA4B,EAC5B,0BAA0B,EAC1B,mCAAmC,EACnC,gCAAgC,GACjC,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,uBAAuB,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/activity-feedback/index.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AAErD,OAAO,EACL,kCAAkC,GACnC,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AAGhE,OAAO,EACL,8BAA8B,EAC9B,wBAAwB,EACxB,2BAA2B,GAE5B,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,0BAA0B,EAC1B,4BAA4B,EAC5B,0BAA0B,EAC1B,mCAAmC,EACnC,gCAAgC,GACjC,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,uBAAuB,GACxB,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,iBAAiB,EACjB,sBAAsB,EACtB,4BAA4B,EAC5B,gCAAgC,GACjC,MAAM,0BAA0B,CAAC;AAUlC,OAAO,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { TypingIndicatorManager, type TypingIndicator, type TypingIndicatorOptions } from '../typing-indicator/index.js';
|
|
2
|
-
import { type GenerationStoreContext } from '@zhin.js/plugin-runtime';
|
|
3
2
|
import { type ActivityFeedbackPhase, type ResolvedActivityFeedbackPhaseConfig } from './types.js';
|
|
4
3
|
export declare class ActivityFeedbackManager {
|
|
5
4
|
private readonly inner;
|
|
@@ -11,8 +10,4 @@ export declare class ActivityFeedbackManager {
|
|
|
11
10
|
stopAll(): Promise<void>;
|
|
12
11
|
dispose(): Promise<void>;
|
|
13
12
|
}
|
|
14
|
-
export declare function getActivityFeedbackManager(): ActivityFeedbackManager;
|
|
15
|
-
export declare function provideActivityFeedbackManager(context: GenerationStoreContext): ActivityFeedbackManager;
|
|
16
|
-
/** @deprecated 使用 provideActivityFeedbackManager 替代 */
|
|
17
|
-
export declare const initActivityFeedbackManager: () => ActivityFeedbackManager;
|
|
18
13
|
//# sourceMappingURL=manager.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/activity-feedback/manager.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,EACtB,KAAK,eAAe,EAEpB,KAAK,sBAAsB,EAC5B,MAAM,8BAA8B,CAAC;AACtC,OAAO,
|
|
1
|
+
{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/activity-feedback/manager.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,EACtB,KAAK,eAAe,EAEpB,KAAK,sBAAsB,EAC5B,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,KAAK,qBAAqB,EAA2B,KAAK,mCAAmC,EAAE,MAAM,YAAY,CAAC;AA2B3H,qBAAa,uBAAuB;IAClC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAgC;IAEtD,eAAe,CAAC,GAAG,IAAI,EAAE,UAAU,CAAC,sBAAsB,CAAC,iBAAiB,CAAC,CAAC,GAAG,IAAI;IAIrF,UAAU,CAAC,QAAQ,EAAE,MAAM;IAIrB,KAAK,CACT,KAAK,EAAE,qBAAqB,EAC5B,OAAO,EAAE,sBAAsB,EAC/B,MAAM,EAAE,mCAAmC,GAC1C,OAAO,CAAC,eAAe,CAAC;IAYrB,IAAI,CAAC,KAAK,EAAE,qBAAqB,EAAE,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,IAAI,CAAC;IAOxF,kBAAkB,CAChB,KAAK,EAAE,qBAAqB,EAC5B,OAAO,EAAE,sBAAsB,GAC9B,eAAe,GAAG,SAAS;IAOxB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAIxB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAG/B"}
|
|
@@ -1,13 +1,18 @@
|
|
|
1
1
|
import { TypingIndicatorManager, } from '../typing-indicator/index.js';
|
|
2
|
-
import { createGenerationStore } from '@zhin.js/plugin-runtime';
|
|
3
2
|
import { toTypingIndicatorConfig } from './types.js';
|
|
4
3
|
function phaseSessionId(sessionId, phase) {
|
|
5
4
|
return `${sessionId}::phase:${phase}`;
|
|
6
5
|
}
|
|
7
|
-
function
|
|
6
|
+
function reactionPhaseSessionId(sessionId, phase, messageId) {
|
|
7
|
+
return `${phaseSessionId(sessionId, phase)}::message:${messageId}`;
|
|
8
|
+
}
|
|
9
|
+
function withPhase(options, phase, messageScoped = false) {
|
|
10
|
+
const sessionId = options.sessionId ?? options.messageId ?? '';
|
|
8
11
|
return {
|
|
9
12
|
...options,
|
|
10
|
-
sessionId:
|
|
13
|
+
sessionId: messageScoped && options.messageId
|
|
14
|
+
? reactionPhaseSessionId(sessionId, phase, options.messageId)
|
|
15
|
+
: phaseSessionId(sessionId, phase),
|
|
11
16
|
};
|
|
12
17
|
}
|
|
13
18
|
export class ActivityFeedbackManager {
|
|
@@ -19,13 +24,24 @@ export class ActivityFeedbackManager {
|
|
|
19
24
|
return this.inner.getAdapter(platform);
|
|
20
25
|
}
|
|
21
26
|
async start(phase, options, config) {
|
|
22
|
-
|
|
27
|
+
const typingConfig = toTypingIndicatorConfig(config);
|
|
28
|
+
const adapter = this.inner.getAdapter(options.platform);
|
|
29
|
+
const resolvedType = adapter?.supportedTypes.includes(config.type)
|
|
30
|
+
? config.type
|
|
31
|
+
: adapter?.supportedTypes[0];
|
|
32
|
+
return this.inner.start(withPhase(options, phase, resolvedType === 'reaction'), typingConfig);
|
|
23
33
|
}
|
|
24
34
|
async stop(phase, options) {
|
|
35
|
+
if (options.messageId) {
|
|
36
|
+
await this.inner.stop(withPhase(options, phase, true));
|
|
37
|
+
}
|
|
25
38
|
return this.inner.stop(withPhase(options, phase));
|
|
26
39
|
}
|
|
27
40
|
getActiveIndicator(phase, options) {
|
|
28
|
-
return
|
|
41
|
+
return (options.messageId
|
|
42
|
+
? this.inner.getActiveIndicator(withPhase(options, phase, true))
|
|
43
|
+
: undefined)
|
|
44
|
+
?? this.inner.getActiveIndicator(withPhase(options, phase));
|
|
29
45
|
}
|
|
30
46
|
async stopAll() {
|
|
31
47
|
return this.inner.stopAll();
|
|
@@ -34,16 +50,4 @@ export class ActivityFeedbackManager {
|
|
|
34
50
|
return this.inner.dispose();
|
|
35
51
|
}
|
|
36
52
|
}
|
|
37
|
-
const feedbackStore = createGenerationStore('zhin.agent.activity-feedback');
|
|
38
|
-
export function getActivityFeedbackManager() {
|
|
39
|
-
return feedbackStore.tryUse() ?? new ActivityFeedbackManager();
|
|
40
|
-
}
|
|
41
|
-
export function provideActivityFeedbackManager(context) {
|
|
42
|
-
const manager = new ActivityFeedbackManager();
|
|
43
|
-
feedbackStore.provide(context, manager);
|
|
44
|
-
context.lifecycle.add(() => manager.dispose());
|
|
45
|
-
return manager;
|
|
46
|
-
}
|
|
47
|
-
/** @deprecated 使用 provideActivityFeedbackManager 替代 */
|
|
48
|
-
export const initActivityFeedbackManager = () => new ActivityFeedbackManager();
|
|
49
53
|
//# sourceMappingURL=manager.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manager.js","sourceRoot":"","sources":["../../src/activity-feedback/manager.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,GAIvB,MAAM,8BAA8B,CAAC;AACtC,OAAO,
|
|
1
|
+
{"version":3,"file":"manager.js","sourceRoot":"","sources":["../../src/activity-feedback/manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { TurnEvent } from '../event/turn-event.js';
|
|
2
|
+
import type { AIEventName, AIEventPayload } from '../ai-event-subscriber.js';
|
|
3
|
+
export interface TurnActivityProjectorOptions {
|
|
4
|
+
readonly payload: AIEventPayload;
|
|
5
|
+
readonly publish: (event: AIEventName, payload: AIEventPayload) => void;
|
|
6
|
+
readonly thinkingPreview: boolean;
|
|
7
|
+
readonly thinkingMaxLength: number;
|
|
8
|
+
}
|
|
9
|
+
/** Projects canonical TurnEvents into the shared IM activity lifecycle. */
|
|
10
|
+
export declare function createTurnActivityProjector(options: TurnActivityProjectorOptions): (event: TurnEvent) => void;
|
|
11
|
+
//# sourceMappingURL=turn-event-projector.d.ts.map
|