@zhin.js/service-activity-feedback 1.0.1 → 1.1.0

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,22 +1,32 @@
1
1
  # @zhin.js/service-activity-feedback
2
2
 
3
- 可选服务插件:订阅 AI 生命周期事件,按**顶层** `activityFeedback` 配置驱动各适配器能力。
3
+ 可选服务插件:订阅 AI 生命周期事件,按插件实例配置驱动各适配器能力。
4
4
 
5
5
  ## 模块结构
6
6
 
7
7
  ```
8
- AI 事件 ──► ai-event-binder(薄) ──► ActivityFeedbackOrchestrator
9
- │
10
- ┌────────────────────┼────────────────────┐
11
- ▼ ▼ ▼
12
- context.ts policy.ts executor.ts
13
- payload → 上下文 根级 YAML → phase 配置 platform/generic 统一执行
8
+ ZhinAgentEventEmitter.emit
9
+ │
10
+ ▼
11
+ activityFeedbackAiBus ──► ai-event-binder(薄) ──► ActivityFeedbackOrchestrator
12
+ │
13
+ ┌────────────────────┼────────────────────┐
14
+ ▼ ▼ ▼
15
+ context.ts policy.ts executor.ts
16
+ payload → 上下文 根级 YAML → phase 配置 platform/generic 统一执行
14
17
  ```
15
18
 
16
19
  - **Orchestrator**:对外 `startPhase` / `stopPhase` / `updateThinkingText`
17
20
  - **Policy**:根级 `activityFeedback` 合并与 phase 解析
18
- - **Executor**:隐藏 platform 自管 manager 与 generic manager 双路径
21
+ - **Executor**:隐藏 platform 自管 manager 与 generic manager 双路径,并按 Endpoint 声明能力选择 reaction / typing / message
19
22
  - **Adapter**:仅提供 `$activityFeedback` IO 能力
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,不按平台名称猜测隐藏方法。
20
30
 
21
31
  ## 安装
22
32
 
@@ -24,19 +34,47 @@ AI 事件 ──► ai-event-binder(薄) ──► ActivityFeedbackOrchestra
24
34
  pnpm add @zhin.js/service-activity-feedback @zhin.js/agent
25
35
  ```
26
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
+
27
52
  ## 启用
28
53
 
29
54
  ```yaml
30
55
  plugins:
31
- - "@zhin.js/service-activity-feedback"
32
-
33
- activityFeedback:
34
- enabled: true
35
- platforms:
36
- icqq:
56
+ activity-feedback:
57
+ enabled: true
58
+ defaults:
37
59
  phases:
60
+ queued:
61
+ group: { type: reaction, emoji: "⏳" }
38
62
  active:
39
- 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" }
40
71
  ```
41
72
 
42
- 详见 [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,14 +1,24 @@
1
- import type { Plugin } from 'zhin.js';
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
- export declare function bindActivityFeedbackToAIEvents(root: Plugin['root'], orchestrator: ActivityFeedbackOrchestrator): () => void;
6
- export declare function mountActivityFeedbackService(plugin: Plugin, orchestrator: ActivityFeedbackOrchestrator): void;
6
+ export declare function createActivityFeedbackAIEventHandlers(orchestrator: ActivityFeedbackOrchestrator): AIEventHandlers;
7
+ /**
8
+ * Plugin Runtime path: subscribe on module-level `activityFeedbackAiBus`
9
+ * (fed by ZhinAgentEventEmitter.emit). No usePlugin / Adapter inject.
10
+ */
11
+ export declare function bindActivityFeedbackToAIEventBus(orchestrator: ActivityFeedbackOrchestrator, admission: GenerationAdmissionGate, runWithView: <T>(operation: () => Promise<T>) => Promise<T>): () => Promise<void>;
12
+ export type ActivityFeedbackLogger = {
13
+ debug: (msg: string, ...args: unknown[]) => void;
14
+ error: (msg: string, ...args: unknown[]) => void;
15
+ };
7
16
  export interface CreateActivityFeedbackOrchestratorOptions {
8
17
  serviceConfig: ActivityFeedbackServiceConfig;
9
18
  access: ActivityFeedbackEndpointAccess;
10
- logger: Plugin['logger'];
19
+ logger: ActivityFeedbackLogger;
11
20
  }
12
21
  export declare function createActivityFeedbackOrchestrator(options: CreateActivityFeedbackOrchestratorOptions): ActivityFeedbackOrchestrator;
13
- export declare function createActivityFeedbackOrchestratorFromPlugin(plugin: Plugin, serviceConfig: ActivityFeedbackServiceConfig): ActivityFeedbackOrchestrator;
22
+ /** Runtime: prefer OutboundHost-backed access; else noop until Host wires outbound. */
23
+ export declare function createActivityFeedbackOrchestratorForRuntime(serviceConfig: ActivityFeedbackServiceConfig, logger: ActivityFeedbackLogger, access?: ActivityFeedbackEndpointAccess): ActivityFeedbackOrchestrator;
14
24
  //# 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;AAEtC,OAAO,EAAqC,KAAK,6BAA6B,EAAE,MAAM,aAAa,CAAC;AACpG,OAAO,EAGL,KAAK,8BAA8B,EACpC,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,4BAA4B,EAAE,MAAM,mBAAmB,CAAC;AAGjE,wBAAgB,8BAA8B,CAC5C,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,EACpB,YAAY,EAAE,4BAA4B,GACzC,MAAM,IAAI,CAoEZ;AAED,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,4BAA4B,GACzC,IAAI,CAMN;AAED,MAAM,WAAW,yCAAyC;IACxD,aAAa,EAAE,6BAA6B,CAAC;IAC7C,MAAM,EAAE,8BAA8B,CAAC;IACvC,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;CAC1B;AAED,wBAAgB,kCAAkC,CAChD,OAAO,EAAE,yCAAyC,GACjD,4BAA4B,CAI9B;AAED,wBAAgB,4CAA4C,CAC1D,MAAM,EAAE,MAAM,EACd,aAAa,EAAE,6BAA6B,GAC3C,4BAA4B,CAM9B"}
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,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,10 +1,10 @@
1
- import { subscribeAIEvents, isActivityFeedbackEnabled } from '@zhin.js/agent';
1
+ import { subscribeAIEventsOnTarget, activityFeedbackAiBus, isActivityFeedbackEnabled, } from '@zhin.js/agent';
2
2
  import { loadActivityFeedbackServiceConfig } from './config.js';
3
- import { ActivityFeedbackExecutor, 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
- export function bindActivityFeedbackToAIEvents(root, orchestrator) {
7
- return subscribeAIEvents(root, {
6
+ export function createActivityFeedbackAIEventHandlers(orchestrator) {
7
+ return {
8
8
  onQueuedStart: (payload) => {
9
9
  if (!isActivityFeedbackEnabled(payload, 'queued'))
10
10
  return;
@@ -19,7 +19,13 @@ export function bindActivityFeedbackToAIEvents(root, 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 bindActivityFeedbackToAIEvents(root, 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,47 +57,162 @@ export function bindActivityFeedbackToAIEvents(root, 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
- export function mountActivityFeedbackService(plugin, orchestrator) {
78
- const dispose = bindActivityFeedbackToAIEvents(plugin.root, orchestrator);
79
- plugin.onDispose(() => {
80
- plugin.logger.debug('[ActivityFeedback] Disposing binder');
81
- dispose();
82
- });
107
+ /**
108
+ * Plugin Runtime path: subscribe on module-level `activityFeedbackAiBus`
109
+ * (fed by ZhinAgentEventEmitter.emit). No usePlugin / Adapter inject.
110
+ */
111
+ export function bindActivityFeedbackToAIEventBus(orchestrator, admission, runWithView) {
112
+ let stopWatchingRetirement;
113
+ let cleanupNeedsGenerationView = false;
114
+ const watchRetirement = () => {
115
+ if (stopWatchingRetirement)
116
+ return;
117
+ cleanupNeedsGenerationView = true;
118
+ stopWatchingRetirement = admission.onDeactivate(() => {
119
+ void close();
120
+ });
121
+ };
122
+ const serialized = createGenerationSerializedTarget(activityFeedbackAiBus, admission, runWithView, watchRetirement);
123
+ const unsubscribe = subscribeAIEventsOnTarget(serialized.target, createActivityFeedbackAIEventHandlers(orchestrator));
124
+ let shutdown;
125
+ function close() {
126
+ if (shutdown)
127
+ return shutdown;
128
+ const cleanup = async () => {
129
+ unsubscribe();
130
+ await serialized.close();
131
+ await orchestrator.dispose();
132
+ };
133
+ // Retirement is published before SnapshotStore changes its current pointer.
134
+ // Enter the IM view synchronously here so timers, native-typing keepalives,
135
+ // and final reaction/message cleanup all remain on this generation's Endpoint.
136
+ // A candidate rolled back before admitting any event has no generation-local
137
+ // feedback state, and its view is unavailable while Root is still idle.
138
+ shutdown = cleanupNeedsGenerationView ? runWithView(cleanup) : cleanup();
139
+ return shutdown;
140
+ }
141
+ return async () => {
142
+ stopWatchingRetirement?.();
143
+ await close();
144
+ };
145
+ }
146
+ /** Generation-local ordering: one queue per IM session, no module-level runtime state. */
147
+ function createGenerationSerializedTarget(source, admission, runWithView, onAdmitted) {
148
+ const tails = new Map();
149
+ const wrappers = new Map();
150
+ let closed = false;
151
+ const target = {
152
+ on(event, listener) {
153
+ const wrapped = async (payload) => {
154
+ const release = admission.acquire();
155
+ if (!release)
156
+ return;
157
+ onAdmitted();
158
+ try {
159
+ await runWithView(async () => {
160
+ const key = payload.sessionId || '__global__';
161
+ const previous = tails.get(key);
162
+ const run = async () => {
163
+ if (!closed)
164
+ await listener(payload);
165
+ };
166
+ const current = previous
167
+ ? previous.catch(() => undefined).then(run)
168
+ : run();
169
+ tails.set(key, current);
170
+ try {
171
+ await current;
172
+ }
173
+ finally {
174
+ if (tails.get(key) === current)
175
+ tails.delete(key);
176
+ }
177
+ });
178
+ }
179
+ finally {
180
+ release();
181
+ }
182
+ };
183
+ wrappers.set(listener, wrapped);
184
+ return source.on(event, wrapped);
185
+ },
186
+ off(event, listener) {
187
+ const wrapped = wrappers.get(listener);
188
+ if (!wrapped)
189
+ return source.off(event, listener);
190
+ wrappers.delete(listener);
191
+ return source.off(event, wrapped);
192
+ },
193
+ };
194
+ return {
195
+ target,
196
+ async close() {
197
+ closed = true;
198
+ const pending = [...tails.values()];
199
+ await Promise.allSettled(pending);
200
+ tails.clear();
201
+ wrappers.clear();
202
+ },
203
+ };
83
204
  }
84
205
  export function createActivityFeedbackOrchestrator(options) {
85
206
  const policy = new ActivityFeedbackPolicy(loadActivityFeedbackServiceConfig(options.serviceConfig));
86
207
  const executor = new ActivityFeedbackExecutor(options.access);
87
208
  return new ActivityFeedbackOrchestrator(policy, executor, options.logger);
88
209
  }
89
- export function createActivityFeedbackOrchestratorFromPlugin(plugin, serviceConfig) {
210
+ /** Runtime: prefer OutboundHost-backed access; else noop until Host wires outbound. */
211
+ export function createActivityFeedbackOrchestratorForRuntime(serviceConfig, logger, access = createNoopEndpointAccess()) {
90
212
  return createActivityFeedbackOrchestrator({
91
213
  serviceConfig,
92
- access: createRootEndpointAccess(plugin.root),
93
- logger: plugin.logger,
214
+ access,
215
+ logger,
94
216
  });
95
217
  }
96
218
  //# sourceMappingURL=ai-event-binder.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ai-event-binder.js","sourceRoot":"","sources":["../src/ai-event-binder.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,yBAAyB,EAAE,MAAM,gBAAgB,CAAC;AAC9E,OAAO,EAAE,iCAAiC,EAAsC,MAAM,aAAa,CAAC;AACpG,OAAO,EACL,wBAAwB,EACxB,wBAAwB,GAEzB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,4BAA4B,EAAE,MAAM,mBAAmB,CAAC;AACjE,OAAO,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAErD,MAAM,UAAU,8BAA8B,CAC5C,IAAoB,EACpB,YAA0C;IAE1C,OAAO,iBAAiB,CAAC,IAAI,EAAE;QAC7B,aAAa,EAAE,CAAC,OAAO,EAAE,EAAE;YACzB,IAAI,CAAC,yBAAyB,CAAC,OAAO,EAAE,QAAQ,CAAC;gBAAE,OAAO;YAC1D,OAAO,YAAY,CAAC,UAAU,CAAC,OAAO,EAAE,QAAQ,EAAE,uBAAuB,CAAC,CAAC;QAC7E,CAAC;QACD,aAAa,EAAE,CAAC,OAAO,EAAE,EAAE;YACzB,IAAI,CAAC,yBAAyB,CAAC,OAAO,EAAE,QAAQ,CAAC;gBAAE,OAAO;YAC1D,OAAO,YAAY,CAAC,SAAS,CAAC,OAAO,EAAE,QAAQ,EAAE,uBAAuB,CAAC,CAAC;QAC5E,CAAC;QAED,iBAAiB,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;YACnC,IAAI,CAAC,yBAAyB,CAAC,OAAO,EAAE,QAAQ,CAAC;gBAAE,OAAO;YAC1D,MAAM,YAAY,CAAC,SAAS,CAAC,OAAO,EAAE,QAAQ,EAAE,kBAAkB,CAAC,CAAC;YACpE,MAAM,YAAY,CAAC,UAAU,CAAC,OAAO,EAAE,QAAQ,EAAE,kBAAkB,CAAC,CAAC;QACvE,CAAC;QAED,aAAa,EAAE,KAAK,IAAI,EAAE,GAAE,CAAC;QAE7B,kBAAkB,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;YACpC,IAAI,CAAC,yBAAyB,CAAC,OAAO,EAAE,QAAQ,CAAC;gBAAE,OAAO;YAC1D,IAAI,OAAO,CAAC,UAAU;gBAAE,OAAO;YAC/B,MAAM,YAAY,CAAC,SAAS,CAAC,OAAO,EAAE,UAAU,EAAE,mBAAmB,CAAC,CAAC;YACvE,MAAM,YAAY,CAAC,SAAS,CAAC,OAAO,EAAE,QAAQ,EAAE,mBAAmB,CAAC,CAAC;QACvE,CAAC;QAED,iBAAiB,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;YACnC,IAAI,CAAC,yBAAyB,CAAC,OAAO,EAAE,QAAQ,CAAC;gBAAE,OAAO;YAC1D,MAAM,YAAY,CAAC,SAAS,CAAC,OAAO,EAAE,UAAU,EAAE,kBAAkB,CAAC,CAAC;YACtE,MAAM,YAAY,CAAC,SAAS,CAAC,OAAO,EAAE,QAAQ,EAAE,kBAAkB,CAAC,CAAC;QACtE,CAAC;QAED,YAAY,EAAE,CAAC,OAAO,EAAE,EAAE;YACxB,IAAI,CAAC,yBAAyB,CAAC,OAAO,EAAE,QAAQ,CAAC;gBAAE,OAAO;YAC1D,OAAO,YAAY,CAAC,SAAS,CAAC,OAAO,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC;QAClE,CAAC;QAED,UAAU,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;YAC5B,IAAI,CAAC,yBAAyB,CAAC,OAAO,EAAE,UAAU,CAAC;gBAAE,OAAO;YAC5D,IAAI,CAAC,OAAO,CAAC,QAAQ;gBAAE,OAAO;YAC9B,MAAM,YAAY,CAAC,SAAS,CAAC,OAAO,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;YAC5D,MAAM,YAAY,CAAC,UAAU,CAAC,OAAO,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;YAC/D,MAAM,YAAY,CAAC,kBAAkB,CAAC,OAAO,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;QACnE,CAAC;QAED,eAAe,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;YACjC,IAAI,CAAC,yBAAyB,CAAC,OAAO,EAAE,UAAU,CAAC;gBAAE,OAAO;YAC5D,MAAM,YAAY,CAAC,SAAS,CAAC,OAAO,EAAE,QAAQ,EAAE,gBAAgB,CAAC,CAAC;YAClE,MAAM,YAAY,CAAC,UAAU,CAAC,OAAO,EAAE,UAAU,EAAE,gBAAgB,CAAC,CAAC;YACrE,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK;gBACzB,CAAC,CAAC,cAAc,OAAO,CAAC,KAAK,KAAK;gBAClC,CAAC,CAAC,mBAAmB,CAAC;YACxB,MAAM,YAAY,CAAC,kBAAkB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QACxD,CAAC;QAED,gBAAgB,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;YAClC,IAAI,CAAC,yBAAyB,CAAC,OAAO,EAAE,QAAQ,CAAC;gBAAE,OAAO;YAC1D,MAAM,YAAY,CAAC,SAAS,CAAC,OAAO,EAAE,UAAU,EAAE,iBAAiB,CAAC,CAAC;YACrE,MAAM,YAAY,CAAC,UAAU,CAAC,OAAO,EAAE,QAAQ,EAAE,iBAAiB,CAAC,CAAC;QACtE,CAAC;QAED,eAAe,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,YAAY,CAAC,UAAU,CAAC,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,CAAC;QAClG,gBAAgB,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,YAAY,CAAC,SAAS,CAAC,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,CAAC;QACnG,eAAe,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;YACjC,MAAM,YAAY,CAAC,SAAS,CAAC,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,CAAC,CAAC;YAC1E,MAAM,YAAY,CAAC,UAAU,CAAC,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,CAAC,CAAC;QAC7E,CAAC;KACF,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,4BAA4B,CAC1C,MAAc,EACd,YAA0C;IAE1C,MAAM,OAAO,GAAG,8BAA8B,CAAC,MAAM,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;IAC1E,MAAM,CAAC,SAAS,CAAC,GAAG,EAAE;QACpB,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAC;QAC3D,OAAO,EAAE,CAAC;IACZ,CAAC,CAAC,CAAC;AACL,CAAC;AAQD,MAAM,UAAU,kCAAkC,CAChD,OAAkD;IAElD,MAAM,MAAM,GAAG,IAAI,sBAAsB,CAAC,iCAAiC,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC;IACpG,MAAM,QAAQ,GAAG,IAAI,wBAAwB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAC9D,OAAO,IAAI,4BAA4B,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;AAC5E,CAAC;AAED,MAAM,UAAU,4CAA4C,CAC1D,MAAc,EACd,aAA4C;IAE5C,OAAO,kCAAkC,CAAC;QACxC,aAAa;QACb,MAAM,EAAE,wBAAwB,CAAC,MAAM,CAAC,IAAI,CAAC;QAC7C,MAAM,EAAE,MAAM,CAAC,MAAM;KACtB,CAAC,CAAC;AACL,CAAC"}
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;
@@ -13,5 +13,5 @@ export interface ActivityFeedbackServiceConfig {
13
13
  export declare function mergeActivityFeedbackLayers(...layers: (ActivityFeedbackConfig | undefined)[]): ActivityFeedbackConfig | undefined;
14
14
  export declare function loadActivityFeedbackServiceConfig(raw: ActivityFeedbackServiceConfig | undefined): ActivityFeedbackServiceConfig;
15
15
  /** @deprecated 使用 ActivityFeedbackPolicy */
16
- export declare function resolveActivityFeedbackForTarget(service: ActivityFeedbackServiceConfig, platform: string, endpointId: string): ActivityFeedbackConfig | undefined;
16
+ export declare function resolveActivityFeedbackForTarget(service: ActivityFeedbackServiceConfig, platform: string, endpointKey: string): ActivityFeedbackConfig | undefined;
17
17
  //# 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;AAED,4CAA4C;AAC5C,wBAAgB,gCAAgC,CAC9C,OAAO,EAAE,6BAA6B,EACtC,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,GAClB,sBAAsB,GAAG,SAAS,CASpC"}
package/lib/config.js CHANGED
@@ -41,10 +41,10 @@ export function loadActivityFeedbackServiceConfig(raw) {
41
41
  };
42
42
  }
43
43
  /** @deprecated 使用 ActivityFeedbackPolicy */
44
- export function resolveActivityFeedbackForTarget(service, platform, endpointId) {
44
+ export function resolveActivityFeedbackForTarget(service, platform, endpointKey) {
45
45
  if (service.enabled === false) {
46
46
  return { enabled: false };
47
47
  }
48
- return mergeActivityFeedbackLayers(service.defaults, service.platforms?.[platform], service.endpoints?.[`${platform}:${endpointId}`]);
48
+ return mergeActivityFeedbackLayers(service.defaults, service.platforms?.[platform], service.endpoints?.[`${platform}:${endpointKey}`]);
49
49
  }
50
50
  //# 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;AAED,4CAA4C;AAC5C,MAAM,UAAU,gCAAgC,CAC9C,OAAsC,EACtC,QAAgB,EAChB,WAAmB;IAEnB,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,WAAW,EAAE,CAAC,CAClD,CAAC;AACJ,CAAC"}
package/lib/executor.d.ts CHANGED
@@ -1,20 +1,31 @@
1
- import type { Adapter } from 'zhin.js';
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';
2
+ import type { OutboundHost } from 'zhin.js';
3
3
  /** IM 侧 endpoint 访问 seam(便于测试注入 fake) */
4
4
  export interface ActivityFeedbackEndpointAccess {
5
- resolve(platform: string, endpointId: string): {
5
+ resolve(platform: string, endpointKey: string): {
6
6
  endpoint: EndpointWithActivityFeedback;
7
- adapter: Adapter;
7
+ outbound: ActivityFeedbackSendPort;
8
8
  } | undefined;
9
9
  }
10
- export declare function createRootEndpointAccess(root: {
11
- injectAdapter(platform: string): Adapter | undefined;
10
+ /** Slice-2: no Adapter inject — executor start/stop no-op when resolve returns undefined. */
11
+ export declare function createNoopEndpointAccess(): ActivityFeedbackEndpointAccess;
12
+ /**
13
+ * Plugin Runtime: resolve endpoints via OutboundHost → ImRuntime.sendEndpointMessage.
14
+ * Typing/reaction text goes through the unified outbound chain (no legacy Adapter.inject).
15
+ *
16
+ * 按 platform:endpointKey 缓存 { endpoint, outbound }:activity manager 挂在
17
+ * endpoint.$activityFeedback 上,start/stop 必须解析到同一个对象,否则
18
+ * stop 时拿不到 manager,typing 指示器永远无法停止。
19
+ */
20
+ export declare function createOutboundEndpointAccess(outbound: OutboundHost, logger?: {
21
+ debug: (msg: string, ...args: unknown[]) => void;
12
22
  }): ActivityFeedbackEndpointAccess;
13
23
  export declare class ActivityFeedbackExecutor {
14
24
  private readonly access;
15
25
  constructor(access: ActivityFeedbackEndpointAccess);
16
26
  start(ctx: ActivityFeedbackEventContext, phase: ActivityFeedbackPhase, phaseConfig: ResolvedActivityFeedbackPhaseConfig): Promise<void>;
17
27
  stop(ctx: ActivityFeedbackEventContext, phase: ActivityFeedbackPhase): Promise<void>;
28
+ updateText(ctx: ActivityFeedbackEventContext, phase: ActivityFeedbackPhase, text: string): Promise<void>;
18
29
  updateThinkingText(ctx: ActivityFeedbackEventContext, text: string): Promise<void>;
19
30
  }
20
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;AAEhT,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;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"}