@steerable/agent-shell 0.6.15

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.
Files changed (204) hide show
  1. package/LICENSE +91 -0
  2. package/contracts/tool-contract.json +326 -0
  3. package/dist/attachments.d.ts +41 -0
  4. package/dist/attachments.js +147 -0
  5. package/dist/brand.d.ts +24 -0
  6. package/dist/brand.js +92 -0
  7. package/dist/host/http-routes.d.ts +21 -0
  8. package/dist/host/http-routes.js +55 -0
  9. package/dist/host/ipc.d.ts +11 -0
  10. package/dist/host/ipc.js +20 -0
  11. package/dist/host/pack-assembly.d.ts +86 -0
  12. package/dist/host/pack-assembly.js +32 -0
  13. package/dist/host/runtime.d.ts +69 -0
  14. package/dist/host/runtime.js +207 -0
  15. package/dist/host/visible-terminal-exec.d.ts +21 -0
  16. package/dist/host/visible-terminal-exec.js +151 -0
  17. package/dist/hosted-web-search.d.ts +13 -0
  18. package/dist/hosted-web-search.js +82 -0
  19. package/dist/image-attachment.d.ts +39 -0
  20. package/dist/image-attachment.js +133 -0
  21. package/dist/insights/flush.d.ts +10 -0
  22. package/dist/insights/flush.js +139 -0
  23. package/dist/insights/record.d.ts +17 -0
  24. package/dist/insights/record.js +44 -0
  25. package/dist/json-store.d.ts +9 -0
  26. package/dist/json-store.js +22 -0
  27. package/dist/llm/index.d.ts +23 -0
  28. package/dist/llm/index.js +105 -0
  29. package/dist/llm/ollama.d.ts +23 -0
  30. package/dist/llm/ollama.js +242 -0
  31. package/dist/llm/openai-compat.d.ts +20 -0
  32. package/dist/llm/openai-compat.js +199 -0
  33. package/dist/llm/sidecar-provider.d.ts +37 -0
  34. package/dist/llm/sidecar-provider.js +163 -0
  35. package/dist/llm/tool-choice.d.ts +35 -0
  36. package/dist/llm/tool-choice.js +85 -0
  37. package/dist/llm/types.d.ts +122 -0
  38. package/dist/llm/types.js +1 -0
  39. package/dist/local-backend/agent-capability.d.ts +101 -0
  40. package/dist/local-backend/agent-capability.js +174 -0
  41. package/dist/local-backend/ai-title.d.ts +43 -0
  42. package/dist/local-backend/ai-title.js +173 -0
  43. package/dist/local-backend/auto-continue-helper.d.ts +80 -0
  44. package/dist/local-backend/auto-continue-helper.js +83 -0
  45. package/dist/local-backend/branch-helper.d.ts +24 -0
  46. package/dist/local-backend/branch-helper.js +27 -0
  47. package/dist/local-backend/context-compactor.d.ts +81 -0
  48. package/dist/local-backend/context-compactor.js +213 -0
  49. package/dist/local-backend/coreloop-stream.d.ts +245 -0
  50. package/dist/local-backend/coreloop-stream.js +277 -0
  51. package/dist/local-backend/deferred-detector.d.ts +15 -0
  52. package/dist/local-backend/deferred-detector.js +124 -0
  53. package/dist/local-backend/history-helper.d.ts +30 -0
  54. package/dist/local-backend/history-helper.js +34 -0
  55. package/dist/local-backend/interrupted-helper.d.ts +29 -0
  56. package/dist/local-backend/interrupted-helper.js +25 -0
  57. package/dist/local-backend/live-stream.d.ts +36 -0
  58. package/dist/local-backend/live-stream.js +23 -0
  59. package/dist/local-backend/llm-diagnose.d.ts +37 -0
  60. package/dist/local-backend/llm-diagnose.js +284 -0
  61. package/dist/local-backend/message-triggers.d.ts +27 -0
  62. package/dist/local-backend/message-triggers.js +67 -0
  63. package/dist/local-backend/pack-backend-routes.d.ts +31 -0
  64. package/dist/local-backend/pack-backend-routes.js +62 -0
  65. package/dist/local-backend/pack-turn-hooks.d.ts +37 -0
  66. package/dist/local-backend/pack-turn-hooks.js +67 -0
  67. package/dist/local-backend/prompt-builder.d.ts +101 -0
  68. package/dist/local-backend/prompt-builder.js +246 -0
  69. package/dist/local-backend/regenerate-helper.d.ts +62 -0
  70. package/dist/local-backend/regenerate-helper.js +75 -0
  71. package/dist/local-backend/router.d.ts +175 -0
  72. package/dist/local-backend/router.js +3139 -0
  73. package/dist/local-backend/skill-install.d.ts +19 -0
  74. package/dist/local-backend/skill-install.js +71 -0
  75. package/dist/local-backend/skill-loader.d.ts +92 -0
  76. package/dist/local-backend/skill-loader.js +146 -0
  77. package/dist/local-backend/skills/00-identity/SKILL.md +32 -0
  78. package/dist/local-backend/skills/10-goal/SKILL.md +59 -0
  79. package/dist/local-backend/skills/11-loop/SKILL.md +71 -0
  80. package/dist/local-backend/skills/12-create-skill/SKILL.md +88 -0
  81. package/dist/local-backend/skills/70-plan-mode/SKILL.md +58 -0
  82. package/dist/local-backend/skills/80-tool-usage/SKILL.md +70 -0
  83. package/dist/local-backend/skills/81-anti-deferred/SKILL.md +53 -0
  84. package/dist/local-backend/skills/82-data-grounding/SKILL.md +56 -0
  85. package/dist/local-backend/skills/85-local-exec/SKILL.md +86 -0
  86. package/dist/local-backend/skills/86-proactive-coding/SKILL.md +51 -0
  87. package/dist/local-backend/subagent-profiles.d.ts +30 -0
  88. package/dist/local-backend/subagent-profiles.js +74 -0
  89. package/dist/local-backend/task-process.d.ts +12 -0
  90. package/dist/local-backend/task-process.js +176 -0
  91. package/dist/local-backend/task-service.d.ts +135 -0
  92. package/dist/local-backend/task-service.js +565 -0
  93. package/dist/local-backend/turn-duration.d.ts +2 -0
  94. package/dist/local-backend/turn-duration.js +9 -0
  95. package/dist/local-backend/turn-timeline.d.ts +16 -0
  96. package/dist/local-backend/turn-timeline.js +42 -0
  97. package/dist/local-backend/worktree-service.d.ts +84 -0
  98. package/dist/local-backend/worktree-service.js +243 -0
  99. package/dist/local-edit.d.ts +48 -0
  100. package/dist/local-edit.js +44 -0
  101. package/dist/local-executor.d.ts +255 -0
  102. package/dist/local-executor.js +881 -0
  103. package/dist/local-script-registry.d.ts +28 -0
  104. package/dist/local-script-registry.js +63 -0
  105. package/dist/log.d.ts +13 -0
  106. package/dist/log.js +12 -0
  107. package/dist/main.d.ts +1 -0
  108. package/dist/main.js +855 -0
  109. package/dist/mcp-executor.d.ts +45 -0
  110. package/dist/mcp-executor.js +241 -0
  111. package/dist/mcp-server-registry.d.ts +104 -0
  112. package/dist/mcp-server-registry.js +234 -0
  113. package/dist/preload-default.d.ts +1 -0
  114. package/dist/preload-default.js +9 -0
  115. package/dist/preload.cjs +395 -0
  116. package/dist/preload.d.ts +20 -0
  117. package/dist/preload.js +411 -0
  118. package/dist/product-config.d.ts +43 -0
  119. package/dist/product-config.js +26 -0
  120. package/dist/project-registry.d.ts +55 -0
  121. package/dist/project-registry.js +106 -0
  122. package/dist/project-rules.d.ts +15 -0
  123. package/dist/project-rules.js +102 -0
  124. package/dist/runtime.d.ts +62 -0
  125. package/dist/runtime.js +217 -0
  126. package/dist/scenario/pack.d.ts +8 -0
  127. package/dist/scenario/pack.js +1 -0
  128. package/dist/scenario/registry.d.ts +24 -0
  129. package/dist/scenario/registry.js +31 -0
  130. package/dist/server/http-server.d.ts +39 -0
  131. package/dist/server/http-server.js +361 -0
  132. package/dist/server/index.d.ts +1 -0
  133. package/dist/server/index.js +107 -0
  134. package/dist/server/sse-bus.d.ts +14 -0
  135. package/dist/server/sse-bus.js +31 -0
  136. package/dist/shell-adapt.d.ts +21 -0
  137. package/dist/shell-adapt.js +104 -0
  138. package/dist/sidecar/boot.d.ts +36 -0
  139. package/dist/sidecar/boot.js +343 -0
  140. package/dist/sidecar/egress-hint.d.ts +15 -0
  141. package/dist/sidecar/egress-hint.js +46 -0
  142. package/dist/sidecar/egress-proxy.d.ts +183 -0
  143. package/dist/sidecar/egress-proxy.js +419 -0
  144. package/dist/sidecar/errors.d.ts +22 -0
  145. package/dist/sidecar/errors.js +38 -0
  146. package/dist/sidecar/exec-sandbox.d.ts +48 -0
  147. package/dist/sidecar/exec-sandbox.js +94 -0
  148. package/dist/sidecar/handle.d.ts +32 -0
  149. package/dist/sidecar/handle.js +53 -0
  150. package/dist/sidecar/index.d.ts +14 -0
  151. package/dist/sidecar/index.js +13 -0
  152. package/dist/sidecar/proxy-detect.d.ts +50 -0
  153. package/dist/sidecar/proxy-detect.js +182 -0
  154. package/dist/sidecar/reverse-approval.d.ts +55 -0
  155. package/dist/sidecar/reverse-approval.js +86 -0
  156. package/dist/sidecar/reverse-ask-user.d.ts +34 -0
  157. package/dist/sidecar/reverse-ask-user.js +59 -0
  158. package/dist/sidecar/reverse-spawn.d.ts +19 -0
  159. package/dist/sidecar/reverse-spawn.js +161 -0
  160. package/dist/sidecar/reverse-tools.d.ts +29 -0
  161. package/dist/sidecar/reverse-tools.js +106 -0
  162. package/dist/sidecar/safety-patterns.d.ts +41 -0
  163. package/dist/sidecar/safety-patterns.js +157 -0
  164. package/dist/sidecar/storage-path.d.ts +14 -0
  165. package/dist/sidecar/storage-path.js +35 -0
  166. package/dist/sidecar/supervisor.d.ts +218 -0
  167. package/dist/sidecar/supervisor.js +932 -0
  168. package/dist/sidecar/types.d.ts +601 -0
  169. package/dist/sidecar/types.js +1 -0
  170. package/dist/single-instance.d.ts +11 -0
  171. package/dist/single-instance.js +21 -0
  172. package/dist/storage/empty-chats.d.ts +9 -0
  173. package/dist/storage/empty-chats.js +16 -0
  174. package/dist/storage/index.d.ts +373 -0
  175. package/dist/storage/index.js +1158 -0
  176. package/dist/storage/insights-redact.d.ts +2 -0
  177. package/dist/storage/insights-redact.js +30 -0
  178. package/dist/storage/insights-settings.d.ts +53 -0
  179. package/dist/storage/insights-settings.js +92 -0
  180. package/dist/storage/llm-settings.d.ts +120 -0
  181. package/dist/storage/llm-settings.js +233 -0
  182. package/dist/storage/local-store-singleton.d.ts +28 -0
  183. package/dist/storage/local-store-singleton.js +38 -0
  184. package/dist/storage/message-order.d.ts +25 -0
  185. package/dist/storage/message-order.js +27 -0
  186. package/dist/storage/pack-migrations.d.ts +22 -0
  187. package/dist/storage/pack-migrations.js +24 -0
  188. package/dist/storage/pack-seeds.d.ts +36 -0
  189. package/dist/storage/pack-seeds.js +42 -0
  190. package/dist/storage/telemetry-settings.d.ts +38 -0
  191. package/dist/storage/telemetry-settings.js +59 -0
  192. package/dist/storage/usage-summary.d.ts +55 -0
  193. package/dist/storage/usage-summary.js +38 -0
  194. package/dist/storage/web-search-settings.d.ts +38 -0
  195. package/dist/storage/web-search-settings.js +74 -0
  196. package/dist/storage/write-lease.d.ts +26 -0
  197. package/dist/storage/write-lease.js +74 -0
  198. package/dist/terminal-manager.d.ts +83 -0
  199. package/dist/terminal-manager.js +506 -0
  200. package/dist/tool-router.d.ts +228 -0
  201. package/dist/tool-router.js +930 -0
  202. package/dist/tool-search-rank.d.ts +42 -0
  203. package/dist/tool-search-rank.js +96 -0
  204. package/package.json +67 -0
@@ -0,0 +1,228 @@
1
+ import { LocalExecutor, type LocalExecRequest, type LocalExecResult } from './local-executor.js';
2
+ import { LocalScriptRegistry } from './local-script-registry.js';
3
+ import type { McpServerRegistry } from './mcp-server-registry.js';
4
+ import type { ProjectRegistry } from './project-registry.js';
5
+ import type { TaskService } from './local-backend/task-service.js';
6
+ import type { WorktreeService } from './local-backend/worktree-service.js';
7
+ import type { ToolContribution, ToolMode, ToolExposure } from './scenario/pack.js';
8
+ export type { ToolMode, ToolExposure } from './scenario/pack.js';
9
+ import { type AgentToolPolicy } from './local-backend/agent-capability.js';
10
+ /** 已注册 MCP 服务的动态工具名前缀:`mcp__<serverKey>__<toolName>`。 */
11
+ export declare const MCP_DYNAMIC_TOOL_PREFIX = "mcp__";
12
+ /**
13
+ * 工具曝光分层(steerable-framework Wave 2 同构):`direct` 进模型可见列表;
14
+ * `deferred` 可分发、可经 `tool_search` 发现,但不占每轮工具列表的 token;
15
+ * `hidden` 仅可分发。缺省 `direct`。
16
+ *
17
+ * ToolMode / ToolExposure 的单一真源在 scenario/pack.ts(pack-sdk),
18
+ * 本模块 re-export 兼容既有调用方。
19
+ */
20
+ /** deferred 层的发现缝:一个 direct 层搜索工具,关键词命中即调。 */
21
+ export declare const TOOL_SEARCH_TOOL_NAME = "tool_search";
22
+ export interface ToolCall {
23
+ name: string;
24
+ arguments: Record<string, unknown>;
25
+ }
26
+ /**
27
+ * 单次工具执行的调用上下文(按 chat 解析,随每次 execute 传入)。
28
+ *
29
+ * `projectRoot` 是项目模式的硬沙箱根:非空时
30
+ * - local_read_file / local_write_file 的路径必须落在根内(LocalExecutor 围栏)
31
+ * - local_exec_shell 的 cwd 默认改为项目根;显式给的 cwd 越界则直接拒绝
32
+ * 无项目对话(null/缺省)行为与之前完全一致。
33
+ */
34
+ export interface ToolExecContext {
35
+ projectRoot?: string | null;
36
+ /**
37
+ * 项目模式之外额外放行的只读根(会话附件目录等)。只放宽
38
+ * local_read_file 的读取范围,写入/编辑仍只受 projectRoot 围栏约束。
39
+ */
40
+ additionalReadRoots?: string[] | null;
41
+ /**
42
+ * 4.6a:调用发生的 chat。task_run / task_status / task_result 需要它把
43
+ * 任务绑定到来源对话(任务表按 chatId 归组);reverse-tools 从
44
+ * toolContext.chatId 透传。缺省(CLI/直接 exec 场景)时任务工具拒绝服务。
45
+ */
46
+ chatId?: string;
47
+ /**
48
+ * 本轮智能体的工具准入策略(「智能体管理」页配置,router 按本轮生效的
49
+ * 智能体解析后随 toolContext 下发)。分发层按它复检:被拒的工具即使模型
50
+ * 从历史里捞到名字直接调用也会被拒绝——与 plan 模式同款的双层执行
51
+ * (广告层不出 + 分发层拒绝)。缺省 = 不限制。
52
+ */
53
+ toolPolicy?: AgentToolPolicy | null;
54
+ }
55
+ export interface ToolSchema {
56
+ name: string;
57
+ description: string;
58
+ inputSchema: Record<string, unknown>;
59
+ mode: ToolMode;
60
+ /** 曝光层;缺省 `direct`。MCP 动态工具默认 `deferred`。 */
61
+ exposure?: ToolExposure;
62
+ }
63
+ type ShellExecutor = (request: LocalExecRequest) => Promise<LocalExecResult>;
64
+ /**
65
+ * web_search / web_fetch 的执行缝(W5-2):唯一实现在 sidecar 的
66
+ * `web_tools.py`(SSRF 策略、字节上限、重定向上限都在那里),宿主只持
67
+ * schema 并经前向 `tool.invoke` 前转——与 local_* 工具"两处实现、契约
68
+ * 对齐"的模式相反,网络读取对刻意单实现,因此不进 tool-contract。
69
+ * main.ts 在 sidecar 启动后用 `tool.list` 握手填充可用集。
70
+ */
71
+ export type WebToolDelegate = (name: 'web_search' | 'web_fetch', args: Record<string, unknown>) => Promise<unknown>;
72
+ /** 前转 RPC 超时:sidecar 侧单次请求上限默认 30s(可配到 600s),这里给足余量。 */
73
+ export declare const WEB_TOOL_RPC_TIMEOUT_MS = 130000;
74
+ /**
75
+ * 插件生命周期 RPC 缝:sidecar 的 `plugin.*` 方法(list/enable/disable/reload)
76
+ * 由 PluginRegistry 背书。宿主只持 schema 并经此 delegate 直调——与 web 工具
77
+ * 不同,这些是普通 RPC 而非 tool.invoke(不经过模型工具分发层)。
78
+ */
79
+ export type PluginRpcDelegate = (method: 'plugin.list' | 'plugin.enable' | 'plugin.disable' | 'plugin.reload', params?: Record<string, unknown>) => Promise<unknown>;
80
+ /**
81
+ * 本机是否提供网络读取工具(`STEERABLE_WEB_TOOLS=0` 关闭)。
82
+ *
83
+ * 同一个开关同时管住两件事:`tool.list` 握手是否把 web 工具装进本路由,
84
+ * 以及 layer-1 Seatbelt profile 是否放行它们所需的出网(解析器 + 80/443)。
85
+ * 两者必须同源——只放宽不暴露是白开的口子,只暴露不放宽则每次抓取都死在
86
+ * 名字解析上,而模型会把它解释成用户断网。
87
+ */
88
+ export declare function webToolsEnabled(): boolean;
89
+ export declare class ToolRouter {
90
+ private readonly localExecutor;
91
+ private readonly localScriptRegistry;
92
+ private readonly shellExecutor?;
93
+ /** 可选:已注册的外部 MCP 服务(设置界面导入)。有缓存工具的服务会追加为一等工具。 */
94
+ readonly mcpRegistry?: McpServerRegistry | undefined;
95
+ /** 可选:项目注册表(项目模式)。路由层用它把 chat.projectId 解析成沙箱根目录。 */
96
+ readonly projectRegistry?: ProjectRegistry | undefined;
97
+ constructor(localExecutor: LocalExecutor, localScriptRegistry: LocalScriptRegistry, shellExecutor?: ShellExecutor | undefined,
98
+ /** 可选:已注册的外部 MCP 服务(设置界面导入)。有缓存工具的服务会追加为一等工具。 */
99
+ mcpRegistry?: McpServerRegistry | undefined,
100
+ /** 可选:项目注册表(项目模式)。路由层用它把 chat.projectId 解析成沙箱根目录。 */
101
+ projectRegistry?: ProjectRegistry | undefined);
102
+ /**
103
+ * 场景包贡献的工具(0.3a 开槽)。schema 进 listSchemas,分发在 execute
104
+ * 的 default 分支——内置工具优先,名字冲突在注册时响亮失败。
105
+ */
106
+ private readonly contributedTools;
107
+ /**
108
+ * 注册一组场景工具贡献。与既有工具(内置 / 任务 / web / MCP / 插件 /
109
+ * 已注册贡献)重名即抛错——一个包装不上却静默丢工具是能力暗损。
110
+ */
111
+ registerToolContributions(contributions: readonly ToolContribution[]): void;
112
+ /**
113
+ * sidecar 握手得到的网络读取工具可用集。web_search 只在 sidecar 配好
114
+ * 搜索后端(设置页免费 DuckDuckGo / Tavily 钥 / STEERABLE_WEB_SEARCH_API_KEY /
115
+ * TAVILY_API_KEY,或 STEERABLE_WEB_SEARCH_PROVIDER=host)时注册——
116
+ * 宿主不猜,避免出现"工具在列表里但一调就报未配置"。
117
+ */
118
+ private webToolDelegate;
119
+ private webToolNames;
120
+ /**
121
+ * OpenAI hosted search executed in this process with the chat credential.
122
+ * Set when the sidecar registered `web_search` via provider=host so the
123
+ * host must not forward the call back into the sidecar.
124
+ */
125
+ private hostedWebSearch;
126
+ /**
127
+ * 4.6a/4.6b:跨 turn 任务与 git worktree 服务。setter 注入(与
128
+ * setWebTools 同模式)——main.ts 里 ToolRouter 先于 TaskService 构造
129
+ * (TaskService 反向依赖 ToolRouter 的工具列表),构造后再接线。
130
+ * 未接线时任务/worktree 工具不出场(schema 都不出,模型看不到)。
131
+ */
132
+ private taskService;
133
+ private worktreeService;
134
+ setTaskServices(services: {
135
+ taskService: TaskService;
136
+ worktreeService: WorktreeService;
137
+ } | null): void;
138
+ setWebTools(delegate: WebToolDelegate | null, names?: readonly string[]): void;
139
+ setHostedWebSearch(handler: ((args: Record<string, unknown>) => Promise<unknown>) | null): void;
140
+ /**
141
+ * sidecar 握手后注入插件 RPC 缝。未注入(sidecar 缺席/握手失败)时
142
+ * plugin_* 工具一个 schema 都不出——模型看不到不可用的工具。
143
+ */
144
+ private pluginRpc;
145
+ setPluginRpc(delegate: PluginRpcDelegate | null): void;
146
+ listSchemas(): ToolSchema[];
147
+ /**
148
+ * 插件生命周期工具(框架 plugin.* RPC 的模型面)。全在 deferred 层:
149
+ * 插件管理是低频运维动作,不值每轮工具列表的 token——模型经
150
+ * tool_search 发现,命中即调。写操作(enable/disable/reload)标
151
+ * destructive,走宿主审批链。
152
+ */
153
+ private listPluginToolSchemas;
154
+ /**
155
+ * 4.6a/4.6b 任务与 worktree 工具的 schema。task_run 立即返回
156
+ * (任务在后台独立流里跨 turn 跑完);worktree_* 操作绑定项目的
157
+ * git 仓库。description 用英文(面向模型),与 local_* 工具同款。
158
+ */
159
+ private listTaskAndWorktreeSchemas;
160
+ /**
161
+ * 网络读取对(W5-2):schema 与 sidecar `web_tools.py` 保持一致;description
162
+ * 用英文(面向模型),与 local_* 工具同款。可用集由握手决定,未握手/未注册
163
+ * 时一个 schema 都不出——模型看不到不可用的工具。
164
+ */
165
+ private listWebToolSchemas;
166
+ /**
167
+ * 已注册 MCP 服务的动态工具。服务的工具列表来自注册表的内存缓存
168
+ * (启动后台刷新 + 设置界面"测试连接"刷新),没缓存或已禁用的服务不出场。
169
+ * 全部落在 deferred 层:MCP 目录是最大的无界第三方工具来源,不为每个
170
+ * schema 每轮付 token——模型经 `tool_search` 发现,命中即调。
171
+ */
172
+ private listRegisteredMcpToolSchemas;
173
+ /**
174
+ * 模型可见列表:仅 direct 层。`tool_search` 只有在存在 deferred 层时
175
+ * 才占一个列表槽——没有可发现的东西时它是每轮请求里的死重。
176
+ * 分发不按层设卡:被发现的 deferred 工具按名直调(execute 不查层)。
177
+ *
178
+ * @param policy 本轮智能体的工具准入策略;被拒的工具连 schema 都不出。
179
+ * deferred 层同样按策略过滤,所以策略拒掉全部 deferred 工具时
180
+ * `tool_search` 也一并退场(没有可发现的东西)。缺省 = 不限制。
181
+ */
182
+ listModelSchemas(policy?: AgentToolPolicy | null): ToolSchema[];
183
+ getSchemaByName(toolName: string): ToolSchema | null;
184
+ execute(call: ToolCall, context?: ToolExecContext): Promise<unknown>;
185
+ /**
186
+ * 任务/worktree 工具的调用上下文:必须有来源 chatId(任务表按 chat 归组、
187
+ * 项目围栏按 chat 解析)。schema 出场 ⇒ 服务已接线,这里只缺 chatId 时
188
+ * 抛错(reverse-tools 总是透传;缺了就是接线 bug,响亮失败)。
189
+ */
190
+ private requireTaskContext;
191
+ /**
192
+ * Agent 写出 `…/skills/<name>/SKILL.md` 且该目录还不在已知 skill root 上时,
193
+ * 拷进用户技能目录,Skill 设置 / `/` 菜单不必再手动导入。
194
+ */
195
+ private autoInstallSkillOnSuccess;
196
+ /**
197
+ * 项目模式硬沙箱(cwd 维度):projectRoot 非空时,cwd 默认收到项目根;
198
+ * 模型显式给的 cwd 越界则返回错误结果。相对 cwd 按项目根解析(而不是
199
+ * 进程 cwd),符合"在项目里干活"的直觉。
200
+ *
201
+ * 注意边界:shell 命令文本里内嵌的绝对路径无法可靠解析,围栏只覆盖
202
+ * cwd 与文件读写工具——系统提示里已告知模型只在项目目录内操作。
203
+ *
204
+ * local_exec_shell 与 local_run_snippet 共用本 helper。
205
+ */
206
+ private applyProjectCwdSandbox;
207
+ private executeShell;
208
+ private resolveMcpConfig;
209
+ /**
210
+ * `tool_search` 处理器:BM25 排序 deferred 名录(name 分词计两次),返回
211
+ * 完整 schema,结果有界(默认 8,封顶 20)。算法、常量、默认上限与返回
212
+ * 文案都与 steerable-framework `tool_search.py` 对齐——同名工具在两侧给
213
+ * 出同样的名次;hidden 层不进搜索。
214
+ *
215
+ * 智能体工具策略在这里同样生效:否则每轮列表藏起来的工具会从这条发现缝
216
+ * 漏回去,「限制」只剩一半。
217
+ */
218
+ private executeToolSearch;
219
+ /**
220
+ * 前转网络读取调用到 sidecar(W5-2)。走到这里说明 schema 已出场,
221
+ * 即握手时 sidecar 注册了该工具;delegate 缺失/集合漂移是编程错误或
222
+ * sidecar 中途重启,按响亮失败处理(reverse-tools 会把抛错包成
223
+ * ToolResult)。
224
+ */
225
+ private executeWebTool;
226
+ /** 执行注册表里的 MCP 动态工具(`mcp__<serverKey>__<toolName>`)。 */
227
+ private executeRegisteredMcpTool;
228
+ }