Skip to content

Commit 0ddf111

Browse files
author
linyuan.yang
committed
scheduler 触发被过滤问题
1 parent e461bbc commit 0ddf111

6 files changed

Lines changed: 25 additions & 38 deletions

File tree

packages/channel.base/src/SessionService.ts

Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import fs from "fs";
22
import path from "path";
3-
import { ChatToolCall, ToolApproval, MessageDispatcher, type MessageContent, type TokenUsage } from "scorpio.ai";
3+
import { ChatToolCall, ToolApproval, MessageDispatcher, type MessageContent } from "scorpio.ai";
44
import { type AskResponse, type AskToolParams } from "./AskTool";
55

66
export enum SessionStatus {
@@ -81,8 +81,6 @@ export abstract class SessionService extends MessageDispatcher {
8181
private controller: AbortController;
8282
get signal(): AbortSignal { return this.controller.signal; }
8383
settings: SessionSettings = {};
84-
/** 本 session 累计 token 用量 */
85-
usage: TokenUsage = { input_tokens: 0, output_tokens: 0, total_tokens: 0 };
8684
private settingsPath?: string;
8785
private pending: PendingEntry | null = null;
8886

@@ -105,14 +103,6 @@ export abstract class SessionService extends MessageDispatcher {
105103
}
106104
}
107105

108-
// ── Usage ──
109-
110-
recordUsage(usage: TokenUsage): void {
111-
this.usage.input_tokens += usage.input_tokens;
112-
this.usage.output_tokens += usage.output_tokens;
113-
this.usage.total_tokens += usage.total_tokens;
114-
}
115-
116106
// ── Status ──
117107

118108
private _syncStatus(): void {

packages/sbot/src/Core/dispatchToSession.ts renamed to packages/sbot/src/Core/triggerSession.ts

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,26 +6,25 @@ import { channelDataService } from "../Session/ChannelDataService";
66
import { channelManager } from "../Channel/ChannelManager";
77
import { sessionManager } from "../Session/SessionManager";
88

9-
const logger = LoggerService.getLogger("dispatchToSession.ts");
9+
const logger = LoggerService.getLogger("triggerSession.ts");
1010

11-
export interface DispatchToSessionOptions {
11+
export interface TriggerSessionOptions {
1212
targetId: number | string | null;
1313
message: string;
1414
aiProcess: boolean;
15-
silent?: boolean;
1615
toolWhitelist?: string[] | ((channel: ChannelConfig) => string[] | undefined);
1716
awaitCompletion?: boolean;
1817
tag: string;
1918
}
2019

21-
export interface DispatchResult {
20+
export interface TriggerSessionResult {
2221
ok: boolean;
2322
channelType?: string;
2423
sessionId?: string;
2524
}
2625

27-
export async function dispatchToSession(opts: DispatchToSessionOptions): Promise<DispatchResult> {
28-
const { targetId, message, aiProcess, silent, toolWhitelist, awaitCompletion, tag } = opts;
26+
export async function triggerSession(opts: TriggerSessionOptions): Promise<TriggerSessionResult> {
27+
const { targetId, message, aiProcess, toolWhitelist, awaitCompletion, tag } = opts;
2928

3029
if (targetId == null) {
3130
logger.warn(`${tag} target session id missing`);
@@ -56,7 +55,7 @@ export async function dispatchToSession(opts: DispatchToSessionOptions): Promise
5655
}
5756

5857
const resolvedWhitelist = typeof toolWhitelist === "function" ? toolWhitelist(channelConfig) : toolWhitelist;
59-
const args = { channelType, channelId, dbSessionId, sessionId, silent, toolWhitelist: resolvedWhitelist };
58+
const args = { channelType, channelId, dbSessionId, sessionId, headless: true, toolWhitelist: resolvedWhitelist };
6059
if (awaitCompletion) {
6160
await new Promise<void>((resolve, reject) => {
6261
sessionManager.onReceiveChannelMessage(message, {

packages/sbot/src/Heartbeat/executeHeartbeat.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { database, HeartbeatRow } from "../Core/Database";
22
import { loadPrompt } from "../Core/PromptLoader";
33
import { LoggerService } from "../Core/LoggerService";
4-
import { dispatchToSession } from "../Core/dispatchToSession";
4+
import { triggerSession } from "../Core/triggerSession";
55

66
const logger = LoggerService.getLogger("executeHeartbeat.ts");
77

@@ -36,11 +36,10 @@ export async function executeHeartbeat(ctx: HeartbeatExecutionContext): Promise<
3636

3737
const prompt = loadPrompt(hbConfig.promptFile);
3838

39-
const result = await dispatchToSession({
39+
const result = await triggerSession({
4040
targetId: hbConfig.target,
4141
message: prompt,
4242
aiProcess: true,
43-
silent: true,
4443
toolWhitelist: ch => ch.heartbeatTools,
4544
awaitCompletion: true,
4645
tag,

packages/sbot/src/Processing/createProcessAIHandler.ts

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { ProcessAIHandler } from "channel.base";
2-
import { MessageRole, ToolApproval } from "scorpio.ai";
2+
import { MessageRole, ToolApproval, type TokenUsage, type ChatMessage } from "scorpio.ai";
33
import { channelDataService } from "../Session/ChannelDataService";
44
import { config, AgentMode } from "../Core/Config";
55
import { buildExecuteTool } from "./buildExecuteTool";
@@ -43,7 +43,7 @@ export function createProcessAIHandler(): ProcessAIHandler {
4343
sessionHandler.askTimeoutMs = askTimeout > 0 ? askTimeout * 1000 : 0;
4444
if (askTimeoutMessage) sessionHandler.askTimeoutMessage = askTimeoutMessage;
4545

46-
const silent: boolean = args?.silent ?? false;
46+
const headless: boolean = args?.headless ?? false;
4747
const extraAgentTools = args?.agentTools;
4848
let baseTools = sessionHandler.buildAgentTools(args);
4949
const whitelist: string[] | undefined = args?.toolWhitelist ?? channel.tools;
@@ -53,7 +53,7 @@ export function createProcessAIHandler(): ProcessAIHandler {
5353
}
5454
const agentTools = extraAgentTools?.length ? [...baseTools, ...extraAgentTools] : baseTools;
5555

56-
const executeTool = silent
56+
const executeTool = headless
5757
? async () => ToolApproval.Allow
5858
: buildExecuteTool(sessionHandler.session, agentId, autoApproveAllTools, (tc) => sessionHandler.executeApproval(tc));
5959

@@ -75,24 +75,23 @@ export function createProcessAIHandler(): ProcessAIHandler {
7575
}
7676

7777
const profileId = profile.id;
78-
const onUsage = async (usage: any) => {
79-
if (!silent) sessionHandler.session.recordUsage(usage);
78+
const onUsage = async (usage: TokenUsage) => {
8079
await updateUsageStats(usage, dbSessionId, profileId, usageContext);
8180
};
8281

83-
const onMessage = silent
84-
? async (msg: any) => { args?.onMessage?.(msg); }
82+
const onMessage = headless
83+
? async (msg: ChatMessage) => { args?.onMessage?.(msg); }
8584
: streamVerbose
86-
? (msg: any) => sessionHandler.onChatMessage(msg, args)
87-
: (msg: any) => {
85+
? (msg: ChatMessage) => sessionHandler.onChatMessage(msg, args)
86+
: (msg: ChatMessage) => {
8887
if (msg.role === MessageRole.AI && !msg.tool_calls?.length) {
8988
return sessionHandler.onChatMessage(msg, args);
9089
}
9190
return Promise.resolve();
9291
};
9392

9493
const onStreamMessage = streamVerbose
95-
? (msg: any) => sessionHandler.onStreamMessage(msg, args)
94+
? (msg: ChatMessage) => sessionHandler.onStreamMessage(msg, args)
9695
: undefined;
9796

9897
const callbacks = { onMessage, onStreamMessage, executeTool, onUsage };

packages/sbot/src/Scheduler/SchedulerService.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import { database, SchedulerRow, ChannelSessionRow } from "../Core/Database";
33
import { channelDataService } from "../Session/ChannelDataService";
44
import { LoggerService } from "../Core/LoggerService";
55
import { TimerExecutor } from "../Core/TimerExecutor";
6-
import { dispatchToSession } from "../Core/dispatchToSession";
6+
import { triggerSession } from "../Core/triggerSession";
77

88
const logger = LoggerService.getLogger("SchedulerService.ts");
99

@@ -56,7 +56,7 @@ async function executeScheduler(schedulerId: number): Promise<void> {
5656
logger.error(`Scheduler task ${tag} aborted: profile id=${scheduler.profileId} has no usable session`);
5757
return;
5858
}
59-
const result = await dispatchToSession({
59+
const result = await triggerSession({
6060
targetId: session.id,
6161
message: scheduler.message,
6262
aiProcess: scheduler.aiProcess,

packages/sbot/src/Session/SessionManager.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ export interface ChannelRouteArgs extends ChannelMessageArgs {
1818
channelId: string;
1919
dbSessionId: number;
2020
mentionBot?: boolean;
21-
silent?: boolean;
21+
headless?: boolean;
2222
agentTools?: StructuredToolInterface[];
2323
toolWhitelist?: string[];
2424
onMessage?: (msg: ChatMessage) => void;
@@ -50,7 +50,7 @@ class SbotSession extends SessionService {
5050
}
5151

5252
protected async onProcessStart(query: MessageContent, args: ChannelRouteArgs, messageType: MessageType): Promise<string | void> {
53-
if (!args.silent) {
53+
if (!args.headless) {
5454
await this.getChannel(args).onProcessStart(query, this.argsWithQueue(args), messageType);
5555
}
5656
const channelName = config.getChannel(args.channelId)?.name;
@@ -79,7 +79,7 @@ class SbotSession extends SessionService {
7979
}
8080

8181
protected async onProcessEnd(query: MessageContent, args: ChannelRouteArgs, messageType: MessageType, error?: any): Promise<void> {
82-
if (!args.silent) {
82+
if (!args.headless) {
8383
await this.getChannel(args).onProcessEnd(query, this.argsWithQueue(args), messageType, error);
8484
}
8585
if (args.onComplete) {
@@ -194,8 +194,8 @@ export class SbotSessionManager extends SessionManager {
194194

195195
const threadId = await this.resolveThreadId(args.dbSessionId);
196196

197-
// 静默模式和命令消息跳过意图过滤和消息合并,直接透传
198-
if (args.silent || (typeof query === 'string' && query.trimStart().startsWith('/'))) {
197+
// headless(程序化触发)和命令消息跳过意图过滤和消息合并,直接透传
198+
if (args.headless || (typeof query === 'string' && query.trimStart().startsWith('/'))) {
199199
const session = this.getOrCreate(threadId);
200200
await session.onReceiveMessage(query, args);
201201
return;

0 commit comments

Comments
 (0)