@zhin.js/service-activity-feedback 1.0.2 → 1.1.3

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 CHANGED
@@ -1,14 +1,14 @@
1
1
  # @zhin.js/service-activity-feedback
2
2
 
3
- 可选服务插件:订阅 AI 生命周期事件,按**顶层** `activityFeedback` 配置驱动各适配器能力。
3
+ 可选服务插件:订阅 AI 生命周期事件,按插件实例配置驱动各适配器能力。
4
4
 
5
5
  ## 模块结构
6
6
 
7
7
  ```
8
- ZhinAgentEventEmitter.emit
8
+ generation AgentEventBus (`agentEventBusToken`)
9
9
  │
10
10
  ▼
11
- activityFeedbackAiBus ──► ai-event-binder(薄) ──► ActivityFeedbackOrchestrator
11
+ ai-event-binder(薄) ──► ActivityFeedbackOrchestrator
12
12
  │
13
13
  ┌────────────────────┼────────────────────┐
14
14
  ▼ ▼ ▼
@@ -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 slice-2**:`plugin.ts` setup 经 `activityFeedbackAiBus` 订阅(无 `usePlugin`);
24
- endpoint access 暂为 noop(phase 在 resolve 失败时静默跳过)。
25
- **TODO**:注入真实 Adapter/endpoint access,使 typing/reaction 真正出站。
23
+ - **Runtime**:`plugin.ts` setup 从 generation Resource 读取 `agentEventBusToken` 并订阅,
24
+ 通过同代 `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
- - "@zhin.js/service-activity-feedback"
38
-
39
- activityFeedback:
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: reaction, emoji: "60" }
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
- 详见 [Activity Feedback](../../../docs/advanced/activity-feedback.md)、[ADR 0034](../../../docs/adr/0034-activity-feedback-service-plugin.md)。
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)。
@@ -1,17 +1,13 @@
1
- import type { Plugin } from 'zhin.js';
2
- import { type AIEventHandlers } from '@zhin.js/agent';
1
+ import { type AIEventHandlers, type AIEventTarget } from '@zhin.js/agent';
3
2
  import { type ActivityFeedbackServiceConfig } from './config.js';
3
+ import type { GenerationAdmissionGate } from 'zhin.js';
4
4
  import { type ActivityFeedbackEndpointAccess } from './executor.js';
5
5
  import { ActivityFeedbackOrchestrator } from './orchestrator.js';
6
6
  export declare function createActivityFeedbackAIEventHandlers(orchestrator: ActivityFeedbackOrchestrator): AIEventHandlers;
7
- /** Legacy host Plugin path (ALS-aware subscribeAIEvents). */
8
- export declare function bindActivityFeedbackToAIEvents(root: Plugin['root'], orchestrator: ActivityFeedbackOrchestrator): () => void;
9
7
  /**
10
- * Plugin Runtime path: subscribe on module-level `activityFeedbackAiBus`
11
- * (fed by ZhinAgentEventEmitter.emit). No usePlugin / Adapter inject.
8
+ * Plugin Runtime path: subscribe to the generation-owned Agent event bus.
12
9
  */
13
- export declare function bindActivityFeedbackToAIEventBus(orchestrator: ActivityFeedbackOrchestrator): () => void;
14
- export declare function mountActivityFeedbackService(plugin: Plugin, orchestrator: ActivityFeedbackOrchestrator): void;
10
+ export declare function bindActivityFeedbackToAIEventBus(source: AIEventTarget, orchestrator: ActivityFeedbackOrchestrator, admission: GenerationAdmissionGate, runWithView: <T>(operation: () => Promise<T>) => Promise<T>): () => Promise<void>;
15
11
  export type ActivityFeedbackLogger = {
16
12
  debug: (msg: string, ...args: unknown[]) => void;
17
13
  error: (msg: string, ...args: unknown[]) => void;
@@ -22,7 +18,6 @@ export interface CreateActivityFeedbackOrchestratorOptions {
22
18
  logger: ActivityFeedbackLogger;
23
19
  }
24
20
  export declare function createActivityFeedbackOrchestrator(options: CreateActivityFeedbackOrchestratorOptions): ActivityFeedbackOrchestrator;
25
- export declare function createActivityFeedbackOrchestratorFromPlugin(plugin: Plugin, serviceConfig: ActivityFeedbackServiceConfig): ActivityFeedbackOrchestrator;
26
21
  /** Runtime: prefer OutboundHost-backed access; else noop until Host wires outbound. */
27
22
  export declare function createActivityFeedbackOrchestratorForRuntime(serviceConfig: ActivityFeedbackServiceConfig, logger: ActivityFeedbackLogger, access?: ActivityFeedbackEndpointAccess): ActivityFeedbackOrchestrator;
28
23
  //# sourceMappingURL=ai-event-binder.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ai-event-binder.d.ts","sourceRoot":"","sources":["../src/ai-event-binder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACtC,OAAO,EAKL,KAAK,eAAe,EACrB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAqC,KAAK,6BAA6B,EAAE,MAAM,aAAa,CAAC;AACpG,OAAO,EAIL,KAAK,8BAA8B,EACpC,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,4BAA4B,EAAE,MAAM,mBAAmB,CAAC;AAGjE,wBAAgB,qCAAqC,CACnD,YAAY,EAAE,4BAA4B,GACzC,eAAe,CAoEjB;AAED,6DAA6D;AAC7D,wBAAgB,8BAA8B,CAC5C,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,EACpB,YAAY,EAAE,4BAA4B,GACzC,MAAM,IAAI,CAEZ;AAED;;;GAGG;AACH,wBAAgB,gCAAgC,CAC9C,YAAY,EAAE,4BAA4B,GACzC,MAAM,IAAI,CAKZ;AAED,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,4BAA4B,GACzC,IAAI,CAMN;AAED,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,wBAAgB,4CAA4C,CAC1D,MAAM,EAAE,MAAM,EACd,aAAa,EAAE,6BAA6B,GAC3C,4BAA4B,CAM9B;AAED,uFAAuF;AACvF,wBAAgB,4CAA4C,CAC1D,aAAa,EAAE,6BAA6B,EAC5C,MAAM,EAAE,sBAAsB,EAC9B,MAAM,GAAE,8BAA2D,GAClE,4BAA4B,CAM9B"}
1
+ {"version":3,"file":"ai-event-binder.d.ts","sourceRoot":"","sources":["../src/ai-event-binder.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,eAAe,EAEpB,KAAK,aAAa,EACnB,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;;GAEG;AACH,wBAAgB,gCAAgC,CAC9C,MAAM,EAAE,aAAa,EACrB,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,CAwCrB;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"}
@@ -1,6 +1,6 @@
1
- import { subscribeAIEvents, subscribeAIEventsOnTarget, activityFeedbackAiBus, isActivityFeedbackEnabled, } from '@zhin.js/agent';
1
+ import { subscribeAIEventsOnTarget, isActivityFeedbackEnabled, } from '@zhin.js/agent';
2
2
  import { loadActivityFeedbackServiceConfig } from './config.js';
3
- import { ActivityFeedbackExecutor, createNoopEndpointAccess, createRootEndpointAccess, } from './executor.js';
3
+ import { ActivityFeedbackExecutor, createNoopEndpointAccess, } from './executor.js';
4
4
  import { ActivityFeedbackOrchestrator } from './orchestrator.js';
5
5
  import { ActivityFeedbackPolicy } from './policy.js';
6
6
  export function createActivityFeedbackAIEventHandlers(orchestrator) {
@@ -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
- return orchestrator.stopPhase(payload, 'active', 'typing.stop');
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,60 +57,155 @@ 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;
78
+ // The subagent has an isolated session key; remove its own active placeholder
79
+ // before switching to the richer thinking state.
56
80
  await orchestrator.stopPhase(payload, 'active', 'subagent.start');
57
81
  await orchestrator.startPhase(payload, 'thinking', 'subagent.start');
58
- const label = payload.label
59
- ? `🔍 子任务执行中: ${payload.label}...`
60
- : '🔍 子 agent 处理中...';
61
- await orchestrator.updateThinkingText(payload, label);
82
+ const tag = payload.agentId?.trim() || 'subagent';
83
+ const label = payload.label?.trim()
84
+ ? `子任务执行中: ${payload.label.trim()}...`
85
+ : '思考中...';
86
+ await orchestrator.updateThinkingText(payload, `[${tag}] ${label}`);
62
87
  },
63
88
  onSubagentFinish: async (payload) => {
64
- if (!isActivityFeedbackEnabled(payload, 'active'))
65
- return;
66
- await orchestrator.stopPhase(payload, 'thinking', 'subagent.finish');
67
- await orchestrator.startPhase(payload, 'active', 'subagent.finish');
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
+ }
68
95
  },
69
96
  onScheduleStart: (payload) => orchestrator.startPhase(payload, 'schedule_start', 'schedule.start'),
70
- onScheduleFinish: (payload) => orchestrator.stopPhase(payload, 'schedule_start', 'schedule.finish'),
97
+ onScheduleFinish: async (payload) => {
98
+ await orchestrator.stopPhase(payload, 'schedule_start', 'schedule.finish');
99
+ await orchestrator.showTransientPhase(payload, 'schedule_finish', 'schedule.finish');
100
+ },
71
101
  onScheduleError: async (payload) => {
72
102
  await orchestrator.stopPhase(payload, 'schedule_start', 'schedule.error');
73
- await orchestrator.startPhase(payload, 'schedule_error', 'schedule.error');
103
+ await orchestrator.showTransientPhase(payload, 'schedule_error', 'schedule.error');
74
104
  },
75
105
  };
76
106
  }
77
- /** Legacy host Plugin path (ALS-aware subscribeAIEvents). */
78
- export function bindActivityFeedbackToAIEvents(root, orchestrator) {
79
- return subscribeAIEvents(root, createActivityFeedbackAIEventHandlers(orchestrator));
80
- }
81
107
  /**
82
- * Plugin Runtime path: subscribe on module-level `activityFeedbackAiBus`
83
- * (fed by ZhinAgentEventEmitter.emit). No usePlugin / Adapter inject.
108
+ * Plugin Runtime path: subscribe to the generation-owned Agent event bus.
84
109
  */
85
- export function bindActivityFeedbackToAIEventBus(orchestrator) {
86
- return subscribeAIEventsOnTarget(activityFeedbackAiBus, createActivityFeedbackAIEventHandlers(orchestrator));
110
+ export function bindActivityFeedbackToAIEventBus(source, orchestrator, admission, runWithView) {
111
+ let stopWatchingRetirement;
112
+ let cleanupNeedsGenerationView = false;
113
+ const watchRetirement = () => {
114
+ if (stopWatchingRetirement)
115
+ return;
116
+ cleanupNeedsGenerationView = true;
117
+ stopWatchingRetirement = admission.onDeactivate(() => {
118
+ void close();
119
+ });
120
+ };
121
+ const serialized = createGenerationSerializedTarget(source, admission, runWithView, watchRetirement);
122
+ const unsubscribe = subscribeAIEventsOnTarget(serialized.target, createActivityFeedbackAIEventHandlers(orchestrator));
123
+ let shutdown;
124
+ function close() {
125
+ if (shutdown)
126
+ return shutdown;
127
+ const cleanup = async () => {
128
+ unsubscribe();
129
+ await serialized.close();
130
+ await orchestrator.dispose();
131
+ };
132
+ // Retirement is published before SnapshotStore changes its current pointer.
133
+ // Enter the IM view synchronously here so timers, native-typing keepalives,
134
+ // and final reaction/message cleanup all remain on this generation's Endpoint.
135
+ // A candidate rolled back before admitting any event has no generation-local
136
+ // feedback state, and its view is unavailable while Root is still idle.
137
+ shutdown = cleanupNeedsGenerationView ? runWithView(cleanup) : cleanup();
138
+ return shutdown;
139
+ }
140
+ return async () => {
141
+ stopWatchingRetirement?.();
142
+ await close();
143
+ };
87
144
  }
88
- export function mountActivityFeedbackService(plugin, orchestrator) {
89
- const dispose = bindActivityFeedbackToAIEvents(plugin.root, orchestrator);
90
- plugin.onDispose(() => {
91
- plugin.logger.debug('[ActivityFeedback] Disposing binder');
92
- dispose();
93
- });
145
+ /** Generation-local ordering: one queue per IM session, no module-level runtime state. */
146
+ function createGenerationSerializedTarget(source, admission, runWithView, onAdmitted) {
147
+ const tails = new Map();
148
+ const wrappers = new Map();
149
+ let closed = false;
150
+ const target = {
151
+ on(event, listener) {
152
+ const wrapped = async (payload) => {
153
+ const release = admission.acquire();
154
+ if (!release)
155
+ return;
156
+ onAdmitted();
157
+ try {
158
+ await runWithView(async () => {
159
+ const key = payload.sessionId || '__global__';
160
+ const previous = tails.get(key);
161
+ const run = async () => {
162
+ if (!closed)
163
+ await listener(payload);
164
+ };
165
+ const current = previous
166
+ ? previous.catch(() => undefined).then(run)
167
+ : run();
168
+ tails.set(key, current);
169
+ try {
170
+ await current;
171
+ }
172
+ finally {
173
+ if (tails.get(key) === current)
174
+ tails.delete(key);
175
+ }
176
+ });
177
+ }
178
+ finally {
179
+ release();
180
+ }
181
+ };
182
+ wrappers.set(listener, wrapped);
183
+ return source.on(event, wrapped);
184
+ },
185
+ off(event, listener) {
186
+ const wrapped = wrappers.get(listener);
187
+ if (!wrapped)
188
+ return source.off(event, listener);
189
+ wrappers.delete(listener);
190
+ return source.off(event, wrapped);
191
+ },
192
+ };
193
+ return {
194
+ target,
195
+ async close() {
196
+ closed = true;
197
+ const pending = [...tails.values()];
198
+ await Promise.allSettled(pending);
199
+ tails.clear();
200
+ wrappers.clear();
201
+ },
202
+ };
94
203
  }
95
204
  export function createActivityFeedbackOrchestrator(options) {
96
205
  const policy = new ActivityFeedbackPolicy(loadActivityFeedbackServiceConfig(options.serviceConfig));
97
206
  const executor = new ActivityFeedbackExecutor(options.access);
98
207
  return new ActivityFeedbackOrchestrator(policy, executor, options.logger);
99
208
  }
100
- export function createActivityFeedbackOrchestratorFromPlugin(plugin, serviceConfig) {
101
- return createActivityFeedbackOrchestrator({
102
- serviceConfig,
103
- access: createRootEndpointAccess(plugin.root),
104
- logger: plugin.logger,
105
- });
106
- }
107
209
  /** Runtime: prefer OutboundHost-backed access; else noop until Host wires outbound. */
108
210
  export function createActivityFeedbackOrchestratorForRuntime(serviceConfig, logger, access = createNoopEndpointAccess()) {
109
211
  return createActivityFeedbackOrchestrator({
@@ -1 +1 @@
1
- {"version":3,"file":"ai-event-binder.js","sourceRoot":"","sources":["../src/ai-event-binder.ts"],"names":[],"mappings":"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"}
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
- /** 顶层 `activityFeedback` 配置(zhin.config.yml,与 endpoints 解耦) */
2
+ /** Plugin Runtime 实例配置(`plugins.<instanceKey>`,与 Adapter endpoint 配置解耦)。 */
3
3
  export interface ActivityFeedbackServiceConfig {
4
4
  enabled?: boolean;
5
5
  defaults?: ActivityFeedbackConfig;
@@ -12,6 +12,4 @@ export interface ActivityFeedbackServiceConfig {
12
12
  }
13
13
  export declare function mergeActivityFeedbackLayers(...layers: (ActivityFeedbackConfig | undefined)[]): ActivityFeedbackConfig | undefined;
14
14
  export declare function loadActivityFeedbackServiceConfig(raw: ActivityFeedbackServiceConfig | undefined): ActivityFeedbackServiceConfig;
15
- /** @deprecated 使用 ActivityFeedbackPolicy */
16
- export declare function resolveActivityFeedbackForTarget(service: ActivityFeedbackServiceConfig, platform: string, endpointId: string): ActivityFeedbackConfig | undefined;
17
15
  //# sourceMappingURL=config.d.ts.map
@@ -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,+DAA+D;AAC/D,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,UAAU,EAAE,MAAM,GACjB,sBAAsB,GAAG,SAAS,CASpC"}
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"}
package/lib/config.js CHANGED
@@ -40,11 +40,4 @@ export function loadActivityFeedbackServiceConfig(raw) {
40
40
  ...raw,
41
41
  };
42
42
  }
43
- /** @deprecated 使用 ActivityFeedbackPolicy */
44
- export function resolveActivityFeedbackForTarget(service, platform, endpointId) {
45
- if (service.enabled === false) {
46
- return { enabled: false };
47
- }
48
- return mergeActivityFeedbackLayers(service.defaults, service.platforms?.[platform], service.endpoints?.[`${platform}:${endpointId}`]);
49
- }
50
43
  //# sourceMappingURL=config.js.map
package/lib/config.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAcA,SAAS,eAAe,CACtB,IAAsC,EACtC,QAA0C;IAE1C,IAAI,CAAC,IAAI,IAAI,CAAC,QAAQ;QAAE,OAAO,SAAS,CAAC;IACzC,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC;QACrB,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;QAC1B,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC;KAC/B,CAA6D,CAAC;IAE/D,MAAM,MAAM,GAAkD,EAAE,CAAC;IACjE,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,CAAC,KAAK,CAAC,GAAG;YACd,GAAG,IAAI,EAAE,CAAC,KAAK,CAAC;YAChB,GAAG,QAAQ,EAAE,CAAC,KAAK,CAAC;YACpB,OAAO,EAAE,EAAE,GAAG,IAAI,EAAE,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,GAAG,QAAQ,EAAE,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE;YACrE,KAAK,EAAE,EAAE,GAAG,IAAI,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,GAAG,QAAQ,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE;YAC/D,OAAO,EAAE,EAAE,GAAG,IAAI,EAAE,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,GAAG,QAAQ,EAAE,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE;SACtE,CAAC;IACJ,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,2BAA2B,CACzC,GAAG,MAA8C;IAEjD,IAAI,MAA0C,CAAC;IAC/C,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,CAAC,KAAK;YAAE,SAAS;QACrB,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,GAAG,EAAE,GAAG,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;YAC9E,SAAS;QACX,CAAC;QACD,IAAI,KAAK,CAAC,OAAO,KAAK,SAAS;YAAE,MAAM,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;QAChE,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;YACjB,MAAM,CAAC,MAAM,GAAG,eAAe,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;QAC/D,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,iCAAiC,CAC/C,GAA8C;IAE9C,OAAO;QACL,OAAO,EAAE,IAAI;QACb,GAAG,GAAG;KACP,CAAC;AACJ,CAAC;AAED,4CAA4C;AAC5C,MAAM,UAAU,gCAAgC,CAC9C,OAAsC,EACtC,QAAgB,EAChB,UAAkB;IAElB,IAAI,OAAO,CAAC,OAAO,KAAK,KAAK,EAAE,CAAC;QAC9B,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IAC5B,CAAC;IACD,OAAO,2BAA2B,CAChC,OAAO,CAAC,QAAQ,EAChB,OAAO,CAAC,SAAS,EAAE,CAAC,QAAQ,CAAC,EAC7B,OAAO,CAAC,SAAS,EAAE,CAAC,GAAG,QAAQ,IAAI,UAAU,EAAE,CAAC,CACjD,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAcA,SAAS,eAAe,CACtB,IAAsC,EACtC,QAA0C;IAE1C,IAAI,CAAC,IAAI,IAAI,CAAC,QAAQ;QAAE,OAAO,SAAS,CAAC;IACzC,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC;QACrB,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;QAC1B,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC;KAC/B,CAA6D,CAAC;IAE/D,MAAM,MAAM,GAAkD,EAAE,CAAC;IACjE,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,CAAC,KAAK,CAAC,GAAG;YACd,GAAG,IAAI,EAAE,CAAC,KAAK,CAAC;YAChB,GAAG,QAAQ,EAAE,CAAC,KAAK,CAAC;YACpB,OAAO,EAAE,EAAE,GAAG,IAAI,EAAE,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,GAAG,QAAQ,EAAE,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE;YACrE,KAAK,EAAE,EAAE,GAAG,IAAI,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,GAAG,QAAQ,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE;YAC/D,OAAO,EAAE,EAAE,GAAG,IAAI,EAAE,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,GAAG,QAAQ,EAAE,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE;SACtE,CAAC;IACJ,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,2BAA2B,CACzC,GAAG,MAA8C;IAEjD,IAAI,MAA0C,CAAC;IAC/C,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,CAAC,KAAK;YAAE,SAAS;QACrB,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,GAAG,EAAE,GAAG,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;YAC9E,SAAS;QACX,CAAC;QACD,IAAI,KAAK,CAAC,OAAO,KAAK,SAAS;YAAE,MAAM,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;QAChE,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;YACjB,MAAM,CAAC,MAAM,GAAG,eAAe,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;QAC/D,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,iCAAiC,CAC/C,GAA8C;IAE9C,OAAO;QACL,OAAO,EAAE,IAAI;QACb,GAAG,GAAG;KACP,CAAC;AACJ,CAAC"}
package/lib/executor.d.ts CHANGED
@@ -1,23 +1,19 @@
1
- import type { Adapter } from 'zhin.js';
2
- import { type ActivityFeedbackPhase, type EndpointWithActivityFeedback, type ResolvedActivityFeedbackPhaseConfig, type ActivityFeedbackEventContext } from '@zhin.js/agent';
3
- import type { OutboundHost } from '@zhin.js/plugin-runtime';
1
+ import { type ActivityFeedbackPhase, type ActivityFeedbackSendPort, type EndpointWithActivityFeedback, type ResolvedActivityFeedbackPhaseConfig, type ActivityFeedbackEventContext } from '@zhin.js/agent';
2
+ import type { OutboundHost } from 'zhin.js';
4
3
  /** IM 侧 endpoint 访问 seam(便于测试注入 fake) */
5
4
  export interface ActivityFeedbackEndpointAccess {
6
- resolve(platform: string, endpointId: string): {
5
+ resolve(platform: string, endpointKey: string): {
7
6
  endpoint: EndpointWithActivityFeedback;
8
- adapter: Adapter;
7
+ outbound: ActivityFeedbackSendPort;
9
8
  } | undefined;
10
9
  }
11
- export declare function createRootEndpointAccess(root: {
12
- injectAdapter(platform: string): Adapter | undefined;
13
- }): ActivityFeedbackEndpointAccess;
14
10
  /** Slice-2: no Adapter inject — executor start/stop no-op when resolve returns undefined. */
15
11
  export declare function createNoopEndpointAccess(): ActivityFeedbackEndpointAccess;
16
12
  /**
17
13
  * Plugin Runtime: resolve endpoints via OutboundHost → ImRuntime.sendEndpointMessage.
18
14
  * Typing/reaction text goes through the unified outbound chain (no legacy Adapter.inject).
19
15
  *
20
- * 按 platform:endpointId 缓存 { endpoint, adapter }:activity manager 挂在
16
+ * 按 platform:endpointKey 缓存 { endpoint, outbound }:activity manager 挂在
21
17
  * endpoint.$activityFeedback 上,start/stop 必须解析到同一个对象,否则
22
18
  * stop 时拿不到 manager,typing 指示器永远无法停止。
23
19
  */
@@ -29,6 +25,7 @@ export declare class ActivityFeedbackExecutor {
29
25
  constructor(access: ActivityFeedbackEndpointAccess);
30
26
  start(ctx: ActivityFeedbackEventContext, phase: ActivityFeedbackPhase, phaseConfig: ResolvedActivityFeedbackPhaseConfig): Promise<void>;
31
27
  stop(ctx: ActivityFeedbackEventContext, phase: ActivityFeedbackPhase): Promise<void>;
28
+ updateText(ctx: ActivityFeedbackEventContext, phase: ActivityFeedbackPhase, text: string): Promise<void>;
32
29
  updateThinkingText(ctx: ActivityFeedbackEventContext, text: string): Promise<void>;
33
30
  }
34
31
  //# sourceMappingURL=executor.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"executor.d.ts","sourceRoot":"","sources":["../src/executor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAgG,KAAK,qBAAqB,EAAE,KAAK,4BAA4B,EAAwC,KAAK,mCAAmC,EAAE,KAAK,4BAA4B,EAAE,MAAM,gBAAgB,CAAC;AAChT,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAE5D,yCAAyC;AACzC,MAAM,WAAW,8BAA8B;IAC7C,OAAO,CACL,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,GACjB;QAAE,QAAQ,EAAE,4BAA4B,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE,GAAG,SAAS,CAAC;CAC7E;AAED,wBAAgB,wBAAwB,CAAC,IAAI,EAAE;IAC7C,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC;CACtD,GAAG,8BAA8B,CASjC;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,CAwFhC;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,kBAAkB,CAAC,GAAG,EAAE,4BAA4B,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAMzF"}
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"}