import type { HostContext } from './types.js'; /** 被本开关整体遮挡的工具名(工具注入与提示词注入的共同开关)。 */ export declare const SEARCH_TOGGLE_TOOL_NAMES: readonly string[]; /** 路由路径(由 /dsh-zh/api 分发器统一持有前缀)。 */ export declare const SEARCH_TOGGLE_ROUTE = "/dsh-zh/api/search-toggle"; /** * 该会话的智能搜索是否开启。会话 id 缺席(首页输入框、尚无 Session)时 * 按默认值 true 处理:默认选中是这个功能的行为契约。 */ export declare function isSessionSearchEnabled(sessionId: string | undefined): boolean; /** * 从 Agent 对象读会话 id。DSH 里 `createScope(loopCtx, agent)` 把 Agent 本身 * 当作作用域键,而 Agent 的 `id` 就是 SessionId,因此优先取 id; * `session` 两条路径是子会话/旧形态的兜底读法。 */ export declare function agentSessionId(agentLike: unknown): string | undefined; export interface SessionSearchToggleHooks { /** 任一会话的开关变化后回调(让 web_search 工具壳重新评估是否装壳)。 */ onChange?(): void; } export interface SessionSearchToggleHandle { /** 该 Agent 所在会话是否启用智能搜索(工具壳装壳判定)。 */ isAgentEnabled(agentLike: unknown): boolean; /** 读某个会话的当前值。 */ isEnabled(sessionId: string | undefined): boolean; /** 写某个会话的值并立即收敛该会话已存活 Agent 的遮蔽面。 */ setEnabled(sessionId: string, enabled: boolean): void; /** * 功能总开关(设置页「智能搜索按钮」)。关闭时本插件的会话遮蔽逻辑**整体 * 回到无状态**:撤掉所有已生效的 restrict、清空会话表,此后 agent/created * 也按「默认开启」处理(即完全不干预)。重新开启时按浏览器同步过来的值重建。 * * 为什么主机也需要这个总开关,而不是只靠客户端不渲染按钮: * 用户可能在关掉按钮前已经关过某些会话,那些 `tools.restrict` 遮蔽仍挂在 * 活着的 Agent 上。若只在客户端隐藏按钮,主机仍会继续遮蔽——表现为「按钮没了、 * 但这个会话确实用不了搜索」,且用户没有任何入口恢复。因此关闭总开关时必须 * 主动撤销主机侧的全部遮蔽。 */ setFeatureEnabled(enabled: boolean): void; /** 读功能总开关(关闭时 isAgentEnabled 恒 true、不遮蔽)。 */ isFeatureEnabled(): boolean; } /** * 安装「智能搜索」会话开关:会话状态表 + 每个 Agent 的工具遮蔽 + 收敛句柄。 * @returns 收敛句柄;agents 服务缺席时返回 undefined(没有 Agent 就没有遮蔽面); * 服务晚就绪时随插件重挂自愈。 */ export declare function installSessionSearchToggle(ctx: HostContext, hooks?: SessionSearchToggleHooks): SessionSearchToggleHandle | undefined; interface RouteRequest { method?: string; url?: string; } interface RouteResponse { statusCode: number; writeHead(status: number, headers?: Record): void; end(body?: string | Uint8Array): void; } /** * 处理 /dsh-zh/api/search-toggle。 * - GET ?session= → { ok, value: { enabled, feature } } * - GET (无 session) → { ok, value: { enabled: true, feature } } * - POST { session, enabled } → 写会话开关 * - POST { feature: boolean } → 写功能总开关(设置页「智能搜索按钮」) * @param payload - 已解析的 POST JSON 体;GET 传 null。 * @returns 是否已处理该路径(false 交由同一前缀下的其它路由分派)。 */ export declare function handleSearchToggleRoute(req: RouteRequest, res: RouteResponse, pathname: string, payload: Record | null, url: URL): boolean; export {}; //# sourceMappingURL=session-search-toggle.d.ts.map