@clinebot/core 0.0.35 → 0.0.36

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 (335) hide show
  1. package/README.md +1 -2
  2. package/dist/ClineCore.d.ts +53 -39
  3. package/dist/ClineCore.d.ts.map +1 -1
  4. package/dist/account/index.d.ts +1 -1
  5. package/dist/account/index.d.ts.map +1 -1
  6. package/dist/account/rpc.d.ts +6 -6
  7. package/dist/account/rpc.d.ts.map +1 -1
  8. package/dist/cron/index.d.ts +6 -0
  9. package/dist/cron/index.d.ts.map +1 -0
  10. package/dist/cron/resource-limiter.d.ts +9 -0
  11. package/dist/cron/resource-limiter.d.ts.map +1 -0
  12. package/dist/cron/schedule-command-service.d.ts +10 -0
  13. package/dist/cron/schedule-command-service.d.ts.map +1 -0
  14. package/dist/cron/schedule-service.d.ts +100 -0
  15. package/dist/cron/schedule-service.d.ts.map +1 -0
  16. package/dist/cron/scheduler.d.ts +66 -0
  17. package/dist/cron/scheduler.d.ts.map +1 -0
  18. package/dist/cron/sqlite-schedule-store.d.ts +52 -0
  19. package/dist/cron/sqlite-schedule-store.d.ts.map +1 -0
  20. package/dist/extensions/config/agent-config-loader.d.ts +4 -3
  21. package/dist/extensions/config/agent-config-loader.d.ts.map +1 -1
  22. package/dist/extensions/config/runtime-commands.d.ts +1 -0
  23. package/dist/extensions/config/runtime-commands.d.ts.map +1 -1
  24. package/dist/extensions/config/user-instruction-config-loader.d.ts +1 -0
  25. package/dist/extensions/config/user-instruction-config-loader.d.ts.map +1 -1
  26. package/dist/extensions/context/agentic-compaction.d.ts +2 -2
  27. package/dist/extensions/context/agentic-compaction.d.ts.map +1 -1
  28. package/dist/extensions/context/compaction-shared.d.ts +5 -4
  29. package/dist/extensions/context/compaction-shared.d.ts.map +1 -1
  30. package/dist/extensions/context/compaction.d.ts.map +1 -1
  31. package/dist/extensions/plugin/plugin-config-loader.d.ts +9 -2
  32. package/dist/extensions/plugin/plugin-config-loader.d.ts.map +1 -1
  33. package/dist/extensions/plugin/plugin-loader.d.ts +5 -3
  34. package/dist/extensions/plugin/plugin-loader.d.ts.map +1 -1
  35. package/dist/extensions/plugin/plugin-module-import.d.ts.map +1 -1
  36. package/dist/extensions/plugin/plugin-sandbox.d.ts +15 -2
  37. package/dist/extensions/plugin/plugin-sandbox.d.ts.map +1 -1
  38. package/dist/extensions/plugin/plugin-targeting.d.ts +7 -0
  39. package/dist/extensions/plugin/plugin-targeting.d.ts.map +1 -0
  40. package/dist/extensions/plugin-sandbox-bootstrap.js +211 -211
  41. package/dist/extensions/tools/definitions.d.ts +1 -1
  42. package/dist/extensions/tools/definitions.d.ts.map +1 -1
  43. package/dist/extensions/tools/executors/apply-patch.d.ts +3 -1
  44. package/dist/extensions/tools/executors/apply-patch.d.ts.map +1 -1
  45. package/dist/extensions/tools/executors/search.d.ts +1 -1
  46. package/dist/extensions/tools/executors/search.d.ts.map +1 -1
  47. package/dist/extensions/tools/index.d.ts +2 -0
  48. package/dist/extensions/tools/index.d.ts.map +1 -1
  49. package/dist/extensions/tools/presets.d.ts +26 -43
  50. package/dist/extensions/tools/presets.d.ts.map +1 -1
  51. package/dist/extensions/tools/runtime.d.ts +25 -0
  52. package/dist/extensions/tools/runtime.d.ts.map +1 -0
  53. package/dist/extensions/tools/schemas.d.ts.map +1 -1
  54. package/dist/extensions/tools/team/team-tools.d.ts +1 -0
  55. package/dist/extensions/tools/team/team-tools.d.ts.map +1 -1
  56. package/dist/hooks/hook-file-hooks.d.ts +4 -1
  57. package/dist/hooks/hook-file-hooks.d.ts.map +1 -1
  58. package/dist/hooks/index.d.ts +0 -1
  59. package/dist/hooks/index.d.ts.map +1 -1
  60. package/dist/hooks/subprocess.d.ts +8 -1
  61. package/dist/hooks/subprocess.d.ts.map +1 -1
  62. package/dist/hub/browser-websocket.d.ts +18 -0
  63. package/dist/hub/browser-websocket.d.ts.map +1 -0
  64. package/dist/hub/client.d.ts +45 -0
  65. package/dist/hub/client.d.ts.map +1 -0
  66. package/dist/hub/connect.d.ts +15 -0
  67. package/dist/hub/connect.d.ts.map +1 -0
  68. package/dist/hub/daemon-entry.d.ts +2 -0
  69. package/dist/hub/daemon-entry.d.ts.map +1 -0
  70. package/dist/hub/daemon-entry.js +1045 -0
  71. package/dist/hub/daemon.d.ts +5 -0
  72. package/dist/hub/daemon.d.ts.map +1 -0
  73. package/dist/hub/defaults.d.ts +13 -0
  74. package/dist/hub/defaults.d.ts.map +1 -0
  75. package/dist/hub/discovery.d.ts +29 -0
  76. package/dist/hub/discovery.d.ts.map +1 -0
  77. package/dist/hub/index.d.ts +15 -0
  78. package/dist/hub/index.d.ts.map +1 -0
  79. package/dist/hub/index.js +1044 -0
  80. package/dist/hub/native-transport.d.ts +17 -0
  81. package/dist/hub/native-transport.d.ts.map +1 -0
  82. package/dist/hub/runtime-handlers.d.ts +11 -0
  83. package/dist/hub/runtime-handlers.d.ts.map +1 -0
  84. package/dist/hub/server.d.ts +86 -0
  85. package/dist/hub/server.d.ts.map +1 -0
  86. package/dist/hub/session-client.d.ts +87 -0
  87. package/dist/hub/session-client.d.ts.map +1 -0
  88. package/dist/hub/start-shared-server.d.ts +19 -0
  89. package/dist/hub/start-shared-server.d.ts.map +1 -0
  90. package/dist/hub/transport.d.ts +8 -0
  91. package/dist/hub/transport.d.ts.map +1 -0
  92. package/dist/hub/ui-client.d.ts +44 -0
  93. package/dist/hub/ui-client.d.ts.map +1 -0
  94. package/dist/hub/workspace.d.ts +4 -0
  95. package/dist/hub/workspace.d.ts.map +1 -0
  96. package/dist/index.d.ts +26 -15
  97. package/dist/index.d.ts.map +1 -1
  98. package/dist/index.js +498 -476
  99. package/dist/llms/configured-provider-registry.d.ts +28 -0
  100. package/dist/llms/configured-provider-registry.d.ts.map +1 -0
  101. package/dist/llms/provider-defaults.d.ts +27 -0
  102. package/dist/llms/provider-defaults.d.ts.map +1 -0
  103. package/dist/llms/provider-settings.d.ts +202 -0
  104. package/dist/llms/provider-settings.d.ts.map +1 -0
  105. package/dist/llms/runtime-config.d.ts +4 -0
  106. package/dist/llms/runtime-config.d.ts.map +1 -0
  107. package/dist/llms/runtime-registry.d.ts +20 -0
  108. package/dist/llms/runtime-registry.d.ts.map +1 -0
  109. package/dist/llms/runtime-types.d.ts +85 -0
  110. package/dist/llms/runtime-types.d.ts.map +1 -0
  111. package/dist/runtime/host.d.ts +1 -2
  112. package/dist/runtime/host.d.ts.map +1 -1
  113. package/dist/runtime/rules.d.ts +1 -0
  114. package/dist/runtime/rules.d.ts.map +1 -1
  115. package/dist/runtime/runtime-builder.d.ts.map +1 -1
  116. package/dist/runtime/runtime-host.d.ts +22 -24
  117. package/dist/runtime/runtime-host.d.ts.map +1 -1
  118. package/dist/runtime/runtime-oauth-token-manager.d.ts.map +1 -1
  119. package/dist/runtime/session-runtime.d.ts +1 -19
  120. package/dist/runtime/session-runtime.d.ts.map +1 -1
  121. package/dist/services/global-settings.d.ts +12 -0
  122. package/dist/services/global-settings.d.ts.map +1 -0
  123. package/dist/services/local-runtime-bootstrap.d.ts +9 -3
  124. package/dist/services/local-runtime-bootstrap.d.ts.map +1 -1
  125. package/dist/services/plugin-tools.d.ts +16 -0
  126. package/dist/services/plugin-tools.d.ts.map +1 -0
  127. package/dist/services/providers/local-provider-registry.d.ts +4 -4
  128. package/dist/services/providers/local-provider-registry.d.ts.map +1 -1
  129. package/dist/services/providers/local-provider-service.d.ts +13 -13
  130. package/dist/services/providers/local-provider-service.d.ts.map +1 -1
  131. package/dist/services/session-data.d.ts +1 -1
  132. package/dist/services/session-data.d.ts.map +1 -1
  133. package/dist/services/storage/provider-settings-legacy-migration.d.ts +1 -1
  134. package/dist/services/storage/provider-settings-legacy-migration.d.ts.map +1 -1
  135. package/dist/services/telemetry/index.js +28 -15
  136. package/dist/services/workspace-manifest.d.ts +11 -0
  137. package/dist/services/workspace-manifest.d.ts.map +1 -1
  138. package/dist/session/persistence-service.d.ts +11 -23
  139. package/dist/session/persistence-service.d.ts.map +1 -1
  140. package/dist/session/session-manifest-store.d.ts +22 -0
  141. package/dist/session/session-manifest-store.d.ts.map +1 -0
  142. package/dist/session/session-row.d.ts +93 -0
  143. package/dist/session/session-row.d.ts.map +1 -0
  144. package/dist/session/session-service.d.ts +2 -102
  145. package/dist/session/session-service.d.ts.map +1 -1
  146. package/dist/session/subagent-session-manager.d.ts +36 -0
  147. package/dist/session/subagent-session-manager.d.ts.map +1 -0
  148. package/dist/session/team-persistence-store.d.ts +24 -0
  149. package/dist/session/team-persistence-store.d.ts.map +1 -0
  150. package/dist/transports/hub.d.ts +47 -0
  151. package/dist/transports/hub.d.ts.map +1 -0
  152. package/dist/transports/local.d.ts +10 -6
  153. package/dist/transports/local.d.ts.map +1 -1
  154. package/dist/transports/remote.d.ts +10 -0
  155. package/dist/transports/remote.d.ts.map +1 -0
  156. package/dist/transports/runtime-host-support.d.ts +3 -2
  157. package/dist/transports/runtime-host-support.d.ts.map +1 -1
  158. package/dist/types/chat-schema.d.ts +10 -12
  159. package/dist/types/chat-schema.d.ts.map +1 -1
  160. package/dist/types/config.d.ts +8 -7
  161. package/dist/types/config.d.ts.map +1 -1
  162. package/dist/types/provider-settings.d.ts +4 -5
  163. package/dist/types/provider-settings.d.ts.map +1 -1
  164. package/dist/types/session.d.ts +2 -1
  165. package/dist/types/session.d.ts.map +1 -1
  166. package/dist/types.d.ts +8 -1
  167. package/dist/types.d.ts.map +1 -1
  168. package/package.json +20 -6
  169. package/src/ClineCore.ts +68 -40
  170. package/src/account/index.ts +3 -3
  171. package/src/account/rpc.ts +12 -12
  172. package/src/cron/index.ts +5 -0
  173. package/src/cron/resource-limiter.ts +46 -0
  174. package/src/cron/schedule-command-service.ts +193 -0
  175. package/src/cron/schedule-service.ts +703 -0
  176. package/src/cron/scheduler.ts +637 -0
  177. package/src/cron/sqlite-schedule-store.ts +708 -0
  178. package/src/extensions/config/agent-config-loader.ts +17 -7
  179. package/src/extensions/config/runtime-commands.ts +6 -0
  180. package/src/extensions/config/user-instruction-config-loader.ts +1 -0
  181. package/src/extensions/context/agentic-compaction.ts +3 -3
  182. package/src/extensions/context/basic-compaction.ts +2 -2
  183. package/src/extensions/context/compaction-shared.ts +5 -4
  184. package/src/extensions/context/compaction.ts +3 -3
  185. package/src/extensions/plugin/plugin-config-loader.ts +17 -2
  186. package/src/extensions/plugin/plugin-loader.ts +48 -4
  187. package/src/extensions/plugin/plugin-module-import.ts +0 -2
  188. package/src/extensions/plugin/plugin-sandbox-bootstrap.ts +93 -39
  189. package/src/extensions/plugin/plugin-sandbox.ts +47 -27
  190. package/src/extensions/plugin/plugin-targeting.ts +32 -0
  191. package/src/extensions/tools/definitions.ts +30 -49
  192. package/src/extensions/tools/executors/apply-patch.ts +69 -80
  193. package/src/extensions/tools/executors/search.ts +195 -3
  194. package/src/extensions/tools/index.ts +10 -0
  195. package/src/extensions/tools/presets.ts +31 -46
  196. package/src/extensions/tools/runtime.ts +261 -0
  197. package/src/extensions/tools/schemas.ts +4 -2
  198. package/src/extensions/tools/team/team-tools.ts +21 -0
  199. package/src/hooks/hook-file-hooks.ts +8 -2
  200. package/src/hooks/index.ts +0 -7
  201. package/src/hooks/subprocess-runner.ts +1 -1
  202. package/src/hooks/subprocess.ts +9 -0
  203. package/src/hub/browser-websocket.ts +137 -0
  204. package/src/hub/client.ts +574 -0
  205. package/src/hub/connect.ts +156 -0
  206. package/src/hub/daemon-entry.ts +87 -0
  207. package/src/hub/daemon.ts +181 -0
  208. package/src/hub/defaults.ts +43 -0
  209. package/src/hub/discovery.ts +247 -0
  210. package/src/hub/index.ts +14 -0
  211. package/src/hub/native-transport.ts +31 -0
  212. package/src/hub/runtime-handlers.ts +140 -0
  213. package/src/hub/server.ts +1888 -0
  214. package/src/hub/session-client.ts +460 -0
  215. package/src/hub/start-shared-server.ts +58 -0
  216. package/src/hub/transport.ts +14 -0
  217. package/src/hub/ui-client.ts +122 -0
  218. package/src/hub/workspace.ts +19 -0
  219. package/src/index.ts +124 -68
  220. package/src/llms/configured-provider-registry.ts +193 -0
  221. package/src/llms/provider-defaults.ts +637 -0
  222. package/src/llms/provider-settings.ts +263 -0
  223. package/src/llms/runtime-config.ts +43 -0
  224. package/src/llms/runtime-registry.ts +171 -0
  225. package/src/llms/runtime-types.ts +121 -0
  226. package/src/runtime/host.ts +107 -269
  227. package/src/runtime/index.ts +1 -0
  228. package/src/runtime/rules.ts +12 -0
  229. package/src/runtime/runtime-builder.ts +24 -8
  230. package/src/runtime/runtime-host.ts +89 -61
  231. package/src/runtime/runtime-oauth-token-manager.ts +11 -15
  232. package/src/runtime/session-runtime.ts +0 -24
  233. package/src/services/global-settings.ts +122 -0
  234. package/src/services/local-runtime-bootstrap.ts +51 -13
  235. package/src/services/plugin-tools.ts +85 -0
  236. package/src/services/providers/local-provider-registry.ts +6 -6
  237. package/src/services/providers/local-provider-service.ts +42 -37
  238. package/src/services/session-data.ts +15 -9
  239. package/src/services/storage/provider-settings-legacy-migration.ts +6 -4
  240. package/src/services/storage/provider-settings-manager.ts +1 -1
  241. package/src/services/workspace-manifest.ts +18 -0
  242. package/src/session/file-session-service.ts +1 -1
  243. package/src/session/index.ts +6 -27
  244. package/src/session/persistence-service.ts +119 -504
  245. package/src/session/session-manifest-store.ts +158 -0
  246. package/src/session/session-row.ts +199 -0
  247. package/src/session/session-service.ts +17 -376
  248. package/src/session/session-team-coordination.ts +1 -1
  249. package/src/session/subagent-session-manager.ts +397 -0
  250. package/src/session/team-persistence-store.ts +176 -0
  251. package/src/transports/hub.ts +656 -0
  252. package/src/transports/local.ts +135 -40
  253. package/src/transports/remote.ts +26 -0
  254. package/src/transports/runtime-host-support.ts +63 -9
  255. package/src/types/chat-schema.ts +4 -5
  256. package/src/types/config.ts +8 -7
  257. package/src/types/provider-settings.ts +11 -7
  258. package/src/types/session.ts +2 -4
  259. package/src/types.ts +27 -1
  260. package/dist/hooks/persistent.d.ts +0 -64
  261. package/dist/hooks/persistent.d.ts.map +0 -1
  262. package/dist/runtime/rpc-runtime-ensure.d.ts +0 -65
  263. package/dist/runtime/rpc-runtime-ensure.d.ts.map +0 -1
  264. package/dist/runtime/rpc-spawn-lease.d.ts +0 -8
  265. package/dist/runtime/rpc-spawn-lease.d.ts.map +0 -1
  266. package/dist/session/rpc-session-service.d.ts +0 -16
  267. package/dist/session/rpc-session-service.d.ts.map +0 -1
  268. package/dist/session/sqlite-rpc-session-backend.d.ts +0 -31
  269. package/dist/session/sqlite-rpc-session-backend.d.ts.map +0 -1
  270. package/dist/transports/rpc.d.ts +0 -51
  271. package/dist/transports/rpc.d.ts.map +0 -1
  272. package/src/ClineCore.test.ts +0 -226
  273. package/src/account/cline-account-service.test.ts +0 -185
  274. package/src/account/featurebase-token.test.ts +0 -175
  275. package/src/account/rpc.test.ts +0 -63
  276. package/src/auth/bounded-ttl-cache.test.ts +0 -38
  277. package/src/auth/client.test.ts +0 -69
  278. package/src/auth/cline.test.ts +0 -267
  279. package/src/auth/codex.test.ts +0 -170
  280. package/src/auth/oca.test.ts +0 -340
  281. package/src/auth/server.test.ts +0 -287
  282. package/src/auth/utils.test.ts +0 -128
  283. package/src/extensions/config/agent-config-loader.test.ts +0 -236
  284. package/src/extensions/config/hooks-config-loader.test.ts +0 -20
  285. package/src/extensions/config/runtime-commands.test.ts +0 -115
  286. package/src/extensions/config/unified-config-file-watcher.test.ts +0 -196
  287. package/src/extensions/config/user-instruction-config-loader.test.ts +0 -246
  288. package/src/extensions/context/compaction.test.ts +0 -483
  289. package/src/extensions/mcp/config-loader.test.ts +0 -238
  290. package/src/extensions/mcp/manager.test.ts +0 -105
  291. package/src/extensions/plugin/plugin-config-loader.test.ts +0 -184
  292. package/src/extensions/plugin/plugin-loader.test.ts +0 -292
  293. package/src/extensions/plugin/plugin-sandbox.test.ts +0 -423
  294. package/src/extensions/tools/definitions.test.ts +0 -780
  295. package/src/extensions/tools/executors/bash.test.ts +0 -87
  296. package/src/extensions/tools/executors/editor.test.ts +0 -35
  297. package/src/extensions/tools/executors/file-read.test.ts +0 -125
  298. package/src/extensions/tools/model-tool-routing.test.ts +0 -86
  299. package/src/extensions/tools/presets.test.ts +0 -70
  300. package/src/extensions/tools/team/multi-agent.lifecycle.test.ts +0 -455
  301. package/src/extensions/tools/team/spawn-agent-tool.test.ts +0 -381
  302. package/src/extensions/tools/team/team-tools.test.ts +0 -918
  303. package/src/hooks/checkpoint-hooks.test.ts +0 -168
  304. package/src/hooks/hook-file-hooks.test.ts +0 -311
  305. package/src/hooks/persistent.ts +0 -661
  306. package/src/runtime/history.test.ts +0 -114
  307. package/src/runtime/host.test.ts +0 -230
  308. package/src/runtime/rpc-runtime-ensure.test.ts +0 -123
  309. package/src/runtime/rpc-runtime-ensure.ts +0 -659
  310. package/src/runtime/rpc-spawn-lease.test.ts +0 -81
  311. package/src/runtime/rpc-spawn-lease.ts +0 -156
  312. package/src/runtime/runtime-builder.team-persistence.test.ts +0 -245
  313. package/src/runtime/runtime-builder.test.ts +0 -615
  314. package/src/runtime/runtime-oauth-token-manager.test.ts +0 -137
  315. package/src/runtime/runtime-parity.test.ts +0 -143
  316. package/src/services/providers/local-provider-service.test.ts +0 -1062
  317. package/src/services/session-data.test.ts +0 -160
  318. package/src/services/storage/provider-settings-legacy-migration.test.ts +0 -424
  319. package/src/services/storage/provider-settings-manager.test.ts +0 -191
  320. package/src/services/telemetry/OpenTelemetryAdapter.test.ts +0 -157
  321. package/src/services/telemetry/OpenTelemetryProvider.test.ts +0 -326
  322. package/src/services/telemetry/TelemetryLoggerSink.test.ts +0 -42
  323. package/src/services/telemetry/TelemetryService.test.ts +0 -134
  324. package/src/services/telemetry/distinct-id.test.ts +0 -57
  325. package/src/services/workspace/file-indexer.d.ts +0 -11
  326. package/src/services/workspace/file-indexer.test.ts +0 -156
  327. package/src/services/workspace/mention-enricher.test.ts +0 -106
  328. package/src/session/persistence-service.test.ts +0 -300
  329. package/src/session/rpc-session-service.ts +0 -114
  330. package/src/session/session-service.team-persistence.test.ts +0 -48
  331. package/src/session/sqlite-rpc-session-backend.ts +0 -301
  332. package/src/transports/local.e2e.test.ts +0 -380
  333. package/src/transports/local.test.ts +0 -2559
  334. package/src/transports/rpc.test.ts +0 -82
  335. package/src/transports/rpc.ts +0 -665
@@ -1,87 +0,0 @@
1
- import type { ToolContext } from "@clinebot/shared";
2
- import { describe, expect, it } from "vitest";
3
- import { createBashExecutor } from "./bash";
4
-
5
- const ctx: ToolContext = {
6
- agentId: "agent-1",
7
- conversationId: "conv-1",
8
- iteration: 1,
9
- };
10
-
11
- describe("createBashExecutor", () => {
12
- it("runs a simple command and returns stdout", async () => {
13
- const bash = createBashExecutor();
14
- const output = await bash("echo hello", process.cwd(), ctx);
15
- expect(output.trim()).toBe("hello");
16
- });
17
-
18
- it("rejects on non-zero exit code", async () => {
19
- const bash = createBashExecutor();
20
- await expect(bash("exit 1", process.cwd(), ctx)).rejects.toThrow();
21
- });
22
-
23
- it("includes stderr in combined output on success", async () => {
24
- const bash = createBashExecutor({ combineOutput: true });
25
- const cmd = `${process.execPath} -e "process.stdout.write('ok'); process.stderr.write('warn')"`;
26
- const output = await bash(cmd, process.cwd(), ctx);
27
- expect(output).toContain("ok");
28
- expect(output).toContain("[stderr]");
29
- expect(output).toContain("warn");
30
- });
31
-
32
- it("excludes stderr when combineOutput is false", async () => {
33
- const bash = createBashExecutor({ combineOutput: false });
34
- const cmd = `${process.execPath} -e "process.stdout.write('ok'); process.stderr.write('warn')"`;
35
- const output = await bash(cmd, process.cwd(), ctx);
36
- expect(output.trim()).toBe("ok");
37
- });
38
-
39
- it("rejects on timeout", async () => {
40
- const bash = createBashExecutor({ timeoutMs: 50 });
41
- await expect(bash("sleep 10", process.cwd(), ctx)).rejects.toThrow(
42
- "timed out",
43
- );
44
- });
45
-
46
- it("truncates output exceeding maxOutputBytes", async () => {
47
- const bash = createBashExecutor({ maxOutputBytes: 10 });
48
- const output = await bash(
49
- `${process.execPath} -e "process.stdout.write('a'.repeat(100))"`,
50
- process.cwd(),
51
- ctx,
52
- );
53
- expect(output).toContain("[Output truncated:");
54
- });
55
-
56
- it("rejects when abort signal fires", async () => {
57
- const ac = new AbortController();
58
- const abortCtx: ToolContext = { ...ctx, abortSignal: ac.signal };
59
- const bash = createBashExecutor();
60
-
61
- setTimeout(() => ac.abort(), 50);
62
- await expect(bash("sleep 10", process.cwd(), abortCtx)).rejects.toThrow(
63
- "aborted",
64
- );
65
- });
66
- });
67
-
68
- describe.runIf(process.platform === "win32")("createWindowsExecutor", () => {
69
- it("runs structured commands without shell parsing", async () => {
70
- const executor = createBashExecutor();
71
- const output = await executor(
72
- {
73
- command: process.execPath,
74
- args: ["-e", "process.stdout.write(process.argv[1])", "argv-ok"],
75
- },
76
- process.cwd(),
77
- ctx,
78
- );
79
- expect(output).toBe("argv-ok");
80
- });
81
-
82
- it("runs string commands through the shell", async () => {
83
- const executor = createBashExecutor();
84
- const output = await executor("echo shell-ok", process.cwd(), ctx);
85
- expect(output.trim()).toBe("shell-ok");
86
- });
87
- });
@@ -1,35 +0,0 @@
1
- import * as fs from "node:fs/promises";
2
- import * as os from "node:os";
3
- import * as path from "node:path";
4
- import { describe, expect, it } from "vitest";
5
- import { createEditorExecutor } from "./editor";
6
-
7
- describe("createEditorExecutor", () => {
8
- it("creates a missing file when edit is used", async () => {
9
- const dir = await fs.mkdtemp(path.join(os.tmpdir(), "agents-editor-"));
10
- const filePath = path.join(dir, "example.txt");
11
-
12
- try {
13
- const editor = createEditorExecutor();
14
- const result = await editor(
15
- {
16
- path: filePath,
17
- new_text: "created with edit",
18
- },
19
- dir,
20
- {
21
- agentId: "agent-1",
22
- conversationId: "conv-1",
23
- iteration: 1,
24
- },
25
- );
26
-
27
- expect(result).toBe(`File created successfully at: ${filePath}`);
28
- await expect(fs.readFile(filePath, "utf-8")).resolves.toBe(
29
- "created with edit",
30
- );
31
- } finally {
32
- await fs.rm(dir, { recursive: true, force: true });
33
- }
34
- });
35
- });
@@ -1,125 +0,0 @@
1
- import * as fs from "node:fs/promises";
2
- import * as os from "node:os";
3
- import * as path from "node:path";
4
- import { describe, expect, it } from "vitest";
5
- import { createFileReadExecutor } from "./file-read";
6
-
7
- describe("createFileReadExecutor", () => {
8
- it("reads a file from an absolute path", async () => {
9
- const dir = await fs.mkdtemp(path.join(os.tmpdir(), "agents-file-read-"));
10
- const filePath = path.join(dir, "example.txt");
11
- await fs.writeFile(filePath, "hello absolute path", "utf-8");
12
-
13
- try {
14
- const readFile = createFileReadExecutor();
15
- const result = await readFile(
16
- { path: filePath },
17
- {
18
- agentId: "agent-1",
19
- conversationId: "conv-1",
20
- iteration: 1,
21
- },
22
- );
23
- expect(result).toBe("1 | hello absolute path");
24
- } finally {
25
- await fs.rm(dir, { recursive: true, force: true });
26
- }
27
- });
28
-
29
- it("returns only the requested inclusive line range", async () => {
30
- const dir = await fs.mkdtemp(path.join(os.tmpdir(), "agents-file-read-"));
31
- const filePath = path.join(dir, "example.txt");
32
- await fs.writeFile(filePath, "alpha\nbeta\ngamma\ndelta", "utf-8");
33
-
34
- try {
35
- const readFile = createFileReadExecutor();
36
- const result = await readFile(
37
- { path: filePath, start_line: 2, end_line: 3 },
38
- {
39
- agentId: "agent-1",
40
- conversationId: "conv-1",
41
- iteration: 1,
42
- },
43
- );
44
- expect(result).toBe("2 | beta\n3 | gamma");
45
- } finally {
46
- await fs.rm(dir, { recursive: true, force: true });
47
- }
48
- });
49
-
50
- it("returns image blocks for image files when the model supports images", async () => {
51
- const dir = await fs.mkdtemp(path.join(os.tmpdir(), "agents-file-read-"));
52
- const filePath = path.join(dir, "example.png");
53
- const pngBytes = Buffer.from(
54
- "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8z8BQDwAEhQGAhKmMIQAAAABJRU5ErkJggg==",
55
- "base64",
56
- );
57
- await fs.writeFile(filePath, pngBytes);
58
-
59
- try {
60
- const readFile = createFileReadExecutor();
61
- const result = await readFile(
62
- { path: filePath },
63
- {
64
- agentId: "agent-1",
65
- conversationId: "conv-1",
66
- iteration: 1,
67
- metadata: {
68
- modelSupportsImages: true,
69
- },
70
- },
71
- );
72
- expect(result).toEqual([
73
- {
74
- type: "text",
75
- text: "Successfully read image",
76
- },
77
- {
78
- type: "image",
79
- data: pngBytes.toString("base64"),
80
- mediaType: "image/png",
81
- },
82
- ]);
83
- } finally {
84
- await fs.rm(dir, { recursive: true, force: true });
85
- }
86
- });
87
-
88
- it("returns image blocks for gif files when the model supports images", async () => {
89
- const dir = await fs.mkdtemp(path.join(os.tmpdir(), "agents-file-read-"));
90
- const filePath = path.join(dir, "example.gif");
91
- const gifBytes = Buffer.from(
92
- "R0lGODdhAQABAIABAP///wAAACwAAAAAAQABAAACAkQBADs=",
93
- "base64",
94
- );
95
- await fs.writeFile(filePath, gifBytes);
96
-
97
- try {
98
- const readFile = createFileReadExecutor();
99
- const result = await readFile(
100
- { path: filePath },
101
- {
102
- agentId: "agent-1",
103
- conversationId: "conv-1",
104
- iteration: 1,
105
- metadata: {
106
- modelSupportsImages: true,
107
- },
108
- },
109
- );
110
- expect(result).toEqual([
111
- {
112
- type: "text",
113
- text: "Successfully read image",
114
- },
115
- {
116
- type: "image",
117
- data: gifBytes.toString("base64"),
118
- mediaType: "image/gif",
119
- },
120
- ]);
121
- } finally {
122
- await fs.rm(dir, { recursive: true, force: true });
123
- }
124
- });
125
- });
@@ -1,86 +0,0 @@
1
- import { describe, expect, it } from "vitest";
2
- import {
3
- DEFAULT_MODEL_TOOL_ROUTING_RULES,
4
- resolveToolRoutingConfig,
5
- } from "./model-tool-routing";
6
-
7
- describe("model tool routing", () => {
8
- it("applies default codex/gpt routing in act mode", () => {
9
- const config = resolveToolRoutingConfig(
10
- "openai",
11
- "openai/gpt-5.4",
12
- "act",
13
- DEFAULT_MODEL_TOOL_ROUTING_RULES,
14
- );
15
-
16
- expect(config.enableApplyPatch).toBe(true);
17
- expect(config.enableEditor).toBe(false);
18
- });
19
-
20
- it("does not apply default codex/gpt routing in plan mode", () => {
21
- const config = resolveToolRoutingConfig(
22
- "openai",
23
- "openai/gpt-5.4",
24
- "plan",
25
- DEFAULT_MODEL_TOOL_ROUTING_RULES,
26
- );
27
-
28
- expect(config).toEqual({});
29
- });
30
-
31
- it("applies matching custom rules in order", () => {
32
- const config = resolveToolRoutingConfig(
33
- "anthropic",
34
- "claude-sonnet-4-6",
35
- "act",
36
- [
37
- {
38
- name: "claude-editor-off",
39
- mode: "act",
40
- modelIdIncludes: ["claude"],
41
- disableTools: ["editor"],
42
- },
43
- {
44
- name: "claude-apply-patch-on",
45
- mode: "act",
46
- modelIdIncludes: ["claude"],
47
- enableTools: ["apply_patch"],
48
- },
49
- ],
50
- );
51
-
52
- expect(config.enableEditor).toBe(false);
53
- expect(config.enableApplyPatch).toBe(true);
54
- });
55
-
56
- it("returns empty config when no rules match", () => {
57
- const config = resolveToolRoutingConfig(
58
- "anthropic",
59
- "claude-sonnet-4-6",
60
- "act",
61
- [
62
- {
63
- mode: "act",
64
- modelIdIncludes: ["gpt"],
65
- enableTools: ["apply_patch"],
66
- },
67
- ],
68
- );
69
-
70
- expect(config).toEqual({});
71
- });
72
-
73
- it("can match provider-only rules", () => {
74
- const config = resolveToolRoutingConfig("openai", "o4-mini", "act", [
75
- {
76
- mode: "act",
77
- providerIdIncludes: ["openai"],
78
- enableTools: ["apply_patch"],
79
- disableTools: ["editor"],
80
- },
81
- ]);
82
-
83
- expect(config.enableApplyPatch).toBe(true);
84
- expect(config.enableEditor).toBe(false);
85
- });
86
- });
@@ -1,70 +0,0 @@
1
- import { describe, expect, it } from "vitest";
2
- import {
3
- createDefaultToolsWithPreset,
4
- createToolPoliciesWithPreset,
5
- ToolPresets,
6
- } from "./presets";
7
-
8
- describe("default tool presets", () => {
9
- it("explicitly configures ask_question across presets", () => {
10
- expect(ToolPresets.search.enableAskQuestion).toBe(false);
11
- expect(ToolPresets.development.enableAskQuestion).toBe(true);
12
- expect(ToolPresets.readonly.enableAskQuestion).toBe(true);
13
- expect(ToolPresets.minimal.enableAskQuestion).toBe(true);
14
- expect(ToolPresets.yolo.enableAskQuestion).toBe(false);
15
- });
16
-
17
- it("disables spawn and team tools by default in yolo mode", () => {
18
- expect(ToolPresets.development.enableSpawnAgent).toBe(true);
19
- expect(ToolPresets.development.enableAgentTeams).toBe(true);
20
- expect(ToolPresets.yolo.enableSpawnAgent).toBe(false);
21
- expect(ToolPresets.yolo.enableAgentTeams).toBe(false);
22
- expect(ToolPresets.yolo.enableSubmitAndExit).toBe(true);
23
- });
24
-
25
- it("yolo preset excludes ask_question even when its executor exists", () => {
26
- const tools = createDefaultToolsWithPreset("yolo", {
27
- executors: {
28
- readFile: async () => "ok",
29
- search: async () => "ok",
30
- bash: async () => "ok",
31
- webFetch: async () => "ok",
32
- applyPatch: async () => "ok",
33
- editor: async () => "ok",
34
- skills: async () => "ok",
35
- askQuestion: async () => "ok",
36
- },
37
- });
38
-
39
- expect(tools.map((tool) => tool.name)).toEqual([
40
- "read_files",
41
- "search_codebase",
42
- "run_commands",
43
- "fetch_web_content",
44
- "editor",
45
- "skills",
46
- ]);
47
- });
48
- });
49
-
50
- describe("tool policy presets", () => {
51
- it("returns empty policies for default", () => {
52
- expect(createToolPoliciesWithPreset("default")).toEqual({});
53
- });
54
-
55
- it("yolo preset enables and auto-approves all tools", () => {
56
- const policies = createToolPoliciesWithPreset("yolo");
57
- expect(policies["*"]).toEqual({
58
- enabled: true,
59
- autoApprove: true,
60
- });
61
- expect(policies.ask_question).toEqual({
62
- enabled: true,
63
- autoApprove: true,
64
- });
65
- expect(policies.skills).toEqual({
66
- enabled: true,
67
- autoApprove: true,
68
- });
69
- });
70
- });