@zhin.js/agent 1.0.10 → 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.
Files changed (196) hide show
  1. package/README.md +46 -11
  2. package/lib/aop/index.d.ts +0 -2
  3. package/lib/aop/index.d.ts.map +1 -1
  4. package/lib/aop/index.js +0 -1
  5. package/lib/aop/index.js.map +1 -1
  6. package/lib/builtin/analyze-media-tool.d.ts.map +1 -1
  7. package/lib/builtin/analyze-media-tool.js +9 -8
  8. package/lib/builtin/analyze-media-tool.js.map +1 -1
  9. package/lib/collaboration/{inbound-turn-pipeline.d.ts → inbound-turn-compat.d.ts} +10 -6
  10. package/lib/collaboration/inbound-turn-compat.d.ts.map +1 -0
  11. package/lib/collaboration/inbound-turn-compat.js +30 -0
  12. package/lib/collaboration/inbound-turn-compat.js.map +1 -0
  13. package/lib/collaboration/index.d.ts +2 -5
  14. package/lib/collaboration/index.d.ts.map +1 -1
  15. package/lib/collaboration/index.js +1 -4
  16. package/lib/collaboration/index.js.map +1 -1
  17. package/lib/config/agent-interfaces.d.ts +3 -3
  18. package/lib/config/agent-interfaces.d.ts.map +1 -1
  19. package/lib/config/validate-ai-config.js +1 -1
  20. package/lib/config/validate-ai-config.js.map +1 -1
  21. package/lib/core/agent-core-run.d.ts +13 -0
  22. package/lib/core/agent-core-run.d.ts.map +1 -1
  23. package/lib/core/agent-core-run.js +38 -2
  24. package/lib/core/agent-core-run.js.map +1 -1
  25. package/lib/core/agent-loop-standalone.d.ts +3 -2
  26. package/lib/core/agent-loop-standalone.d.ts.map +1 -1
  27. package/lib/core/agent-loop-standalone.js +14 -7
  28. package/lib/core/agent-loop-standalone.js.map +1 -1
  29. package/lib/event/publish-agent-stream.d.ts +2 -2
  30. package/lib/event/publish-agent-stream.d.ts.map +1 -1
  31. package/lib/event/publish-agent-stream.js +2 -2
  32. package/lib/event/publish-agent-stream.js.map +1 -1
  33. package/lib/event/turn-event.d.ts +9 -1
  34. package/lib/event/turn-event.d.ts.map +1 -1
  35. package/lib/event/turn-event.js +3 -1
  36. package/lib/event/turn-event.js.map +1 -1
  37. package/lib/event/turn-to-agent-stream.d.ts +2 -1
  38. package/lib/event/turn-to-agent-stream.d.ts.map +1 -1
  39. package/lib/event/turn-to-agent-stream.js +29 -15
  40. package/lib/event/turn-to-agent-stream.js.map +1 -1
  41. package/lib/index.d.ts +4 -1
  42. package/lib/index.d.ts.map +1 -1
  43. package/lib/index.js +2 -1
  44. package/lib/index.js.map +1 -1
  45. package/lib/init/output-renderer.d.ts +3 -3
  46. package/lib/init/output-renderer.d.ts.map +1 -1
  47. package/lib/init/output-renderer.js +1 -1
  48. package/lib/init/output-renderer.js.map +1 -1
  49. package/lib/init.d.ts +0 -1
  50. package/lib/init.d.ts.map +1 -1
  51. package/lib/init.js +0 -3
  52. package/lib/init.js.map +1 -1
  53. package/lib/internal/agent-host.d.ts +3 -0
  54. package/lib/internal/agent-host.d.ts.map +1 -1
  55. package/lib/internal/host-types.d.ts +1 -0
  56. package/lib/internal/host-types.d.ts.map +1 -1
  57. package/lib/media/inbound-refs.d.ts +9 -0
  58. package/lib/media/inbound-refs.d.ts.map +1 -0
  59. package/lib/media/inbound-refs.js +18 -0
  60. package/lib/media/inbound-refs.js.map +1 -0
  61. package/lib/media/index.d.ts +1 -0
  62. package/lib/media/index.d.ts.map +1 -1
  63. package/lib/media/index.js +1 -0
  64. package/lib/media/index.js.map +1 -1
  65. package/lib/media/media-normalize.d.ts +15 -4
  66. package/lib/media/media-normalize.d.ts.map +1 -1
  67. package/lib/media/media-normalize.js +92 -88
  68. package/lib/media/media-normalize.js.map +1 -1
  69. package/lib/media/media-publisher.d.ts +3 -3
  70. package/lib/media/media-publisher.d.ts.map +1 -1
  71. package/lib/media/media-publisher.js +25 -27
  72. package/lib/media/media-publisher.js.map +1 -1
  73. package/lib/media/media-router.d.ts +5 -3
  74. package/lib/media/media-router.d.ts.map +1 -1
  75. package/lib/media/media-router.js +14 -5
  76. package/lib/media/media-router.js.map +1 -1
  77. package/lib/media/media-types.d.ts +8 -2
  78. package/lib/media/media-types.d.ts.map +1 -1
  79. package/lib/media/media-types.js.map +1 -1
  80. package/lib/media/subagent-inbound.d.ts +5 -4
  81. package/lib/media/subagent-inbound.d.ts.map +1 -1
  82. package/lib/media/subagent-inbound.js +10 -5
  83. package/lib/media/subagent-inbound.js.map +1 -1
  84. package/lib/orchestrator/bootstrap-executors.d.ts.map +1 -1
  85. package/lib/orchestrator/bootstrap-executors.js +5 -5
  86. package/lib/orchestrator/bootstrap-executors.js.map +1 -1
  87. package/lib/routing/match-rules.d.ts +4 -0
  88. package/lib/routing/match-rules.d.ts.map +1 -0
  89. package/lib/routing/match-rules.js +29 -0
  90. package/lib/routing/match-rules.js.map +1 -0
  91. package/lib/routing/route-matcher.d.ts +1 -2
  92. package/lib/routing/route-matcher.d.ts.map +1 -1
  93. package/lib/routing/route-matcher.js +2 -58
  94. package/lib/routing/route-matcher.js.map +1 -1
  95. package/lib/service.d.ts +4 -3
  96. package/lib/service.d.ts.map +1 -1
  97. package/lib/service.js.map +1 -1
  98. package/lib/session/resolve-session-interaction-port.d.ts +2 -2
  99. package/lib/session/resolve-session-interaction-port.d.ts.map +1 -1
  100. package/lib/session/resolve-session-interaction-port.js +5 -1
  101. package/lib/session/resolve-session-interaction-port.js.map +1 -1
  102. package/lib/session/session-interaction-port.d.ts +7 -2
  103. package/lib/session/session-interaction-port.d.ts.map +1 -1
  104. package/lib/session/session-interaction-port.js +3 -1
  105. package/lib/session/session-interaction-port.js.map +1 -1
  106. package/lib/subagent/subagent-runtime.d.ts +4 -3
  107. package/lib/subagent/subagent-runtime.d.ts.map +1 -1
  108. package/lib/subagent/subagent-runtime.js +8 -2
  109. package/lib/subagent/subagent-runtime.js.map +1 -1
  110. package/lib/tool/tool-approval-gate.d.ts +9 -4
  111. package/lib/tool/tool-approval-gate.d.ts.map +1 -1
  112. package/lib/tool/tool-approval-gate.js +19 -8
  113. package/lib/tool/tool-approval-gate.js.map +1 -1
  114. package/lib/turn/agent-turn-context.d.ts +13 -0
  115. package/lib/turn/agent-turn-context.d.ts.map +1 -0
  116. package/lib/turn/agent-turn-context.js +13 -0
  117. package/lib/turn/agent-turn-context.js.map +1 -0
  118. package/lib/turn/inbound-media.d.ts +26 -0
  119. package/lib/turn/inbound-media.d.ts.map +1 -0
  120. package/lib/turn/inbound-media.js +128 -0
  121. package/lib/turn/inbound-media.js.map +1 -0
  122. package/lib/turn/inbound-queue-runtime.d.ts +1 -0
  123. package/lib/turn/inbound-queue-runtime.d.ts.map +1 -1
  124. package/lib/turn/inbound-queue-runtime.js +1 -0
  125. package/lib/turn/inbound-queue-runtime.js.map +1 -1
  126. package/lib/turn/inbound-turn-queue.d.ts +5 -0
  127. package/lib/turn/inbound-turn-queue.d.ts.map +1 -1
  128. package/lib/turn/inbound-turn-queue.js +46 -1
  129. package/lib/turn/inbound-turn-queue.js.map +1 -1
  130. package/lib/turn/index.d.ts +4 -5
  131. package/lib/turn/index.d.ts.map +1 -1
  132. package/lib/turn/index.js +4 -5
  133. package/lib/turn/index.js.map +1 -1
  134. package/lib/turn/process-stream.d.ts.map +1 -1
  135. package/lib/turn/process-stream.js +21 -13
  136. package/lib/turn/process-stream.js.map +1 -1
  137. package/lib/turn/prompt-api.d.ts +2 -2
  138. package/lib/turn/prompt-api.d.ts.map +1 -1
  139. package/lib/turn/prompt-api.js +1 -1
  140. package/lib/turn/prompt-api.js.map +1 -1
  141. package/lib/turn/prompt-controller.d.ts +7 -0
  142. package/lib/turn/prompt-controller.d.ts.map +1 -1
  143. package/lib/turn/prompt-controller.js +52 -7
  144. package/lib/turn/prompt-controller.js.map +1 -1
  145. package/lib/turn/prompt-input.d.ts +2 -2
  146. package/lib/turn/prompt-input.d.ts.map +1 -1
  147. package/lib/turn/prompt-input.js +2 -2
  148. package/lib/turn/prompt-input.js.map +1 -1
  149. package/lib/turn/turn-context-bridge.d.ts +6 -1
  150. package/lib/turn/turn-context-bridge.d.ts.map +1 -1
  151. package/lib/turn/turn-context-bridge.js +8 -5
  152. package/lib/turn/turn-context-bridge.js.map +1 -1
  153. package/lib/turn/turn-pipeline.d.ts +8 -2
  154. package/lib/turn/turn-pipeline.d.ts.map +1 -1
  155. package/lib/turn/turn-pipeline.js +13 -101
  156. package/lib/turn/turn-pipeline.js.map +1 -1
  157. package/lib/turn/turn-terminal.d.ts +14 -0
  158. package/lib/turn/turn-terminal.d.ts.map +1 -0
  159. package/lib/turn/turn-terminal.js +44 -0
  160. package/lib/turn/turn-terminal.js.map +1 -0
  161. package/lib/zhin-agent/index.d.ts +30 -5
  162. package/lib/zhin-agent/index.d.ts.map +1 -1
  163. package/lib/zhin-agent/index.js +61 -9
  164. package/lib/zhin-agent/index.js.map +1 -1
  165. package/package.json +3 -3
  166. package/lib/collaboration/inbound-turn-enrich.d.ts +0 -25
  167. package/lib/collaboration/inbound-turn-enrich.d.ts.map +0 -1
  168. package/lib/collaboration/inbound-turn-enrich.js +0 -51
  169. package/lib/collaboration/inbound-turn-enrich.js.map +0 -1
  170. package/lib/collaboration/inbound-turn-execute.d.ts +0 -33
  171. package/lib/collaboration/inbound-turn-execute.d.ts.map +0 -1
  172. package/lib/collaboration/inbound-turn-execute.js +0 -73
  173. package/lib/collaboration/inbound-turn-execute.js.map +0 -1
  174. package/lib/collaboration/inbound-turn-outbound-stage.d.ts +0 -27
  175. package/lib/collaboration/inbound-turn-outbound-stage.d.ts.map +0 -1
  176. package/lib/collaboration/inbound-turn-outbound-stage.js +0 -74
  177. package/lib/collaboration/inbound-turn-outbound-stage.js.map +0 -1
  178. package/lib/collaboration/inbound-turn-pipeline.d.ts.map +0 -1
  179. package/lib/collaboration/inbound-turn-pipeline.js +0 -202
  180. package/lib/collaboration/inbound-turn-pipeline.js.map +0 -1
  181. package/lib/collaboration/inbound-turn-route.d.ts +0 -42
  182. package/lib/collaboration/inbound-turn-route.d.ts.map +0 -1
  183. package/lib/collaboration/inbound-turn-route.js +0 -107
  184. package/lib/collaboration/inbound-turn-route.js.map +0 -1
  185. package/lib/init/message-media.d.ts +0 -11
  186. package/lib/init/message-media.d.ts.map +0 -1
  187. package/lib/init/message-media.js +0 -107
  188. package/lib/init/message-media.js.map +0 -1
  189. package/lib/init/register-ai-trigger.d.ts +0 -7
  190. package/lib/init/register-ai-trigger.d.ts.map +0 -1
  191. package/lib/init/register-ai-trigger.js +0 -72
  192. package/lib/init/register-ai-trigger.js.map +0 -1
  193. package/lib/turn/multimodal-message.d.ts +0 -9
  194. package/lib/turn/multimodal-message.d.ts.map +0 -1
  195. package/lib/turn/multimodal-message.js +0 -72
  196. package/lib/turn/multimodal-message.js.map +0 -1
@@ -0,0 +1,128 @@
1
+ import { formatCompact, getLogger } from '@zhin.js/logger';
2
+ import { readLocalFileAsBase64, } from '../media/media-normalize.js';
3
+ import { readInboundMediaRefs } from '../media/inbound-refs.js';
4
+ import { transcribeAudioPayload } from '../media/media-router.js';
5
+ import { getPrimaryAppConfig, resolveMultimodalConfig, } from '../media/resolve-config.js';
6
+ const logger = getLogger('ZhinAgent');
7
+ const EMPTY_INJECTION = Object.freeze({
8
+ blocks: Object.freeze([]),
9
+ textAppends: Object.freeze([]),
10
+ });
11
+ function placeholderOf(type, ref) {
12
+ const label = ref.file_name ?? { image: '图片', audio: '音频', video: '视频', file: '文件' }[type] ?? '媒体';
13
+ return `[${label}]`;
14
+ }
15
+ function toBase64Block(type, payload, alt) {
16
+ return {
17
+ type,
18
+ data: {
19
+ media: {
20
+ kind: 'base64',
21
+ value: payload.base64,
22
+ mime_type: payload.mimeType,
23
+ ...(payload.fileName ? { file_name: payload.fileName } : {}),
24
+ },
25
+ ...(alt ? { alt } : {}),
26
+ },
27
+ };
28
+ }
29
+ export async function resolveInboundMediaInjection(commMessage) {
30
+ const refs = readInboundMediaRefs(commMessage);
31
+ if (refs.length === 0)
32
+ return EMPTY_INJECTION;
33
+ const config = resolveMultimodalConfig();
34
+ const blocks = [];
35
+ const textAppends = [];
36
+ for (const { type, media } of refs) {
37
+ if (type === 'image') {
38
+ if (media.kind === 'url' || media.kind === 'base64') {
39
+ blocks.push({ type: 'image', data: { media } });
40
+ continue;
41
+ }
42
+ if (media.kind === 'path') {
43
+ const payload = await readLocalFileAsBase64(media.value, config.maxFileBytes);
44
+ if (payload) {
45
+ blocks.push(toBase64Block('image', payload));
46
+ }
47
+ else {
48
+ logger.warn(formatCompact({ op: 'inbound_media_dropped', type, reason: 'path_read_failed' }));
49
+ textAppends.push(placeholderOf(type, media));
50
+ }
51
+ continue;
52
+ }
53
+ // kind=file:平台不透明引用(留 adapter 解析钩子,二期)
54
+ textAppends.push(placeholderOf(type, media));
55
+ continue;
56
+ }
57
+ if (type === 'audio' || type === 'record' || type === 'voice') {
58
+ const payload = await resolveAudioPayload(media, config.maxFileBytes);
59
+ if (payload && config.audio.strategy === 'transcribe') {
60
+ try {
61
+ const text = await transcribeAudioPayload(payload, {
62
+ getConfig: getPrimaryAppConfig,
63
+ warn: (msg) => logger.warn(formatCompact({ op: 'inbound_stt', fallback: msg })),
64
+ });
65
+ if (text?.trim()) {
66
+ textAppends.push(`[语音转写] ${text.trim()}`);
67
+ continue;
68
+ }
69
+ }
70
+ catch (error) {
71
+ logger.warn(formatCompact({
72
+ op: 'inbound_stt_failed',
73
+ error: error instanceof Error ? error.message : String(error),
74
+ }));
75
+ }
76
+ }
77
+ textAppends.push(placeholderOf('audio', media));
78
+ continue;
79
+ }
80
+ textAppends.push(placeholderOf(type === 'video' ? 'video' : 'file', media));
81
+ }
82
+ if (blocks.length === 0 && textAppends.length === 0)
83
+ return EMPTY_INJECTION;
84
+ return { blocks, textAppends };
85
+ }
86
+ async function resolveAudioPayload(media, maxFileBytes) {
87
+ if (media.kind === 'base64') {
88
+ return {
89
+ kind: 'audio',
90
+ base64: media.value.replace(/^base64:\/\//, ''),
91
+ mimeType: media.mime_type ?? 'audio/mpeg',
92
+ ...(media.file_name ? { fileName: media.file_name } : {}),
93
+ };
94
+ }
95
+ if (media.kind === 'path') {
96
+ const payload = await readLocalFileAsBase64(media.value, maxFileBytes);
97
+ return payload ? { ...payload, kind: 'audio' } : null;
98
+ }
99
+ // url 音频需下载,暂不走物化(占位);file 引用同二期钩子
100
+ return null;
101
+ }
102
+ /**
103
+ * 把注入结果合入 LLM 绑定的 userMessages:最后一个 user 消息挂 media 块,
104
+ * textAppends 以独立 text 块追加在其后(不改动历史消息)。
105
+ */
106
+ export function applyInboundMediaInjection(userMessages, injection) {
107
+ if (!injection.blocks.length && !injection.textAppends.length) {
108
+ return [...userMessages];
109
+ }
110
+ const out = [...userMessages];
111
+ for (let i = out.length - 1; i >= 0; i -= 1) {
112
+ const msg = out[i];
113
+ if (msg.role !== 'user')
114
+ continue;
115
+ const content = Array.isArray(msg.content) ? msg.content : [];
116
+ out[i] = {
117
+ ...msg,
118
+ content: [
119
+ ...content,
120
+ ...injection.textAppends.map((text) => ({ type: 'text', text })),
121
+ ],
122
+ ...(injection.blocks.length ? { media: injection.blocks } : {}),
123
+ };
124
+ break;
125
+ }
126
+ return out;
127
+ }
128
+ //# sourceMappingURL=inbound-media.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inbound-media.js","sourceRoot":"","sources":["../../src/turn/inbound-media.ts"],"names":[],"mappings":"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"}
@@ -10,6 +10,7 @@ export declare function createInboundTurnQueue(config: Required<ZhinAgentConfig>
10
10
  export declare function runWithInboundQueue<T>(commMessage: Message, inboundQueueConfig: ResolvedInboundQueueConfig, queue: InboundTurnQueue, opts: {
11
11
  content?: string;
12
12
  coalesce?: boolean;
13
+ signal?: AbortSignal;
13
14
  run: (mergedContent: string) => Promise<T>;
14
15
  }): Promise<T>;
15
16
  //# sourceMappingURL=inbound-queue-runtime.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"inbound-queue-runtime.d.ts","sourceRoot":"","sources":["../../src/turn/inbound-queue-runtime.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AACvE,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAGL,KAAK,0BAA0B,EAChC,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAE1D,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,QAAQ,CAAC,eAAe,CAAC,EACjC,OAAO,EAAE,qBAAqB,GAC7B;IAAE,MAAM,EAAE,0BAA0B,CAAC;IAAC,KAAK,EAAE,gBAAgB,CAAA;CAAE,CAiBjE;AAED,wBAAsB,mBAAmB,CAAC,CAAC,EACzC,WAAW,EAAE,OAAO,EACpB,kBAAkB,EAAE,0BAA0B,EAC9C,KAAK,EAAE,gBAAgB,EACvB,IAAI,EAAE;IACJ,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,GAAG,EAAE,CAAC,aAAa,EAAE,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;CAC5C,GACA,OAAO,CAAC,CAAC,CAAC,CAYZ"}
1
+ {"version":3,"file":"inbound-queue-runtime.d.ts","sourceRoot":"","sources":["../../src/turn/inbound-queue-runtime.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AACvE,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAGL,KAAK,0BAA0B,EAChC,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAE1D,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,QAAQ,CAAC,eAAe,CAAC,EACjC,OAAO,EAAE,qBAAqB,GAC7B;IAAE,MAAM,EAAE,0BAA0B,CAAC;IAAC,KAAK,EAAE,gBAAgB,CAAA;CAAE,CAiBjE;AAED,wBAAsB,mBAAmB,CAAC,CAAC,EACzC,WAAW,EAAE,OAAO,EACpB,kBAAkB,EAAE,0BAA0B,EAC9C,KAAK,EAAE,gBAAgB,EACvB,IAAI,EAAE;IACJ,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,GAAG,EAAE,CAAC,aAAa,EAAE,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;CAC5C,GACA,OAAO,CAAC,CAAC,CAAC,CAaZ"}
@@ -23,6 +23,7 @@ export async function runWithInboundQueue(commMessage, inboundQueueConfig, queue
23
23
  commMessage,
24
24
  content: opts.content,
25
25
  coalesce: opts.coalesce,
26
+ signal: opts.signal,
26
27
  run: opts.run,
27
28
  });
28
29
  }
@@ -1 +1 @@
1
- {"version":3,"file":"inbound-queue-runtime.js","sourceRoot":"","sources":["../../src/turn/inbound-queue-runtime.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,6BAA6B,EAAE,MAAM,eAAe,CAAC;AAG9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EACL,2BAA2B,EAC3B,uBAAuB,GAExB,MAAM,2BAA2B,CAAC;AAGnC,MAAM,UAAU,sBAAsB,CACpC,MAAiC,EACjC,OAA8B;IAE9B,MAAM,kBAAkB,GAAG,2BAA2B,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;IAC5E,MAAM,KAAK,GAAG,IAAI,gBAAgB,CAAC,kBAAkB,EAAE;QACrD,eAAe,EAAE,CAAC,WAAW,EAAE,UAAU,EAAE,EAAE;YAC3C,OAAO,CAAC,IAAI,CACV,0BAA0B,EAC1B,OAAO,CAAC,aAAa,CAAC,UAAU,EAAE,WAAW,EAAE,MAAM,CAAC,CACvD,CAAC;QACJ,CAAC;QACD,eAAe,EAAE,CAAC,WAAW,EAAE,UAAU,EAAE,EAAE;YAC3C,OAAO,CAAC,IAAI,CACV,0BAA0B,EAC1B,OAAO,CAAC,aAAa,CAAC,UAAU,EAAE,WAAW,EAAE,MAAM,CAAC,CACvD,CAAC;QACJ,CAAC;KACF,CAAC,CAAC;IACH,OAAO,EAAE,MAAM,EAAE,kBAAkB,EAAE,KAAK,EAAE,CAAC;AAC/C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,WAAoB,EACpB,kBAA8C,EAC9C,KAAuB,EACvB,IAIC;IAED,IAAI,CAAC,uBAAuB,CAAC,WAAW,EAAE,kBAAkB,CAAC,EAAE,CAAC;QAC9D,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;IACtC,CAAC;IACD,MAAM,UAAU,GAAG,6BAA6B,CAAC,WAAW,CAAC,CAAC;IAC9D,OAAO,KAAK,CAAC,QAAQ,CAAC;QACpB,UAAU;QACV,WAAW;QACX,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,GAAG,EAAE,IAAI,CAAC,GAAG;KACd,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"inbound-queue-runtime.js","sourceRoot":"","sources":["../../src/turn/inbound-queue-runtime.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,6BAA6B,EAAE,MAAM,eAAe,CAAC;AAG9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EACL,2BAA2B,EAC3B,uBAAuB,GAExB,MAAM,2BAA2B,CAAC;AAGnC,MAAM,UAAU,sBAAsB,CACpC,MAAiC,EACjC,OAA8B;IAE9B,MAAM,kBAAkB,GAAG,2BAA2B,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;IAC5E,MAAM,KAAK,GAAG,IAAI,gBAAgB,CAAC,kBAAkB,EAAE;QACrD,eAAe,EAAE,CAAC,WAAW,EAAE,UAAU,EAAE,EAAE;YAC3C,OAAO,CAAC,IAAI,CACV,0BAA0B,EAC1B,OAAO,CAAC,aAAa,CAAC,UAAU,EAAE,WAAW,EAAE,MAAM,CAAC,CACvD,CAAC;QACJ,CAAC;QACD,eAAe,EAAE,CAAC,WAAW,EAAE,UAAU,EAAE,EAAE;YAC3C,OAAO,CAAC,IAAI,CACV,0BAA0B,EAC1B,OAAO,CAAC,aAAa,CAAC,UAAU,EAAE,WAAW,EAAE,MAAM,CAAC,CACvD,CAAC;QACJ,CAAC;KACF,CAAC,CAAC;IACH,OAAO,EAAE,MAAM,EAAE,kBAAkB,EAAE,KAAK,EAAE,CAAC;AAC/C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,WAAoB,EACpB,kBAA8C,EAC9C,KAAuB,EACvB,IAKC;IAED,IAAI,CAAC,uBAAuB,CAAC,WAAW,EAAE,kBAAkB,CAAC,EAAE,CAAC;QAC9D,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;IACtC,CAAC;IACD,MAAM,UAAU,GAAG,6BAA6B,CAAC,WAAW,CAAC,CAAC;IAC9D,OAAO,KAAK,CAAC,QAAQ,CAAC;QACpB,UAAU;QACV,WAAW;QACX,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,GAAG,EAAE,IAAI,CAAC,GAAG;KACd,CAAC,CAAC;AACL,CAAC"}
@@ -3,6 +3,9 @@ import type { ResolvedInboundQueueConfig } from './inbound-queue-config.js';
3
3
  export declare class InboundTurnExpiredError extends Error {
4
4
  constructor(sessionKey: string);
5
5
  }
6
+ export declare class InboundTurnCancelledError extends Error {
7
+ constructor(sessionKey: string, reason?: unknown);
8
+ }
6
9
  export interface InboundQueueActivityEmitter {
7
10
  emitQueuedStart(commMessage: Message, sessionKey: string): void;
8
11
  emitQueuedClear(commMessage: Message, sessionKey: string): void;
@@ -19,11 +22,13 @@ export declare class InboundTurnQueue {
19
22
  commMessage: Message;
20
23
  content?: string;
21
24
  coalesce?: boolean;
25
+ signal?: AbortSignal;
22
26
  run: (mergedContent: string) => Promise<T>;
23
27
  }): Promise<T>;
24
28
  dispose(): void;
25
29
  private isExpired;
26
30
  private discardExpired;
27
31
  private pump;
32
+ private cancelQueuedEntry;
28
33
  }
29
34
  //# sourceMappingURL=inbound-turn-queue.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"inbound-turn-queue.d.ts","sourceRoot":"","sources":["../../src/turn/inbound-turn-queue.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,2BAA2B,CAAC;AAE5E,qBAAa,uBAAwB,SAAQ,KAAK;gBACpC,UAAU,EAAE,MAAM;CAI/B;AAgBD,MAAM,WAAW,2BAA2B;IAC1C,eAAe,CAAC,WAAW,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAChE,eAAe,CAAC,WAAW,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CACjE;AAOD,qBAAa,gBAAgB;IAKzB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,eAAe;IALzB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAmD;IAC1E,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAoC;gBAGnD,MAAM,EAAE,0BAA0B,EAClC,eAAe,GAAE,2BAAyC;IAGpE,YAAY,CAAC,MAAM,EAAE,0BAA0B,GAAG,IAAI;IAItD,QAAQ,CAAC,CAAC,EAAE,OAAO,EAAE;QACnB,UAAU,EAAE,MAAM,CAAC;QACnB,WAAW,EAAE,OAAO,CAAC;QACrB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;QACnB,GAAG,EAAE,CAAC,aAAa,EAAE,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;KAC5C,GAAG,OAAO,CAAC,CAAC,CAAC;IAwDd,OAAO,IAAI,IAAI;IAWf,OAAO,CAAC,SAAS;YAIH,cAAc;YAgBd,IAAI;CAqCnB"}
1
+ {"version":3,"file":"inbound-turn-queue.d.ts","sourceRoot":"","sources":["../../src/turn/inbound-turn-queue.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,2BAA2B,CAAC;AAE5E,qBAAa,uBAAwB,SAAQ,KAAK;gBACpC,UAAU,EAAE,MAAM;CAI/B;AAED,qBAAa,yBAA0B,SAAQ,KAAK;gBACtC,UAAU,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO;CAIjD;AAmBD,MAAM,WAAW,2BAA2B;IAC1C,eAAe,CAAC,WAAW,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAChE,eAAe,CAAC,WAAW,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CACjE;AAOD,qBAAa,gBAAgB;IAKzB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,eAAe;IALzB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAmD;IAC1E,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAoC;gBAGnD,MAAM,EAAE,0BAA0B,EAClC,eAAe,GAAE,2BAAyC;IAGpE,YAAY,CAAC,MAAM,EAAE,0BAA0B,GAAG,IAAI;IAItD,QAAQ,CAAC,CAAC,EAAE,OAAO,EAAE;QACnB,UAAU,EAAE,MAAM,CAAC;QACnB,WAAW,EAAE,OAAO,CAAC;QACrB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;QACnB,MAAM,CAAC,EAAE,WAAW,CAAC;QACrB,GAAG,EAAE,CAAC,aAAa,EAAE,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;KAC5C,GAAG,OAAO,CAAC,CAAC,CAAC;IAqEd,OAAO,IAAI,IAAI;IAYf,OAAO,CAAC,SAAS;YAIH,cAAc;YAiBd,IAAI;IAyClB,OAAO,CAAC,iBAAiB;CAY1B"}
@@ -4,6 +4,12 @@ export class InboundTurnExpiredError extends Error {
4
4
  this.name = 'InboundTurnExpiredError';
5
5
  }
6
6
  }
7
+ export class InboundTurnCancelledError extends Error {
8
+ constructor(sessionKey, reason) {
9
+ super(`Inbound turn cancelled in queue for session ${sessionKey}`, reason === undefined ? undefined : { cause: reason });
10
+ this.name = 'InboundTurnCancelledError';
11
+ }
12
+ }
7
13
  const noopEmitter = {
8
14
  emitQueuedStart() { },
9
15
  emitQueuedClear() { },
@@ -22,8 +28,13 @@ export class InboundTurnQueue {
22
28
  }
23
29
  schedule(options) {
24
30
  const { sessionKey, commMessage, run } = options;
25
- const coalesceEnabled = options.coalesce !== false;
31
+ // A cancellable caller owns an individual deadline, so it cannot safely
32
+ // share a coalesced promise with another inbound message.
33
+ const coalesceEnabled = options.coalesce !== false && options.signal === undefined;
26
34
  const content = options.content ?? '';
35
+ if (options.signal?.aborted) {
36
+ return Promise.reject(inboundAbortReason(sessionKey, options.signal.reason));
37
+ }
27
38
  const senderId = String(commMessage.$sender?.id ?? 'unknown');
28
39
  const now = Date.now();
29
40
  const queue = this.queues.get(sessionKey) ?? [];
@@ -54,11 +65,18 @@ export class InboundTurnQueue {
54
65
  enqueuedAt: now,
55
66
  lastEnqueuedAt: now,
56
67
  coalesceEnabled,
68
+ signal: options.signal,
69
+ started: false,
57
70
  promise,
58
71
  run,
59
72
  resolve,
60
73
  reject,
61
74
  };
75
+ if (options.signal) {
76
+ const abort = () => this.cancelQueuedEntry(entry);
77
+ options.signal.addEventListener('abort', abort, { once: true });
78
+ entry.disposeAbortListener = () => options.signal?.removeEventListener('abort', abort);
79
+ }
62
80
  queue.push(entry);
63
81
  const shouldShowPending = this.inFlight.has(sessionKey) || queue.length > 1;
64
82
  if (shouldShowPending) {
@@ -70,6 +88,7 @@ export class InboundTurnQueue {
70
88
  dispose() {
71
89
  for (const queue of this.queues.values()) {
72
90
  for (const entry of queue) {
91
+ entry.disposeAbortListener?.();
73
92
  this.activityEmitter.emitQueuedClear(entry.commMessage, entry.sessionKey);
74
93
  entry.reject(new Error('InboundTurnQueue disposed'));
75
94
  }
@@ -87,6 +106,7 @@ export class InboundTurnQueue {
87
106
  const now = Date.now();
88
107
  while (queue.length > 0 && this.isExpired(queue[0], now)) {
89
108
  const expired = queue.shift();
109
+ expired.disposeAbortListener?.();
90
110
  this.activityEmitter.emitQueuedClear(expired.commMessage, sessionKey);
91
111
  expired.reject(new InboundTurnExpiredError(sessionKey));
92
112
  }
@@ -110,6 +130,7 @@ export class InboundTurnQueue {
110
130
  this.queues.delete(sessionKey);
111
131
  }
112
132
  this.activityEmitter.emitQueuedClear(entry.commMessage, sessionKey);
133
+ entry.started = true;
113
134
  try {
114
135
  const merged = entry.textParts.filter(Boolean).join('\n');
115
136
  const result = await entry.run(merged);
@@ -118,6 +139,9 @@ export class InboundTurnQueue {
118
139
  catch (error) {
119
140
  entry.reject(error);
120
141
  }
142
+ finally {
143
+ entry.disposeAbortListener?.();
144
+ }
121
145
  }
122
146
  };
123
147
  const flight = runLoop().finally(() => {
@@ -128,5 +152,26 @@ export class InboundTurnQueue {
128
152
  this.inFlight.set(sessionKey, flight);
129
153
  await flight;
130
154
  }
155
+ cancelQueuedEntry(entry) {
156
+ if (entry.started)
157
+ return;
158
+ const queue = this.queues.get(entry.sessionKey);
159
+ if (!queue)
160
+ return;
161
+ const index = queue.indexOf(entry);
162
+ if (index === -1)
163
+ return;
164
+ queue.splice(index, 1);
165
+ if (queue.length === 0)
166
+ this.queues.delete(entry.sessionKey);
167
+ entry.disposeAbortListener?.();
168
+ this.activityEmitter.emitQueuedClear(entry.commMessage, entry.sessionKey);
169
+ entry.reject(inboundAbortReason(entry.sessionKey, entry.signal?.reason));
170
+ }
171
+ }
172
+ function inboundAbortReason(sessionKey, reason) {
173
+ if (reason instanceof Error && reason.name !== 'AbortError')
174
+ return reason;
175
+ return new InboundTurnCancelledError(sessionKey, reason);
131
176
  }
132
177
  //# sourceMappingURL=inbound-turn-queue.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"inbound-turn-queue.js","sourceRoot":"","sources":["../../src/turn/inbound-turn-queue.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"inbound-turn-queue.js","sourceRoot":"","sources":["../../src/turn/inbound-turn-queue.ts"],"names":[],"mappings":"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"}
@@ -1,17 +1,16 @@
1
1
  /**
2
- * Turn module — IM turn pipeline, scheduling, metrics, multimodal helpers.
2
+ * Turn module — IM turn pipeline, scheduling, metrics.
3
3
  */
4
- export { processTextTurn, processMultimodalTurn } from './turn-pipeline.js';
4
+ export { processTextTurn } from './turn-pipeline.js';
5
5
  export type { ProcessTextTurnOptions } from './turn-pipeline.js';
6
6
  export { processTextTurnStream } from './process-stream.js';
7
- export { PromptController, TurnSupersededError, } from './prompt-controller.js';
7
+ export { PromptController, TurnCancelledError, TurnSupersededError, } from './prompt-controller.js';
8
8
  export type { PromptTurnHooks, PromptTurnRequest } from './prompt-controller.js';
9
9
  export { SessionMessageQueue } from './session-message-queue.js';
10
10
  export { addUsage, EMPTY_USAGE, formatAiHandlerCompleteLog, formatAiHandlerTurnTable, formatOutputElementsPreview, formatZhinAgentTurnUsage, } from './turn-metrics.js';
11
11
  export type { ZhinAgentTurnMetrics, ZhinAgentTurnPath } from './turn-metrics.js';
12
12
  export { TurnTracker } from './turn-tracker.js';
13
- export { summarizeMultimodalParts, buildVisionUserMessage, } from './multimodal-message.js';
14
- export { InboundTurnQueue, InboundTurnExpiredError, } from './inbound-turn-queue.js';
13
+ export { InboundTurnQueue, InboundTurnCancelledError, InboundTurnExpiredError, } from './inbound-turn-queue.js';
15
14
  export type { InboundQueueActivityEmitter } from './inbound-turn-queue.js';
16
15
  export { DEFAULT_INBOUND_QUEUE_CONFIG, normalizeInboundQueueConfig, validateInboundQueueConfig, isGroupOrChannelMessage, shouldUseGroupFifoQueue, } from './inbound-queue-config.js';
17
16
  export type { ResolvedInboundQueueConfig } from './inbound-queue-config.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/turn/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAC5E,YAAY,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAEjE,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAE5D,OAAO,EACL,gBAAgB,EAChB,mBAAmB,GACpB,MAAM,wBAAwB,CAAC;AAChC,YAAY,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAEjF,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAEjE,OAAO,EACL,QAAQ,EACR,WAAW,EACX,0BAA0B,EAC1B,wBAAwB,EACxB,2BAA2B,EAC3B,wBAAwB,GACzB,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAEjF,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,EACL,wBAAwB,EACxB,sBAAsB,GACvB,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EACL,gBAAgB,EAChB,uBAAuB,GACxB,MAAM,yBAAyB,CAAC;AACjC,YAAY,EAAE,2BAA2B,EAAE,MAAM,yBAAyB,CAAC;AAE3E,OAAO,EACL,4BAA4B,EAC5B,2BAA2B,EAC3B,0BAA0B,EAC1B,uBAAuB,EACvB,uBAAuB,GACxB,MAAM,2BAA2B,CAAC;AACnC,YAAY,EAAE,0BAA0B,EAAE,MAAM,2BAA2B,CAAC;AAE5E,OAAO,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAEzF,OAAO,EACL,2BAA2B,EAC3B,qBAAqB,GACtB,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAE3D,OAAO,EACL,aAAa,EACb,YAAY,EACZ,eAAe,EACf,4BAA4B,GAC7B,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAE7D,OAAO,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAE5D,OAAO,EAAE,mBAAmB,EAAE,2BAA2B,EAAE,gCAAgC,EAAE,MAAM,wBAAwB,CAAC;AAE5H,OAAO,EACL,6BAA6B,EAC7B,6BAA6B,EAC7B,0BAA0B,EAC1B,oCAAoC,GACrC,MAAM,6BAA6B,CAAC;AAErC,OAAO,EACL,6BAA6B,EAC7B,oCAAoC,GACrC,MAAM,6BAA6B,CAAC;AAErC,OAAO,EAAE,oCAAoC,EAAE,MAAM,+BAA+B,CAAC;AACrF,OAAO,EAAE,8BAA8B,EAAE,MAAM,+BAA+B,CAAC;AAE/E,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAEhE,OAAO,EACL,uBAAuB,EACvB,sBAAsB,EACtB,mBAAmB,EACnB,gBAAgB,EAChB,kBAAkB,GACnB,MAAM,0BAA0B,CAAC;AAClC,YAAY,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAEvE,OAAO,EACL,uBAAuB,EACvB,aAAa,EACb,sBAAsB,EACtB,uBAAuB,GACxB,MAAM,wBAAwB,CAAC;AAChC,YAAY,EACV,UAAU,EACV,YAAY,EACZ,iBAAiB,GAClB,MAAM,wBAAwB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/turn/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,YAAY,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAEjE,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAE5D,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,wBAAwB,CAAC;AAChC,YAAY,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAEjF,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAEjE,OAAO,EACL,QAAQ,EACR,WAAW,EACX,0BAA0B,EAC1B,wBAAwB,EACxB,2BAA2B,EAC3B,wBAAwB,GACzB,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAEjF,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,EACL,gBAAgB,EAChB,yBAAyB,EACzB,uBAAuB,GACxB,MAAM,yBAAyB,CAAC;AACjC,YAAY,EAAE,2BAA2B,EAAE,MAAM,yBAAyB,CAAC;AAE3E,OAAO,EACL,4BAA4B,EAC5B,2BAA2B,EAC3B,0BAA0B,EAC1B,uBAAuB,EACvB,uBAAuB,GACxB,MAAM,2BAA2B,CAAC;AACnC,YAAY,EAAE,0BAA0B,EAAE,MAAM,2BAA2B,CAAC;AAE5E,OAAO,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAEzF,OAAO,EACL,2BAA2B,EAC3B,qBAAqB,GACtB,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAE3D,OAAO,EACL,aAAa,EACb,YAAY,EACZ,eAAe,EACf,4BAA4B,GAC7B,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAE7D,OAAO,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAE5D,OAAO,EAAE,mBAAmB,EAAE,2BAA2B,EAAE,gCAAgC,EAAE,MAAM,wBAAwB,CAAC;AAE5H,OAAO,EACL,6BAA6B,EAC7B,6BAA6B,EAC7B,0BAA0B,EAC1B,oCAAoC,GACrC,MAAM,6BAA6B,CAAC;AAErC,OAAO,EACL,6BAA6B,EAC7B,oCAAoC,GACrC,MAAM,6BAA6B,CAAC;AAErC,OAAO,EAAE,oCAAoC,EAAE,MAAM,+BAA+B,CAAC;AACrF,OAAO,EAAE,8BAA8B,EAAE,MAAM,+BAA+B,CAAC;AAE/E,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAEhE,OAAO,EACL,uBAAuB,EACvB,sBAAsB,EACtB,mBAAmB,EACnB,gBAAgB,EAChB,kBAAkB,GACnB,MAAM,0BAA0B,CAAC;AAClC,YAAY,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAEvE,OAAO,EACL,uBAAuB,EACvB,aAAa,EACb,sBAAsB,EACtB,uBAAuB,GACxB,MAAM,wBAAwB,CAAC;AAChC,YAAY,EACV,UAAU,EACV,YAAY,EACZ,iBAAiB,GAClB,MAAM,wBAAwB,CAAC"}
package/lib/turn/index.js CHANGED
@@ -1,14 +1,13 @@
1
1
  /**
2
- * Turn module — IM turn pipeline, scheduling, metrics, multimodal helpers.
2
+ * Turn module — IM turn pipeline, scheduling, metrics.
3
3
  */
4
- export { processTextTurn, processMultimodalTurn } from './turn-pipeline.js';
4
+ export { processTextTurn } from './turn-pipeline.js';
5
5
  export { processTextTurnStream } from './process-stream.js';
6
- export { PromptController, TurnSupersededError, } from './prompt-controller.js';
6
+ export { PromptController, TurnCancelledError, TurnSupersededError, } from './prompt-controller.js';
7
7
  export { SessionMessageQueue } from './session-message-queue.js';
8
8
  export { addUsage, EMPTY_USAGE, formatAiHandlerCompleteLog, formatAiHandlerTurnTable, formatOutputElementsPreview, formatZhinAgentTurnUsage, } from './turn-metrics.js';
9
9
  export { TurnTracker } from './turn-tracker.js';
10
- export { summarizeMultimodalParts, buildVisionUserMessage, } from './multimodal-message.js';
11
- export { InboundTurnQueue, InboundTurnExpiredError, } from './inbound-turn-queue.js';
10
+ export { InboundTurnQueue, InboundTurnCancelledError, InboundTurnExpiredError, } from './inbound-turn-queue.js';
12
11
  export { DEFAULT_INBOUND_QUEUE_CONFIG, normalizeInboundQueueConfig, validateInboundQueueConfig, isGroupOrChannelMessage, shouldUseGroupFifoQueue, } from './inbound-queue-config.js';
13
12
  export { createInboundTurnQueue, runWithInboundQueue } from './inbound-queue-runtime.js';
14
13
  export { continueAfterDeferredWorker, continueAfterSubagent, } from './auto-continue.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/turn/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAG5E,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAE5D,OAAO,EACL,gBAAgB,EAChB,mBAAmB,GACpB,MAAM,wBAAwB,CAAC;AAGhC,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAEjE,OAAO,EACL,QAAQ,EACR,WAAW,EACX,0BAA0B,EAC1B,wBAAwB,EACxB,2BAA2B,EAC3B,wBAAwB,GACzB,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,EACL,wBAAwB,EACxB,sBAAsB,GACvB,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EACL,gBAAgB,EAChB,uBAAuB,GACxB,MAAM,yBAAyB,CAAC;AAGjC,OAAO,EACL,4BAA4B,EAC5B,2BAA2B,EAC3B,0BAA0B,EAC1B,uBAAuB,EACvB,uBAAuB,GACxB,MAAM,2BAA2B,CAAC;AAGnC,OAAO,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAEzF,OAAO,EACL,2BAA2B,EAC3B,qBAAqB,GACtB,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EACL,aAAa,EACb,YAAY,EACZ,eAAe,EACf,4BAA4B,GAC7B,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAE7D,OAAO,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAE5D,OAAO,EAAE,mBAAmB,EAAE,2BAA2B,EAAE,gCAAgC,EAAE,MAAM,wBAAwB,CAAC;AAE5H,OAAO,EACL,6BAA6B,EAC7B,6BAA6B,EAC7B,0BAA0B,EAC1B,oCAAoC,GACrC,MAAM,6BAA6B,CAAC;AAErC,OAAO,EACL,6BAA6B,EAC7B,oCAAoC,GACrC,MAAM,6BAA6B,CAAC;AAErC,OAAO,EAAE,oCAAoC,EAAE,MAAM,+BAA+B,CAAC;AACrF,OAAO,EAAE,8BAA8B,EAAE,MAAM,+BAA+B,CAAC;AAE/E,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAEhE,OAAO,EACL,uBAAuB,EACvB,sBAAsB,EACtB,mBAAmB,EACnB,gBAAgB,EAChB,kBAAkB,GACnB,MAAM,0BAA0B,CAAC;AAGlC,OAAO,EACL,uBAAuB,EACvB,aAAa,EACb,sBAAsB,EACtB,uBAAuB,GACxB,MAAM,wBAAwB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/turn/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAGrD,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAE5D,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,wBAAwB,CAAC;AAGhC,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAEjE,OAAO,EACL,QAAQ,EACR,WAAW,EACX,0BAA0B,EAC1B,wBAAwB,EACxB,2BAA2B,EAC3B,wBAAwB,GACzB,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,EACL,gBAAgB,EAChB,yBAAyB,EACzB,uBAAuB,GACxB,MAAM,yBAAyB,CAAC;AAGjC,OAAO,EACL,4BAA4B,EAC5B,2BAA2B,EAC3B,0BAA0B,EAC1B,uBAAuB,EACvB,uBAAuB,GACxB,MAAM,2BAA2B,CAAC;AAGnC,OAAO,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAEzF,OAAO,EACL,2BAA2B,EAC3B,qBAAqB,GACtB,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EACL,aAAa,EACb,YAAY,EACZ,eAAe,EACf,4BAA4B,GAC7B,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAE7D,OAAO,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAE5D,OAAO,EAAE,mBAAmB,EAAE,2BAA2B,EAAE,gCAAgC,EAAE,MAAM,wBAAwB,CAAC;AAE5H,OAAO,EACL,6BAA6B,EAC7B,6BAA6B,EAC7B,0BAA0B,EAC1B,oCAAoC,GACrC,MAAM,6BAA6B,CAAC;AAErC,OAAO,EACL,6BAA6B,EAC7B,oCAAoC,GACrC,MAAM,6BAA6B,CAAC;AAErC,OAAO,EAAE,oCAAoC,EAAE,MAAM,+BAA+B,CAAC;AACrF,OAAO,EAAE,8BAA8B,EAAE,MAAM,+BAA+B,CAAC;AAE/E,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAEhE,OAAO,EACL,uBAAuB,EACvB,sBAAsB,EACtB,mBAAmB,EACnB,gBAAgB,EAChB,kBAAkB,GACnB,MAAM,0BAA0B,CAAC;AAGlC,OAAO,EACL,uBAAuB,EACvB,aAAa,EACb,sBAAsB,EACtB,uBAAuB,GACxB,MAAM,wBAAwB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"process-stream.d.ts","sourceRoot":"","sources":["../../src/turn/process-stream.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAGxD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,iCAAiC,CAAC;AAGlF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAElE,wBAAuB,qBAAqB,CAC1C,KAAK,EAAE,gBAAgB,EACvB,IAAI,EAAE;IACJ,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,OAAO,CAAC;IACrB,aAAa,EAAE,IAAI,EAAE,CAAC;IACtB,kBAAkB,EAAE,0BAA0B,CAAC;IAC/C,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,gBAAgB,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;CAC3E,GACA,cAAc,CAAC,SAAS,EAAE,IAAI,EAAE,SAAS,CAAC,CAuE5C"}
1
+ {"version":3,"file":"process-stream.d.ts","sourceRoot":"","sources":["../../src/turn/process-stream.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAGxD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,iCAAiC,CAAC;AAIlF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAElE,wBAAuB,qBAAqB,CAC1C,KAAK,EAAE,gBAAgB,EACvB,IAAI,EAAE;IACJ,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,OAAO,CAAC;IACrB,aAAa,EAAE,IAAI,EAAE,CAAC;IACtB,kBAAkB,EAAE,0BAA0B,CAAC;IAC/C,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,gBAAgB,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;CAC3E,GACA,cAAc,CAAC,SAAS,EAAE,IAAI,EAAE,SAAS,CAAC,CA6E5C"}
@@ -1,9 +1,11 @@
1
1
  import { randomUUID } from 'node:crypto';
2
2
  import { resolveIMSessionIdFromMessage } from '@zhin.js/core';
3
+ import { AgentRunJournal } from '@zhin.js/ai/agent-stream';
3
4
  import { publishTurnStreamEvents } from '../event/publish-agent-stream.js';
4
5
  import { readHttpSessionId } from '../session/resolve-session-interaction-port.js';
5
6
  import { runWithInboundQueue } from '../turn/inbound-queue-runtime.js';
6
7
  import { processTextTurn } from './turn-pipeline.js';
8
+ import { TurnTerminalGate, isTurnCancellation, turnCancelledEvent } from './turn-terminal.js';
7
9
  export async function* processTextTurnStream(agent, opts) {
8
10
  const { content, commMessage, externalTools, inboundQueueConfig, inboundTurnQueue, runInTurnContext } = opts;
9
11
  const turnId = randomUUID();
@@ -13,25 +15,26 @@ export async function* processTextTurnStream(agent, opts) {
13
15
  turnId,
14
16
  httpSessionId: readHttpSessionId(commMessage),
15
17
  });
18
+ const journal = new AgentRunJournal({ sessionId, turnId });
16
19
  const turnStart = { type: 'turn_start', sessionId, turnId };
17
20
  yield turnStart;
18
- publishTurnStreamEvents(agent, turnStart, streamCtx());
21
+ publishTurnStreamEvents(agent, turnStart, streamCtx(), journal);
19
22
  const eventQueue = [];
20
23
  let resolveWaiting;
21
24
  let done = false;
22
- let sawTurnEnd = false;
25
+ const terminal = new TurnTerminalGate();
23
26
  let finalOutput = [];
24
27
  let finalError;
25
28
  const onTurnEvent = (event) => {
26
- if (event.type === 'turn_end')
27
- sawTurnEnd = true;
29
+ if (!terminal.accept(event))
30
+ return;
28
31
  eventQueue.push(event);
29
- publishTurnStreamEvents(agent, event, streamCtx());
32
+ publishTurnStreamEvents(agent, event, streamCtx(), journal);
30
33
  resolveWaiting?.();
31
34
  };
32
35
  const runPromise = runInTurnContext(turnId, () => runWithInboundQueue(commMessage, inboundQueueConfig, inboundTurnQueue, {
33
36
  content,
34
- run: (mergedContent) => processTextTurn(agent, mergedContent, commMessage, externalTools, undefined, { onTurnEvent }),
37
+ run: (mergedContent) => processTextTurn(agent, mergedContent, commMessage, externalTools, undefined, { onTurnEvent, journal }),
35
38
  })).then((output) => {
36
39
  finalOutput = output;
37
40
  done = true;
@@ -51,19 +54,24 @@ export async function* processTextTurnStream(agent, opts) {
51
54
  resolveWaiting = undefined;
52
55
  }
53
56
  }
54
- if (finalError) {
55
- const errorEvent = { type: 'error', error: finalError, recoverable: false };
56
- publishTurnStreamEvents(agent, errorEvent, streamCtx());
57
- yield errorEvent;
57
+ if (!terminal.terminal && finalError) {
58
+ const terminalEvent = isTurnCancellation(finalError)
59
+ ? turnCancelledEvent(finalError)
60
+ : { type: 'error', error: finalError, recoverable: false };
61
+ terminal.accept(terminalEvent);
62
+ publishTurnStreamEvents(agent, terminalEvent, streamCtx(), journal);
63
+ yield terminalEvent;
58
64
  }
59
- else if (!sawTurnEnd) {
65
+ else if (!terminal.terminal) {
60
66
  const syntheticEnd = {
61
67
  type: 'turn_end',
62
68
  output: finalOutput,
63
69
  usage: { promptTokens: 0, completionTokens: 0, totalTokens: 0 },
64
70
  };
65
- publishTurnStreamEvents(agent, syntheticEnd, streamCtx());
66
- yield syntheticEnd;
71
+ if (terminal.accept(syntheticEnd)) {
72
+ publishTurnStreamEvents(agent, syntheticEnd, streamCtx(), journal);
73
+ yield syntheticEnd;
74
+ }
67
75
  }
68
76
  await runPromise.catch(() => { });
69
77
  }
@@ -1 +1 @@
1
- {"version":3,"file":"process-stream.js","sourceRoot":"","sources":["../../src/turn/process-stream.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,6BAA6B,EAAE,MAAM,eAAe,CAAC;AAI9D,OAAO,EAAE,uBAAuB,EAAE,MAAM,kCAAkC,CAAC;AAC3E,OAAO,EAAE,iBAAiB,EAAE,MAAM,gDAAgD,CAAC;AAGnF,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AACvE,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAGrD,MAAM,CAAC,KAAK,SAAS,CAAC,CAAC,qBAAqB,CAC1C,KAAuB,EACvB,IAOC;IAED,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,GAAG,IAAI,CAAC;IAC7G,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAC5B,MAAM,SAAS,GAAG,6BAA6B,CAAC,WAAW,CAAC,CAAC;IAE7D,MAAM,SAAS,GAAG,GAAG,EAAE,CAAC,CAAC;QACvB,SAAS;QACT,MAAM;QACN,aAAa,EAAE,iBAAiB,CAAC,WAAW,CAAC;KAC9C,CAAC,CAAC;IAEH,MAAM,SAAS,GAAc,EAAE,IAAI,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC;IACvE,MAAM,SAAS,CAAC;IAChB,uBAAuB,CAAC,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC;IAEvD,MAAM,UAAU,GAAgB,EAAE,CAAC;IACnC,IAAI,cAAwC,CAAC;IAC7C,IAAI,IAAI,GAAG,KAAK,CAAC;IACjB,IAAI,UAAU,GAAG,KAAK,CAAC;IACvB,IAAI,WAAW,GAAoB,EAAE,CAAC;IACtC,IAAI,UAA6B,CAAC;IAElC,MAAM,WAAW,GAAG,CAAC,KAAgB,EAAE,EAAE;QACvC,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU;YAAE,UAAU,GAAG,IAAI,CAAC;QACjD,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACvB,uBAAuB,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;QACnD,cAAc,EAAE,EAAE,CAAC;IACrB,CAAC,CAAC;IAEF,MAAM,UAAU,GAAG,gBAAgB,CAAC,MAAM,EAAE,GAAG,EAAE,CAC/C,mBAAmB,CAAC,WAAW,EAAE,kBAAkB,EAAE,gBAAgB,EAAE;QACrE,OAAO;QACP,GAAG,EAAE,CAAC,aAAa,EAAE,EAAE,CACrB,eAAe,CAAC,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,aAAa,EAAE,SAAS,EAAE,EAAE,WAAW,EAAE,CAAC;KAChG,CAAC,CACH,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE;QAChB,WAAW,GAAG,MAAM,CAAC;QACrB,IAAI,GAAG,IAAI,CAAC;QACZ,cAAc,EAAE,EAAE,CAAC;IACrB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;QACf,UAAU,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QACjE,IAAI,GAAG,IAAI,CAAC;QACZ,cAAc,EAAE,EAAE,CAAC;IACrB,CAAC,CAAC,CAAC;IAEH,OAAO,CAAC,IAAI,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtC,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1B,MAAM,UAAU,CAAC,KAAK,EAAG,CAAC;YAC1B,SAAS;QACX,CAAC;QACD,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE,GAAG,cAAc,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;YACpE,cAAc,GAAG,SAAS,CAAC;QAC7B,CAAC;IACH,CAAC;IAED,IAAI,UAAU,EAAE,CAAC;QACf,MAAM,UAAU,GAAc,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC;QACvF,uBAAuB,CAAC,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,CAAC;QACxD,MAAM,UAAU,CAAC;IACnB,CAAC;SAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QACvB,MAAM,YAAY,GAAc;YAC9B,IAAI,EAAE,UAAU;YAChB,MAAM,EAAE,WAAW;YACnB,KAAK,EAAE,EAAE,YAAY,EAAE,CAAC,EAAE,gBAAgB,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE;SAChE,CAAC;QACF,uBAAuB,CAAC,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,CAAC,CAAC;QAC1D,MAAM,YAAY,CAAC;IACrB,CAAC;IAED,MAAM,UAAU,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;AACnC,CAAC"}
1
+ {"version":3,"file":"process-stream.js","sourceRoot":"","sources":["../../src/turn/process-stream.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import type { AgentMessage, ImageContent, OutputElement } from '@zhin.js/ai';
1
+ import type { AgentMessage, MediaContentBlock, OutputElement } from '@zhin.js/ai';
2
2
  import type { Message } from '../orchestrator/types.js';
3
3
  import type { OnChunkCallback } from '../config/index.js';
4
4
  import type { PromptController } from '../turn/prompt-controller.js';
@@ -6,7 +6,7 @@ import type { ZhinAgentEventEmitter } from '../event/event-emitter.js';
6
6
  import type { ZhinAgentPrivate } from '../internal/agent-host.js';
7
7
  export declare function assertMasterForPromptControl(emitter: ZhinAgentEventEmitter, commMessage: Message): void;
8
8
  export declare function runPromptTurn(agent: ZhinAgentPrivate, input: string | AgentMessage | AgentMessage[], commMessage: Message, runInTurnContext: <T>(turnId: string, fn: () => Promise<T>) => Promise<T>, options?: {
9
- images?: ImageContent[];
9
+ media?: MediaContentBlock[];
10
10
  onChunk?: OnChunkCallback;
11
11
  }): Promise<OutputElement[]>;
12
12
  export declare function steerMessage(promptController: PromptController, emitter: ZhinAgentEventEmitter, message: AgentMessage, commMessage: Message): void;
@@ -1 +1 @@
1
- {"version":3,"file":"prompt-api.d.ts","sourceRoot":"","sources":["../../src/turn/prompt-api.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,aAAa,EAAe,MAAM,aAAa,CAAC;AAC1F,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAKxD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AACvE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAClE,wBAAgB,4BAA4B,CAC1C,OAAO,EAAE,qBAAqB,EAC9B,WAAW,EAAE,OAAO,GACnB,IAAI,CAcN;AAED,wBAAsB,aAAa,CACjC,KAAK,EAAE,gBAAgB,EACvB,KAAK,EAAE,MAAM,GAAG,YAAY,GAAG,YAAY,EAAE,EAC7C,WAAW,EAAE,OAAO,EACpB,gBAAgB,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,EACzE,OAAO,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,YAAY,EAAE,CAAC;IAAC,OAAO,CAAC,EAAE,eAAe,CAAA;CAAE,GAC/D,OAAO,CAAC,aAAa,EAAE,CAAC,CAiB1B;AAED,wBAAgB,YAAY,CAC1B,gBAAgB,EAAE,gBAAgB,EAClC,OAAO,EAAE,qBAAqB,EAC9B,OAAO,EAAE,YAAY,EACrB,WAAW,EAAE,OAAO,GACnB,IAAI,CAIN;AAED,wBAAgB,eAAe,CAC7B,gBAAgB,EAAE,gBAAgB,EAClC,OAAO,EAAE,qBAAqB,EAC9B,OAAO,EAAE,YAAY,EACrB,WAAW,EAAE,OAAO,GACnB,IAAI,CAIN"}
1
+ {"version":3,"file":"prompt-api.d.ts","sourceRoot":"","sources":["../../src/turn/prompt-api.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,iBAAiB,EAAE,aAAa,EAAe,MAAM,aAAa,CAAC;AAC/F,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAKxD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AACvE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAClE,wBAAgB,4BAA4B,CAC1C,OAAO,EAAE,qBAAqB,EAC9B,WAAW,EAAE,OAAO,GACnB,IAAI,CAcN;AAED,wBAAsB,aAAa,CACjC,KAAK,EAAE,gBAAgB,EACvB,KAAK,EAAE,MAAM,GAAG,YAAY,GAAG,YAAY,EAAE,EAC7C,WAAW,EAAE,OAAO,EACpB,gBAAgB,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,EACzE,OAAO,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,iBAAiB,EAAE,CAAC;IAAC,OAAO,CAAC,EAAE,eAAe,CAAA;CAAE,GACnE,OAAO,CAAC,aAAa,EAAE,CAAC,CAiB1B;AAED,wBAAgB,YAAY,CAC1B,gBAAgB,EAAE,gBAAgB,EAClC,OAAO,EAAE,qBAAqB,EAC9B,OAAO,EAAE,YAAY,EACrB,WAAW,EAAE,OAAO,GACnB,IAAI,CAIN;AAED,wBAAgB,eAAe,CAC7B,gBAAgB,EAAE,gBAAgB,EAClC,OAAO,EAAE,qBAAqB,EAC9B,OAAO,EAAE,YAAY,EACrB,WAAW,EAAE,OAAO,GACnB,IAAI,CAIN"}
@@ -22,7 +22,7 @@ export function assertMasterForPromptControl(emitter, commMessage) {
22
22
  }
23
23
  }
24
24
  export async function runPromptTurn(agent, input, commMessage, runInTurnContext, options) {
25
- const messages = normalizePromptMessages(input, options?.images);
25
+ const messages = normalizePromptMessages(input, options?.media);
26
26
  const text = messages
27
27
  .flatMap((message) => {
28
28
  if (message.role !== 'user')
@@ -1 +1 @@
1
- {"version":3,"file":"prompt-api.js","sourceRoot":"","sources":["../../src/turn/prompt-api.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,6BAA6B,EAAe,MAAM,eAAe,CAAC;AAG3E,OAAO,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAC7D,OAAO,EAAE,wBAAwB,EAAE,MAAM,2CAA2C,CAAC;AACrF,OAAO,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAK3D,MAAM,UAAU,4BAA4B,CAC1C,OAA8B,EAC9B,WAAoB;IAEpB,MAAM,MAAM,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IACvC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,uBAAuB,CAAC,iCAAiC,CAAC,CAAC;IACvE,CAAC;IACD,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,wBAAwB,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;QAC3D,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;YACtB,MAAM,IAAI,uBAAuB,CAAC,4BAA4B,CAAC,CAAC;QAClE,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,uBAAuB;YAAE,MAAM,KAAK,CAAC;QAC1D,MAAM,IAAI,uBAAuB,CAAC,iCAAiC,CAAC,CAAC;IACvE,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,KAAuB,EACvB,KAA6C,EAC7C,WAAoB,EACpB,gBAAyE,EACzE,OAAgE;IAEhE,MAAM,QAAQ,GAAG,uBAAuB,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;IACjE,MAAM,IAAI,GAAG,QAAQ;SAClB,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QACnB,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM;YAAE,OAAO,EAAc,CAAC;QACnD,MAAM,IAAI,GAAG,OAAsB,CAAC;QACpC,OAAO,IAAI,CAAC,OAAO;aAChB,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,MAAM,CAAC;aACxC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAChC,CAAC,CAAC;SACD,IAAI,CAAC,IAAI,CAAC;SACV,IAAI,EAAE,CAAC;IACV,OAAO,gBAAgB,CAAC,UAAU,EAAE,EAAE,GAAG,EAAE,CACzC,eAAe,CAAC,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE;QAC9D,gBAAgB,EAAE,QAAQ;KAC3B,CAAC,CACH,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,YAAY,CAC1B,gBAAkC,EAClC,OAA8B,EAC9B,OAAqB,EACrB,WAAoB;IAEpB,4BAA4B,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;IACnD,MAAM,UAAU,GAAG,6BAA6B,CAAC,WAAW,CAAC,CAAC;IAC9D,gBAAgB,CAAC,KAAK,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,eAAe,CAC7B,gBAAkC,EAClC,OAA8B,EAC9B,OAAqB,EACrB,WAAoB;IAEpB,4BAA4B,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;IACnD,MAAM,UAAU,GAAG,6BAA6B,CAAC,WAAW,CAAC,CAAC;IAC9D,gBAAgB,CAAC,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;AACjD,CAAC"}
1
+ {"version":3,"file":"prompt-api.js","sourceRoot":"","sources":["../../src/turn/prompt-api.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,6BAA6B,EAAe,MAAM,eAAe,CAAC;AAG3E,OAAO,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAC7D,OAAO,EAAE,wBAAwB,EAAE,MAAM,2CAA2C,CAAC;AACrF,OAAO,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAK3D,MAAM,UAAU,4BAA4B,CAC1C,OAA8B,EAC9B,WAAoB;IAEpB,MAAM,MAAM,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IACvC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,uBAAuB,CAAC,iCAAiC,CAAC,CAAC;IACvE,CAAC;IACD,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,wBAAwB,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;QAC3D,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;YACtB,MAAM,IAAI,uBAAuB,CAAC,4BAA4B,CAAC,CAAC;QAClE,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,uBAAuB;YAAE,MAAM,KAAK,CAAC;QAC1D,MAAM,IAAI,uBAAuB,CAAC,iCAAiC,CAAC,CAAC;IACvE,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,KAAuB,EACvB,KAA6C,EAC7C,WAAoB,EACpB,gBAAyE,EACzE,OAAoE;IAEpE,MAAM,QAAQ,GAAG,uBAAuB,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;IAChE,MAAM,IAAI,GAAG,QAAQ;SAClB,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QACnB,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM;YAAE,OAAO,EAAc,CAAC;QACnD,MAAM,IAAI,GAAG,OAAsB,CAAC;QACpC,OAAO,IAAI,CAAC,OAAO;aAChB,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,MAAM,CAAC;aACxC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAChC,CAAC,CAAC;SACD,IAAI,CAAC,IAAI,CAAC;SACV,IAAI,EAAE,CAAC;IACV,OAAO,gBAAgB,CAAC,UAAU,EAAE,EAAE,GAAG,EAAE,CACzC,eAAe,CAAC,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE;QAC9D,gBAAgB,EAAE,QAAQ;KAC3B,CAAC,CACH,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,YAAY,CAC1B,gBAAkC,EAClC,OAA8B,EAC9B,OAAqB,EACrB,WAAoB;IAEpB,4BAA4B,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;IACnD,MAAM,UAAU,GAAG,6BAA6B,CAAC,WAAW,CAAC,CAAC;IAC9D,gBAAgB,CAAC,KAAK,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,eAAe,CAC7B,gBAAkC,EAClC,OAA8B,EAC9B,OAAqB,EACrB,WAAoB;IAEpB,4BAA4B,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;IACnD,MAAM,UAAU,GAAG,6BAA6B,CAAC,WAAW,CAAC,CAAC;IAC9D,gBAAgB,CAAC,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;AACjD,CAAC"}
@@ -12,6 +12,8 @@ export interface PromptTurnRequest {
12
12
  userMessages: AgentMessage[];
13
13
  commMessage: Message;
14
14
  onChunk?: OnChunkCallback;
15
+ /** Cancels this turn without affecting other sessions or generations. */
16
+ signal?: AbortSignal;
15
17
  execute: (initialMessages: AgentMessage[], hooks: PromptTurnHooks, signal: AbortSignal, turnId: string) => Promise<AgentLoopTurnResult>;
16
18
  }
17
19
  /** 同 session 新入站消息取代仍在执行的旧 turn 时抛出;调用方应跳过出站回复。 */
@@ -19,6 +21,11 @@ export declare class TurnSupersededError extends Error {
19
21
  readonly sessionKey: string;
20
22
  constructor(sessionKey: string);
21
23
  }
24
+ /** A caller cancelled a turn explicitly (for example, an IM trigger timeout). */
25
+ export declare class TurnCancelledError extends Error {
26
+ readonly sessionKey: string;
27
+ constructor(sessionKey: string, reason?: unknown);
28
+ }
22
29
  type PromptSubscriber = (event: AgentEvent, signal: AbortSignal) => void | Promise<void>;
23
30
  export declare class PromptController {
24
31
  private readonly steeringMode;
@@ -1 +1 @@
1
- {"version":3,"file":"prompt-controller.d.ts","sourceRoot":"","sources":["../../src/turn/prompt-controller.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACvE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAGtE,MAAM,WAAW,eAAe;IAC9B,mBAAmB,EAAE,MAAM,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;IACnD,mBAAmB,EAAE,MAAM,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;CACpD;AAED,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,YAAY,EAAE,CAAC;IAC7B,WAAW,EAAE,OAAO,CAAC;IACrB,OAAO,CAAC,EAAE,eAAe,CAAC;IAC1B,OAAO,EAAE,CACP,eAAe,EAAE,YAAY,EAAE,EAC/B,KAAK,EAAE,eAAe,EACtB,MAAM,EAAE,WAAW,EACnB,MAAM,EAAE,MAAM,KACX,OAAO,CAAC,mBAAmB,CAAC,CAAC;CACnC;AAED,mDAAmD;AACnD,qBAAa,mBAAoB,SAAQ,KAAK;IAC5C,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;gBAEhB,UAAU,EAAE,MAAM;CAK/B;AAED,KAAK,gBAAgB,GAAG,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAUzF,qBAAa,gBAAgB;IAQzB,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,YAAY;IAR/B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA+B;IAC3D,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAiC;IAC7D,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAA6B;IACjE,OAAO,CAAC,WAAW,CAAyB;IAC5C,OAAO,CAAC,UAAU,CAAoC;gBAGnC,YAAY,EAAE,SAAS,EACvB,YAAY,EAAE,SAAS;IAG1C,MAAM,IAAI,OAAO;IAIjB,MAAM,IAAI,OAAO;IAIjB,kBAAkB,IAAI,MAAM;IAI5B,mBAAmB,IAAI,MAAM,GAAG,IAAI;IAKpC,gBAAgB,IAAI,OAAO,GAAG,IAAI;IAMlC,aAAa,IAAI,mBAAmB,GAAG,IAAI;IAI3C,SAAS,CAAC,QAAQ,EAAE,gBAAgB,GAAG,MAAM,IAAI;IAO3C,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;IAOlC,iEAAiE;IACjE,KAAK,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI;IAOhC,kBAAkB,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI;IAO7C,kBAAkB,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI;IAO7C,uEAAuE;IACvE,KAAK,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,GAAG,YAAY,EAAE,GAAG,IAAI;IAQvE,iEAAiE;IACjE,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,GAAG,YAAY,EAAE,GAAG,IAAI;IAQ1E,8DAA8D;IAC9D,QAAQ,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAKlE,OAAO,CAAC,iBAAiB;IAMzB,OAAO,CAAC,UAAU;YAQJ,SAAS;IAMvB,OAAO,CAAC,iBAAiB;IAIzB,OAAO,CAAC,gBAAgB;YAWV,OAAO;IAoDrB,OAAO,IAAI,IAAI;CAWhB"}
1
+ {"version":3,"file":"prompt-controller.d.ts","sourceRoot":"","sources":["../../src/turn/prompt-controller.ts"],"names":[],"mappings":"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"}