Session Tools
Session Tools
适用范围
在以下情况使用此页面:
- 添加或修改会话工具
目标:小型、难以误用的工具集,以便代理可以列出会话、获取历史记录并发送到另一个会话。
工具名称
sessions_listsessions_historysessions_sendsessions_spawn
键模型
- 主直接聊天存储始终是字面键
"main"(解析为当前代理的主键)。 - 群聊使用
agent:<agentId>:<channel>:group:<id>或agent:<agentId>:<channel>:channel:<id>(传递完整键)。 - Cron 作业使用
cron:<job.id>。 - Hooks 使用
hook:<uuid>,除非明确设置。 - 节点会话使用
node-<nodeId>,除非明确设置。
global 和 unknown 是保留值,永远不会被列出。如果 session.scope = "global",我们会为所有工具将其别名为 main,以便调用者永远看不到 global。
sessions_list
将会话列为行数组。
参数:
kinds?: string[]过滤器:任何"main" | "group" | "cron" | "hook" | "node" | "other"limit?: number最大行数(默认:服务器默认值,钳位例如 200)activeMinutes?: number仅在 N 分钟内更新的会话messageLimit?: number0 = 无消息(默认 0);>0 = 包括最后 N 条消息
行为:
messageLimit > 0为每个会话获取chat.history并包括最后 N 条消息。- 工具结果在列表输出中被过滤;使用
sessions_history获取工具消息。 - 在沙盒化代理会话中运行时,会话工具默认为仅生成可见性(见下文)。
行形状(JSON):
key:会话键(字符串)kind:main | group | cron | hook | node | otherchannel:whatsapp | telegram | discord | signal | imessage | webchat | internal | unknowndisplayName(如果可用则为群组显示标签)updatedAt(ms)sessionIdmodel、contextTokens、totalTokensthinkingLevel、verboseLevel、systemSent、abortedLastRunsendPolicy(如果设置了会话覆盖)lastChannel、lastTodeliveryContext(可用时的规范{ channel, to, accountId })transcriptPath(从存储目录 + sessionId 派生的尽力而为路径)messages?(仅当messageLimit > 0时)
sessions_history
获取一个会话的记录。
参数:
sessionKey(必需;接受来自sessions_list的会话键或sessionId)limit?: number最大消息数(服务器钳位)includeTools?: boolean(默认 false)
行为:
includeTools=false过滤role: "toolResult"消息。- 以原始记录格式返回消息数组。
- 给定
sessionId时,Moltbot 将其解析为相应的会话键(缺少 ID 时错误)。
sessions_send
向另一个会话发送消息。
参数:
sessionKey(必需;接受来自sessions_list的会话键或sessionId)message(必需)timeoutSeconds?: number(默认 >0;0 = 即发即弃)
行为:
timeoutSeconds = 0:排队并返回{ runId, status: "accepted" }。timeoutSeconds > 0:等待最多 N 秒完成,然后返回{ runId, status: "ok", reply }。- 如果等待超时:
{ runId, status: "timeout", error }。运行继续;稍后调用sessions_history。 - 如果运行失败:
{ runId, status: "error", error }。 - 通知传递运行在主运行完成后进行,并且是尽力而为的;
status: "ok"不保证通知已传递。 - 通过网关
agent.wait(服务器端)等待,因此重新连接不会中断等待。 - 为主运行注入代理到代理消息上下文。
- 主运行完成后,Moltbot 运行回复循环:
- 第 2 轮+在请求者和目标代理之间交替。
- 确切回复
REPLY_SKIP以停止乒乓。 - 最大轮次为
session.agentToAgent.maxPingPongTurns(0–5,默认 5)。
- 循环结束后,Moltbot 运行代理到代理通知步骤(仅目标代理):
- 确切回复
ANNOUNCE_SKIP以保持静默。 - 任何其他回复都发送到目标通道。
- 通知步骤包括原始请求 + 第 1 轮回复 + 最新乒乓回复。
- 确切回复
通道字段
- 对于群组,
channel是会话条目上记录的通道。 - 对于直接聊天,
channel从lastChannel映射。 - 对于 cron/hook/node,
channel是internal。 - 如果缺少,
channel是unknown。
安全 / 发送策略
基于策略的按通道/聊天类型阻止(不是每个会话 ID)。
{
"session": {
"sendPolicy": {
"rules": [
{
"match": { "channel": "discord", "chatType": "group" },
"action": "deny"
}
],
"default": "allow"
}
}
}运行时覆盖(每个会话条目):
sendPolicy: "allow" | "deny"(未设置 = 继承配置)- 可通过
sessions.patch或仅所有者/send on|off|inherit设置(独立消息)。
执行点:
chat.send/agent(网关)- 自动回复传递逻辑
sessions_spawn
在隔离会话中生成子代理运行并将结果通知回请求者聊天通道。
参数:
task(必需)label?(可选;用于日志/UI)agentId?(可选;如果允许则在另一个代理 ID 下生成)model?(可选;覆盖子代理模型;无效值错误)runTimeoutSeconds?(默认 0;设置后,在 N 秒后中止子代理运行)cleanup?(delete|keep,默认keep)
允许列表:
agents.list[].subagents.allowAgents:通过agentId允许的代理 ID 列表(["*"]允许任何)。默认:仅请求者代理。
发现:
- 使用
agents_list来发现允许sessions_spawn的代理 ID。
行为:
- 使用
deliver: false启动新的agent:<agentId>:subagent:<uuid>会话。 - 子代理默认为完整工具集减去会话工具(可通过
tools.subagents.tools配置)。 - 不允许子代理调用
sessions_spawn(无子代理 → 子代理生成)。 - 始终非阻塞:立即返回
{ status: "accepted", runId, childSessionKey }。 - 完成后,Moltbot 运行子代理通知步骤并将结果发布到请求者聊天通道。
- 在通知步骤期间确切回复
ANNOUNCE_SKIP以保持静默。 - 通知回复规范化为
Status/Result/Notes;Status来自运行时结果(不是模型文本)。 - 子代理会话在
agents.defaults.subagents.archiveAfterMinutes后自动存档(默认:60)。 - 通知回复包括统计行(运行时、令牌、sessionKey/sessionId、记录路径和可选成本)。
沙盒会话可见性
沙盒化会话可以使用会话工具,但默认情况下它们只看到通过 sessions_spawn 生成的会话。
配置:
{
agents: {
defaults: {
sandbox: {
// default: "spawned"
sessionToolsVisibility: "spawned" // or "all"
}
}
}
}