跳转至

会话控制

会话控制 RPC 家族:会话列出与过滤、消息发送与流式传输、运行生命周期以及会话维护。

会话行包含 snapshotAt,即 Gateway 自 Unix 纪元起以毫秒计数的采样时间。缓存行保留其原始采样时间。客户端用它来对读取快照排序,包括那些不会推进持久化 updatedAt 的仅运行时变更;请求顺序打破相同时间戳的平局。没有采样元数据的读取观察保留请求顺序协调。此读取时间戳不替代事件排序或会话身份检查。

一旦会话存储被准入,针对直接会话目标的授权只准备所请求的行。脏目标必须先通过规范验证,然后才能授权;无关行继续在后台验证。方法作用域、profile 绑定和启动可用性在准备后再次检查。sessions.list 首先授权调用者的作用域,并将行有效性和可见性过滤留给会话读取器。

会话控制

  • sessions.catalog.list 列出外部会话目录。当客户端需要目录 ID、标签、能力和共享路由元数据而无需枚举主机或会话时,传入 metadataOnly: true。此模式返回正常的目录对象,hosts: [];它保留 agent 和目录选择,跳过行过滤/分页,并且不发出主机进度事件。省略该标志以进行完整列出,包括终端选择所需的主机可用性。Control UI 在新建会话选择器和 Settings 中的隐藏来源标签中使用仅元数据发现。
  • sessions.list 返回当前会话索引;当配置了 agent 运行时后端时,每个行还包含 agentRuntime 元数据。hasActiveRun 是权威的聚合直接会话活动事实。投影时,activeRunIds 是完整且精确的活动集合;空数组证明会话空闲。如果聚合活动为真但该字段被省略,则说明另一个运行时所有者处于活动状态,但其精确身份不可用。快照省略表示身份不可用。在增量事件中,省略表示没有变化,null 是仅事件的墓碑,将缓存的精确 ID 清除为不可用,而数组则替换缓存。客户端只关联它们在本地拥有或从请求、历史或事件中收到的精确 ID,绝不会选择列表第一个条目作为所有者。当启用云工作节点放置或存在持久恢复状态时,会话行还包含一个封闭的 placement 状态(local、requested、provisioning、syncing、starting、active、draining、reconciling、reclaimed 或 failed),以及特定于状态的环境、所有者纪元、工作空间、bundle、ACK 游标或恢复字段。工作节点和终端放置可能包含 providerId、profileId 和一个可选的封闭 machine 对象:class(1–128 个字符)、os 和 osLabel(各 1–64 个字符),以及整数 cpu 和 memoryGb(各 1–65,536)。每个 machine 字段都是可选的;未知字段和空的 machine 摘要会被省略。Class 和 OS 使用所选覆盖值或提供商目录默认值,标签和容量来自该目录。在目录可用之前,只会显示已知的 class 和 OS 覆盖值。本地和已请求放置绝不携带 machine 身份。活动放置可能包含一个建议性的 diskSpace 采样,包含 status(ok、warning 或 critical)、availableBytes、totalBytes 和 observedAtMs。当 Gateway 正在传输或节点正在安装新运行时,provisioning 和 active 放置可能包含 workerRuntimeInstall:phase(transferring 或 installing)、transferredBytes、totalBytes、startedAtMs 和 updatedAtMs。当安装稳定后,此进程本地进度会清除;进度变更会发出 sessions.changed。活动的配对设备放置还包含 runner: { kind: "device", status: "available" | "offline", deviceId? };deviceId 指定承载该放置的配对设备(autoDevice 分派时选定的主机),非设备放置省略该字段。此可用性是进程当前的,来源于精确的活动环境绑定和重连范围的节点运行器证明,并在 Gateway 重启后以离线状态开始,直到该运行器重新连接。清单变更会发出 sessions.changed,以便客户端刷新规范行。行携带所有权投影——只写一次的 createdActor、可变的 owner(actor 加上 assignedBy/assignedAt)、有界的 participants 列表(不包括 owner,最多 4 个 actor)以及完整的 participantCount;actor 显示标签和头像在读取时根据当前 profiles 和 agent 身份解析。传入 creatorId 可按不可变的 createdActor.id 过滤;传入 ownerId 可按当前可分配所有者过滤,未分配所有者时回退到 createdActor。完整的 owners 面与分页无关,且不受任一查询过滤,因此客户端可以渲染完整的所有者选择器。已认证调用者可以传入 involvingMe: true,只保留调用者拥有或发起过的会话,依据完整参与者历史进行评估(仅限有 profile 支持的人类参与者)。
  • sessions.list 接受 includeOwnerSessionCounts: true,为有效的人类 profile 所有者返回完整的 ownerSessionCounts 数组,元素为 { profileId, open, running }。计数使用分页前调用者可见的匹配会话,并将合并的 profile 解析为其规范身份。open 对未归档会话计数;running 对具有直接实时 agent 轮次工作的会话计数,排除排队工作、仅后代活动和过期的已存储运行状态。所有列表过滤仍然适用。对于侧边栏范围的摘要,省略 agentId 和时间/搜索/所有者过滤,排除全局/未知哨兵,并使用 excludeSubagents、excludeCron 和 excludeSystem;较小的 limit 不会截断计数。与有界的基于关联的 people 面不同,该数组不受 people 选择器上限限制。只有当响应包含 ownerSessionCounts 时,缺失的 profile 才意味着零;省略字段并不确立计数。客户端在 sessions.changed 上刷新此摘要,包括无键可见性/profile 失效,而不是从分页会话行或人类在场状态中重建。
  • sessions.list 接受 sortBy: "activity" 以按最新活动优先排序,不应用置顶优先级。其时间戳取上次完成运行(lastActivityAt)与上次用户/频道输入(lastInteractionAt)中较晚者。没有任何有效活动时间戳的会话回退到 updatedAt,然后是 createdAt;缺失时间戳排到最后。在此模式下,activeMinutes 使用同一时间戳。过滤和排序发生在分页之前,会话键用于打破时间戳平局。默认的 updatedAt 顺序将置顶会话放在最前,并按元数据更新时长过滤;lastInteractionAt 保留其仅输入的排序。
  • sessions.list 接受 activityPulseSince 和 activityPulseUntil,作为调用者本地午夜和下一个本地午夜的纪元毫秒,以返回 activityPulse,限制在该自然日内:每个经过的小时一个桶(夏令时日期为 23–25 个),使用相同的活动时间戳,统计分页之前完整过滤结果中活跃和新启动的会话数。在 until 或之后的活动被排除;省略结束时间、结束时间不在 since 之后、或结束时间晚于 since 超过 25 小时,则回退为 since 后 24 小时。当前正在运行的会话无论窗口如何,都在整个过滤集合中计数。使用 includePeople 时,脉冲还会统计窗口内不同的关联人员。
  • sessions.subscribe 为当前 WebSocket 客户端启用会话变更事件,并接受与 sessions.list 相同的参数,在同一响应中返回初始列表。空的 {} 参数只返回订阅确认。当该客户端断开连接时,订阅结束。参见 会话列表引导。
  • sessions.messages.subscribe 和 sessions.messages.unsubscribe 切换一个会话的转录/消息事件订阅。传入 includeApprovals: true 还会接收经过脱敏的 session.approval 生命周期事件,这些事件针对持久化受众包含该确切会话、且其审查者绑定授权了订阅客户端。subscribe 响应随后包含一个有界的待处理 approvalReplay;当 truncated 为 false 时它是权威的。同一会话和审查者的并发请求共享重放准备。该会话和审查者之外的批准活动不会使重放失效。如果在准备期间可见的批准状态发生变化,Gateway 会重试一次;再次变化则返回 UNAVAILABLE 并回滚临时订阅,以便客户端重试。该选择加入是按每次 subscribe 调用生效,而非粘性:在不带 includeApprovals: true 的情况下重新订阅同一会话会移除现有的批准订阅。除了常规的会话读取权限外,此选择加入还要求 operator.admin,或在配对设备上要求 operator.approvals。
  • sessions.preview 为特定会话键返回有界的转录预览。冷转录返回 status: "cold" 和空的 items 数组。批量预览请求将已归档载荷保留在冷存储中;打开聊天或请求历史记录会恢复它们。对于此状态,客户端应显示已归档历史占位符。
  • sessions.storage.status 返回按 agent 统计的转录数量、数据库和归档大小,以及后台维护状态(operator.admin)。
  • sessions.storage.run 使用所应用策略启动或加入后台归档批次,并立即返回(operator.admin)。当 maintenance.running 为 true 时,持续关注 sessions.storage.status。即使请求客户端断开连接,批次仍会继续。参见 冷转录存储。
  • sessions.describe 为确切会话键返回一条 gateway 会话行,包括会话列表和聊天历史所报告的当前调用者的 sharingRole。
  • sessions.branches.list 独立于检出可用性列出持久化的转录分支。并发标签和活动更新不会使列表失效;会话身份或读取访问的变化仍会拒绝读取。
  • sessions.github.options、sessions.github.publish、sessions.github.status 和 sessions.github.confirm 在 sessionKey 之外接受可选的 agentId。在所有四个调用中携带所选会话的 agent,尤其是共享键 global,因为它不标识其所有者。必须配置显式 agent,并且它必须与任何 agent 限定的会话键匹配;格式错误、未知或冲突的所有者在发布前返回 INVALID_REQUEST。由工具发起的发布仍绑定到工具调用者的会话和 agent。发布和确认通过 error.details.leaseAcquisition 报告租约获取:held 返回 FORBIDDEN,带有记录的持有者和租约纪元;store-unavailable 返回可重试的 UNAVAILABLE,带有封闭的 reason 代码(sqlite-busy、lifecycle-busy 或 storage-error);调用者取消返回不可重试的 UNAVAILABLE,带有 aborted、调用者信号原因和已用时间。SQLite 拥有有界的写入准入。在报告的存储故障清除后,重试相同的发布幂等键或确认请求;获取失败不会启动发布效果。已被轮次或协调占用的工作空间仍然返回可重试的 UNAVAILABLE。
  • sessions.resolve 通过键、原始会话 ID、标签、Control UI 短 ID 或 reference: { key, slug? } 解析或规范化会话目标。引用会搜索可见的活动和已归档会话:其精确规范键优先,然后可选的显示名称 slug 会与 UUID 支持的会话匹配。引用发现保留会话列表可见性规则;单独的 key 选择器保留精确键读取语义。有歧义的引用和短 ID 最多返回十个候选作为成功的 RPC 结果。设置 allowMissing: true 可在没有会话匹配时收到 { ok: false }。

  • sessions.create 创建新的会话条目。当沙箱隔离生效时,本地 cwd 和项目路径会与所选代理的规范工作区进行核对:工作区内的别名会被接受,解析到工作区之外的符号链接会被拒绝。可选的 model、contextWindow 和 thinkingLevel 值会原子性地持久化初始模型、通告的上下文窗口选择以及推理覆盖;可选的 category 将会话分配到自定义组,并在首次使用时注册该组。worktree: true 会配置一个受管工作树;可选的 worktreeBaseRef/worktreeName 选择基础引用和分支名称,execNode(operator.admin)将会话执行绑定到节点主机。未提供 worktreeName 时,OpenClaw 会从会话标签或生成的首条消息标题派生一个可读名称,再回退到甲壳类主题名称;已被其他所有者、本地分支或非受管路径占用的名称会获得数字后缀。创建的工作树会在结果中回显,并持久化在会话行上(worktree: { id, branch, repoRoot })。当条目已创建但其嵌套的初始 chat.send 被拒绝时,成功结果包含 runStarted: false 和 runError;客户端可以保留 prompt,并针对返回的会话键重试。传递 parentSessionKey 且 emitCommandHooks: true 的调用方还应声明独立子会话的生命周期处置:succeedsParent: true 以 session_end 结束父会话,而 false 则保持父会话活跃,仅发出子会话的 session_start。省略 succeedsParent 可为现有客户端保留旧的父会话滚动行为。该处置要求同时具备父会话链接和命令钩子;fork 不能继承其父会话。主会话的原位重置行为不变,因为不会创建独立的子会话。新行会通过可信创建缝打上一次性写入的创建溯源标记(createdVia、createdActor、createdAt);采用现有键绝不会重新打标。对于人类档案参与者,createdActor.label 在行投影时从当前用户档案解析,并且从不存储在会话条目上,因此档案重命名不会产生漂移。会话行还携带 parentSessionKey(导航父会话,已持久化)、controlOwnerSessionKey(会话活跃时的运行时控制器)、forkSource(fork 的精确源键 + 转录代次)和 previousSessionId(同一键下的先前转录代次)。

  • sessions.dispatch 将具有活跃的、注册表所有的会话受管工作树的已授权本地 OpenClaw 或 Codex 会话移动到配对设备或已配置的云档案。传递 { key, deviceId, agentId? } 用于显式设备,{ key, autoDevice: true, agentId? } 用于自动配对设备选择,{ key, profileId, machineClass?, agentId? } 用于显式档案,或 { key, agentId? } 以在 cloudWorkers.projectProfiles 中查找受管工作树的规范化来源。这些目标模式互斥,显式目标优先于项目档案查找。自动选择首先按相对于 worker 容量的已受理工作对 worker 槽位运行时进行排名,然后按考虑待处理调度后的空闲槽位,最后按设备 ID;没有 worker 槽位的运行时使用设备 ID 顺序。仅在工作区准备开始之前检测到的主机资格失败会在失败分配被清理后被重试,总计最多三个排名候选。其他错误会立即返回;已经开始的工作区准备和已经启动的工作绝不会重放。显式和自动设备调度要求 operator.write;显式档案和项目档案调度要求 operator.admin。来源缺失、映射不匹配或映射到未配置档案会返回类型化的 INVALID_REQUEST,不会进行资源调配,也不会回退到其他目标。格式错误的参数在模式验证之前使用写入作用域。缺失云档案仅隐藏云目标;符合条件的配对设备调度仍然可用。调度在排空活动工作之前关闭本地轮次准入,并且仅在放置达到 active 后才返回;worker-turn 采用 worker 子所有权,remote-exec 采用 Gateway 所有的 harness 执行。任意普通目录不可调度;准入后,如果受管工作树的 Git 元数据稍后不可用,工作区传输可能会使用清单镜像。SSH 回退候选仅针对幂等探测、内容寻址传输、收据/锁保护的工件安装、收敛式受管工作树镜像和隧道重连进行轮换。不明确且无保护的有状态命令会以 fail-closed 方式失败,且不会被重放。调度是单向的;从 worker 到本地的回拉不属于此 RPC 的一部分。

  • sessions.reclaim(operator.write)按键安全停止会话放置。它会等待进行中的调度,排空已受理的工作,协调活动工作区更改,并通过放置所有者重试待处理的失败环境清理。调用方永远不需要原始的环境销毁权限。

  • sessions.move 将已授权的活动会话移动到 Gateway、配对设备或已配置的档案。Gateway 和设备目标要求 operator.write;档案目标要求 operator.admin;格式错误的目标在模式验证之前使用写入作用域。调用方提供精确观察到的代次、环境和所有者纪元;在移动提交之前,会话授权和这些源事实会被重新验证。普通移动总是协调源。只有 Gateway 目标可以添加 abandonSource: true,且仅当精确源是当前离线的配对设备放置时。该持久决策会强制围栏并销毁远程所有者,跳过远程工作区协调,并从最后一个 Gateway 同步状态继续,不进行重放;未同步的文件和进行中的工作可能会丢失。可用、未知、档案和其他 worker 源会拒绝显式放弃。

  • sessions.groups.list、sessions.groups.put、sessions.groups.rename 和 sessions.groups.delete 管理 Gateway 所有的自定义会话组编目(名称 + 显示顺序)。只读作用域下的列表结果有意不包含路径。sessions.groups.defaults 和 sessions.groups.update 要求 operator.write,并可读取或替换一个自定义组的可选工作目录和工作树默认值。非管理员调用方只能保存已配置代理工作区内的目录;其他绝对 Gateway 路径要求 operator.admin。成员关系保留在每个会话的 category 字段上;重命名和删除会在服务端更新成员会话。sessions.groups.put 仅替换名称列表和顺序,并拒绝移除仍具有成员会话的组——请先显式删除该组。移除组与删除操作适用相同的成员会话授权。

  • sessions.send 向现有会话发送消息。

  • sessions.steer 是 chat.send 的已弃用别名,带有 queueMode: "interrupt";移除遵循协议弃用策略。

  • sessions.abort 中止会话的活动工作。传递 key 加上可选的 runId,或单独传递 runId(用于 Gateway 可解析到会话的活动运行)。提供 runId 可将取消范围限定到该运行。在仅含键的非全局请求上设置 clearQueued: true,以同时丢弃该会话拥有的 followup 和 lane 队列。省略 clearQueued 的现有调用方会保留这些队列。字面量 global 键保留现有的代理限定 chat.abort 所有权规则,不执行非全局的 followup 或 lane 清理。

  • sessions.patch 更新会话元数据/覆盖,并报告解析后的规范模型以及有效的 agentRuntime。contextWindow 仅接受所选模型 contextWindows 数组通告的 id;null 恢复 contextWindowDefault。会话组织字段以及每会话的 model、thinkingLevel 和 fastMode 覆盖要求 operator.write,包括使用 null 清除覆盖。同一字段策略适用于 sessions.patchMany。上下文窗口、verbose、trace、推理可见性、工具和其他特权覆盖仍然要求 operator.admin;将它们与写入作用域字段组合不会降低该要求。只有管理员模型选择才能持久化为已配置的代理默认值。归档和恢复补丁要求调用方使用从 sessions.list 或 sessions.describe 观察到的 sessionId 作为 expectedSessionId;缺失或已更改的目标会失败,不会实体化或变更替代项。使用 archived: true 时,Gateway 保护代理的主会话(包括配置了全局作用域时的 global)和 unknown 哨兵;对于每个其他真实会话,它首先围栏新的准入,取消该精确会话的活动、待处理、排队、回复、嵌入和 worker 工作,并在提交 archivedAt 之前等待准入排空和运行时终结持久化排空完成。取消、排空或持久化失败会返回可重试的 UNAVAILABLE,并使会话保持未归档状态。sessions.patchMany 为每个目标携带 expectedSessionId,在同一批次生命周期围栏内按输入顺序准备归档目标,并返回有序的每个目标结果。派生谱系(spawnedBy、spawnedWorkspaceDir、spawnedCwd、spawnDepth、subagentRole、subagentControlScope)不再可公开修补;这些事实由可信创建路径一次性写入,仍然发送这些事实的请求会被拒绝。

  • sessions.assignOwner(operator.write)将会话的可变所有者重新分配给人或已配置的代理({ key, owner: { type, id } })。它要求调用方已被识别(已认证的档案或可信代理身份),按会话可见性授权,并在行的 owner 字段上记录 assignedBy/assignedAt。一次性写入的 createdActor 和以创建者锚定的共享权限不变;请参阅 多用户模式。

  • sessions.reset、sessions.delete 和 sessions.compact 执行会话维护。sessions.reset 接受来自 sessions.list 或 sessions.describe 的可选 expectedSessionId。当重置进入其生命周期围栏时,如果该会话 ID 不再是当前的,Gateway 会在中断工作之前以 INVALID_REQUEST 和 error.details.reason: "session-changed" 拒绝请求;在决定是否重试之前,请重新读取会话。省略该字段保留无条件重置行为。该守卫不会拒绝保持同一会话 ID 的更改,包括元数据编辑或另一次原位重置。

  • sessions.get 返回完整的已存储会话行。

  • 聊天执行仍然使用 chat.history、chat.send、chat.abort 和 chat.inject。其 sessionInfo 使用与 sessions.list 相同的聚合 hasActiveRun 和可选的完整精确 activeRunIds 语义。chat.history 针对 UI 客户端进行了显示规范化:从可见文本中剥离内联指令标签,剥离纯文本工具调用 XML 负载(<tool_call>...</tool_call>、<function_call>...</function_call>、<tool_calls>...</tool_calls>、<function_calls>...</function_calls> 以及截断的工具调用块)和泄漏的 ASCII/全宽模型控制 token,省略纯静默 token 的助手行(精确的 NO_REPLY / no_reply),超大行可以用占位符替换。 尾部响应可以包含不透明的 deltaCursor。将其作为 cursor 传回 chat.history 或 chat.startup,而不是 offset 或 messageId。成功的追赶返回 { kind: "delta", messages, deltaCursor, sessionInfo };将每个 messages 条目通过与实时 session.message 负载相同的 reducer 进行重放。{ kind: "reset" } 表示光标无效、过期、属于另一个会话、跨越了重置、压缩或分支选择,或者落后太多;获取正常的尾部页面。追赶永远不会返回部分页面或延续:超过 200 个原始事件或 1 MB 负载预算会重置为尾部获取。

带有 sessionId 和 messageId 的锚定读取需要当前共享访问权限。删除会移除逻辑会话条目,但保留其转录。直接历史读取需要 operator.admin。cron.history 会单独验证对其记录的自动化运行和转录的访问权限。访问权限会在加载历史之前检查,并在发布之前再次检查。 - chat.message.get 是用于单个可见转录条目的附加有界完整消息读取器。传入 sessionKey、当会话选择为代理作用域时可选的 agentId,以及之前通过 chat.history 暴露的转录 messageId;当存储条目仍然可用且未超大时,网关会返回相同的显示规范化投影,而不应用轻量历史截断上限。 - chat.toolTitles 已弃用。它会验证现有的有界请求形状,并返回 { titles: {}, disabled: true },以便旧客户端停止请求标题。它不会进行模型调用,也不会访问旧标题缓存。当前 Control UI 客户端会自动显示随工具调用提供的描述。 - chat.send 接受单轮 fastMode: "auto",以便对自动截止前启动的模型调用使用快速模式,然后以非快速模式启动后续的重试、回退、工具结果或续接调用。该截止默认值为 60 秒(DEFAULT_FAST_MODE_AUTO_ON_SECONDS),并可通过 agents.defaults.models["<provider>/<model>"].params.fastAutoOnSeconds 按模型配置。chat.send 调用方可以传入单轮 fastAutoOnSeconds 来覆盖该请求的截止值。传入 queueMode(steer、followup、collect 或 interrupt)可仅针对本次请求覆盖已存储的队列模式;显式 Control UI steer 操作使用 queueMode: "steer"。Interrupt 模式会捕获并中止会话当前已准入的回合,等待该确切所有者结束,然后启动新回合;空闲会话会正常启动。steer 发送针对所选会话的当前状态:Gateway 会原子地将消息注入该会话的直接活动运行,或在会话空闲时启动新回合。后代子代理会话中的活动在此决策中永远不会使所选会话处于忙碌状态。expectedLeafEntryId 是用于非 steer 交互式发送的独立转录分支比较并交换:传入当前显示的分支叶节点(或对于权威的空转录刻意传入 null),如果另一个客户端先切换了转录分支,则发送会以 details.reason: "active-leaf-changed" 被拒绝;steer 发送会忽略它。

  • chat.send、sessions.send 以及初始回合 sessions.create 的确认会将准入与转录持久化分开报告。可选的 messageSeq 是来自实际已提交用户回合回执的从 1 开始的位置;当输入仅存在于待处理托管中时,它不存在。仅凭 status: "started" 和 runStarted: true 并不能建立转录行。应根据提交身份将临时输入与已接受的托管或规范转录身份进行对账,绝不能依据预测位置或匹配内容。

  • sessions.create.fastMode 接受 true、false 或 "auto",并在初始回合开始前持久化该速度覆盖。

  • sessions.create.label 会在物理会话存储中声明一个显式标签,包括已归档会话。标签会被修剪且区分大小写。使用不同键的并发创建不能声明同一标签:失败的请求会收到带有 label already in use: <label> 的 INVALID_REQUEST,并必须选择另一个标签。被拒绝的分叉不会保留复制的历史。配置为共享同一存储的代理共享其标签命名空间;不同存储则不共享。
  • sessions.title.prepare({ agentId, message, model?, catalogId?, incognito? },operator.write,作为控制平面写入进行速率限制)仅从所选代理的实用模型返回 { title },不会创建或重命名会话;对于隐身、空、斜杠命令或不可用实用模型输入,它返回 title: null,并且绝不回退到主模型。客户端将已准备好的结果作为 sessions.create.displayName 传入:这是一个展示标题,存储方式类似于生成的首条消息标题,因此不唯一,从不声明 label,并在采用现有键时被忽略。
  • sessions.activitySummary.ensure({ sessions: [{ key, agentId? }] },1–20 个条目,operator.write)为调用方可能修改的会话请求有界的后台回顾生成。整个批次在任何生成入队之前都会获得授权。它会立即返回 { sessions: [{ key, agentId, activitySummary }] },其中 activitySummary.state 设置为 current、stale、updating 或 unavailable,并带有可选的缓存 text 和 updatedAt。生成使用所属代理的实用路由,并在失败时保留之前的回顾。sessions.changed 会在工作完成时使该行失效。sessions.list 仅在 includeActivitySummary: true 时包含这些只读投影,并添加调用方特定的 activitySummary.canEnsure。客户端在请求生成前需要该标志和 operator.write;已接受的 ensure 响应返回 canEnsure: true。此权限标志不会持久化到回顾缓存中。普通列表不会请求模型生成。有关持久化和生命周期语义,请参阅活动会话回顾。
  • sessions.create.titleSource 在首轮将单独发送时(例如云端分发之后),可选地提供所提交主题最多 1,000 个字符。对于没有初始回合的新交互式会话,它会启动普通的后台标题生成,而不会延迟创建或启动任务。现有名称保持优先;隐身会话和采用现有会话会忽略此输入。完成时会发出原因为 chat.title 的 sessions.changed。

本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 cl/openclaw