@zhin.js/agent 1.0.9 → 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 +46 -11
- package/lib/aop/index.d.ts +0 -2
- package/lib/aop/index.d.ts.map +1 -1
- package/lib/aop/index.js +0 -1
- package/lib/aop/index.js.map +1 -1
- package/lib/builtin/analyze-media-tool.d.ts.map +1 -1
- package/lib/builtin/analyze-media-tool.js +9 -8
- package/lib/builtin/analyze-media-tool.js.map +1 -1
- package/lib/collaboration/{inbound-turn-pipeline.d.ts → inbound-turn-compat.d.ts} +10 -6
- package/lib/collaboration/inbound-turn-compat.d.ts.map +1 -0
- package/lib/collaboration/inbound-turn-compat.js +30 -0
- package/lib/collaboration/inbound-turn-compat.js.map +1 -0
- package/lib/collaboration/index.d.ts +2 -5
- package/lib/collaboration/index.d.ts.map +1 -1
- package/lib/collaboration/index.js +1 -4
- package/lib/collaboration/index.js.map +1 -1
- package/lib/config/agent-interfaces.d.ts +3 -3
- package/lib/config/agent-interfaces.d.ts.map +1 -1
- package/lib/config/validate-ai-config.js +1 -1
- package/lib/config/validate-ai-config.js.map +1 -1
- package/lib/core/agent-core-run.d.ts +13 -0
- package/lib/core/agent-core-run.d.ts.map +1 -1
- package/lib/core/agent-core-run.js +38 -2
- package/lib/core/agent-core-run.js.map +1 -1
- package/lib/core/agent-loop-standalone.d.ts +3 -2
- package/lib/core/agent-loop-standalone.d.ts.map +1 -1
- package/lib/core/agent-loop-standalone.js +14 -7
- package/lib/core/agent-loop-standalone.js.map +1 -1
- package/lib/event/publish-agent-stream.d.ts +2 -2
- package/lib/event/publish-agent-stream.d.ts.map +1 -1
- package/lib/event/publish-agent-stream.js +2 -2
- package/lib/event/publish-agent-stream.js.map +1 -1
- package/lib/event/turn-event.d.ts +9 -1
- package/lib/event/turn-event.d.ts.map +1 -1
- package/lib/event/turn-event.js +3 -1
- package/lib/event/turn-event.js.map +1 -1
- package/lib/event/turn-to-agent-stream.d.ts +2 -1
- package/lib/event/turn-to-agent-stream.d.ts.map +1 -1
- package/lib/event/turn-to-agent-stream.js +29 -15
- package/lib/event/turn-to-agent-stream.js.map +1 -1
- package/lib/index.d.ts +4 -1
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +2 -1
- package/lib/index.js.map +1 -1
- package/lib/init/output-renderer.d.ts +3 -3
- package/lib/init/output-renderer.d.ts.map +1 -1
- package/lib/init/output-renderer.js +1 -1
- package/lib/init/output-renderer.js.map +1 -1
- package/lib/init.d.ts +0 -1
- package/lib/init.d.ts.map +1 -1
- package/lib/init.js +0 -3
- package/lib/init.js.map +1 -1
- package/lib/internal/agent-host.d.ts +3 -0
- package/lib/internal/agent-host.d.ts.map +1 -1
- package/lib/internal/host-types.d.ts +1 -0
- package/lib/internal/host-types.d.ts.map +1 -1
- package/lib/media/inbound-refs.d.ts +9 -0
- package/lib/media/inbound-refs.d.ts.map +1 -0
- package/lib/media/inbound-refs.js +18 -0
- package/lib/media/inbound-refs.js.map +1 -0
- package/lib/media/index.d.ts +1 -0
- package/lib/media/index.d.ts.map +1 -1
- package/lib/media/index.js +1 -0
- package/lib/media/index.js.map +1 -1
- package/lib/media/media-normalize.d.ts +15 -4
- package/lib/media/media-normalize.d.ts.map +1 -1
- package/lib/media/media-normalize.js +92 -88
- package/lib/media/media-normalize.js.map +1 -1
- package/lib/media/media-publisher.d.ts +3 -3
- package/lib/media/media-publisher.d.ts.map +1 -1
- package/lib/media/media-publisher.js +25 -27
- package/lib/media/media-publisher.js.map +1 -1
- package/lib/media/media-router.d.ts +5 -3
- package/lib/media/media-router.d.ts.map +1 -1
- package/lib/media/media-router.js +14 -5
- package/lib/media/media-router.js.map +1 -1
- package/lib/media/media-types.d.ts +8 -2
- package/lib/media/media-types.d.ts.map +1 -1
- package/lib/media/media-types.js.map +1 -1
- package/lib/media/subagent-inbound.d.ts +5 -4
- package/lib/media/subagent-inbound.d.ts.map +1 -1
- package/lib/media/subagent-inbound.js +10 -5
- package/lib/media/subagent-inbound.js.map +1 -1
- package/lib/orchestrator/bootstrap-executors.d.ts.map +1 -1
- package/lib/orchestrator/bootstrap-executors.js +5 -5
- package/lib/orchestrator/bootstrap-executors.js.map +1 -1
- package/lib/routing/match-rules.d.ts +4 -0
- package/lib/routing/match-rules.d.ts.map +1 -0
- package/lib/routing/match-rules.js +29 -0
- package/lib/routing/match-rules.js.map +1 -0
- package/lib/routing/route-matcher.d.ts +1 -2
- package/lib/routing/route-matcher.d.ts.map +1 -1
- package/lib/routing/route-matcher.js +2 -58
- package/lib/routing/route-matcher.js.map +1 -1
- package/lib/service.d.ts +4 -3
- package/lib/service.d.ts.map +1 -1
- package/lib/service.js.map +1 -1
- package/lib/session/resolve-session-interaction-port.d.ts +2 -2
- package/lib/session/resolve-session-interaction-port.d.ts.map +1 -1
- package/lib/session/resolve-session-interaction-port.js +5 -1
- package/lib/session/resolve-session-interaction-port.js.map +1 -1
- package/lib/session/session-interaction-port.d.ts +7 -2
- package/lib/session/session-interaction-port.d.ts.map +1 -1
- package/lib/session/session-interaction-port.js +3 -1
- package/lib/session/session-interaction-port.js.map +1 -1
- package/lib/subagent/subagent-runtime.d.ts +4 -3
- package/lib/subagent/subagent-runtime.d.ts.map +1 -1
- package/lib/subagent/subagent-runtime.js +8 -2
- package/lib/subagent/subagent-runtime.js.map +1 -1
- package/lib/tool/tool-approval-gate.d.ts +9 -4
- package/lib/tool/tool-approval-gate.d.ts.map +1 -1
- package/lib/tool/tool-approval-gate.js +19 -8
- package/lib/tool/tool-approval-gate.js.map +1 -1
- package/lib/turn/agent-turn-context.d.ts +13 -0
- package/lib/turn/agent-turn-context.d.ts.map +1 -0
- package/lib/turn/agent-turn-context.js +13 -0
- package/lib/turn/agent-turn-context.js.map +1 -0
- package/lib/turn/inbound-media.d.ts +26 -0
- package/lib/turn/inbound-media.d.ts.map +1 -0
- package/lib/turn/inbound-media.js +128 -0
- package/lib/turn/inbound-media.js.map +1 -0
- package/lib/turn/inbound-queue-runtime.d.ts +1 -0
- package/lib/turn/inbound-queue-runtime.d.ts.map +1 -1
- package/lib/turn/inbound-queue-runtime.js +1 -0
- package/lib/turn/inbound-queue-runtime.js.map +1 -1
- package/lib/turn/inbound-turn-queue.d.ts +5 -0
- package/lib/turn/inbound-turn-queue.d.ts.map +1 -1
- package/lib/turn/inbound-turn-queue.js +46 -1
- package/lib/turn/inbound-turn-queue.js.map +1 -1
- package/lib/turn/index.d.ts +4 -5
- package/lib/turn/index.d.ts.map +1 -1
- package/lib/turn/index.js +4 -5
- package/lib/turn/index.js.map +1 -1
- package/lib/turn/process-stream.d.ts.map +1 -1
- package/lib/turn/process-stream.js +21 -13
- package/lib/turn/process-stream.js.map +1 -1
- package/lib/turn/prompt-api.d.ts +2 -2
- package/lib/turn/prompt-api.d.ts.map +1 -1
- package/lib/turn/prompt-api.js +1 -1
- package/lib/turn/prompt-api.js.map +1 -1
- package/lib/turn/prompt-controller.d.ts +7 -0
- package/lib/turn/prompt-controller.d.ts.map +1 -1
- package/lib/turn/prompt-controller.js +52 -7
- package/lib/turn/prompt-controller.js.map +1 -1
- package/lib/turn/prompt-input.d.ts +2 -2
- package/lib/turn/prompt-input.d.ts.map +1 -1
- package/lib/turn/prompt-input.js +2 -2
- package/lib/turn/prompt-input.js.map +1 -1
- package/lib/turn/turn-context-bridge.d.ts +6 -1
- package/lib/turn/turn-context-bridge.d.ts.map +1 -1
- package/lib/turn/turn-context-bridge.js +8 -5
- package/lib/turn/turn-context-bridge.js.map +1 -1
- package/lib/turn/turn-pipeline.d.ts +8 -2
- package/lib/turn/turn-pipeline.d.ts.map +1 -1
- package/lib/turn/turn-pipeline.js +13 -101
- package/lib/turn/turn-pipeline.js.map +1 -1
- package/lib/turn/turn-terminal.d.ts +14 -0
- package/lib/turn/turn-terminal.d.ts.map +1 -0
- package/lib/turn/turn-terminal.js +44 -0
- package/lib/turn/turn-terminal.js.map +1 -0
- package/lib/zhin-agent/index.d.ts +30 -5
- package/lib/zhin-agent/index.d.ts.map +1 -1
- package/lib/zhin-agent/index.js +61 -9
- package/lib/zhin-agent/index.js.map +1 -1
- package/package.json +8 -8
- package/lib/collaboration/inbound-turn-enrich.d.ts +0 -25
- package/lib/collaboration/inbound-turn-enrich.d.ts.map +0 -1
- package/lib/collaboration/inbound-turn-enrich.js +0 -51
- package/lib/collaboration/inbound-turn-enrich.js.map +0 -1
- package/lib/collaboration/inbound-turn-execute.d.ts +0 -33
- package/lib/collaboration/inbound-turn-execute.d.ts.map +0 -1
- package/lib/collaboration/inbound-turn-execute.js +0 -73
- package/lib/collaboration/inbound-turn-execute.js.map +0 -1
- package/lib/collaboration/inbound-turn-outbound-stage.d.ts +0 -27
- package/lib/collaboration/inbound-turn-outbound-stage.d.ts.map +0 -1
- package/lib/collaboration/inbound-turn-outbound-stage.js +0 -74
- package/lib/collaboration/inbound-turn-outbound-stage.js.map +0 -1
- package/lib/collaboration/inbound-turn-pipeline.d.ts.map +0 -1
- package/lib/collaboration/inbound-turn-pipeline.js +0 -202
- package/lib/collaboration/inbound-turn-pipeline.js.map +0 -1
- package/lib/collaboration/inbound-turn-route.d.ts +0 -42
- package/lib/collaboration/inbound-turn-route.d.ts.map +0 -1
- package/lib/collaboration/inbound-turn-route.js +0 -107
- package/lib/collaboration/inbound-turn-route.js.map +0 -1
- package/lib/init/message-media.d.ts +0 -11
- package/lib/init/message-media.d.ts.map +0 -1
- package/lib/init/message-media.js +0 -107
- package/lib/init/message-media.js.map +0 -1
- package/lib/init/register-ai-trigger.d.ts +0 -7
- package/lib/init/register-ai-trigger.d.ts.map +0 -1
- package/lib/init/register-ai-trigger.js +0 -72
- package/lib/init/register-ai-trigger.js.map +0 -1
- package/lib/turn/multimodal-message.d.ts +0 -9
- package/lib/turn/multimodal-message.d.ts.map +0 -1
- package/lib/turn/multimodal-message.js +0 -72
- 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,
|
|
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"}
|
|
@@ -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,
|
|
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;
|
|
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
|
-
|
|
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":"AAGA,MAAM,OAAO,uBAAwB,SAAQ,KAAK;IAChD,YAAY,UAAkB;QAC5B,KAAK,CAAC,6CAA6C,UAAU,EAAE,CAAC,CAAC;QACjE,IAAI,CAAC,IAAI,GAAG,yBAAyB,CAAC;IACxC,CAAC;CACF;
|
|
1
|
+
{"version":3,"file":"inbound-turn-queue.js","sourceRoot":"","sources":["../../src/turn/inbound-turn-queue.ts"],"names":[],"mappings":"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"}
|
package/lib/turn/index.d.ts
CHANGED
|
@@ -1,17 +1,16 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Turn module — IM turn pipeline, scheduling, metrics
|
|
2
|
+
* Turn module — IM turn pipeline, scheduling, metrics.
|
|
3
3
|
*/
|
|
4
|
-
export { processTextTurn
|
|
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 {
|
|
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';
|
package/lib/turn/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/turn/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,eAAe,EAAE,
|
|
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
|
|
2
|
+
* Turn module — IM turn pipeline, scheduling, metrics.
|
|
3
3
|
*/
|
|
4
|
-
export { processTextTurn
|
|
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 {
|
|
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';
|
package/lib/turn/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/turn/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,eAAe,EAAE,
|
|
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":"
|
|
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
|
-
|
|
25
|
+
const terminal = new TurnTerminalGate();
|
|
23
26
|
let finalOutput = [];
|
|
24
27
|
let finalError;
|
|
25
28
|
const onTurnEvent = (event) => {
|
|
26
|
-
if (event
|
|
27
|
-
|
|
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
|
|
56
|
-
|
|
57
|
-
|
|
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 (!
|
|
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
|
-
|
|
66
|
-
|
|
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;
|
|
1
|
+
{"version":3,"file":"process-stream.js","sourceRoot":"","sources":["../../src/turn/process-stream.ts"],"names":[],"mappings":"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"}
|
package/lib/turn/prompt-api.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { AgentMessage,
|
|
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
|
-
|
|
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,
|
|
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"}
|
package/lib/turn/prompt-api.js
CHANGED
|
@@ -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?.
|
|
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,
|
|
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;
|
|
1
|
+
{"version":3,"file":"prompt-controller.d.ts","sourceRoot":"","sources":["../../src/turn/prompt-controller.ts"],"names":[],"mappings":"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"}
|