@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
|
@@ -1,202 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* InboundTurnPipeline — Agent Orchestration Plane entry (ADR 0023).
|
|
3
|
-
*
|
|
4
|
-
* Stages: enrich → peerPolicy → buildTurnPlan → route/execute → outbound
|
|
5
|
-
* Turn 路由/执行/出站委托 `inbound-turn-route` / `inbound-turn-outbound-stage`(阶段 4)。
|
|
6
|
-
*/
|
|
7
|
-
import { checkAIAccess } from '@zhin.js/core';
|
|
8
|
-
import { formatCompactLog, truncatePreview } from '@zhin.js/logger';
|
|
9
|
-
import { discoverWorkspaceAgents } from '../discovery/agents.js';
|
|
10
|
-
import { formatAiHandlerTurnTable, formatAiHandlerFallbackLog, formatOutputElementsPreview } from '../turn/turn-metrics.js';
|
|
11
|
-
import { evaluateCellAtOwnership, evaluatePeerTrigger, isInboundFromCollaborationPeer } from './peer-policy.js';
|
|
12
|
-
import { buildTurnPlan } from './turn-plan-resolver.js';
|
|
13
|
-
import { getCollaborationSceneService } from './scene-service.js';
|
|
14
|
-
import { findCellForInbound } from './collaboration-config.js';
|
|
15
|
-
import { tryHandlePeerInboundHandback } from './inbound-peer-handback.js';
|
|
16
|
-
import { routeInboundTurnExecution } from './inbound-turn-route.js';
|
|
17
|
-
import { executeInboundOutboundStage } from './inbound-turn-outbound-stage.js';
|
|
18
|
-
import { resolveEndpointAtIds, resolveEndpointAiAccess } from './inbound-turn-endpoint.js';
|
|
19
|
-
import { prepareInboundTurnEnrichment } from './inbound-turn-enrich.js';
|
|
20
|
-
import { getAgentRuntimeRegistry } from './runtime-registry.js';
|
|
21
|
-
function logInboundHandlerComplete(logger, t0, zhinAgent, context = {}) {
|
|
22
|
-
const totalMs = performance.now() - t0;
|
|
23
|
-
const turnMetrics = zhinAgent.getLastTurnMetrics();
|
|
24
|
-
const output = context.output
|
|
25
|
-
?? (context.elements ? formatOutputElementsPreview(context.elements) : undefined);
|
|
26
|
-
if (turnMetrics) {
|
|
27
|
-
logger.info(formatAiHandlerTurnTable(turnMetrics, totalMs, {
|
|
28
|
-
userInput: context.userInput,
|
|
29
|
-
output,
|
|
30
|
-
}));
|
|
31
|
-
return;
|
|
32
|
-
}
|
|
33
|
-
logger.info(formatAiHandlerFallbackLog(totalMs, context.path));
|
|
34
|
-
}
|
|
35
|
-
export function createInboundTurnPipeline(deps) {
|
|
36
|
-
const { root, ai, refs, triggerConfig, peerMode, logger, replyOutbound } = deps;
|
|
37
|
-
return async (message, content) => {
|
|
38
|
-
const t0 = performance.now();
|
|
39
|
-
const endpointId = String(message.$endpoint);
|
|
40
|
-
if (!ai.isReady()) {
|
|
41
|
-
logger.warn(formatCompactLog('AI Handler', { skip: 'not_ready', endpoint: endpointId }));
|
|
42
|
-
await replyOutbound('AI 服务未就绪,请检查 zhin.config.yml 中的 providers 配置。');
|
|
43
|
-
return;
|
|
44
|
-
}
|
|
45
|
-
const registry = getAgentRuntimeRegistry();
|
|
46
|
-
const zhinAgent = registry.getForEndpoint(endpointId) ?? refs.zhinAgent;
|
|
47
|
-
if (!zhinAgent) {
|
|
48
|
-
logger.warn(formatCompactLog('AI Handler', { skip: 'no_zhin_agent', endpoint: endpointId }));
|
|
49
|
-
await replyOutbound('AI Agent 未初始化,请查看启动日志。');
|
|
50
|
-
return;
|
|
51
|
-
}
|
|
52
|
-
const access = checkAIAccess(message, ai.getAccessConfig?.(), resolveEndpointAiAccess(message, root));
|
|
53
|
-
if (!access.allowed) {
|
|
54
|
-
logger.info(formatCompactLog('AI Access', {
|
|
55
|
-
adapter: message.$adapter,
|
|
56
|
-
endpoint: endpointId,
|
|
57
|
-
channel: message.$channel?.type,
|
|
58
|
-
allowed: false,
|
|
59
|
-
reason: access.reason,
|
|
60
|
-
}));
|
|
61
|
-
if (access.replyMessage)
|
|
62
|
-
await replyOutbound(access.replyMessage);
|
|
63
|
-
return;
|
|
64
|
-
}
|
|
65
|
-
const endpointAtIds = resolveEndpointAtIds(message, root);
|
|
66
|
-
const cellService = getCollaborationSceneService();
|
|
67
|
-
const scope = message.$channel?.type || 'private';
|
|
68
|
-
const sceneId = message.$channel?.id ?? '';
|
|
69
|
-
let cell = (scope === 'group' || scope === 'channel') && sceneId !== ''
|
|
70
|
-
? findCellForInbound(cellService.listScenes(), String(message.$adapter), String(sceneId), endpointId)
|
|
71
|
-
: undefined;
|
|
72
|
-
if (cell) {
|
|
73
|
-
const fresh = await cellService.getSceneFresh(cell.id);
|
|
74
|
-
if (fresh)
|
|
75
|
-
cell = fresh;
|
|
76
|
-
}
|
|
77
|
-
const peerResult = evaluatePeerTrigger({
|
|
78
|
-
message,
|
|
79
|
-
cell,
|
|
80
|
-
peerMode,
|
|
81
|
-
endpointAtIds,
|
|
82
|
-
root,
|
|
83
|
-
});
|
|
84
|
-
if (peerResult.isPeer && !peerResult.shouldTrigger) {
|
|
85
|
-
logger.debug(formatCompactLog('AI Handler', {
|
|
86
|
-
skip: 'peer_mention_required',
|
|
87
|
-
peer: peerResult.peerEndpointId,
|
|
88
|
-
reason: peerResult.reason,
|
|
89
|
-
}));
|
|
90
|
-
return;
|
|
91
|
-
}
|
|
92
|
-
const atOwnership = evaluateCellAtOwnership(message, cell, endpointId, root);
|
|
93
|
-
if (!atOwnership.shouldHandle) {
|
|
94
|
-
logger.debug(formatCompactLog('AI Handler', {
|
|
95
|
-
skip: atOwnership.reason ?? 'cell_at_filter',
|
|
96
|
-
mentioned: atOwnership.mentionedEndpointIds?.join(','),
|
|
97
|
-
endpoint: endpointId,
|
|
98
|
-
}));
|
|
99
|
-
return;
|
|
100
|
-
}
|
|
101
|
-
const peerInbound = isInboundFromCollaborationPeer(message, cell, root);
|
|
102
|
-
const replyAi = (payload) => replyOutbound(payload, { quote: !peerInbound });
|
|
103
|
-
if (peerInbound && cell && peerResult.peerEndpointId) {
|
|
104
|
-
const handbackDone = await tryHandlePeerInboundHandback({
|
|
105
|
-
message,
|
|
106
|
-
cell,
|
|
107
|
-
peerEndpointId: peerResult.peerEndpointId,
|
|
108
|
-
replyAi,
|
|
109
|
-
logger,
|
|
110
|
-
});
|
|
111
|
-
if (handbackDone)
|
|
112
|
-
return;
|
|
113
|
-
}
|
|
114
|
-
if (triggerConfig.thinkingMessage)
|
|
115
|
-
await replyAi(triggerConfig.thinkingMessage);
|
|
116
|
-
try {
|
|
117
|
-
const resolveQuotes = Boolean(triggerConfig.resolveQuotedMessages && !peerInbound);
|
|
118
|
-
const { commMessage, mediaParts, aiContent, onChunk } = await prepareInboundTurnEnrichment({
|
|
119
|
-
root,
|
|
120
|
-
message,
|
|
121
|
-
content,
|
|
122
|
-
cell,
|
|
123
|
-
resolveQuotes,
|
|
124
|
-
replyOutbound,
|
|
125
|
-
logger,
|
|
126
|
-
t0,
|
|
127
|
-
});
|
|
128
|
-
const routing = refs.aiService?.getRoutingConfig();
|
|
129
|
-
const bindingRegistry = refs.aiService?.getBindingRegistry();
|
|
130
|
-
let discoveredAgentNames = new Set();
|
|
131
|
-
if (refs.aiService && routing && bindingRegistry) {
|
|
132
|
-
const agentMetas = await discoverWorkspaceAgents(root);
|
|
133
|
-
refs.aiService.setDiscoveredAgents(agentMetas);
|
|
134
|
-
discoveredAgentNames = bindingRegistry.getDiscoveredAgentNames();
|
|
135
|
-
}
|
|
136
|
-
const turnPlan = buildTurnPlan({
|
|
137
|
-
message,
|
|
138
|
-
contentText: aiContent,
|
|
139
|
-
endpointId,
|
|
140
|
-
endpointIds: endpointAtIds,
|
|
141
|
-
cells: cellService.listScenes(),
|
|
142
|
-
agents: routing?.agents ?? {},
|
|
143
|
-
discoveredAgentNames,
|
|
144
|
-
});
|
|
145
|
-
logger.debug(formatCompactLog('AI Handler', {
|
|
146
|
-
turn_plan: turnPlan.handlerProfile,
|
|
147
|
-
cell: turnPlan.collaborationSceneId,
|
|
148
|
-
delegation: turnPlan.delegation?.mode,
|
|
149
|
-
}));
|
|
150
|
-
const routeResult = await routeInboundTurnExecution({
|
|
151
|
-
root,
|
|
152
|
-
ai,
|
|
153
|
-
zhinAgent,
|
|
154
|
-
commMessage,
|
|
155
|
-
message,
|
|
156
|
-
aiContent,
|
|
157
|
-
turnPlan,
|
|
158
|
-
cell,
|
|
159
|
-
endpointId,
|
|
160
|
-
refs,
|
|
161
|
-
bindingRegistry: bindingRegistry ?? undefined,
|
|
162
|
-
mediaParts,
|
|
163
|
-
onChunk,
|
|
164
|
-
replyAi,
|
|
165
|
-
logger,
|
|
166
|
-
});
|
|
167
|
-
if (routeResult.kind === 'done') {
|
|
168
|
-
logInboundHandlerComplete(logger, t0, zhinAgent, {
|
|
169
|
-
path: 'routed_done',
|
|
170
|
-
userInput: aiContent,
|
|
171
|
-
});
|
|
172
|
-
return;
|
|
173
|
-
}
|
|
174
|
-
cell = await executeInboundOutboundStage({
|
|
175
|
-
root,
|
|
176
|
-
message,
|
|
177
|
-
elements: routeResult.elements,
|
|
178
|
-
aiContent,
|
|
179
|
-
cell: routeResult.cell,
|
|
180
|
-
endpointId,
|
|
181
|
-
peerInbound,
|
|
182
|
-
outputSchemaRequired: Boolean(ai.getAgentConfig?.()?.outputSchema),
|
|
183
|
-
replyOutbound,
|
|
184
|
-
logger,
|
|
185
|
-
});
|
|
186
|
-
logInboundHandlerComplete(logger, t0, zhinAgent, {
|
|
187
|
-
userInput: aiContent,
|
|
188
|
-
elements: routeResult.elements,
|
|
189
|
-
});
|
|
190
|
-
}
|
|
191
|
-
catch (error) {
|
|
192
|
-
const msg = error instanceof Error ? error.message : String(error);
|
|
193
|
-
logger.warn(formatCompactLog('AI Handler', {
|
|
194
|
-
total_ms: Math.round(performance.now() - t0),
|
|
195
|
-
ok: false,
|
|
196
|
-
error: truncatePreview(msg),
|
|
197
|
-
}));
|
|
198
|
-
await replyAi((triggerConfig.errorTemplate ?? '❌ AI 处理失败: {error}').replace('{error}', msg));
|
|
199
|
-
}
|
|
200
|
-
};
|
|
201
|
-
}
|
|
202
|
-
//# sourceMappingURL=inbound-turn-pipeline.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"inbound-turn-pipeline.js","sourceRoot":"","sources":["../../src/collaboration/inbound-turn-pipeline.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* 入站 turn 路由 — Kernel 委派 / spawn_task / 本地 ZhinAgent(阶段 4)。
|
|
3
|
-
*/
|
|
4
|
-
import type { Plugin, Message, AgentTurnMessage } from '@zhin.js/core';
|
|
5
|
-
import type { ContentPart, OutputElement } from '@zhin.js/ai';
|
|
6
|
-
import type { AIServiceRefs } from '../init/shared-refs.js';
|
|
7
|
-
import { type ResolvedAgentBinding } from '../config/types.js';
|
|
8
|
-
import type { CollaborationScene, TurnPlan } from './types.js';
|
|
9
|
-
import type { ZhinAgent } from '../zhin-agent/index.js';
|
|
10
|
-
import type { AIService } from '../service.js';
|
|
11
|
-
export type InboundTurnRouteResult = {
|
|
12
|
-
kind: 'done';
|
|
13
|
-
} | {
|
|
14
|
-
kind: 'local';
|
|
15
|
-
elements: OutputElement[];
|
|
16
|
-
cell?: CollaborationScene;
|
|
17
|
-
};
|
|
18
|
-
export interface RouteInboundTurnExecutionInput {
|
|
19
|
-
root: Plugin;
|
|
20
|
-
ai: AIService;
|
|
21
|
-
zhinAgent: ZhinAgent;
|
|
22
|
-
commMessage: AgentTurnMessage;
|
|
23
|
-
message: Message;
|
|
24
|
-
aiContent: string;
|
|
25
|
-
turnPlan: TurnPlan;
|
|
26
|
-
cell?: CollaborationScene;
|
|
27
|
-
endpointId: string;
|
|
28
|
-
refs: AIServiceRefs;
|
|
29
|
-
bindingRegistry?: {
|
|
30
|
-
getBinding(name: string): ResolvedAgentBinding | null | undefined;
|
|
31
|
-
requireZhinBinding(): ResolvedAgentBinding;
|
|
32
|
-
};
|
|
33
|
-
mediaParts: ContentPart[];
|
|
34
|
-
onChunk?: (chunk: string, full: string) => void;
|
|
35
|
-
replyAi: (payload: unknown) => Promise<unknown>;
|
|
36
|
-
logger: {
|
|
37
|
-
info: (...args: unknown[]) => void;
|
|
38
|
-
warn: (...args: unknown[]) => void;
|
|
39
|
-
};
|
|
40
|
-
}
|
|
41
|
-
export declare function routeInboundTurnExecution(input: RouteInboundTurnExecutionInput): Promise<InboundTurnRouteResult>;
|
|
42
|
-
//# sourceMappingURL=inbound-turn-route.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"inbound-turn-route.d.ts","sourceRoot":"","sources":["../../src/collaboration/inbound-turn-route.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACvE,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE9D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAA2B,KAAK,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAKxF,OAAO,KAAK,EAAE,kBAAkB,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC/D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAE/C,MAAM,MAAM,sBAAsB,GAC9B;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAChB;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,aAAa,EAAE,CAAC;IAAC,IAAI,CAAC,EAAE,kBAAkB,CAAA;CAAE,CAAC;AAE5E,MAAM,WAAW,8BAA8B;IAC7C,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,SAAS,CAAC;IACd,SAAS,EAAE,SAAS,CAAC;IACrB,WAAW,EAAE,gBAAgB,CAAC;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,QAAQ,CAAC;IACnB,IAAI,CAAC,EAAE,kBAAkB,CAAC;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,aAAa,CAAC;IACpB,eAAe,CAAC,EAAE;QAChB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,oBAAoB,GAAG,IAAI,GAAG,SAAS,CAAC;QAClE,kBAAkB,IAAI,oBAAoB,CAAC;KAC5C,CAAC;IACF,UAAU,EAAE,WAAW,EAAE,CAAC;IAC1B,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAChD,OAAO,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAChD,MAAM,EAAE;QAAE,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;QAAC,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAA;KAAE,CAAC;CACpF;AAED,wBAAsB,yBAAyB,CAC7C,KAAK,EAAE,8BAA8B,GACpC,OAAO,CAAC,sBAAsB,CAAC,CAgIjC"}
|
|
@@ -1,107 +0,0 @@
|
|
|
1
|
-
import { formatCompactLog } from '@zhin.js/logger';
|
|
2
|
-
import { DEFAULT_ZHIN_AGENT_NAME } from '../config/types.js';
|
|
3
|
-
import { dispatchPeerTask } from './collaboration-dispatch.js';
|
|
4
|
-
import { executeInboundSpawnTaskTurn } from './inbound-spawn-task.js';
|
|
5
|
-
import { executeInboundAgentTurn } from './inbound-turn-execute.js';
|
|
6
|
-
import { collectInboundTurnTools } from './inbound-turn-tools.js';
|
|
7
|
-
export async function routeInboundTurnExecution(input) {
|
|
8
|
-
const { root, ai, zhinAgent, commMessage, message, aiContent, turnPlan, cell: initialCell, endpointId, refs, bindingRegistry, mediaParts, onChunk, replyAi, logger, } = input;
|
|
9
|
-
const cell = initialCell;
|
|
10
|
-
const peerTarget = turnPlan.delegation?.delegateToPeer ?? turnPlan.delegation?.targetEndpointId;
|
|
11
|
-
if (peerTarget && peerTarget !== endpointId && cell) {
|
|
12
|
-
const delegateText = aiContent.trim() || '请处理上述协作请求。';
|
|
13
|
-
try {
|
|
14
|
-
const dispatched = await dispatchPeerTask({
|
|
15
|
-
cell,
|
|
16
|
-
fromEndpointId: endpointId,
|
|
17
|
-
toEndpointId: peerTarget,
|
|
18
|
-
goal: delegateText,
|
|
19
|
-
handlerProfile: turnPlan.handlerProfile,
|
|
20
|
-
message: commMessage,
|
|
21
|
-
});
|
|
22
|
-
if (dispatched.task.status === 'completed'
|
|
23
|
-
|| dispatched.task.status === 'waiting_result'
|
|
24
|
-
|| dispatched.task.status === 'running') {
|
|
25
|
-
logger.info(formatCompactLog('AI Handler', {
|
|
26
|
-
path: 'kernel_internal_room',
|
|
27
|
-
run: dispatched.runId,
|
|
28
|
-
task: dispatched.taskId,
|
|
29
|
-
from: endpointId,
|
|
30
|
-
to: peerTarget,
|
|
31
|
-
agent: turnPlan.handlerProfile,
|
|
32
|
-
}));
|
|
33
|
-
return { kind: 'done' };
|
|
34
|
-
}
|
|
35
|
-
logger.warn(formatCompactLog('AI Handler', {
|
|
36
|
-
path: 'kernel_internal_room_failed',
|
|
37
|
-
task: dispatched.taskId,
|
|
38
|
-
error: dispatched.task.error,
|
|
39
|
-
fallback: 'local_process',
|
|
40
|
-
}));
|
|
41
|
-
}
|
|
42
|
-
catch (err) {
|
|
43
|
-
logger.warn(formatCompactLog('AI Handler', {
|
|
44
|
-
path: 'kernel_internal_room_failed',
|
|
45
|
-
error: err instanceof Error ? err.message : String(err),
|
|
46
|
-
fallback: 'local_process',
|
|
47
|
-
}));
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
if (turnPlan.delegation?.mode === 'spawn_task'
|
|
51
|
-
&& turnPlan.delegation.targetAgentId
|
|
52
|
-
&& turnPlan.delegation.targetAgentId !== DEFAULT_ZHIN_AGENT_NAME) {
|
|
53
|
-
const spawnResult = await executeInboundSpawnTaskTurn({
|
|
54
|
-
zhinAgent,
|
|
55
|
-
commMessage,
|
|
56
|
-
message,
|
|
57
|
-
aiContent,
|
|
58
|
-
delegation: turnPlan.delegation,
|
|
59
|
-
cell,
|
|
60
|
-
bindingRegistry,
|
|
61
|
-
replyAi,
|
|
62
|
-
logger,
|
|
63
|
-
});
|
|
64
|
-
if (spawnResult.handled)
|
|
65
|
-
return { kind: 'done' };
|
|
66
|
-
}
|
|
67
|
-
const handlerBinding = bindingRegistry?.getBinding(turnPlan.handlerProfile)
|
|
68
|
-
?? bindingRegistry?.getBinding(DEFAULT_ZHIN_AGENT_NAME)
|
|
69
|
-
?? bindingRegistry?.requireZhinBinding();
|
|
70
|
-
const orchestrator = root.inject('agent');
|
|
71
|
-
const ingress = root.inject('capabilityIngress');
|
|
72
|
-
const projection = orchestrator && ingress && handlerBinding
|
|
73
|
-
? ingress.ensureForTurn(orchestrator, {
|
|
74
|
-
tools: root.inject('tool'),
|
|
75
|
-
skills: root.inject('skill'),
|
|
76
|
-
agents: root.inject('agentFeature'),
|
|
77
|
-
mcps: root.inject('mcpFeature'),
|
|
78
|
-
}, { binding: handlerBinding, message: commMessage })
|
|
79
|
-
: null;
|
|
80
|
-
const externalTools = collectInboundTurnTools({ root, ai, commMessage, cell });
|
|
81
|
-
try {
|
|
82
|
-
const localResult = await executeInboundAgentTurn({
|
|
83
|
-
zhinAgent,
|
|
84
|
-
commMessage,
|
|
85
|
-
aiContent,
|
|
86
|
-
externalTools,
|
|
87
|
-
mediaParts,
|
|
88
|
-
handlerBinding: handlerBinding ?? null,
|
|
89
|
-
refs,
|
|
90
|
-
cell,
|
|
91
|
-
endpointId,
|
|
92
|
-
onChunk,
|
|
93
|
-
logger,
|
|
94
|
-
});
|
|
95
|
-
return {
|
|
96
|
-
kind: 'local',
|
|
97
|
-
elements: localResult.elements,
|
|
98
|
-
cell: localResult.cell,
|
|
99
|
-
};
|
|
100
|
-
}
|
|
101
|
-
finally {
|
|
102
|
-
// Release the projection lease so a deferred purge of the previous
|
|
103
|
-
// on-demand set can run once no turn is executing against it.
|
|
104
|
-
projection?.release();
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
//# sourceMappingURL=inbound-turn-route.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"inbound-turn-route.js","sourceRoot":"","sources":["../../src/collaboration/inbound-turn-route.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import { type Message, type QuotedMessagePayload } from '@zhin.js/core';
|
|
2
|
-
import type { ContentPart } from '@zhin.js/ai';
|
|
3
|
-
/**
|
|
4
|
-
* Extract multimodal ContentPart[] from a Message's structured $content segments.
|
|
5
|
-
* Handles image, video, audio, and face/sticker types.
|
|
6
|
-
* Falls back to raw string parsing for image URLs when $content has no media segments.
|
|
7
|
-
*/
|
|
8
|
-
export declare function extractMediaParts(message: Message): ContentPart[];
|
|
9
|
-
/** 从已拉取的引用消息 payload 提取多模态部分(如被引消息里的图片) */
|
|
10
|
-
export declare function extractMediaPartsFromQuotedPayload(payload: QuotedMessagePayload, adapter?: Message['$adapter']): ContentPart[];
|
|
11
|
-
//# sourceMappingURL=message-media.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"message-media.d.ts","sourceRoot":"","sources":["../../src/init/message-media.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,OAAO,EAAE,KAAK,oBAAoB,EAAwB,MAAM,eAAe,CAAC;AAC9F,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/C;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,OAAO,GAAG,WAAW,EAAE,CA8EjE;AAED,2CAA2C;AAC3C,wBAAgB,kCAAkC,CAChD,OAAO,EAAE,oBAAoB,EAC7B,OAAO,GAAE,OAAO,CAAC,UAAU,CAAa,GACvC,WAAW,EAAE,CAoBf"}
|
|
@@ -1,107 +0,0 @@
|
|
|
1
|
-
import { Message as MessageNs } from '@zhin.js/core';
|
|
2
|
-
/**
|
|
3
|
-
* Extract multimodal ContentPart[] from a Message's structured $content segments.
|
|
4
|
-
* Handles image, video, audio, and face/sticker types.
|
|
5
|
-
* Falls back to raw string parsing for image URLs when $content has no media segments.
|
|
6
|
-
*/
|
|
7
|
-
export function extractMediaParts(message) {
|
|
8
|
-
const parts = [];
|
|
9
|
-
if (Array.isArray(message.$content)) {
|
|
10
|
-
for (const seg of message.$content) {
|
|
11
|
-
if (typeof seg === 'string' || !seg || !seg.type)
|
|
12
|
-
continue;
|
|
13
|
-
const { type, data } = seg;
|
|
14
|
-
switch (type) {
|
|
15
|
-
case 'image': {
|
|
16
|
-
const b64 = data?.base64 || data?.data;
|
|
17
|
-
if (b64 && typeof b64 === 'string') {
|
|
18
|
-
const mime = data?.mime || data?.mimeType || 'image/jpeg';
|
|
19
|
-
parts.push({ type: 'image_url', image_url: { url: `data:${mime};base64,${b64}` } });
|
|
20
|
-
break;
|
|
21
|
-
}
|
|
22
|
-
const url = data?.url || data?.file || data?.src;
|
|
23
|
-
if (url)
|
|
24
|
-
parts.push({ type: 'image_url', image_url: { url } });
|
|
25
|
-
break;
|
|
26
|
-
}
|
|
27
|
-
case 'video': {
|
|
28
|
-
const b64 = data?.base64;
|
|
29
|
-
if (b64 && typeof b64 === 'string') {
|
|
30
|
-
const mime = data?.mime || data?.mimeType || 'video/mp4';
|
|
31
|
-
parts.push({ type: 'video_url', video_url: { url: `data:${mime};base64,${b64}` } });
|
|
32
|
-
break;
|
|
33
|
-
}
|
|
34
|
-
const url = data?.url || data?.file || data?.src;
|
|
35
|
-
if (url)
|
|
36
|
-
parts.push({ type: 'video_url', video_url: { url } });
|
|
37
|
-
break;
|
|
38
|
-
}
|
|
39
|
-
case 'audio':
|
|
40
|
-
case 'record':
|
|
41
|
-
case 'voice': {
|
|
42
|
-
const dataStr = data?.data || data?.base64;
|
|
43
|
-
if (dataStr) {
|
|
44
|
-
const fmt = data?.format === 'wav' ? 'wav' : 'mp3';
|
|
45
|
-
parts.push({ type: 'audio', audio: { data: dataStr, format: fmt } });
|
|
46
|
-
}
|
|
47
|
-
else {
|
|
48
|
-
const url = data?.url || data?.file || data?.src;
|
|
49
|
-
if (url) {
|
|
50
|
-
parts.push({ type: 'text', text: `[用户发送了一段语音: ${url}]` });
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
break;
|
|
54
|
-
}
|
|
55
|
-
case 'face':
|
|
56
|
-
case 'sticker':
|
|
57
|
-
case 'emoji': {
|
|
58
|
-
const id = String(data?.id ?? data?.face_id ?? '');
|
|
59
|
-
const text = data?.text || data?.name || data?.describe;
|
|
60
|
-
if (id)
|
|
61
|
-
parts.push({ type: 'face', face: { id, text } });
|
|
62
|
-
break;
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
if (parts.length === 0) {
|
|
68
|
-
const raw = typeof message.$raw === 'string' ? message.$raw : JSON.stringify(message.$raw || '');
|
|
69
|
-
const xmlMatches = raw.match(/<image[^>]+url="([^"]+)"/g);
|
|
70
|
-
if (xmlMatches) {
|
|
71
|
-
for (const m of xmlMatches) {
|
|
72
|
-
const urlMatch = m.match(/url="([^"]+)"/);
|
|
73
|
-
if (urlMatch)
|
|
74
|
-
parts.push({ type: 'image_url', image_url: { url: urlMatch[1] } });
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
const cqMatches = raw.match(/\[CQ:image[^\]]*url=([^\],]+)/g);
|
|
78
|
-
if (cqMatches) {
|
|
79
|
-
for (const m of cqMatches) {
|
|
80
|
-
const urlMatch = m.match(/url=([^\],]+)/);
|
|
81
|
-
if (urlMatch)
|
|
82
|
-
parts.push({ type: 'image_url', image_url: { url: urlMatch[1] } });
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
return parts;
|
|
87
|
-
}
|
|
88
|
-
/** 从已拉取的引用消息 payload 提取多模态部分(如被引消息里的图片) */
|
|
89
|
-
export function extractMediaPartsFromQuotedPayload(payload, adapter = 'process') {
|
|
90
|
-
if (!payload.content || !Array.isArray(payload.content) || !payload.content.length) {
|
|
91
|
-
return [];
|
|
92
|
-
}
|
|
93
|
-
const stub = MessageNs.from({}, {
|
|
94
|
-
$id: payload.messageId,
|
|
95
|
-
$adapter: adapter,
|
|
96
|
-
$endpoint: '',
|
|
97
|
-
$content: payload.content,
|
|
98
|
-
$sender: { id: payload.sender?.id ?? '' },
|
|
99
|
-
$reply: async () => payload.messageId,
|
|
100
|
-
$recall: async () => { },
|
|
101
|
-
$channel: { id: '', type: 'private' },
|
|
102
|
-
$timestamp: payload.time ?? 0,
|
|
103
|
-
$raw: payload.raw ?? '',
|
|
104
|
-
});
|
|
105
|
-
return extractMediaParts(stub);
|
|
106
|
-
}
|
|
107
|
-
//# sourceMappingURL=message-media.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"message-media.js","sourceRoot":"","sources":["../../src/init/message-media.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Register AI trigger handler via the core MessageDispatcher inbound pipeline.
|
|
3
|
-
*/
|
|
4
|
-
import './types.js';
|
|
5
|
-
import type { AIServiceRefs } from './shared-refs.js';
|
|
6
|
-
export declare function registerAITrigger(refs: AIServiceRefs): void;
|
|
7
|
-
//# sourceMappingURL=register-ai-trigger.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"register-ai-trigger.d.ts","sourceRoot":"","sources":["../../src/init/register-ai-trigger.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,YAAY,CAAC;AASpB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAMtD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI,CA4E3D"}
|
|
@@ -1,72 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Register AI trigger handler via the core MessageDispatcher inbound pipeline.
|
|
3
|
-
*/
|
|
4
|
-
import './types.js';
|
|
5
|
-
import { getPlugin, isAtEndpoint, mergeAITriggerConfig, shouldTriggerAI, segment, } from '@zhin.js/core';
|
|
6
|
-
import { formatCompactLog, truncatePreview } from '@zhin.js/logger';
|
|
7
|
-
import { createInboundTurnPipeline } from '../collaboration/inbound-turn-pipeline.js';
|
|
8
|
-
import { resolveEndpointAtIds } from '../collaboration/inbound-turn-endpoint.js';
|
|
9
|
-
import { isAskUserPendingReply, ensureAskUserSessionService } from '../builtin/ask-user-session.js';
|
|
10
|
-
export function registerAITrigger(refs) {
|
|
11
|
-
const plugin = getPlugin();
|
|
12
|
-
const { useContext, root, logger } = plugin;
|
|
13
|
-
useContext('ai', (ai) => {
|
|
14
|
-
const rawConfig = ai.getTriggerConfig();
|
|
15
|
-
const triggerConfig = mergeAITriggerConfig(rawConfig);
|
|
16
|
-
if (!triggerConfig.enabled) {
|
|
17
|
-
logger.info(formatCompactLog('AI Handler', { disabled: true }));
|
|
18
|
-
return;
|
|
19
|
-
}
|
|
20
|
-
const dispatcherSvc = root.inject('dispatcher');
|
|
21
|
-
const pipelineHandle = async (message, content) => {
|
|
22
|
-
const replyOutbound = async (payload, options) => {
|
|
23
|
-
const quote = options?.quote ?? true;
|
|
24
|
-
if (dispatcherSvc && typeof dispatcherSvc.replyWithPolish === 'function') {
|
|
25
|
-
return dispatcherSvc.replyWithPolish(message, 'ai', payload, { quote });
|
|
26
|
-
}
|
|
27
|
-
if (!message.$reply) {
|
|
28
|
-
throw new Error(`Cannot reply: endpoint ${message.$endpoint} has no outbound capability`);
|
|
29
|
-
}
|
|
30
|
-
return quote ? message.$reply(payload, true) : message.$reply(payload);
|
|
31
|
-
};
|
|
32
|
-
return createInboundTurnPipeline({
|
|
33
|
-
root,
|
|
34
|
-
ai,
|
|
35
|
-
refs,
|
|
36
|
-
triggerConfig,
|
|
37
|
-
peerMode: triggerConfig.peerMode,
|
|
38
|
-
logger,
|
|
39
|
-
replyOutbound,
|
|
40
|
-
})(message, content);
|
|
41
|
-
};
|
|
42
|
-
const dispatcher = root.inject('dispatcher');
|
|
43
|
-
if (!dispatcher || typeof dispatcher.setAIHandler !== 'function') {
|
|
44
|
-
logger.warn(formatCompactLog('AI Handler', { error: 'no_dispatcher' }));
|
|
45
|
-
return;
|
|
46
|
-
}
|
|
47
|
-
dispatcher.setAITriggerMatcher((message) => {
|
|
48
|
-
ensureAskUserSessionService(root);
|
|
49
|
-
if (isAskUserPendingReply(message, root)) {
|
|
50
|
-
logger.debug(formatCompactLog('AI Trigger', {
|
|
51
|
-
skip: 'ask_user_pending_reply',
|
|
52
|
-
endpoint: message.$endpoint,
|
|
53
|
-
}));
|
|
54
|
-
return { triggered: false, content: '' };
|
|
55
|
-
}
|
|
56
|
-
const endpointAtIds = resolveEndpointAtIds(message, root);
|
|
57
|
-
const result = shouldTriggerAI(message, triggerConfig, { endpointAtIds });
|
|
58
|
-
logger.debug(formatCompactLog('AI Trigger', {
|
|
59
|
-
adapter: message.$adapter,
|
|
60
|
-
endpoint: message.$endpoint,
|
|
61
|
-
at: isAtEndpoint(message, endpointAtIds),
|
|
62
|
-
triggered: result.triggered,
|
|
63
|
-
preview: truncatePreview(segment.raw(message.$content)),
|
|
64
|
-
}));
|
|
65
|
-
return result;
|
|
66
|
-
});
|
|
67
|
-
dispatcher.setAIHandler(pipelineHandle);
|
|
68
|
-
logger.debug(formatCompactLog('AI Handler', { hook: 'on', pipeline: 'aop' }));
|
|
69
|
-
return () => { logger.debug(formatCompactLog('AI Handler', { hook: 'off' })); };
|
|
70
|
-
});
|
|
71
|
-
}
|
|
72
|
-
//# sourceMappingURL=register-ai-trigger.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"register-ai-trigger.js","sourceRoot":"","sources":["../../src/init/register-ai-trigger.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* ContentPart[] → agentLoop UserMessage(ADR 0009 D2:image blocks)
|
|
3
|
-
*/
|
|
4
|
-
import { type ContentPart, type UserMessage } from '@zhin.js/ai';
|
|
5
|
-
/** 从 ContentPart 拼会话可见文本(含 [图片] 等占位) */
|
|
6
|
-
export declare function summarizeMultimodalParts(parts: ContentPart[], supportsVision: boolean): string;
|
|
7
|
-
/** 构建带 image blocks 的 UserMessage(vision 模型走 agentLoop) */
|
|
8
|
-
export declare function buildVisionUserMessage(sessionUserContent: string, parts: ContentPart[], supportsVision: boolean, maxFileBytes: number): Promise<UserMessage>;
|
|
9
|
-
//# sourceMappingURL=multimodal-message.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"multimodal-message.d.ts","sourceRoot":"","sources":["../../src/turn/multimodal-message.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,KAAK,WAAW,EAAqB,KAAK,WAAW,EAAqB,MAAM,aAAa,CAAC;AAwBvG,wCAAwC;AACxC,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,WAAW,EAAE,EACpB,cAAc,EAAE,OAAO,GACtB,MAAM,CAsBR;AAED,2DAA2D;AAC3D,wBAAsB,sBAAsB,CAC1C,kBAAkB,EAAE,MAAM,EAC1B,KAAK,EAAE,WAAW,EAAE,EACpB,cAAc,EAAE,OAAO,EACvB,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,WAAW,CAAC,CAyBtB"}
|