@zhin.js/service-activity-feedback 3.0.14 → 3.0.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 +45 -13
- package/lib/ai-event-binder.d.ts +2 -1
- package/lib/ai-event-binder.d.ts.map +1 -1
- package/lib/ai-event-binder.js +126 -11
- package/lib/ai-event-binder.js.map +1 -1
- package/lib/config.d.ts +1 -1
- package/lib/config.d.ts.map +1 -1
- package/lib/executor.d.ts +4 -4
- package/lib/executor.d.ts.map +1 -1
- package/lib/executor.js +65 -31
- package/lib/executor.js.map +1 -1
- package/lib/orchestrator.d.ts +8 -0
- package/lib/orchestrator.d.ts.map +1 -1
- package/lib/orchestrator.js +60 -2
- package/lib/orchestrator.js.map +1 -1
- package/lib/policy.d.ts.map +1 -1
- package/lib/policy.js +12 -1
- package/lib/policy.js.map +1 -1
- package/package.json +6 -6
- package/plugin.js +16 -8
- package/schema.json +121 -5
- package/src/ai-event-binder.ts +138 -10
- package/src/config.ts +1 -1
- package/src/executor.ts +82 -39
- package/src/orchestrator.ts +80 -2
- package/src/policy.ts +16 -0
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# @zhin.js/service-activity-feedback
|
|
2
2
|
|
|
3
|
-
可选服务插件:订阅 AI
|
|
3
|
+
可选服务插件:订阅 AI 生命周期事件,按插件实例配置驱动各适配器能力。
|
|
4
4
|
|
|
5
5
|
## 模块结构
|
|
6
6
|
|
|
@@ -18,11 +18,15 @@ activityFeedbackAiBus ──► ai-event-binder(薄) ──► ActivityFeedb
|
|
|
18
18
|
|
|
19
19
|
- **Orchestrator**:对外 `startPhase` / `stopPhase` / `updateThinkingText`
|
|
20
20
|
- **Policy**:根级 `activityFeedback` 合并与 phase 解析
|
|
21
|
-
- **Executor**:隐藏 platform 自管 manager 与 generic manager
|
|
21
|
+
- **Executor**:隐藏 platform 自管 manager 与 generic manager 双路径,并按 Endpoint 声明能力选择 reaction / typing / message
|
|
22
22
|
- **Adapter**:仅提供 `$activityFeedback` IO 能力
|
|
23
|
-
- **Runtime
|
|
24
|
-
|
|
25
|
-
|
|
23
|
+
- **Runtime**:`plugin.ts` setup 经 `activityFeedbackAiBus` 订阅(无 `usePlugin`),
|
|
24
|
+
通过 generation-owned `outboundHostToken` 访问当前 Endpoint;发送、撤回、编辑、
|
|
25
|
+
reaction 与原生 typing 均走统一 IM Runtime 控制链路。
|
|
26
|
+
|
|
27
|
+
同一 IM 会话的异步状态事件按产生顺序串行投影,主 Agent、工具迭代、子 Agent
|
|
28
|
+
以及 Schedule 的开始/完成/失败不会互相抢写。Endpoint 未声明某项操作时会按实际
|
|
29
|
+
能力降级为可安全清理的 reaction、typing、message 或 none,不按平台名称猜测隐藏方法。
|
|
26
30
|
|
|
27
31
|
## 安装
|
|
28
32
|
|
|
@@ -30,19 +34,47 @@ activityFeedbackAiBus ──► ai-event-binder(薄) ──► ActivityFeedb
|
|
|
30
34
|
pnpm add @zhin.js/service-activity-feedback @zhin.js/agent
|
|
31
35
|
```
|
|
32
36
|
|
|
37
|
+
随后在项目 `package.json#zhin.plugins` 挂载插件:
|
|
38
|
+
|
|
39
|
+
```json
|
|
40
|
+
{
|
|
41
|
+
"zhin": {
|
|
42
|
+
"plugins": [
|
|
43
|
+
{
|
|
44
|
+
"package": "@zhin.js/service-activity-feedback",
|
|
45
|
+
"instanceKey": "activity-feedback"
|
|
46
|
+
}
|
|
47
|
+
]
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
```
|
|
51
|
+
|
|
33
52
|
## 启用
|
|
34
53
|
|
|
35
54
|
```yaml
|
|
36
55
|
plugins:
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
enabled: true
|
|
41
|
-
platforms:
|
|
42
|
-
icqq:
|
|
56
|
+
activity-feedback:
|
|
57
|
+
enabled: true
|
|
58
|
+
defaults:
|
|
43
59
|
phases:
|
|
60
|
+
queued:
|
|
61
|
+
group: { type: reaction, emoji: "⏳" }
|
|
44
62
|
active:
|
|
45
|
-
group: { type:
|
|
63
|
+
group: { type: typing }
|
|
64
|
+
thinking:
|
|
65
|
+
group: { type: message, message: "思考中…" }
|
|
66
|
+
platforms:
|
|
67
|
+
icqq:
|
|
68
|
+
phases:
|
|
69
|
+
active:
|
|
70
|
+
group: { type: reaction, emoji: "60" }
|
|
46
71
|
```
|
|
47
72
|
|
|
48
|
-
|
|
73
|
+
交互回合支持 `queued`、`active`、`thinking`,Schedule 支持
|
|
74
|
+
`schedule_start`、`schedule_finish`、`schedule_error`。每个 phase 可按
|
|
75
|
+
`private`、`group`、`channel` 配置,呈现 `reaction`、`message`、`typing` 或 `none`。
|
|
76
|
+
|
|
77
|
+
这些枚举的触发时机、推荐选择与全部字段见
|
|
78
|
+
[Activity Feedback](../../../docs/advanced/activity-feedback.md) 和
|
|
79
|
+
[自动生成配置参考](../../../docs/configuration/generated.md#activity-feedback);设计边界见
|
|
80
|
+
[ADR 0034](../../../docs/adr/0034-activity-feedback-service-plugin.md)。
|
package/lib/ai-event-binder.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { type AIEventHandlers } from '@zhin.js/agent';
|
|
2
2
|
import { type ActivityFeedbackServiceConfig } from './config.js';
|
|
3
|
+
import type { GenerationAdmissionGate } from 'zhin.js';
|
|
3
4
|
import { type ActivityFeedbackEndpointAccess } from './executor.js';
|
|
4
5
|
import { ActivityFeedbackOrchestrator } from './orchestrator.js';
|
|
5
6
|
export declare function createActivityFeedbackAIEventHandlers(orchestrator: ActivityFeedbackOrchestrator): AIEventHandlers;
|
|
@@ -7,7 +8,7 @@ export declare function createActivityFeedbackAIEventHandlers(orchestrator: Acti
|
|
|
7
8
|
* Plugin Runtime path: subscribe on module-level `activityFeedbackAiBus`
|
|
8
9
|
* (fed by ZhinAgentEventEmitter.emit). No usePlugin / Adapter inject.
|
|
9
10
|
*/
|
|
10
|
-
export declare function bindActivityFeedbackToAIEventBus(orchestrator: ActivityFeedbackOrchestrator): () => void
|
|
11
|
+
export declare function bindActivityFeedbackToAIEventBus(orchestrator: ActivityFeedbackOrchestrator, admission: GenerationAdmissionGate, runWithView: <T>(operation: () => Promise<T>) => Promise<T>): () => Promise<void>;
|
|
11
12
|
export type ActivityFeedbackLogger = {
|
|
12
13
|
debug: (msg: string, ...args: unknown[]) => void;
|
|
13
14
|
error: (msg: string, ...args: unknown[]) => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai-event-binder.d.ts","sourceRoot":"","sources":["../src/ai-event-binder.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,eAAe,
|
|
1
|
+
{"version":3,"file":"ai-event-binder.d.ts","sourceRoot":"","sources":["../src/ai-event-binder.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,eAAe,EAGrB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAqC,KAAK,6BAA6B,EAAE,MAAM,aAAa,CAAC;AACpG,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,SAAS,CAAC;AACvD,OAAO,EAGL,KAAK,8BAA8B,EACpC,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,4BAA4B,EAAE,MAAM,mBAAmB,CAAC;AAGjE,wBAAgB,qCAAqC,CACnD,YAAY,EAAE,4BAA4B,GACzC,eAAe,CAmGjB;AAED;;;GAGG;AACH,wBAAgB,gCAAgC,CAC9C,YAAY,EAAE,4BAA4B,EAC1C,SAAS,EAAE,uBAAuB,EAClC,WAAW,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,GAC1D,MAAM,OAAO,CAAC,IAAI,CAAC,CAmCrB;AAiED,MAAM,MAAM,sBAAsB,GAAG;IACnC,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IACjD,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;CAClD,CAAC;AAEF,MAAM,WAAW,yCAAyC;IACxD,aAAa,EAAE,6BAA6B,CAAC;IAC7C,MAAM,EAAE,8BAA8B,CAAC;IACvC,MAAM,EAAE,sBAAsB,CAAC;CAChC;AAED,wBAAgB,kCAAkC,CAChD,OAAO,EAAE,yCAAyC,GACjD,4BAA4B,CAI9B;AAED,uFAAuF;AACvF,wBAAgB,4CAA4C,CAC1D,aAAa,EAAE,6BAA6B,EAC5C,MAAM,EAAE,sBAAsB,EAC9B,MAAM,GAAE,8BAA2D,GAClE,4BAA4B,CAM9B"}
|
package/lib/ai-event-binder.js
CHANGED
|
@@ -19,7 +19,13 @@ export function createActivityFeedbackAIEventHandlers(orchestrator) {
|
|
|
19
19
|
if (!isActivityFeedbackEnabled(payload, 'active'))
|
|
20
20
|
return;
|
|
21
21
|
await orchestrator.stopPhase(payload, 'queued', 'processing.start');
|
|
22
|
+
if (typeof payload.iterations === 'number' && payload.iterations > 1) {
|
|
23
|
+
await orchestrator.stopPhase(payload, 'thinking', 'processing.iteration');
|
|
24
|
+
}
|
|
22
25
|
await orchestrator.startPhase(payload, 'active', 'processing.start');
|
|
26
|
+
if (typeof payload.iterations === 'number' && payload.iterations > 1 && payload.content?.trim()) {
|
|
27
|
+
await orchestrator.updatePhaseText(payload, 'active', payload.content.trim());
|
|
28
|
+
}
|
|
23
29
|
},
|
|
24
30
|
onTypingStart: async () => { },
|
|
25
31
|
onProcessingFinish: async (payload) => {
|
|
@@ -36,10 +42,11 @@ export function createActivityFeedbackAIEventHandlers(orchestrator) {
|
|
|
36
42
|
await orchestrator.stopPhase(payload, 'thinking', 'processing.error');
|
|
37
43
|
await orchestrator.stopPhase(payload, 'active', 'processing.error');
|
|
38
44
|
},
|
|
39
|
-
onTypingStop: (payload) => {
|
|
45
|
+
onTypingStop: async (payload) => {
|
|
40
46
|
if (!isActivityFeedbackEnabled(payload, 'active'))
|
|
41
47
|
return;
|
|
42
|
-
|
|
48
|
+
await orchestrator.stopPhase(payload, 'thinking', 'typing.stop');
|
|
49
|
+
await orchestrator.stopPhase(payload, 'active', 'typing.stop');
|
|
43
50
|
},
|
|
44
51
|
onThinking: async (payload) => {
|
|
45
52
|
if (!isActivityFeedbackEnabled(payload, 'thinking'))
|
|
@@ -50,10 +57,27 @@ export function createActivityFeedbackAIEventHandlers(orchestrator) {
|
|
|
50
57
|
await orchestrator.startPhase(payload, 'thinking', 'thinking');
|
|
51
58
|
await orchestrator.updateThinkingText(payload, payload.thinking);
|
|
52
59
|
},
|
|
60
|
+
onToolCall: async (payload) => {
|
|
61
|
+
if (!isActivityFeedbackEnabled(payload, 'active') || !payload.toolName?.trim())
|
|
62
|
+
return;
|
|
63
|
+
const text = `调用工具:${payload.toolName.trim()}…`;
|
|
64
|
+
await orchestrator.updatePhaseText(payload, 'thinking', text);
|
|
65
|
+
await orchestrator.updatePhaseText(payload, 'active', text);
|
|
66
|
+
},
|
|
67
|
+
onToolResult: async (payload) => {
|
|
68
|
+
if (!isActivityFeedbackEnabled(payload, 'active') || !payload.toolName?.trim())
|
|
69
|
+
return;
|
|
70
|
+
const outcome = payload.status === 'error' || payload.error ? '未完成' : '已完成';
|
|
71
|
+
const text = `工具 ${payload.toolName.trim()} ${outcome},继续处理…`;
|
|
72
|
+
await orchestrator.updatePhaseText(payload, 'thinking', text);
|
|
73
|
+
await orchestrator.updatePhaseText(payload, 'active', text);
|
|
74
|
+
},
|
|
53
75
|
onSubagentStart: async (payload) => {
|
|
54
76
|
if (!isActivityFeedbackEnabled(payload, 'thinking'))
|
|
55
77
|
return;
|
|
56
|
-
//
|
|
78
|
+
// The subagent has an isolated session key; remove its own active placeholder
|
|
79
|
+
// before switching to the richer thinking state.
|
|
80
|
+
await orchestrator.stopPhase(payload, 'active', 'subagent.start');
|
|
57
81
|
await orchestrator.startPhase(payload, 'thinking', 'subagent.start');
|
|
58
82
|
const tag = payload.agentId?.trim() || 'subagent';
|
|
59
83
|
const label = payload.label?.trim()
|
|
@@ -62,16 +86,21 @@ export function createActivityFeedbackAIEventHandlers(orchestrator) {
|
|
|
62
86
|
await orchestrator.updateThinkingText(payload, `[${tag}] ${label}`);
|
|
63
87
|
},
|
|
64
88
|
onSubagentFinish: async (payload) => {
|
|
65
|
-
if (
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
89
|
+
if (isActivityFeedbackEnabled(payload, 'thinking')) {
|
|
90
|
+
await orchestrator.stopPhase(payload, 'thinking', 'subagent.finish');
|
|
91
|
+
}
|
|
92
|
+
if (isActivityFeedbackEnabled(payload, 'active')) {
|
|
93
|
+
await orchestrator.stopPhase(payload, 'active', 'subagent.finish');
|
|
94
|
+
}
|
|
69
95
|
},
|
|
70
96
|
onScheduleStart: (payload) => orchestrator.startPhase(payload, 'schedule_start', 'schedule.start'),
|
|
71
|
-
onScheduleFinish: (payload) =>
|
|
97
|
+
onScheduleFinish: async (payload) => {
|
|
98
|
+
await orchestrator.stopPhase(payload, 'schedule_start', 'schedule.finish');
|
|
99
|
+
await orchestrator.showTransientPhase(payload, 'schedule_finish', 'schedule.finish');
|
|
100
|
+
},
|
|
72
101
|
onScheduleError: async (payload) => {
|
|
73
102
|
await orchestrator.stopPhase(payload, 'schedule_start', 'schedule.error');
|
|
74
|
-
await orchestrator.
|
|
103
|
+
await orchestrator.showTransientPhase(payload, 'schedule_error', 'schedule.error');
|
|
75
104
|
},
|
|
76
105
|
};
|
|
77
106
|
}
|
|
@@ -79,8 +108,94 @@ export function createActivityFeedbackAIEventHandlers(orchestrator) {
|
|
|
79
108
|
* Plugin Runtime path: subscribe on module-level `activityFeedbackAiBus`
|
|
80
109
|
* (fed by ZhinAgentEventEmitter.emit). No usePlugin / Adapter inject.
|
|
81
110
|
*/
|
|
82
|
-
export function bindActivityFeedbackToAIEventBus(orchestrator) {
|
|
83
|
-
|
|
111
|
+
export function bindActivityFeedbackToAIEventBus(orchestrator, admission, runWithView) {
|
|
112
|
+
let stopWatchingRetirement;
|
|
113
|
+
const watchRetirement = () => {
|
|
114
|
+
if (stopWatchingRetirement)
|
|
115
|
+
return;
|
|
116
|
+
stopWatchingRetirement = admission.onDeactivate(() => {
|
|
117
|
+
void close();
|
|
118
|
+
});
|
|
119
|
+
};
|
|
120
|
+
const serialized = createGenerationSerializedTarget(activityFeedbackAiBus, admission, runWithView, watchRetirement);
|
|
121
|
+
const unsubscribe = subscribeAIEventsOnTarget(serialized.target, createActivityFeedbackAIEventHandlers(orchestrator));
|
|
122
|
+
let shutdown;
|
|
123
|
+
function close() {
|
|
124
|
+
if (shutdown)
|
|
125
|
+
return shutdown;
|
|
126
|
+
// Retirement is published before SnapshotStore changes its current pointer.
|
|
127
|
+
// Enter the IM view synchronously here so timers, native-typing keepalives,
|
|
128
|
+
// and final reaction/message cleanup all remain on this generation's Endpoint.
|
|
129
|
+
shutdown = runWithView(async () => {
|
|
130
|
+
unsubscribe();
|
|
131
|
+
await serialized.close();
|
|
132
|
+
await orchestrator.dispose();
|
|
133
|
+
});
|
|
134
|
+
return shutdown;
|
|
135
|
+
}
|
|
136
|
+
return async () => {
|
|
137
|
+
stopWatchingRetirement?.();
|
|
138
|
+
await close();
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
/** Generation-local ordering: one queue per IM session, no module-level runtime state. */
|
|
142
|
+
function createGenerationSerializedTarget(source, admission, runWithView, onAdmitted) {
|
|
143
|
+
const tails = new Map();
|
|
144
|
+
const wrappers = new Map();
|
|
145
|
+
let closed = false;
|
|
146
|
+
const target = {
|
|
147
|
+
on(event, listener) {
|
|
148
|
+
const wrapped = async (payload) => {
|
|
149
|
+
const release = admission.acquire();
|
|
150
|
+
if (!release)
|
|
151
|
+
return;
|
|
152
|
+
onAdmitted();
|
|
153
|
+
try {
|
|
154
|
+
await runWithView(async () => {
|
|
155
|
+
const key = payload.sessionId || '__global__';
|
|
156
|
+
const previous = tails.get(key);
|
|
157
|
+
const run = async () => {
|
|
158
|
+
if (!closed)
|
|
159
|
+
await listener(payload);
|
|
160
|
+
};
|
|
161
|
+
const current = previous
|
|
162
|
+
? previous.catch(() => undefined).then(run)
|
|
163
|
+
: run();
|
|
164
|
+
tails.set(key, current);
|
|
165
|
+
try {
|
|
166
|
+
await current;
|
|
167
|
+
}
|
|
168
|
+
finally {
|
|
169
|
+
if (tails.get(key) === current)
|
|
170
|
+
tails.delete(key);
|
|
171
|
+
}
|
|
172
|
+
});
|
|
173
|
+
}
|
|
174
|
+
finally {
|
|
175
|
+
release();
|
|
176
|
+
}
|
|
177
|
+
};
|
|
178
|
+
wrappers.set(listener, wrapped);
|
|
179
|
+
return source.on(event, wrapped);
|
|
180
|
+
},
|
|
181
|
+
off(event, listener) {
|
|
182
|
+
const wrapped = wrappers.get(listener);
|
|
183
|
+
if (!wrapped)
|
|
184
|
+
return source.off(event, listener);
|
|
185
|
+
wrappers.delete(listener);
|
|
186
|
+
return source.off(event, wrapped);
|
|
187
|
+
},
|
|
188
|
+
};
|
|
189
|
+
return {
|
|
190
|
+
target,
|
|
191
|
+
async close() {
|
|
192
|
+
closed = true;
|
|
193
|
+
const pending = [...tails.values()];
|
|
194
|
+
await Promise.allSettled(pending);
|
|
195
|
+
tails.clear();
|
|
196
|
+
wrappers.clear();
|
|
197
|
+
},
|
|
198
|
+
};
|
|
84
199
|
}
|
|
85
200
|
export function createActivityFeedbackOrchestrator(options) {
|
|
86
201
|
const policy = new ActivityFeedbackPolicy(loadActivityFeedbackServiceConfig(options.serviceConfig));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai-event-binder.js","sourceRoot":"","sources":["../src/ai-event-binder.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,yBAAyB,EACzB,qBAAqB,EACrB,yBAAyB,
|
|
1
|
+
{"version":3,"file":"ai-event-binder.js","sourceRoot":"","sources":["../src/ai-event-binder.ts"],"names":[],"mappings":"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"}
|
package/lib/config.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { ActivityFeedbackConfig } from '@zhin.js/agent';
|
|
2
|
-
/**
|
|
2
|
+
/** Plugin Runtime 实例配置(`plugins.<instanceKey>`,与 Adapter endpoint 配置解耦)。 */
|
|
3
3
|
export interface ActivityFeedbackServiceConfig {
|
|
4
4
|
enabled?: boolean;
|
|
5
5
|
defaults?: ActivityFeedbackConfig;
|
package/lib/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAE7D
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAE7D,4EAA4E;AAC5E,MAAM,WAAW,6BAA6B;IAC5C,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,sBAAsB,CAAC;IAClC,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAC;IACnD,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAC;IACnD,2BAA2B;IAC3B,QAAQ,CAAC,EAAE;QACT,MAAM,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,OAAO,GAAG,OAAO,GAAG,QAAQ,EAAE,OAAO,gBAAgB,EAAE,2BAA2B,CAAC,CAAC,CAAC;KAC9G,CAAC;CACH;AAyBD,wBAAgB,2BAA2B,CACzC,GAAG,MAAM,EAAE,CAAC,sBAAsB,GAAG,SAAS,CAAC,EAAE,GAChD,sBAAsB,GAAG,SAAS,CAcpC;AAED,wBAAgB,iCAAiC,CAC/C,GAAG,EAAE,6BAA6B,GAAG,SAAS,GAC7C,6BAA6B,CAK/B;AAED,4CAA4C;AAC5C,wBAAgB,gCAAgC,CAC9C,OAAO,EAAE,6BAA6B,EACtC,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,GAClB,sBAAsB,GAAG,SAAS,CASpC"}
|
package/lib/executor.d.ts
CHANGED
|
@@ -1,11 +1,10 @@
|
|
|
1
|
-
import type
|
|
2
|
-
import { type ActivityFeedbackPhase, type EndpointWithActivityFeedback, type ResolvedActivityFeedbackPhaseConfig, type ActivityFeedbackEventContext } from '@zhin.js/agent';
|
|
1
|
+
import { type ActivityFeedbackPhase, type ActivityFeedbackSendPort, type EndpointWithActivityFeedback, type ResolvedActivityFeedbackPhaseConfig, type ActivityFeedbackEventContext } from '@zhin.js/agent';
|
|
3
2
|
import type { OutboundHost } from 'zhin.js';
|
|
4
3
|
/** IM 侧 endpoint 访问 seam(便于测试注入 fake) */
|
|
5
4
|
export interface ActivityFeedbackEndpointAccess {
|
|
6
5
|
resolve(platform: string, endpointKey: string): {
|
|
7
6
|
endpoint: EndpointWithActivityFeedback;
|
|
8
|
-
|
|
7
|
+
outbound: ActivityFeedbackSendPort;
|
|
9
8
|
} | undefined;
|
|
10
9
|
}
|
|
11
10
|
/** Slice-2: no Adapter inject — executor start/stop no-op when resolve returns undefined. */
|
|
@@ -14,7 +13,7 @@ export declare function createNoopEndpointAccess(): ActivityFeedbackEndpointAcce
|
|
|
14
13
|
* Plugin Runtime: resolve endpoints via OutboundHost → ImRuntime.sendEndpointMessage.
|
|
15
14
|
* Typing/reaction text goes through the unified outbound chain (no legacy Adapter.inject).
|
|
16
15
|
*
|
|
17
|
-
* 按 platform:endpointKey 缓存 { endpoint,
|
|
16
|
+
* 按 platform:endpointKey 缓存 { endpoint, outbound }:activity manager 挂在
|
|
18
17
|
* endpoint.$activityFeedback 上,start/stop 必须解析到同一个对象,否则
|
|
19
18
|
* stop 时拿不到 manager,typing 指示器永远无法停止。
|
|
20
19
|
*/
|
|
@@ -26,6 +25,7 @@ export declare class ActivityFeedbackExecutor {
|
|
|
26
25
|
constructor(access: ActivityFeedbackEndpointAccess);
|
|
27
26
|
start(ctx: ActivityFeedbackEventContext, phase: ActivityFeedbackPhase, phaseConfig: ResolvedActivityFeedbackPhaseConfig): Promise<void>;
|
|
28
27
|
stop(ctx: ActivityFeedbackEventContext, phase: ActivityFeedbackPhase): Promise<void>;
|
|
28
|
+
updateText(ctx: ActivityFeedbackEventContext, phase: ActivityFeedbackPhase, text: string): Promise<void>;
|
|
29
29
|
updateThinkingText(ctx: ActivityFeedbackEventContext, text: string): Promise<void>;
|
|
30
30
|
}
|
|
31
31
|
//# sourceMappingURL=executor.d.ts.map
|
package/lib/executor.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"executor.d.ts","sourceRoot":"","sources":["../src/executor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"executor.d.ts","sourceRoot":"","sources":["../src/executor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgG,KAAK,qBAAqB,EAAE,KAAK,wBAAwB,EAAE,KAAK,4BAA4B,EAAwC,KAAK,mCAAmC,EAAE,KAAK,4BAA4B,EAAE,MAAM,gBAAgB,CAAC;AAC/U,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAE5C,yCAAyC;AACzC,MAAM,WAAW,8BAA8B;IAC7C,OAAO,CACL,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,GAClB;QAAE,QAAQ,EAAE,4BAA4B,CAAC;QAAC,QAAQ,EAAE,wBAAwB,CAAA;KAAE,GAAG,SAAS,CAAC;CAC/F;AAED,6FAA6F;AAC7F,wBAAgB,wBAAwB,IAAI,8BAA8B,CAMzE;AAqBD;;;;;;;GAOG;AACH,wBAAgB,4BAA4B,CAC1C,QAAQ,EAAE,YAAY,EACtB,MAAM,CAAC,EAAE;IAAE,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAA;CAAE,GAC5D,8BAA8B,CAsIhC;AA2GD,qBAAa,wBAAwB;IACvB,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,EAAE,8BAA8B;IAE7D,KAAK,CACT,GAAG,EAAE,4BAA4B,EACjC,KAAK,EAAE,qBAAqB,EAC5B,WAAW,EAAE,mCAAmC,GAC/C,OAAO,CAAC,IAAI,CAAC;IAOV,IAAI,CAAC,GAAG,EAAE,4BAA4B,EAAE,KAAK,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC;IAOpF,UAAU,CACd,GAAG,EAAE,4BAA4B,EACjC,KAAK,EAAE,qBAAqB,EAC5B,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,IAAI,CAAC;IAaV,kBAAkB,CAAC,GAAG,EAAE,4BAA4B,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAGzF"}
|
package/lib/executor.js
CHANGED
|
@@ -32,7 +32,7 @@ function stringifySendContent(content) {
|
|
|
32
32
|
* Plugin Runtime: resolve endpoints via OutboundHost → ImRuntime.sendEndpointMessage.
|
|
33
33
|
* Typing/reaction text goes through the unified outbound chain (no legacy Adapter.inject).
|
|
34
34
|
*
|
|
35
|
-
* 按 platform:endpointKey 缓存 { endpoint,
|
|
35
|
+
* 按 platform:endpointKey 缓存 { endpoint, outbound }:activity manager 挂在
|
|
36
36
|
* endpoint.$activityFeedback 上,start/stop 必须解析到同一个对象,否则
|
|
37
37
|
* stop 时拿不到 manager,typing 指示器永远无法停止。
|
|
38
38
|
*/
|
|
@@ -40,17 +40,21 @@ export function createOutboundEndpointAccess(outbound, logger) {
|
|
|
40
40
|
const cache = new Map();
|
|
41
41
|
return {
|
|
42
42
|
resolve(platform, endpointKey) {
|
|
43
|
-
const key =
|
|
43
|
+
const key = JSON.stringify([platform, endpointKey]);
|
|
44
44
|
const cached = cache.get(key);
|
|
45
45
|
if (cached)
|
|
46
46
|
return cached;
|
|
47
|
+
const declared = outbound.capabilities?.({ adapter: platform, endpointKey })?.operations;
|
|
48
|
+
const supports = (operation) => declared?.includes(operation) === true;
|
|
47
49
|
const recall = outbound.recall;
|
|
50
|
+
const edit = outbound.edit;
|
|
48
51
|
const addReaction = outbound.addReaction;
|
|
49
52
|
const removeReaction = outbound.removeReaction;
|
|
53
|
+
const typing = outbound.typing;
|
|
50
54
|
const endpoint = {
|
|
51
55
|
$id: endpointKey,
|
|
52
56
|
control: {
|
|
53
|
-
...(recall ? {
|
|
57
|
+
...(recall && supports('recall') ? {
|
|
54
58
|
recall: async (message) => {
|
|
55
59
|
try {
|
|
56
60
|
await recall({ adapter: platform, endpointKey, message });
|
|
@@ -60,7 +64,18 @@ export function createOutboundEndpointAccess(outbound, logger) {
|
|
|
60
64
|
}
|
|
61
65
|
},
|
|
62
66
|
} : {}),
|
|
63
|
-
...(
|
|
67
|
+
...(edit && supports('edit') ? {
|
|
68
|
+
edit: async (message, content) => {
|
|
69
|
+
try {
|
|
70
|
+
return await edit({ adapter: platform, endpointKey, message, content });
|
|
71
|
+
}
|
|
72
|
+
catch (error) {
|
|
73
|
+
logger?.debug(`[ActivityFeedback] outbound edit failed (${key}):`, error instanceof Error ? error.message : String(error));
|
|
74
|
+
return null;
|
|
75
|
+
}
|
|
76
|
+
},
|
|
77
|
+
} : {}),
|
|
78
|
+
...(addReaction && supports('reaction') ? {
|
|
64
79
|
addReaction: async (message, emoji, hint) => {
|
|
65
80
|
try {
|
|
66
81
|
return await addReaction({
|
|
@@ -78,44 +93,52 @@ export function createOutboundEndpointAccess(outbound, logger) {
|
|
|
78
93
|
}
|
|
79
94
|
},
|
|
80
95
|
} : {}),
|
|
81
|
-
...(removeReaction ? {
|
|
96
|
+
...(removeReaction && supports('reaction') ? {
|
|
82
97
|
removeReaction: async (message, reactionId) => {
|
|
83
|
-
|
|
98
|
+
try {
|
|
99
|
+
await removeReaction({ adapter: platform, endpointKey, message, reactionId });
|
|
100
|
+
}
|
|
101
|
+
catch (error) {
|
|
84
102
|
logger?.debug(`[ActivityFeedback] outbound removeReaction failed (${key}):`, error instanceof Error ? error.message : String(error));
|
|
85
|
-
}
|
|
103
|
+
}
|
|
104
|
+
},
|
|
105
|
+
} : {}),
|
|
106
|
+
...(typing && supports('typing') ? {
|
|
107
|
+
typing: async (conversation, active) => {
|
|
108
|
+
try {
|
|
109
|
+
await typing({ adapter: platform, endpointKey, conversation, active });
|
|
110
|
+
}
|
|
111
|
+
catch (error) {
|
|
112
|
+
logger?.debug(`[ActivityFeedback] outbound typing failed (${key}):`, error instanceof Error ? error.message : String(error));
|
|
113
|
+
}
|
|
86
114
|
},
|
|
87
115
|
} : {}),
|
|
88
116
|
},
|
|
89
117
|
};
|
|
90
|
-
const
|
|
91
|
-
|
|
92
|
-
const text = stringifySendContent(
|
|
93
|
-
if (!text || !
|
|
118
|
+
const sendPort = {
|
|
119
|
+
send: async ({ conversation, content }) => {
|
|
120
|
+
const text = stringifySendContent(content);
|
|
121
|
+
if (!text || !conversation.id)
|
|
94
122
|
return null;
|
|
95
123
|
try {
|
|
96
124
|
const messageId = await outbound.send({
|
|
97
125
|
adapter: platform,
|
|
98
126
|
endpointKey,
|
|
99
127
|
conversation: {
|
|
100
|
-
kind:
|
|
101
|
-
id:
|
|
128
|
+
kind: conversation.kind,
|
|
129
|
+
id: conversation.id,
|
|
102
130
|
},
|
|
103
131
|
content: text,
|
|
104
132
|
});
|
|
105
|
-
|
|
106
|
-
// keeps the phase active until stop (recall is a no-op here).
|
|
107
|
-
return messageId || `outbound:${Date.now()}`;
|
|
133
|
+
return messageId || null;
|
|
108
134
|
}
|
|
109
135
|
catch (error) {
|
|
110
136
|
logger?.debug(`[ActivityFeedback] outbound send failed (${key}):`, error instanceof Error ? error.message : String(error));
|
|
111
137
|
return null;
|
|
112
138
|
}
|
|
113
139
|
},
|
|
114
|
-
endpoints: {
|
|
115
|
-
get: (id) => (id === endpointKey ? endpoint : undefined),
|
|
116
|
-
},
|
|
117
140
|
};
|
|
118
|
-
const resolved = { endpoint,
|
|
141
|
+
const resolved = { endpoint, outbound: sendPort };
|
|
119
142
|
cache.set(key, resolved);
|
|
120
143
|
return resolved;
|
|
121
144
|
},
|
|
@@ -156,12 +179,12 @@ class PlatformPhaseDriver {
|
|
|
156
179
|
class GenericPhaseDriver {
|
|
157
180
|
endpoint;
|
|
158
181
|
platform;
|
|
159
|
-
|
|
182
|
+
outbound;
|
|
160
183
|
manager;
|
|
161
|
-
constructor(endpoint, platform,
|
|
184
|
+
constructor(endpoint, platform, outbound) {
|
|
162
185
|
this.endpoint = endpoint;
|
|
163
186
|
this.platform = platform;
|
|
164
|
-
this.
|
|
187
|
+
this.outbound = outbound;
|
|
165
188
|
}
|
|
166
189
|
async ensureManager() {
|
|
167
190
|
if (this.manager)
|
|
@@ -171,7 +194,7 @@ class GenericPhaseDriver {
|
|
|
171
194
|
this.manager = existing;
|
|
172
195
|
return existing;
|
|
173
196
|
}
|
|
174
|
-
this.manager = enableActivityFeedbackForBot(this.endpoint, this.platform, this.
|
|
197
|
+
this.manager = enableActivityFeedbackForBot(this.endpoint, this.platform, this.outbound);
|
|
175
198
|
return this.manager;
|
|
176
199
|
}
|
|
177
200
|
async start(ctx, phase, phaseConfig) {
|
|
@@ -196,12 +219,12 @@ class GenericPhaseDriver {
|
|
|
196
219
|
}
|
|
197
220
|
}
|
|
198
221
|
}
|
|
199
|
-
function createPhaseDriver(endpoint, platform,
|
|
222
|
+
function createPhaseDriver(endpoint, platform, outbound) {
|
|
200
223
|
const manager = endpoint.$activityFeedback;
|
|
201
224
|
if (manager && !isGenericActivityFeedbackManager(manager)) {
|
|
202
225
|
return new PlatformPhaseDriver(manager);
|
|
203
226
|
}
|
|
204
|
-
return new GenericPhaseDriver(endpoint, platform,
|
|
227
|
+
return new GenericPhaseDriver(endpoint, platform, outbound);
|
|
205
228
|
}
|
|
206
229
|
export class ActivityFeedbackExecutor {
|
|
207
230
|
access;
|
|
@@ -212,22 +235,33 @@ export class ActivityFeedbackExecutor {
|
|
|
212
235
|
const resolved = this.access.resolve(ctx.platform, ctx.endpointKey);
|
|
213
236
|
if (!resolved)
|
|
214
237
|
return;
|
|
215
|
-
const driver = createPhaseDriver(resolved.endpoint, ctx.platform, resolved.
|
|
238
|
+
const driver = createPhaseDriver(resolved.endpoint, ctx.platform, resolved.outbound);
|
|
216
239
|
await driver.start(ctx, phase, phaseConfig);
|
|
217
240
|
}
|
|
218
241
|
async stop(ctx, phase) {
|
|
219
242
|
const resolved = this.access.resolve(ctx.platform, ctx.endpointKey);
|
|
220
243
|
if (!resolved?.endpoint.$activityFeedback)
|
|
221
244
|
return;
|
|
222
|
-
const driver = createPhaseDriver(resolved.endpoint, ctx.platform, resolved.
|
|
245
|
+
const driver = createPhaseDriver(resolved.endpoint, ctx.platform, resolved.outbound);
|
|
223
246
|
await driver.stop(ctx, phase);
|
|
224
247
|
}
|
|
225
|
-
async
|
|
248
|
+
async updateText(ctx, phase, text) {
|
|
226
249
|
const resolved = this.access.resolve(ctx.platform, ctx.endpointKey);
|
|
227
250
|
if (!resolved)
|
|
228
251
|
return;
|
|
229
|
-
const driver = createPhaseDriver(resolved.endpoint, ctx.platform, resolved.
|
|
230
|
-
|
|
252
|
+
const driver = createPhaseDriver(resolved.endpoint, ctx.platform, resolved.outbound);
|
|
253
|
+
const manager = resolved.endpoint.$activityFeedback;
|
|
254
|
+
if (!manager || !isGenericActivityFeedbackManager(manager)) {
|
|
255
|
+
if (phase === 'thinking')
|
|
256
|
+
await driver.updateThinkingText(ctx, text);
|
|
257
|
+
return;
|
|
258
|
+
}
|
|
259
|
+
const indicator = manager.getActiveIndicator(phase, ctx.options);
|
|
260
|
+
if (indicator?.update)
|
|
261
|
+
await indicator.update(text);
|
|
262
|
+
}
|
|
263
|
+
async updateThinkingText(ctx, text) {
|
|
264
|
+
await this.updateText(ctx, 'thinking', text);
|
|
231
265
|
}
|
|
232
266
|
}
|
|
233
267
|
//# sourceMappingURL=executor.js.map
|
package/lib/executor.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"executor.js","sourceRoot":"","sources":["../src/executor.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"executor.js","sourceRoot":"","sources":["../src/executor.ts"],"names":[],"mappings":"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"}
|
package/lib/orchestrator.d.ts
CHANGED
|
@@ -9,10 +9,18 @@ export declare class ActivityFeedbackOrchestrator {
|
|
|
9
9
|
private readonly policy;
|
|
10
10
|
private readonly executor;
|
|
11
11
|
private readonly log;
|
|
12
|
+
private readonly active;
|
|
13
|
+
private readonly transient;
|
|
14
|
+
private readonly pendingCleanup;
|
|
12
15
|
constructor(policy: ActivityFeedbackPolicy, executor: ActivityFeedbackExecutor, log: Logger);
|
|
13
16
|
startPhase(payload: AIEventPayload, phase: ActivityFeedbackPhase, reason: string): Promise<void>;
|
|
14
17
|
stopPhase(payload: AIEventPayload, phase: ActivityFeedbackPhase, reason: string): Promise<void>;
|
|
15
18
|
updateThinkingText(payload: AIEventPayload, text: string): Promise<void>;
|
|
19
|
+
updatePhaseText(payload: AIEventPayload, phase: ActivityFeedbackPhase, text: string): Promise<void>;
|
|
20
|
+
showTransientPhase(payload: AIEventPayload, phase: ActivityFeedbackPhase, reason: string): Promise<void>;
|
|
21
|
+
dispose(): Promise<void>;
|
|
22
|
+
private phaseKey;
|
|
23
|
+
private clearTransient;
|
|
16
24
|
}
|
|
17
25
|
export {};
|
|
18
26
|
//# sourceMappingURL=orchestrator.d.ts.map
|