@epoch-ai/cli 2.2.4 → 2.2.5

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 (711) hide show
  1. package/LICENSE +21 -0
  2. package/package.json +18 -179
  3. package/.artifacts/unit/junit.xml +0 -2823
  4. package/.project-map/backups/20260530_223453/.project-map.json +0 -90101
  5. package/.project-map/backups/20260530_223507/.project-map.json +0 -90101
  6. package/.project-map/backups/20260530_223512/.project-map.json +0 -90101
  7. package/.project-map/backups/20260530_223512/map.toon +0 -666
  8. package/.project-map/backups/20260530_223516/.project-map.json +0 -90101
  9. package/.project-map/backups/20260530_223516/map.toon +0 -666
  10. package/.project-map/backups/20260530_223520/.project-map.json +0 -90101
  11. package/.project-map/backups/20260530_223520/map.toon +0 -666
  12. package/AGENTS.md +0 -47
  13. package/BUN_SHELL_MIGRATION_PLAN.md +0 -136
  14. package/Dockerfile +0 -18
  15. package/README.md +0 -15
  16. package/bunfig.toml +0 -7
  17. package/drizzle.config.ts +0 -10
  18. package/git +0 -0
  19. package/migration/20260127222353_familiar_lady_ursula/migration.sql +0 -90
  20. package/migration/20260127222353_familiar_lady_ursula/snapshot.json +0 -796
  21. package/migration/20260211171708_add_project_commands/migration.sql +0 -1
  22. package/migration/20260211171708_add_project_commands/snapshot.json +0 -806
  23. package/migration/20260213144116_wakeful_the_professor/migration.sql +0 -11
  24. package/migration/20260213144116_wakeful_the_professor/snapshot.json +0 -897
  25. package/migration/20260225215848_workspace/migration.sql +0 -7
  26. package/migration/20260225215848_workspace/snapshot.json +0 -959
  27. package/migration/20260227213759_add_session_workspace_id/migration.sql +0 -2
  28. package/migration/20260227213759_add_session_workspace_id/snapshot.json +0 -983
  29. package/migration/20260228203230_blue_harpoon/migration.sql +0 -17
  30. package/migration/20260228203230_blue_harpoon/snapshot.json +0 -1102
  31. package/migration/20260303231226_add_workspace_fields/migration.sql +0 -5
  32. package/migration/20260303231226_add_workspace_fields/snapshot.json +0 -1013
  33. package/migration/20260309230000_move_org_to_state/migration.sql +0 -3
  34. package/migration/20260309230000_move_org_to_state/snapshot.json +0 -1156
  35. package/migration/20260312043431_session_message_cursor/migration.sql +0 -4
  36. package/migration/20260312043431_session_message_cursor/snapshot.json +0 -1168
  37. package/migration/20260323234822_events/migration.sql +0 -13
  38. package/migration/20260323234822_events/snapshot.json +0 -1271
  39. package/migration/20260418092949_add_yolo_to_session/migration.sql +0 -2
  40. package/migration/20260418092949_add_yolo_to_session/snapshot.json +0 -1199
  41. package/migration/20260419120000_add_intervention_to_session/migration.sql +0 -2
  42. package/parsers-config.ts +0 -290
  43. package/script/build-node.ts +0 -71
  44. package/script/build.ts +0 -255
  45. package/script/check-migrations.ts +0 -16
  46. package/script/fix-node-pty.ts +0 -28
  47. package/script/publish.ts +0 -184
  48. package/script/schema.ts +0 -63
  49. package/script/seed-e2e.ts +0 -60
  50. package/script/upgrade-opentui.ts +0 -64
  51. package/specs/effect-migration.md +0 -310
  52. package/specs/tui-plugins.md +0 -436
  53. package/specs/v2.md +0 -14
  54. package/src/account/account.sql.ts +0 -39
  55. package/src/account/index.ts +0 -465
  56. package/src/account/repo.ts +0 -163
  57. package/src/account/schema.ts +0 -91
  58. package/src/acp/README.md +0 -174
  59. package/src/acp/agent.ts +0 -1847
  60. package/src/acp/session.ts +0 -116
  61. package/src/acp/types.ts +0 -24
  62. package/src/agent/agent.ts +0 -445
  63. package/src/agent/generate.txt +0 -75
  64. package/src/agent/prompt/compaction.txt +0 -15
  65. package/src/agent/prompt/explore.txt +0 -9
  66. package/src/agent/prompt/summary.txt +0 -11
  67. package/src/agent/prompt/title.txt +0 -44
  68. package/src/auth/index.ts +0 -110
  69. package/src/bus/bus-event.ts +0 -40
  70. package/src/bus/global.ts +0 -10
  71. package/src/bus/index.ts +0 -232
  72. package/src/cli/bootstrap.ts +0 -17
  73. package/src/cli/cmd/account.ts +0 -257
  74. package/src/cli/cmd/acp.ts +0 -70
  75. package/src/cli/cmd/agent.ts +0 -245
  76. package/src/cli/cmd/cmd.ts +0 -7
  77. package/src/cli/cmd/db.ts +0 -119
  78. package/src/cli/cmd/debug/agent.ts +0 -167
  79. package/src/cli/cmd/debug/config.ts +0 -16
  80. package/src/cli/cmd/debug/file.ts +0 -97
  81. package/src/cli/cmd/debug/index.ts +0 -48
  82. package/src/cli/cmd/debug/lsp.ts +0 -53
  83. package/src/cli/cmd/debug/ripgrep.ts +0 -87
  84. package/src/cli/cmd/debug/scrap.ts +0 -16
  85. package/src/cli/cmd/debug/skill.ts +0 -16
  86. package/src/cli/cmd/debug/snapshot.ts +0 -52
  87. package/src/cli/cmd/export.ts +0 -89
  88. package/src/cli/cmd/generate.ts +0 -38
  89. package/src/cli/cmd/github.ts +0 -1639
  90. package/src/cli/cmd/import.ts +0 -169
  91. package/src/cli/cmd/mcp.ts +0 -754
  92. package/src/cli/cmd/models.ts +0 -78
  93. package/src/cli/cmd/plug.ts +0 -233
  94. package/src/cli/cmd/pr.ts +0 -127
  95. package/src/cli/cmd/providers.ts +0 -478
  96. package/src/cli/cmd/run.ts +0 -681
  97. package/src/cli/cmd/serve.ts +0 -24
  98. package/src/cli/cmd/session.ts +0 -159
  99. package/src/cli/cmd/stats.ts +0 -410
  100. package/src/cli/cmd/tui/app.tsx +0 -945
  101. package/src/cli/cmd/tui/attach.ts +0 -88
  102. package/src/cli/cmd/tui/component/border.tsx +0 -21
  103. package/src/cli/cmd/tui/component/dialog-agent.tsx +0 -31
  104. package/src/cli/cmd/tui/component/dialog-command.tsx +0 -171
  105. package/src/cli/cmd/tui/component/dialog-console-org.tsx +0 -103
  106. package/src/cli/cmd/tui/component/dialog-mcp.tsx +0 -86
  107. package/src/cli/cmd/tui/component/dialog-model.tsx +0 -190
  108. package/src/cli/cmd/tui/component/dialog-provider.tsx +0 -364
  109. package/src/cli/cmd/tui/component/dialog-session-list.tsx +0 -108
  110. package/src/cli/cmd/tui/component/dialog-session-rename.tsx +0 -31
  111. package/src/cli/cmd/tui/component/dialog-skill.tsx +0 -36
  112. package/src/cli/cmd/tui/component/dialog-stash.tsx +0 -87
  113. package/src/cli/cmd/tui/component/dialog-status.tsx +0 -168
  114. package/src/cli/cmd/tui/component/dialog-tag.tsx +0 -44
  115. package/src/cli/cmd/tui/component/dialog-theme-list.tsx +0 -50
  116. package/src/cli/cmd/tui/component/dialog-variant.tsx +0 -39
  117. package/src/cli/cmd/tui/component/dialog-workspace-list.tsx +0 -320
  118. package/src/cli/cmd/tui/component/error-component.tsx +0 -92
  119. package/src/cli/cmd/tui/component/logo.tsx +0 -85
  120. package/src/cli/cmd/tui/component/plugin-route-missing.tsx +0 -14
  121. package/src/cli/cmd/tui/component/prompt/autocomplete.tsx +0 -672
  122. package/src/cli/cmd/tui/component/prompt/frecency.tsx +0 -90
  123. package/src/cli/cmd/tui/component/prompt/history.tsx +0 -109
  124. package/src/cli/cmd/tui/component/prompt/index.tsx +0 -1336
  125. package/src/cli/cmd/tui/component/prompt/part.ts +0 -16
  126. package/src/cli/cmd/tui/component/prompt/stash.tsx +0 -101
  127. package/src/cli/cmd/tui/component/spinner.tsx +0 -24
  128. package/src/cli/cmd/tui/component/startup-loading.tsx +0 -63
  129. package/src/cli/cmd/tui/component/textarea-keybindings.ts +0 -73
  130. package/src/cli/cmd/tui/component/todo-item.tsx +0 -32
  131. package/src/cli/cmd/tui/component/workspace/dialog-session-list.tsx +0 -151
  132. package/src/cli/cmd/tui/context/args.tsx +0 -15
  133. package/src/cli/cmd/tui/context/directory.ts +0 -13
  134. package/src/cli/cmd/tui/context/exit.tsx +0 -60
  135. package/src/cli/cmd/tui/context/helper.tsx +0 -25
  136. package/src/cli/cmd/tui/context/keybind.tsx +0 -105
  137. package/src/cli/cmd/tui/context/kv.tsx +0 -52
  138. package/src/cli/cmd/tui/context/local.tsx +0 -456
  139. package/src/cli/cmd/tui/context/plugin-keybinds.ts +0 -41
  140. package/src/cli/cmd/tui/context/prompt.tsx +0 -18
  141. package/src/cli/cmd/tui/context/route.tsx +0 -52
  142. package/src/cli/cmd/tui/context/sdk.tsx +0 -115
  143. package/src/cli/cmd/tui/context/sync.tsx +0 -516
  144. package/src/cli/cmd/tui/context/theme/aura.json +0 -69
  145. package/src/cli/cmd/tui/context/theme/ayu.json +0 -80
  146. package/src/cli/cmd/tui/context/theme/carbonfox.json +0 -248
  147. package/src/cli/cmd/tui/context/theme/catppuccin-frappe.json +0 -233
  148. package/src/cli/cmd/tui/context/theme/catppuccin-macchiato.json +0 -233
  149. package/src/cli/cmd/tui/context/theme/catppuccin.json +0 -112
  150. package/src/cli/cmd/tui/context/theme/cobalt2.json +0 -228
  151. package/src/cli/cmd/tui/context/theme/cursor.json +0 -249
  152. package/src/cli/cmd/tui/context/theme/dracula.json +0 -219
  153. package/src/cli/cmd/tui/context/theme/epochcli.json +0 -245
  154. package/src/cli/cmd/tui/context/theme/everforest.json +0 -241
  155. package/src/cli/cmd/tui/context/theme/flexoki.json +0 -237
  156. package/src/cli/cmd/tui/context/theme/github.json +0 -233
  157. package/src/cli/cmd/tui/context/theme/gruvbox.json +0 -242
  158. package/src/cli/cmd/tui/context/theme/kanagawa.json +0 -77
  159. package/src/cli/cmd/tui/context/theme/lucent-orng.json +0 -237
  160. package/src/cli/cmd/tui/context/theme/material.json +0 -235
  161. package/src/cli/cmd/tui/context/theme/matrix.json +0 -77
  162. package/src/cli/cmd/tui/context/theme/mercury.json +0 -252
  163. package/src/cli/cmd/tui/context/theme/monokai.json +0 -221
  164. package/src/cli/cmd/tui/context/theme/nightowl.json +0 -221
  165. package/src/cli/cmd/tui/context/theme/nord.json +0 -223
  166. package/src/cli/cmd/tui/context/theme/one-dark.json +0 -84
  167. package/src/cli/cmd/tui/context/theme/orng.json +0 -249
  168. package/src/cli/cmd/tui/context/theme/osaka-jade.json +0 -93
  169. package/src/cli/cmd/tui/context/theme/palenight.json +0 -222
  170. package/src/cli/cmd/tui/context/theme/rosepine.json +0 -234
  171. package/src/cli/cmd/tui/context/theme/solarized.json +0 -223
  172. package/src/cli/cmd/tui/context/theme/synthwave84.json +0 -226
  173. package/src/cli/cmd/tui/context/theme/tokyonight.json +0 -243
  174. package/src/cli/cmd/tui/context/theme/vercel.json +0 -245
  175. package/src/cli/cmd/tui/context/theme/vesper.json +0 -218
  176. package/src/cli/cmd/tui/context/theme/zenburn.json +0 -223
  177. package/src/cli/cmd/tui/context/theme.tsx +0 -1236
  178. package/src/cli/cmd/tui/context/tui-config.tsx +0 -9
  179. package/src/cli/cmd/tui/event.ts +0 -48
  180. package/src/cli/cmd/tui/feature-plugins/home/footer.tsx +0 -93
  181. package/src/cli/cmd/tui/feature-plugins/home/tips-view.tsx +0 -145
  182. package/src/cli/cmd/tui/feature-plugins/home/tips.tsx +0 -50
  183. package/src/cli/cmd/tui/feature-plugins/sidebar/context.tsx +0 -63
  184. package/src/cli/cmd/tui/feature-plugins/sidebar/files.tsx +0 -62
  185. package/src/cli/cmd/tui/feature-plugins/sidebar/footer.tsx +0 -93
  186. package/src/cli/cmd/tui/feature-plugins/sidebar/lsp.tsx +0 -66
  187. package/src/cli/cmd/tui/feature-plugins/sidebar/mcp.tsx +0 -96
  188. package/src/cli/cmd/tui/feature-plugins/sidebar/todo.tsx +0 -48
  189. package/src/cli/cmd/tui/feature-plugins/system/plugins.tsx +0 -270
  190. package/src/cli/cmd/tui/plugin/api.tsx +0 -397
  191. package/src/cli/cmd/tui/plugin/index.ts +0 -3
  192. package/src/cli/cmd/tui/plugin/internal.ts +0 -27
  193. package/src/cli/cmd/tui/plugin/runtime.ts +0 -1031
  194. package/src/cli/cmd/tui/plugin/slots.tsx +0 -60
  195. package/src/cli/cmd/tui/routes/home.tsx +0 -84
  196. package/src/cli/cmd/tui/routes/session/dialog-fork-from-timeline.tsx +0 -65
  197. package/src/cli/cmd/tui/routes/session/dialog-message.tsx +0 -110
  198. package/src/cli/cmd/tui/routes/session/dialog-subagent.tsx +0 -26
  199. package/src/cli/cmd/tui/routes/session/dialog-timeline.tsx +0 -47
  200. package/src/cli/cmd/tui/routes/session/footer.tsx +0 -91
  201. package/src/cli/cmd/tui/routes/session/index.tsx +0 -2161
  202. package/src/cli/cmd/tui/routes/session/permission.tsx +0 -691
  203. package/src/cli/cmd/tui/routes/session/question.tsx +0 -468
  204. package/src/cli/cmd/tui/routes/session/sidebar.tsx +0 -70
  205. package/src/cli/cmd/tui/routes/session/subagent-footer.tsx +0 -131
  206. package/src/cli/cmd/tui/thread.ts +0 -241
  207. package/src/cli/cmd/tui/ui/dialog-alert.tsx +0 -59
  208. package/src/cli/cmd/tui/ui/dialog-confirm.tsx +0 -89
  209. package/src/cli/cmd/tui/ui/dialog-export-options.tsx +0 -211
  210. package/src/cli/cmd/tui/ui/dialog-help.tsx +0 -40
  211. package/src/cli/cmd/tui/ui/dialog-prompt.tsx +0 -115
  212. package/src/cli/cmd/tui/ui/dialog-select.tsx +0 -417
  213. package/src/cli/cmd/tui/ui/dialog.tsx +0 -192
  214. package/src/cli/cmd/tui/ui/link.tsx +0 -28
  215. package/src/cli/cmd/tui/ui/spinner.ts +0 -368
  216. package/src/cli/cmd/tui/ui/toast.tsx +0 -100
  217. package/src/cli/cmd/tui/util/clipboard.ts +0 -192
  218. package/src/cli/cmd/tui/util/editor.ts +0 -37
  219. package/src/cli/cmd/tui/util/model.ts +0 -23
  220. package/src/cli/cmd/tui/util/provider-origin.ts +0 -20
  221. package/src/cli/cmd/tui/util/scroll.ts +0 -23
  222. package/src/cli/cmd/tui/util/selection.ts +0 -25
  223. package/src/cli/cmd/tui/util/signal.ts +0 -7
  224. package/src/cli/cmd/tui/util/terminal.ts +0 -114
  225. package/src/cli/cmd/tui/util/transcript.ts +0 -112
  226. package/src/cli/cmd/tui/win32.ts +0 -129
  227. package/src/cli/cmd/tui/worker.ts +0 -195
  228. package/src/cli/cmd/uninstall.ts +0 -353
  229. package/src/cli/cmd/upgrade.ts +0 -73
  230. package/src/cli/cmd/web.ts +0 -81
  231. package/src/cli/effect/prompt.ts +0 -25
  232. package/src/cli/error.ts +0 -46
  233. package/src/cli/heap.ts +0 -59
  234. package/src/cli/logo.ts +0 -6
  235. package/src/cli/network.ts +0 -60
  236. package/src/cli/ui.ts +0 -133
  237. package/src/cli/upgrade.ts +0 -31
  238. package/src/command/index.ts +0 -197
  239. package/src/command/template/initialize.txt +0 -66
  240. package/src/command/template/review.txt +0 -101
  241. package/src/config/config.ts +0 -1610
  242. package/src/config/console-state.ts +0 -15
  243. package/src/config/markdown.ts +0 -99
  244. package/src/config/paths.ts +0 -167
  245. package/src/config/tui-migrate.ts +0 -155
  246. package/src/config/tui-schema.ts +0 -37
  247. package/src/config/tui.ts +0 -179
  248. package/src/config/validator.ts +0 -52
  249. package/src/control-plane/adaptors/index.ts +0 -20
  250. package/src/control-plane/adaptors/worktree.ts +0 -42
  251. package/src/control-plane/schema.ts +0 -17
  252. package/src/control-plane/sse.ts +0 -66
  253. package/src/control-plane/types.ts +0 -32
  254. package/src/control-plane/workspace.sql.ts +0 -17
  255. package/src/control-plane/workspace.ts +0 -168
  256. package/src/effect/cross-spawn-spawner.ts +0 -502
  257. package/src/effect/instance-ref.ts +0 -6
  258. package/src/effect/instance-registry.ts +0 -12
  259. package/src/effect/instance-state.ts +0 -82
  260. package/src/effect/run-service.ts +0 -33
  261. package/src/effect/runner.ts +0 -216
  262. package/src/env/index.ts +0 -28
  263. package/src/file/ignore.ts +0 -82
  264. package/src/file/index.ts +0 -686
  265. package/src/file/protected.ts +0 -59
  266. package/src/file/ripgrep.ts +0 -376
  267. package/src/file/time.ts +0 -133
  268. package/src/file/watcher.ts +0 -172
  269. package/src/filesystem/index.ts +0 -236
  270. package/src/flag/flag.ts +0 -157
  271. package/src/format/formatter.ts +0 -413
  272. package/src/format/index.ts +0 -203
  273. package/src/git/index.ts +0 -303
  274. package/src/global/index.ts +0 -54
  275. package/src/id/id.ts +0 -85
  276. package/src/ide/index.ts +0 -74
  277. package/src/index.ts +0 -253
  278. package/src/installation/index.ts +0 -355
  279. package/src/installation/meta.ts +0 -7
  280. package/src/lsp/client.ts +0 -256
  281. package/src/lsp/index.ts +0 -558
  282. package/src/lsp/language.ts +0 -120
  283. package/src/lsp/launch.ts +0 -21
  284. package/src/lsp/server.ts +0 -1968
  285. package/src/mcp/auth.ts +0 -173
  286. package/src/mcp/index.ts +0 -1250
  287. package/src/mcp/oauth-callback.ts +0 -216
  288. package/src/mcp/oauth-provider.ts +0 -185
  289. package/src/mcp/schema-loader.ts +0 -82
  290. package/src/node.ts +0 -1
  291. package/src/npm/index.ts +0 -188
  292. package/src/patch/index.ts +0 -680
  293. package/src/permission/arity.ts +0 -163
  294. package/src/permission/evaluate.ts +0 -15
  295. package/src/permission/index.ts +0 -323
  296. package/src/permission/schema.ts +0 -17
  297. package/src/plugin/cloudflare.ts +0 -67
  298. package/src/plugin/codex.ts +0 -608
  299. package/src/plugin/github-copilot/copilot.ts +0 -361
  300. package/src/plugin/github-copilot/models.ts +0 -144
  301. package/src/plugin/index.ts +0 -288
  302. package/src/plugin/install.ts +0 -439
  303. package/src/plugin/loader.ts +0 -174
  304. package/src/plugin/meta.ts +0 -188
  305. package/src/plugin/shared.ts +0 -323
  306. package/src/project/bootstrap.ts +0 -29
  307. package/src/project/instance.ts +0 -175
  308. package/src/project/project.sql.ts +0 -16
  309. package/src/project/project.ts +0 -519
  310. package/src/project/schema.ts +0 -16
  311. package/src/project/state.ts +0 -70
  312. package/src/project/vcs.ts +0 -240
  313. package/src/provider/auth.ts +0 -253
  314. package/src/provider/error.ts +0 -297
  315. package/src/provider/models.ts +0 -162
  316. package/src/provider/provider.ts +0 -1776
  317. package/src/provider/schema.ts +0 -38
  318. package/src/provider/sdk/copilot/README.md +0 -5
  319. package/src/provider/sdk/copilot/chat/convert-to-openai-compatible-chat-messages.ts +0 -170
  320. package/src/provider/sdk/copilot/chat/get-response-metadata.ts +0 -15
  321. package/src/provider/sdk/copilot/chat/map-openai-compatible-finish-reason.ts +0 -19
  322. package/src/provider/sdk/copilot/chat/openai-compatible-api-types.ts +0 -64
  323. package/src/provider/sdk/copilot/chat/openai-compatible-chat-language-model.ts +0 -814
  324. package/src/provider/sdk/copilot/chat/openai-compatible-chat-options.ts +0 -28
  325. package/src/provider/sdk/copilot/chat/openai-compatible-metadata-extractor.ts +0 -44
  326. package/src/provider/sdk/copilot/chat/openai-compatible-prepare-tools.ts +0 -83
  327. package/src/provider/sdk/copilot/copilot-provider.ts +0 -100
  328. package/src/provider/sdk/copilot/index.ts +0 -2
  329. package/src/provider/sdk/copilot/openai-compatible-error.ts +0 -27
  330. package/src/provider/sdk/copilot/responses/convert-to-openai-responses-input.ts +0 -335
  331. package/src/provider/sdk/copilot/responses/map-openai-responses-finish-reason.ts +0 -22
  332. package/src/provider/sdk/copilot/responses/openai-config.ts +0 -18
  333. package/src/provider/sdk/copilot/responses/openai-error.ts +0 -22
  334. package/src/provider/sdk/copilot/responses/openai-responses-api-types.ts +0 -214
  335. package/src/provider/sdk/copilot/responses/openai-responses-language-model.ts +0 -1769
  336. package/src/provider/sdk/copilot/responses/openai-responses-prepare-tools.ts +0 -173
  337. package/src/provider/sdk/copilot/responses/openai-responses-settings.ts +0 -1
  338. package/src/provider/sdk/copilot/responses/tool/code-interpreter.ts +0 -87
  339. package/src/provider/sdk/copilot/responses/tool/file-search.ts +0 -127
  340. package/src/provider/sdk/copilot/responses/tool/image-generation.ts +0 -114
  341. package/src/provider/sdk/copilot/responses/tool/local-shell.ts +0 -64
  342. package/src/provider/sdk/copilot/responses/tool/web-search-preview.ts +0 -103
  343. package/src/provider/sdk/copilot/responses/tool/web-search.ts +0 -102
  344. package/src/provider/transform.ts +0 -1124
  345. package/src/pty/index.ts +0 -397
  346. package/src/pty/pty.bun.ts +0 -26
  347. package/src/pty/pty.node.ts +0 -27
  348. package/src/pty/pty.ts +0 -25
  349. package/src/pty/schema.ts +0 -17
  350. package/src/question/index.ts +0 -224
  351. package/src/question/schema.ts +0 -17
  352. package/src/server/error.ts +0 -36
  353. package/src/server/event.ts +0 -7
  354. package/src/server/instance.ts +0 -315
  355. package/src/server/mdns.ts +0 -60
  356. package/src/server/middleware.ts +0 -33
  357. package/src/server/projectors.ts +0 -28
  358. package/src/server/proxy.ts +0 -130
  359. package/src/server/router.ts +0 -105
  360. package/src/server/routes/config.ts +0 -92
  361. package/src/server/routes/event.ts +0 -83
  362. package/src/server/routes/experimental.ts +0 -374
  363. package/src/server/routes/file.ts +0 -197
  364. package/src/server/routes/global.ts +0 -312
  365. package/src/server/routes/mcp.ts +0 -225
  366. package/src/server/routes/permission.ts +0 -69
  367. package/src/server/routes/project.ts +0 -118
  368. package/src/server/routes/provider.ts +0 -171
  369. package/src/server/routes/pty.ts +0 -210
  370. package/src/server/routes/question.ts +0 -99
  371. package/src/server/routes/session.ts +0 -984
  372. package/src/server/routes/tui.ts +0 -378
  373. package/src/server/routes/workspace.ts +0 -94
  374. package/src/server/server.ts +0 -353
  375. package/src/session/compaction.ts +0 -86
  376. package/src/session/index.ts +0 -904
  377. package/src/session/instruction.ts +0 -261
  378. package/src/session/llm/monitor.ts +0 -87
  379. package/src/session/llm.ts +0 -1676
  380. package/src/session/message-v2.ts +0 -1082
  381. package/src/session/message.ts +0 -191
  382. package/src/session/overflow.ts +0 -35
  383. package/src/session/processor.ts +0 -635
  384. package/src/session/projectors.ts +0 -136
  385. package/src/session/prompt/build-switch.txt +0 -5
  386. package/src/session/prompt/builder.ts +0 -135
  387. package/src/session/prompt/default.txt +0 -11
  388. package/src/session/prompt/engine.ts +0 -1072
  389. package/src/session/prompt/gemma4.txt +0 -1
  390. package/src/session/prompt/max-steps.txt +0 -16
  391. package/src/session/prompt/orchestrator.ts +0 -426
  392. package/src/session/prompt/plan.txt +0 -28
  393. package/src/session/prompt/qwen.txt +0 -19
  394. package/src/session/prompt/resolver.ts +0 -670
  395. package/src/session/prompt/router.ts +0 -197
  396. package/src/session/prompt/state.ts +0 -96
  397. package/src/session/prompt/types.ts +0 -115
  398. package/src/session/prompt/utils.ts +0 -15
  399. package/src/session/prompt.ts +0 -362
  400. package/src/session/retry.ts +0 -106
  401. package/src/session/revert.ts +0 -176
  402. package/src/session/sanitizer.ts +0 -125
  403. package/src/session/schema.ts +0 -38
  404. package/src/session/session.sql.ts +0 -106
  405. package/src/session/status.ts +0 -102
  406. package/src/session/summary.ts +0 -183
  407. package/src/session/system.ts +0 -79
  408. package/src/session/todo.ts +0 -166
  409. package/src/session/worker.ts +0 -382
  410. package/src/shell/shell.ts +0 -110
  411. package/src/skill/discovery.ts +0 -116
  412. package/src/skill/index.ts +0 -287
  413. package/src/snapshot/index.ts +0 -726
  414. package/src/sql.d.ts +0 -4
  415. package/src/storage/db.bun.ts +0 -8
  416. package/src/storage/db.node.ts +0 -8
  417. package/src/storage/db.ts +0 -174
  418. package/src/storage/json-migration.ts +0 -387
  419. package/src/storage/schema.sql.ts +0 -10
  420. package/src/storage/schema.ts +0 -4
  421. package/src/storage/storage.ts +0 -353
  422. package/src/sync/README.md +0 -179
  423. package/src/sync/event.sql.ts +0 -16
  424. package/src/sync/index.ts +0 -263
  425. package/src/sync/schema.ts +0 -14
  426. package/src/tool/apply_patch.ts +0 -281
  427. package/src/tool/apply_patch.txt +0 -1
  428. package/src/tool/arbitration.txt +0 -5
  429. package/src/tool/bash.ts +0 -494
  430. package/src/tool/bash.txt +0 -2
  431. package/src/tool/batch.ts +0 -183
  432. package/src/tool/batch.txt +0 -1
  433. package/src/tool/codesearch.ts +0 -132
  434. package/src/tool/codesearch.txt +0 -1
  435. package/src/tool/edit.ts +0 -734
  436. package/src/tool/edit.txt +0 -1
  437. package/src/tool/external-directory.ts +0 -46
  438. package/src/tool/glob.ts +0 -73
  439. package/src/tool/glob.txt +0 -2
  440. package/src/tool/grep.ts +0 -156
  441. package/src/tool/grep.txt +0 -2
  442. package/src/tool/invalid.ts +0 -20
  443. package/src/tool/ls.ts +0 -121
  444. package/src/tool/ls.txt +0 -1
  445. package/src/tool/lsp.ts +0 -97
  446. package/src/tool/lsp.txt +0 -1
  447. package/src/tool/multiedit.ts +0 -46
  448. package/src/tool/multiedit.txt +0 -1
  449. package/src/tool/plan-enter.txt +0 -14
  450. package/src/tool/plan-exit.txt +0 -13
  451. package/src/tool/plan.ts +0 -131
  452. package/src/tool/question.ts +0 -46
  453. package/src/tool/question.txt +0 -10
  454. package/src/tool/read.ts +0 -332
  455. package/src/tool/read.txt +0 -1
  456. package/src/tool/registry.ts +0 -288
  457. package/src/tool/revert.ts +0 -37
  458. package/src/tool/schema.ts +0 -17
  459. package/src/tool/skill.ts +0 -105
  460. package/src/tool/task.ts +0 -150
  461. package/src/tool/task.txt +0 -3
  462. package/src/tool/task_complete.ts +0 -21
  463. package/src/tool/tool.ts +0 -112
  464. package/src/tool/truncate.ts +0 -144
  465. package/src/tool/truncation-dir.ts +0 -4
  466. package/src/tool/webfetch.ts +0 -206
  467. package/src/tool/webfetch.txt +0 -1
  468. package/src/tool/websearch.ts +0 -150
  469. package/src/tool/websearch.txt +0 -1
  470. package/src/tool/write.ts +0 -101
  471. package/src/tool/write.txt +0 -1
  472. package/src/util/abort.ts +0 -35
  473. package/src/util/ai-sdk.ts +0 -59
  474. package/src/util/archive.ts +0 -17
  475. package/src/util/color.ts +0 -19
  476. package/src/util/context.ts +0 -25
  477. package/src/util/data-url.ts +0 -9
  478. package/src/util/defer.ts +0 -12
  479. package/src/util/effect-http-client.ts +0 -11
  480. package/src/util/effect-zod.ts +0 -98
  481. package/src/util/error.ts +0 -77
  482. package/src/util/filesystem.ts +0 -245
  483. package/src/util/flock.ts +0 -333
  484. package/src/util/fn.ts +0 -21
  485. package/src/util/format.ts +0 -20
  486. package/src/util/glob.ts +0 -34
  487. package/src/util/hash.ts +0 -7
  488. package/src/util/iife.ts +0 -3
  489. package/src/util/keybind.ts +0 -103
  490. package/src/util/lazy.ts +0 -23
  491. package/src/util/locale.ts +0 -81
  492. package/src/util/lock.ts +0 -98
  493. package/src/util/log-parser.ts +0 -114
  494. package/src/util/log.ts +0 -250
  495. package/src/util/network.ts +0 -23
  496. package/src/util/process.ts +0 -176
  497. package/src/util/queue.ts +0 -32
  498. package/src/util/record.ts +0 -3
  499. package/src/util/rpc.ts +0 -66
  500. package/src/util/schema.ts +0 -53
  501. package/src/util/scrap.ts +0 -10
  502. package/src/util/session-analyzer.ts +0 -331
  503. package/src/util/session-telemetry.ts +0 -91
  504. package/src/util/signal.ts +0 -12
  505. package/src/util/timeout.ts +0 -14
  506. package/src/util/token.ts +0 -7
  507. package/src/util/tokenizer.ts +0 -50
  508. package/src/util/toon.ts +0 -45
  509. package/src/util/update-schema.ts +0 -13
  510. package/src/util/which.ts +0 -14
  511. package/src/util/wildcard.ts +0 -59
  512. package/src/worktree/index.ts +0 -612
  513. package/sst-env.d.ts +0 -10
  514. package/test/AGENTS.md +0 -81
  515. package/test/account/repo.test.ts +0 -326
  516. package/test/account/service.test.ts +0 -393
  517. package/test/acp/agent-interface.test.ts +0 -51
  518. package/test/acp/event-subscription.test.ts +0 -685
  519. package/test/agent/agent.test.ts +0 -716
  520. package/test/auth/auth.test.ts +0 -58
  521. package/test/bus/bus-effect.test.ts +0 -164
  522. package/test/bus/bus-integration.test.ts +0 -87
  523. package/test/bus/bus.test.ts +0 -219
  524. package/test/cli/account.test.ts +0 -26
  525. package/test/cli/cmd/tui/prompt-part.test.ts +0 -47
  526. package/test/cli/github-action.test.ts +0 -198
  527. package/test/cli/github-remote.test.ts +0 -80
  528. package/test/cli/plugin-auth-picker.test.ts +0 -120
  529. package/test/cli/tui/keybind-plugin.test.ts +0 -90
  530. package/test/cli/tui/plugin-add.test.ts +0 -107
  531. package/test/cli/tui/plugin-install.test.ts +0 -89
  532. package/test/cli/tui/plugin-lifecycle.test.ts +0 -225
  533. package/test/cli/tui/plugin-loader-entrypoint.test.ts +0 -492
  534. package/test/cli/tui/plugin-loader-pure.test.ts +0 -72
  535. package/test/cli/tui/plugin-loader.test.ts +0 -752
  536. package/test/cli/tui/plugin-toggle.test.ts +0 -159
  537. package/test/cli/tui/slot-replace.test.tsx +0 -47
  538. package/test/cli/tui/theme-store.test.ts +0 -51
  539. package/test/cli/tui/thread.test.ts +0 -128
  540. package/test/cli/tui/transcript.test.ts +0 -426
  541. package/test/config/agent-color.test.ts +0 -71
  542. package/test/config/config.test.ts +0 -2337
  543. package/test/config/fixtures/empty-frontmatter.md +0 -4
  544. package/test/config/fixtures/frontmatter.md +0 -28
  545. package/test/config/fixtures/markdown-header.md +0 -11
  546. package/test/config/fixtures/no-frontmatter.md +0 -1
  547. package/test/config/fixtures/weird-model-id.md +0 -13
  548. package/test/config/markdown.test.ts +0 -228
  549. package/test/config/tui.test.ts +0 -800
  550. package/test/control-plane/sse.test.ts +0 -56
  551. package/test/effect/cross-spawn-spawner.test.ts +0 -412
  552. package/test/effect/instance-state.test.ts +0 -482
  553. package/test/effect/run-service.test.ts +0 -46
  554. package/test/effect/runner.test.ts +0 -523
  555. package/test/fake/provider.ts +0 -82
  556. package/test/file/fsmonitor.test.ts +0 -62
  557. package/test/file/ignore.test.ts +0 -10
  558. package/test/file/index.test.ts +0 -946
  559. package/test/file/path-traversal.test.ts +0 -198
  560. package/test/file/ripgrep.test.ts +0 -54
  561. package/test/file/time.test.ts +0 -445
  562. package/test/file/watcher.test.ts +0 -247
  563. package/test/filesystem/filesystem.test.ts +0 -319
  564. package/test/fixture/db.ts +0 -11
  565. package/test/fixture/fixture.test.ts +0 -26
  566. package/test/fixture/fixture.ts +0 -172
  567. package/test/fixture/flock-worker.ts +0 -72
  568. package/test/fixture/lsp/fake-lsp-server.js +0 -77
  569. package/test/fixture/plug-worker.ts +0 -93
  570. package/test/fixture/plugin-meta-worker.ts +0 -26
  571. package/test/fixture/skills/agents-sdk/SKILL.md +0 -152
  572. package/test/fixture/skills/agents-sdk/references/callable.md +0 -92
  573. package/test/fixture/skills/cloudflare/SKILL.md +0 -211
  574. package/test/fixture/skills/index.json +0 -6
  575. package/test/fixture/tui-plugin.ts +0 -328
  576. package/test/fixture/tui-runtime.ts +0 -27
  577. package/test/format/format.test.ts +0 -171
  578. package/test/git/git.test.ts +0 -128
  579. package/test/ide/ide.test.ts +0 -82
  580. package/test/installation/installation.test.ts +0 -152
  581. package/test/keybind.test.ts +0 -421
  582. package/test/lib/effect.ts +0 -53
  583. package/test/lib/filesystem.ts +0 -10
  584. package/test/lib/llm-server.ts +0 -794
  585. package/test/lsp/client.test.ts +0 -95
  586. package/test/lsp/index.test.ts +0 -133
  587. package/test/lsp/launch.test.ts +0 -22
  588. package/test/lsp/lifecycle.test.ts +0 -147
  589. package/test/mcp/headers.test.ts +0 -153
  590. package/test/mcp/lifecycle.test.ts +0 -750
  591. package/test/mcp/oauth-auto-connect.test.ts +0 -199
  592. package/test/mcp/oauth-browser.test.ts +0 -249
  593. package/test/mcp/sc-approve-validator.test.ts +0 -431
  594. package/test/memory/abort-leak.test.ts +0 -137
  595. package/test/npm.test.ts +0 -18
  596. package/test/patch/patch.test.ts +0 -348
  597. package/test/permission/arity.test.ts +0 -33
  598. package/test/permission/next.test.ts +0 -1123
  599. package/test/permission-task.test.ts +0 -323
  600. package/test/plugin/auth-override.test.ts +0 -74
  601. package/test/plugin/codex.test.ts +0 -123
  602. package/test/plugin/github-copilot-models.test.ts +0 -117
  603. package/test/plugin/install-concurrency.test.ts +0 -140
  604. package/test/plugin/install.test.ts +0 -570
  605. package/test/plugin/loader-shared.test.ts +0 -1136
  606. package/test/plugin/meta.test.ts +0 -137
  607. package/test/plugin/shared.test.ts +0 -88
  608. package/test/plugin/trigger.test.ts +0 -111
  609. package/test/preload.ts +0 -90
  610. package/test/project/migrate-global.test.ts +0 -140
  611. package/test/project/project.test.ts +0 -459
  612. package/test/project/state.test.ts +0 -115
  613. package/test/project/vcs.test.ts +0 -228
  614. package/test/project/worktree-remove.test.ts +0 -96
  615. package/test/project/worktree.test.ts +0 -173
  616. package/test/provider/amazon-bedrock.test.ts +0 -447
  617. package/test/provider/copilot/convert-to-copilot-messages.test.ts +0 -523
  618. package/test/provider/copilot/copilot-chat-model.test.ts +0 -592
  619. package/test/provider/error.test.ts +0 -49
  620. package/test/provider/gitlab-duo.test.ts +0 -412
  621. package/test/provider/provider.test.ts +0 -2494
  622. package/test/provider/transform.test.ts +0 -2944
  623. package/test/pty/pty-output-isolation.test.ts +0 -141
  624. package/test/pty/pty-session.test.ts +0 -92
  625. package/test/pty/pty-shell.test.ts +0 -59
  626. package/test/question/question.test.ts +0 -453
  627. package/test/server/global-session-list.test.ts +0 -89
  628. package/test/server/project-init-git.test.ts +0 -121
  629. package/test/server/session-actions.test.ts +0 -83
  630. package/test/server/session-list.test.ts +0 -98
  631. package/test/server/session-messages.test.ts +0 -159
  632. package/test/server/session-select.test.ts +0 -84
  633. package/test/session/compaction.test.ts +0 -683
  634. package/test/session/continuity-handover.test.ts +0 -620
  635. package/test/session/deterministic-handover.test.ts +0 -328
  636. package/test/session/doom-protection.test.ts +0 -247
  637. package/test/session/hard-reset.test.ts +0 -179
  638. package/test/session/instruction.test.ts +0 -286
  639. package/test/session/llm/monitor.test.ts +0 -53
  640. package/test/session/llm-sanitizer.test.ts +0 -90
  641. package/test/session/llm-zones-e2e.test.ts +0 -61
  642. package/test/session/llm.test.ts +0 -1308
  643. package/test/session/mcpx-normalization.test.ts +0 -86
  644. package/test/session/mcpx-syntax-recovery.test.ts +0 -28
  645. package/test/session/message-v2.test.ts +0 -957
  646. package/test/session/messages-pagination.test.ts +0 -885
  647. package/test/session/processor-effect.test.ts +0 -805
  648. package/test/session/prompt/builder.test.ts +0 -71
  649. package/test/session/prompt/engine-loop.test.ts +0 -80
  650. package/test/session/prompt/orchestrator.test.ts +0 -108
  651. package/test/session/prompt/resolver.test.ts +0 -211
  652. package/test/session/prompt/router.test.ts +0 -84
  653. package/test/session/prompt/state.test.ts +0 -57
  654. package/test/session/prompt-effect.test.ts +0 -1241
  655. package/test/session/prompt.test.ts +0 -522
  656. package/test/session/refactor-system-zones.test.ts +0 -241
  657. package/test/session/retry.test.ts +0 -232
  658. package/test/session/revert-compact.test.ts +0 -621
  659. package/test/session/sanitizer.test.ts +0 -61
  660. package/test/session/session.test.ts +0 -142
  661. package/test/session/snapshot-tool-race.test.ts +0 -242
  662. package/test/session/structured-output-integration.test.ts +0 -233
  663. package/test/session/structured-output.test.ts +0 -391
  664. package/test/session/system.test.ts +0 -59
  665. package/test/session/telemetry.test.ts +0 -35
  666. package/test/shell/shell.test.ts +0 -73
  667. package/test/skill/discovery.test.ts +0 -116
  668. package/test/skill/skill.test.ts +0 -392
  669. package/test/snapshot/snapshot.test.ts +0 -1404
  670. package/test/storage/db.test.ts +0 -14
  671. package/test/storage/json-migration.test.ts +0 -791
  672. package/test/storage/storage.test.ts +0 -295
  673. package/test/sync/index.test.ts +0 -191
  674. package/test/tool/__snapshots__/tool.test.ts.snap +0 -9
  675. package/test/tool/apply_patch.test.ts +0 -567
  676. package/test/tool/bash.test.ts +0 -1099
  677. package/test/tool/edit.test.ts +0 -681
  678. package/test/tool/external-directory.test.ts +0 -198
  679. package/test/tool/fixtures/large-image.png +0 -0
  680. package/test/tool/fixtures/models-api.json +0 -65179
  681. package/test/tool/grep.test.ts +0 -111
  682. package/test/tool/question.test.ts +0 -126
  683. package/test/tool/read.test.ts +0 -468
  684. package/test/tool/registry.test.ts +0 -126
  685. package/test/tool/skill.test.ts +0 -167
  686. package/test/tool/task.test.ts +0 -49
  687. package/test/tool/tool-define.test.ts +0 -101
  688. package/test/tool/truncation.test.ts +0 -161
  689. package/test/tool/webfetch.test.ts +0 -101
  690. package/test/tool/write.test.ts +0 -354
  691. package/test/util/data-url.test.ts +0 -14
  692. package/test/util/effect-zod.test.ts +0 -61
  693. package/test/util/error.test.ts +0 -38
  694. package/test/util/filesystem.test.ts +0 -656
  695. package/test/util/flock.test.ts +0 -383
  696. package/test/util/format.test.ts +0 -59
  697. package/test/util/glob.test.ts +0 -164
  698. package/test/util/iife.test.ts +0 -36
  699. package/test/util/lazy.test.ts +0 -50
  700. package/test/util/lock.test.ts +0 -72
  701. package/test/util/log-parser.test.ts +0 -61
  702. package/test/util/module.test.ts +0 -59
  703. package/test/util/process.test.ts +0 -128
  704. package/test/util/telemetry-integration.test.ts +0 -104
  705. package/test/util/timeout.test.ts +0 -21
  706. package/test/util/which.test.ts +0 -100
  707. package/test/util/wildcard.test.ts +0 -90
  708. package/test-regex.js +0 -50
  709. package/tsconfig.json +0 -23
  710. /package/bin/{epochcli → epochcli.cjs} +0 -0
  711. /package/{script/postinstall.mjs → postinstall.mjs} +0 -0
@@ -1,2823 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <testsuites name="bun test" tests="1864" assertions="5571" failures="0" skipped="22" time="82.519412637">
3
- <testsuite name="test/permission-task.test.ts" file="test/permission-task.test.ts" tests="21" assertions="45" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
4
- <testsuite name="Permission.evaluate for permission.task" file="test/permission-task.test.ts" line="11" tests="9" assertions="16" failures="0" skipped="0" time="0.004" hostname="benmurray-MS-7C84">
5
- <testcase name="returns ask when no match (default)" classname="Permission.evaluate for permission.task" time="0.003" file="test/permission-task.test.ts" line="19" assertions="1" />
6
- <testcase name="returns deny for explicit deny" classname="Permission.evaluate for permission.task" time="0" file="test/permission-task.test.ts" line="23" assertions="1" />
7
- <testcase name="returns allow for explicit allow" classname="Permission.evaluate for permission.task" time="0" file="test/permission-task.test.ts" line="28" assertions="1" />
8
- <testcase name="returns ask for explicit ask" classname="Permission.evaluate for permission.task" time="0" file="test/permission-task.test.ts" line="33" assertions="1" />
9
- <testcase name="matches wildcard patterns with deny" classname="Permission.evaluate for permission.task" time="0" file="test/permission-task.test.ts" line="38" assertions="3" />
10
- <testcase name="matches wildcard patterns with allow" classname="Permission.evaluate for permission.task" time="0" file="test/permission-task.test.ts" line="45" assertions="2" />
11
- <testcase name="matches wildcard patterns with ask" classname="Permission.evaluate for permission.task" time="0" file="test/permission-task.test.ts" line="51" assertions="2" />
12
- <testcase name="later rules take precedence (last match wins)" classname="Permission.evaluate for permission.task" time="0" file="test/permission-task.test.ts" line="58" assertions="2" />
13
- <testcase name="matches global wildcard" classname="Permission.evaluate for permission.task" time="0.001" file="test/permission-task.test.ts" line="67" assertions="3" />
14
- </testsuite>
15
- <testsuite name="Permission.disabled for task tool" file="test/permission-task.test.ts" line="74" tests="6" assertions="6" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
16
- <testcase name="task tool is disabled when global deny pattern exists (even with specific allows)" classname="Permission.disabled for task tool" time="0" file="test/permission-task.test.ts" line="85" assertions="1" />
17
- <testcase name="task tool is disabled when global deny pattern exists (even with ask overrides)" classname="Permission.disabled for task tool" time="0" file="test/permission-task.test.ts" line="97" assertions="1" />
18
- <testcase name="task tool is disabled when global deny pattern exists" classname="Permission.disabled for task tool" time="0" file="test/permission-task.test.ts" line="107" assertions="1" />
19
- <testcase name="task tool is NOT disabled when only specific patterns are denied (no wildcard)" classname="Permission.disabled for task tool" time="0" file="test/permission-task.test.ts" line="113" assertions="1" />
20
- <testcase name="task tool is enabled when no task rules exist (default ask)" classname="Permission.disabled for task tool" time="0" file="test/permission-task.test.ts" line="125" assertions="1" />
21
- <testcase name="task tool is NOT disabled when last wildcard pattern is allow" classname="Permission.disabled for task tool" time="0" file="test/permission-task.test.ts" line="130" assertions="1" />
22
- </testsuite>
23
- <testsuite name="permission.task with real config files" file="test/permission-task.test.ts" line="145" tests="6" assertions="23" failures="0" skipped="0" time="0.305" hostname="benmurray-MS-7C84">
24
- <testcase name="loads task permissions from epochcli.json config" classname="permission.task with real config files" time="0.083001" file="test/permission-task.test.ts" line="146" assertions="3" />
25
- <testcase name="loads task permissions with wildcard patterns from config" classname="permission.task with real config files" time="0.057001" file="test/permission-task.test.ts" line="171" assertions="3" />
26
- <testcase name="evaluate respects task permission from config" classname="permission.task with real config files" time="0.036001" file="test/permission-task.test.ts" line="196" assertions="3" />
27
- <testcase name="mixed permission config with task and other tools" classname="permission.task with real config files" time="0.049001" file="test/permission-task.test.ts" line="221" assertions="7" />
28
- <testcase name="task tool disabled when global deny comes last in config" classname="permission.task with real config files" time="0.040001" file="test/permission-task.test.ts" line="260" assertions="4" />
29
- <testcase name="task tool NOT disabled when specific allow comes last in config" classname="permission.task with real config files" time="0.040001" file="test/permission-task.test.ts" line="292" assertions="3" />
30
- </testsuite>
31
- </testsuite>
32
- <testsuite name="test/keybind.test.ts" file="test/keybind.test.ts" tests="47" assertions="47" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
33
- <testsuite name="Keybind.toString" file="test/keybind.test.ts" line="4" tests="16" assertions="16" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
34
- <testcase name="should convert simple key to string" classname="Keybind.toString" time="0" file="test/keybind.test.ts" line="5" assertions="1" />
35
- <testcase name="should convert ctrl modifier to string" classname="Keybind.toString" time="0" file="test/keybind.test.ts" line="10" assertions="1" />
36
- <testcase name="should convert leader key to string" classname="Keybind.toString" time="0" file="test/keybind.test.ts" line="15" assertions="1" />
37
- <testcase name="should convert multiple modifiers to string" classname="Keybind.toString" time="0" file="test/keybind.test.ts" line="20" assertions="1" />
38
- <testcase name="should convert all modifiers to string" classname="Keybind.toString" time="0" file="test/keybind.test.ts" line="25" assertions="1" />
39
- <testcase name="should convert shift modifier to string" classname="Keybind.toString" time="0" file="test/keybind.test.ts" line="30" assertions="1" />
40
- <testcase name="should convert function key to string" classname="Keybind.toString" time="0" file="test/keybind.test.ts" line="41" assertions="1" />
41
- <testcase name="should convert special key to string" classname="Keybind.toString" time="0" file="test/keybind.test.ts" line="46" assertions="1" />
42
- <testcase name="should handle empty name" classname="Keybind.toString" time="0" file="test/keybind.test.ts" line="57" assertions="1" />
43
- <testcase name="should handle only modifiers" classname="Keybind.toString" time="0" file="test/keybind.test.ts" line="62" assertions="1" />
44
- <testcase name="should handle only leader with no other parts" classname="Keybind.toString" time="0" file="test/keybind.test.ts" line="67" assertions="1" />
45
- <testcase name="should convert super modifier to string" classname="Keybind.toString" time="0" file="test/keybind.test.ts" line="72" assertions="1" />
46
- <testcase name="should convert super+shift modifier to string" classname="Keybind.toString" time="0" file="test/keybind.test.ts" line="77" assertions="1" />
47
- <testcase name="should handle super with ctrl modifier" classname="Keybind.toString" time="0" file="test/keybind.test.ts" line="82" assertions="1" />
48
- <testcase name="should handle super with all modifiers" classname="Keybind.toString" time="0" file="test/keybind.test.ts" line="87" assertions="1" />
49
- <testcase name="should handle undefined super field (omitted)" classname="Keybind.toString" time="0" file="test/keybind.test.ts" line="92" assertions="1" />
50
- </testsuite>
51
- <testsuite name="Keybind.match" file="test/keybind.test.ts" line="98" tests="13" assertions="13" failures="0" skipped="0" time="0.001" hostname="benmurray-MS-7C84">
52
- <testcase name="should match identical keybinds" classname="Keybind.match" time="0" file="test/keybind.test.ts" line="99" assertions="1" />
53
- <testcase name="should not match different key names" classname="Keybind.match" time="0" file="test/keybind.test.ts" line="105" assertions="1" />
54
- <testcase name="should not match different modifiers" classname="Keybind.match" time="0" file="test/keybind.test.ts" line="111" assertions="1" />
55
- <testcase name="should match leader keybinds" classname="Keybind.match" time="0" file="test/keybind.test.ts" line="117" assertions="1" />
56
- <testcase name="should not match leader vs non-leader" classname="Keybind.match" time="0" file="test/keybind.test.ts" line="123" assertions="1" />
57
- <testcase name="should match complex keybinds" classname="Keybind.match" time="0" file="test/keybind.test.ts" line="129" assertions="1" />
58
- <testcase name="should not match with one modifier different" classname="Keybind.match" time="0" file="test/keybind.test.ts" line="135" assertions="1" />
59
- <testcase name="should match simple key without modifiers" classname="Keybind.match" time="0.001" file="test/keybind.test.ts" line="141" assertions="1" />
60
- <testcase name="should match super modifier keybinds" classname="Keybind.match" time="0" file="test/keybind.test.ts" line="147" assertions="1" />
61
- <testcase name="should not match super vs non-super" classname="Keybind.match" time="0" file="test/keybind.test.ts" line="153" assertions="1" />
62
- <testcase name="should match undefined super with false super" classname="Keybind.match" time="0" file="test/keybind.test.ts" line="159" assertions="1" />
63
- <testcase name="should match super+shift combination" classname="Keybind.match" time="0" file="test/keybind.test.ts" line="165" assertions="1" />
64
- <testcase name="should not match when only super differs" classname="Keybind.match" time="0" file="test/keybind.test.ts" line="171" assertions="1" />
65
- </testsuite>
66
- <testsuite name="Keybind.parse" file="test/keybind.test.ts" line="178" tests="18" assertions="18" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
67
- <testcase name="should parse simple key" classname="Keybind.parse" time="0" file="test/keybind.test.ts" line="179" assertions="1" />
68
- <testcase name="should parse leader key syntax" classname="Keybind.parse" time="0" file="test/keybind.test.ts" line="192" assertions="1" />
69
- <testcase name="should parse ctrl modifier" classname="Keybind.parse" time="0" file="test/keybind.test.ts" line="205" assertions="1" />
70
- <testcase name="should parse multiple modifiers" classname="Keybind.parse" time="0" file="test/keybind.test.ts" line="218" assertions="1" />
71
- <testcase name="should parse shift modifier" classname="Keybind.parse" time="0" file="test/keybind.test.ts" line="231" assertions="1" />
72
- <testcase name="should parse meta/alt modifier" classname="Keybind.parse" time="0" file="test/keybind.test.ts" line="244" assertions="1" />
73
- <testcase name="should parse leader with modifier" classname="Keybind.parse" time="0" file="test/keybind.test.ts" line="257" assertions="1" />
74
- <testcase name="should parse multiple keybinds separated by comma" classname="Keybind.parse" time="0" file="test/keybind.test.ts" line="270" assertions="1" />
75
- <testcase name="should parse shift+return combination" classname="Keybind.parse" time="0" file="test/keybind.test.ts" line="290" assertions="1" />
76
- <testcase name="should parse ctrl+j combination" classname="Keybind.parse" time="0" file="test/keybind.test.ts" line="303" assertions="1" />
77
- <testcase name="should handle &apos;none&apos; value" classname="Keybind.parse" time="0" file="test/keybind.test.ts" line="316" assertions="1" />
78
- <testcase name="should handle special keys" classname="Keybind.parse" time="0" file="test/keybind.test.ts" line="321" assertions="1" />
79
- <testcase name="should handle function keys" classname="Keybind.parse" time="0" file="test/keybind.test.ts" line="334" assertions="1" />
80
- <testcase name="should handle complex multi-modifier combination" classname="Keybind.parse" time="0" file="test/keybind.test.ts" line="347" assertions="1" />
81
- <testcase name="should be case insensitive" classname="Keybind.parse" time="0" file="test/keybind.test.ts" line="360" assertions="1" />
82
- <testcase name="should parse super modifier" classname="Keybind.parse" time="0" file="test/keybind.test.ts" line="373" assertions="1" />
83
- <testcase name="should parse super with shift modifier" classname="Keybind.parse" time="0" file="test/keybind.test.ts" line="387" assertions="1" />
84
- <testcase name="should parse multiple keybinds with super" classname="Keybind.parse" time="0" file="test/keybind.test.ts" line="401" assertions="1" />
85
- </testsuite>
86
- </testsuite>
87
- <testsuite name="test/npm.test.ts" file="test/npm.test.ts" tests="2" assertions="4" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
88
- <testsuite name="Npm.sanitize" file="test/npm.test.ts" line="6" tests="2" assertions="4" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
89
- <testcase name="keeps normal scoped package specs unchanged" classname="Npm.sanitize" time="0" file="test/npm.test.ts" line="7" assertions="3" />
90
- <testcase name="handles git https specs" classname="Npm.sanitize" time="0" file="test/npm.test.ts" line="13" assertions="1" />
91
- </testsuite>
92
- </testsuite>
93
- <testsuite name="test/project/project.test.ts" file="test/project/project.test.ts" tests="27" assertions="66" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
94
- <testsuite name="Project.fromDirectory" file="test/project/project.test.ts" line="61" tests="4" assertions="12" failures="0" skipped="0" time="0.088" hostname="benmurray-MS-7C84">
95
- <testcase name="should handle git repository with no commits" classname="Project.fromDirectory" time="0.015" file="test/project/project.test.ts" line="62" assertions="5" />
96
- <testcase name="should handle git repository with commits" classname="Project.fromDirectory" time="0.031" file="test/project/project.test.ts" line="77" assertions="5" />
97
- <testcase name="returns global for non-git directory" classname="Project.fromDirectory" time="0.002" file="test/project/project.test.ts" line="91" assertions="1" />
98
- <testcase name="derives stable project ID from root commit" classname="Project.fromDirectory" time="0.040001" file="test/project/project.test.ts" line="97" assertions="1" />
99
- </testsuite>
100
- <testsuite name="Project.fromDirectory git failure paths" file="test/project/project.test.ts" line="105" tests="3" assertions="7" failures="0" skipped="0" time="0.065" hostname="benmurray-MS-7C84">
101
- <testcase name="keeps vcs when rev-list exits non-zero (no commits)" classname="Project.fromDirectory git failure paths" time="0.012" file="test/project/project.test.ts" line="106" assertions="3" />
102
- <testcase name="handles show-toplevel failure gracefully" classname="Project.fromDirectory git failure paths" time="0.027" file="test/project/project.test.ts" line="117" assertions="2" />
103
- <testcase name="handles git-common-dir failure gracefully" classname="Project.fromDirectory git failure paths" time="0.026" file="test/project/project.test.ts" line="128" assertions="2" />
104
- </testsuite>
105
- <testsuite name="Project.fromDirectory with worktrees" file="test/project/project.test.ts" line="140" tests="5" assertions="14" failures="0" skipped="0" time="0.248" hostname="benmurray-MS-7C84">
106
- <testcase name="should set worktree to root when called from root" classname="Project.fromDirectory with worktrees" time="0.032" file="test/project/project.test.ts" line="141" assertions="3" />
107
- <testcase name="should set worktree to root when called from a worktree" classname="Project.fromDirectory with worktrees" time="0.044001" file="test/project/project.test.ts" line="151" assertions="4" />
108
- <testcase name="worktree should share project ID with main repo" classname="Project.fromDirectory with worktrees" time="0.051001" file="test/project/project.test.ts" line="172" assertions="2" />
109
- <testcase name="separate clones of the same repo should share project ID" classname="Project.fromDirectory with worktrees" time="0.054001" file="test/project/project.test.ts" line="197" assertions="1" />
110
- <testcase name="should accumulate multiple worktrees in sandboxes" classname="Project.fromDirectory with worktrees" time="0.067001" file="test/project/project.test.ts" line="216" assertions="4" />
111
- </testsuite>
112
- <testsuite name="Project.discover" file="test/project/project.test.ts" line="245" tests="2" assertions="7" failures="0" skipped="0" time="0.064" hostname="benmurray-MS-7C84">
113
- <testcase name="should discover favicon.png in root" classname="Project.discover" time="0.032" file="test/project/project.test.ts" line="246" assertions="5" />
114
- <testcase name="should not discover non-image files" classname="Project.discover" time="0.032" file="test/project/project.test.ts" line="263" assertions="2" />
115
- </testsuite>
116
- <testsuite name="Project.update" file="test/project/project.test.ts" line="277" tests="7" assertions="16" failures="0" skipped="0" time="0.171" hostname="benmurray-MS-7C84">
117
- <testcase name="should update name" classname="Project.update" time="0.03" file="test/project/project.test.ts" line="278" assertions="2" />
118
- <testcase name="should update icon url" classname="Project.update" time="0.029" file="test/project/project.test.ts" line="293" assertions="2" />
119
- <testcase name="should update icon color" classname="Project.update" time="0.03" file="test/project/project.test.ts" line="308" assertions="2" />
120
- <testcase name="should update commands" classname="Project.update" time="0.029" file="test/project/project.test.ts" line="323" assertions="2" />
121
- <testcase name="should throw error when project not found" classname="Project.update" time="0.001" file="test/project/project.test.ts" line="338" assertions="1" />
122
- <testcase name="should emit GlobalBus event on update" classname="Project.update" time="0.027" file="test/project/project.test.ts" line="347" assertions="3" />
123
- <testcase name="should update multiple fields at once" classname="Project.update" time="0.025" file="test/project/project.test.ts" line="371" assertions="4" />
124
- </testsuite>
125
- <testsuite name="Project.list and Project.get" file="test/project/project.test.ts" line="389" tests="3" assertions="5" failures="0" skipped="0" time="0.064" hostname="benmurray-MS-7C84">
126
- <testcase name="list returns all projects" classname="Project.list and Project.get" time="0.034" file="test/project/project.test.ts" line="390" assertions="2" />
127
- <testcase name="get returns project by id" classname="Project.list and Project.get" time="0.03" file="test/project/project.test.ts" line="399" assertions="2" />
128
- <testcase name="get returns undefined for unknown id" classname="Project.list and Project.get" time="0" file="test/project/project.test.ts" line="408" assertions="1" />
129
- </testsuite>
130
- <testsuite name="Project.setInitialized" file="test/project/project.test.ts" line="414" tests="1" assertions="2" failures="0" skipped="0" time="0.035" hostname="benmurray-MS-7C84">
131
- <testcase name="sets time_initialized on project" classname="Project.setInitialized" time="0.035001" file="test/project/project.test.ts" line="415" assertions="2" />
132
- </testsuite>
133
- <testsuite name="Project.addSandbox and Project.removeSandbox" file="test/project/project.test.ts" line="428" tests="2" assertions="3" failures="0" skipped="0" time="0.067" hostname="benmurray-MS-7C84">
134
- <testcase name="addSandbox adds directory and removeSandbox removes it" classname="Project.addSandbox and Project.removeSandbox" time="0.036001" file="test/project/project.test.ts" line="429" assertions="2" />
135
- <testcase name="addSandbox emits GlobalBus event" classname="Project.addSandbox and Project.removeSandbox" time="0.031" file="test/project/project.test.ts" line="445" assertions="1" />
136
- </testsuite>
137
- </testsuite>
138
- <testsuite name="test/project/state.test.ts" file="test/project/state.test.ts" tests="5" assertions="10" failures="0" skipped="0" time="0.024" hostname="benmurray-MS-7C84">
139
- <testcase name="Instance.state caches values for the same instance" classname="" time="0.004" file="test/project/state.test.ts" line="10" assertions="2" />
140
- <testcase name="Instance.state isolates values by directory" classname="" time="0.002" file="test/project/state.test.ts" line="26" assertions="3" />
141
- <testcase name="Instance.state is disposed on instance reload" classname="" time="0.002" file="test/project/state.test.ts" line="50" assertions="2" />
142
- <testcase name="Instance.state is disposed on disposeAll" classname="" time="0.002" file="test/project/state.test.ts" line="75" assertions="1" />
143
- <testcase name="Instance.state dedupes concurrent promise initialization" classname="" time="0.014" file="test/project/state.test.ts" line="99" assertions="2" />
144
- </testsuite>
145
- <testsuite name="test/project/worktree-remove.test.ts" file="test/project/worktree-remove.test.ts" tests="2" assertions="5" failures="0" skipped="1" time="0" hostname="benmurray-MS-7C84">
146
- <testsuite name="Worktree.remove" file="test/project/worktree-remove.test.ts" line="12" tests="2" assertions="5" failures="0" skipped="1" time="0.069" hostname="benmurray-MS-7C84">
147
- <testcase name="continues when git remove exits non-zero after detaching" classname="Worktree.remove" time="0.069001" file="test/project/worktree-remove.test.ts" line="13" assertions="5" />
148
- <testcase name="stops fsmonitor before removing a worktree" classname="Worktree.remove" time="0" file="test/project/worktree-remove.test.ts" line="68" assertions="0">
149
- <skipped />
150
- </testcase>
151
- </testsuite>
152
- </testsuite>
153
- <testsuite name="test/project/worktree.test.ts" file="test/project/worktree.test.ts" tests="10" assertions="22" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
154
- <testsuite name="Worktree" file="test/project/worktree.test.ts" line="39" tests="10" assertions="22" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
155
- <testsuite name="makeWorktreeInfo" file="test/project/worktree.test.ts" line="42" tests="4" assertions="8" failures="0" skipped="0" time="0.104" hostname="benmurray-MS-7C84">
156
- <testcase name="returns info with name, branch, and directory" classname="makeWorktreeInfo &amp;gt; Worktree" time="0.036001" file="test/project/worktree.test.ts" line="43" assertions="4" />
157
- <testcase name="uses provided name as base" classname="makeWorktreeInfo &amp;gt; Worktree" time="0.032" file="test/project/worktree.test.ts" line="54" assertions="2" />
158
- <testcase name="slugifies the provided name" classname="makeWorktreeInfo &amp;gt; Worktree" time="0.035001" file="test/project/worktree.test.ts" line="63" assertions="1" />
159
- <testcase name="throws NotGitError for non-git directories" classname="makeWorktreeInfo &amp;gt; Worktree" time="0.001" file="test/project/worktree.test.ts" line="71" assertions="1" />
160
- </testsuite>
161
- <testsuite name="create + remove lifecycle" file="test/project/worktree.test.ts" line="78" tests="3" assertions="11" failures="0" skipped="0" time="1.404" hostname="benmurray-MS-7C84">
162
- <testcase name="create returns worktree info and remove cleans up" classname="create + remove lifecycle &amp;gt; Worktree" time="1.059015" file="test/project/worktree.test.ts" line="79" assertions="4" />
163
- <testcase name="create returns after setup and fires Event.Ready after bootstrap" classname="create + remove lifecycle &amp;gt; Worktree" time="0.168002" file="test/project/worktree.test.ts" line="95" assertions="5" />
164
- <testcase name="create with custom name" classname="create + remove lifecycle &amp;gt; Worktree" time="0.177003" file="test/project/worktree.test.ts" line="120" assertions="2" />
165
- </testsuite>
166
- <testsuite name="createFromInfo" file="test/project/worktree.test.ts" line="137" tests="1" assertions="1" failures="0" skipped="0" time="0.077" hostname="benmurray-MS-7C84">
167
- <testcase name="creates and bootstraps git worktree" classname="createFromInfo &amp;gt; Worktree" time="0.077001" file="test/project/worktree.test.ts" line="138" assertions="1" />
168
- </testsuite>
169
- <testsuite name="remove edge cases" file="test/project/worktree.test.ts" line="155" tests="2" assertions="2" failures="0" skipped="0" time="0.038" hostname="benmurray-MS-7C84">
170
- <testcase name="remove non-existent directory succeeds silently" classname="remove edge cases &amp;gt; Worktree" time="0.036001" file="test/project/worktree.test.ts" line="156" assertions="1" />
171
- <testcase name="throws NotGitError for non-git directories" classname="remove edge cases &amp;gt; Worktree" time="0.002" file="test/project/worktree.test.ts" line="165" assertions="1" />
172
- </testsuite>
173
- </testsuite>
174
- </testsuite>
175
- <testsuite name="test/project/vcs.test.ts" file="test/project/vcs.test.ts" tests="10" assertions="7" failures="0" skipped="4" time="0" hostname="benmurray-MS-7C84">
176
- <testsuite name="Vcs" file="test/project/vcs.test.ts" line="73" tests="4" assertions="0" failures="0" skipped="4" time="0" hostname="benmurray-MS-7C84">
177
- <testcase name="branch() returns current branch name" classname="Vcs" time="0" file="test/project/vcs.test.ts" line="78" assertions="0">
178
- <skipped />
179
- </testcase>
180
- <testcase name="branch() returns undefined for non-git directories" classname="Vcs" time="0" file="test/project/vcs.test.ts" line="88" assertions="0">
181
- <skipped />
182
- </testcase>
183
- <testcase name="publishes BranchUpdated when .git/HEAD changes" classname="Vcs" time="0" file="test/project/vcs.test.ts" line="97" assertions="0">
184
- <skipped />
185
- </testcase>
186
- <testcase name="branch() reflects the new branch after HEAD change" classname="Vcs" time="0" file="test/project/vcs.test.ts" line="113" assertions="0">
187
- <skipped />
188
- </testcase>
189
- </testsuite>
190
- <testsuite name="Vcs diff" file="test/project/vcs.test.ts" line="131" tests="6" assertions="7" failures="0" skipped="0" time="0.316" hostname="benmurray-MS-7C84">
191
- <testcase name="defaultBranch() falls back to main" classname="Vcs diff" time="0.042001" file="test/project/vcs.test.ts" line="136" assertions="1" />
192
- <testcase name="defaultBranch() uses init.defaultBranch when available" classname="Vcs diff" time="0.046001" file="test/project/vcs.test.ts" line="146" assertions="1" />
193
- <testcase name="detects current branch from the active worktree" classname="Vcs diff" time="0.053001" file="test/project/vcs.test.ts" line="157" assertions="2" />
194
- <testcase name="diff(&apos;git&apos;) returns uncommitted changes" classname="Vcs diff" time="0.058001" file="test/project/vcs.test.ts" line="171" assertions="1" />
195
- <testcase name="diff(&apos;git&apos;) handles special filenames" classname="Vcs diff" time="0.054001" file="test/project/vcs.test.ts" line="191" assertions="1" />
196
- <testcase name="diff(&apos;branch&apos;) returns changes against default branch" classname="Vcs diff" time="0.063001" file="test/project/vcs.test.ts" line="208" assertions="1" />
197
- </testsuite>
198
- </testsuite>
199
- <testsuite name="test/project/migrate-global.test.ts" file="test/project/migrate-global.test.ts" tests="4" assertions="13" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
200
- <testsuite name="migrateFromGlobal" file="test/project/migrate-global.test.ts" line="53" tests="4" assertions="13" failures="0" skipped="0" time="0.136" hostname="benmurray-MS-7C84">
201
- <testcase name="migrates global sessions on first project creation" classname="migrateFromGlobal" time="0.03" file="test/project/migrate-global.test.ts" line="54" assertions="4" />
202
- <testcase name="migrates global sessions even when project row already exists" classname="migrateFromGlobal" time="0.039001" file="test/project/migrate-global.test.ts" line="79" assertions="3" />
203
- <testcase name="does not claim sessions with empty directory" classname="migrateFromGlobal" time="0.032" file="test/project/migrate-global.test.ts" line="103" assertions="3" />
204
- <testcase name="does not steal sessions from unrelated directories" classname="migrateFromGlobal" time="0.035001" file="test/project/migrate-global.test.ts" line="122" assertions="3" />
205
- </testsuite>
206
- </testsuite>
207
- <testsuite name="test/share/share-next.test.ts" file="test/share/share-next.test.ts" tests="7" assertions="34" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
208
- <testsuite name="ShareNext" file="test/share/share-next.test.ts" line="91" tests="7" assertions="34" failures="0" skipped="0" time="1.398" hostname="benmurray-MS-7C84">
209
- <testcase name="request uses legacy share API without active org account" classname="ShareNext" time="0.015" file="test/share/share-next.test.ts" line="92" assertions="6" />
210
- <testcase name="request uses default URL when no enterprise config" classname="ShareNext" time="0.017" file="test/share/share-next.test.ts" line="111" assertions="3" />
211
- <testcase name="request uses org share API with auth headers when account is active" classname="ShareNext" time="0.008" file="test/share/share-next.test.ts" line="125" assertions="6" />
212
- <testcase name="create posts share, persists it, and returns the result" classname="ShareNext" time="0.016" file="test/share/share-next.test.ts" line="145" assertions="9" />
213
- <testcase name="remove deletes the persisted share and calls the delete endpoint" classname="ShareNext" time="0.015" file="test/share/share-next.test.ts" line="186" assertions="2" />
214
- <testcase name="create fails on a non-ok response and does not persist a share" classname="ShareNext" time="0.009" file="test/share/share-next.test.ts" line="221" assertions="2" />
215
- <testcase name="ShareNext coalesces rapid diff events into one delayed sync with latest data" classname="ShareNext" time="1.318019" file="test/share/share-next.test.ts" line="237" assertions="6" />
216
- </testsuite>
217
- </testsuite>
218
- <testsuite name="test/storage/storage.test.ts" file="test/storage/storage.test.ts" tests="13" assertions="34" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
219
- <testsuite name="Storage" file="test/storage/storage.test.ts" line="75" tests="13" assertions="34" failures="0" skipped="0" time="0.073" hostname="benmurray-MS-7C84">
220
- <testcase name="round-trips JSON content" classname="Storage" time="0.007" file="test/storage/storage.test.ts" line="76" assertions="1" />
221
- <testcase name="maps missing reads to NotFoundError" classname="Storage" time="0" file="test/storage/storage.test.ts" line="87" assertions="1" />
222
- <testcase name="update on missing key throws NotFoundError" classname="Storage" time="0.001" file="test/storage/storage.test.ts" line="93" assertions="1" />
223
- <testcase name="write overwrites existing value" classname="Storage" time="0" file="test/storage/storage.test.ts" line="103" assertions="1" />
224
- <testcase name="remove on missing key is a no-op" classname="Storage" time="0.001" file="test/storage/storage.test.ts" line="113" assertions="1" />
225
- <testcase name="list on missing prefix returns empty" classname="Storage" time="0" file="test/storage/storage.test.ts" line="119" assertions="1" />
226
- <testcase name="serializes concurrent updates for the same key" classname="Storage" time="0.011" file="test/storage/storage.test.ts" line="125" assertions="1" />
227
- <testcase name="concurrent reads do not block each other" classname="Storage" time="0.003" file="test/storage/storage.test.ts" line="142" assertions="11" />
228
- <testcase name="nested keys create deep paths" classname="Storage" time="0.001" file="test/storage/storage.test.ts" line="154" assertions="2" />
229
- <testcase name="lists and removes stored entries" classname="Storage" time="0.002" file="test/storage/storage.test.ts" line="164" assertions="3" />
230
- <testcase name="migration 2 runs when marker contents are invalid" classname="Storage" time="0.009" file="test/storage/storage.test.ts" line="182" assertions="4" />
231
- <testcase name="migration 1 tolerates malformed legacy records" classname="Storage" time="0.035001" file="test/storage/storage.test.ts" line="233" assertions="5" />
232
- <testcase name="failed migrations do not advance the marker" classname="Storage" time="0.003" file="test/storage/storage.test.ts" line="282" assertions="2" />
233
- </testsuite>
234
- </testsuite>
235
- <testsuite name="test/storage/json-migration.test.ts" file="test/storage/json-migration.test.ts" tests="22" assertions="127" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
236
- <testsuite name="JSON to SQLite migration" file="test/storage/json-migration.test.ts" line="97" tests="22" assertions="127" failures="0" skipped="0" time="0.135" hostname="benmurray-MS-7C84">
237
- <testcase name="migrates project" classname="JSON to SQLite migration" time="0.008" file="test/storage/json-migration.test.ts" line="111" assertions="6" />
238
- <testcase name="uses filename for project id when JSON has different value" classname="JSON to SQLite migration" time="0.005" file="test/storage/json-migration.test.ts" line="134" assertions="3" />
239
- <testcase name="migrates project with commands" classname="JSON to SQLite migration" time="0.008" file="test/storage/json-migration.test.ts" line="156" assertions="4" />
240
- <testcase name="migrates project without commands field" classname="JSON to SQLite migration" time="0.004" file="test/storage/json-migration.test.ts" line="178" assertions="4" />
241
- <testcase name="migrates session with individual columns" classname="JSON to SQLite migration" time="0.005" file="test/storage/json-migration.test.ts" line="199" assertions="8" />
242
- <testcase name="migrates messages and parts" classname="JSON to SQLite migration" time="0.009" file="test/storage/json-migration.test.ts" line="233" assertions="6" />
243
- <testcase name="migrates legacy parts without ids in body" classname="JSON to SQLite migration" time="0.006" file="test/storage/json-migration.test.ts" line="265" assertions="14" />
244
- <testcase name="uses filename for message id when JSON has different value" classname="JSON to SQLite migration" time="0.004" file="test/storage/json-migration.test.ts" line="313" assertions="4" />
245
- <testcase name="uses paths for part id and messageID when JSON has different values" classname="JSON to SQLite migration" time="0.008" file="test/storage/json-migration.test.ts" line="343" assertions="4" />
246
- <testcase name="skips orphaned sessions (no parent project)" classname="JSON to SQLite migration" time="0.005" file="test/storage/json-migration.test.ts" line="381" assertions="1" />
247
- <testcase name="uses directory path for projectID when JSON has stale value" classname="JSON to SQLite migration" time="0.005" file="test/storage/json-migration.test.ts" line="400" assertions="4" />
248
- <testcase name="uses filename for session id when JSON has different value" classname="JSON to SQLite migration" time="0.008" file="test/storage/json-migration.test.ts" line="434" assertions="4" />
249
- <testcase name="is idempotent (running twice doesn&apos;t duplicate)" classname="JSON to SQLite migration" time="0.006" file="test/storage/json-migration.test.ts" line="466" assertions="1" />
250
- <testcase name="migrates todos" classname="JSON to SQLite migration" time="0.004" file="test/storage/json-migration.test.ts" line="482" assertions="8" />
251
- <testcase name="todos are ordered by position" classname="JSON to SQLite migration" time="0.008" file="test/storage/json-migration.test.ts" line="525" assertions="7" />
252
- <testcase name="migrates permissions" classname="JSON to SQLite migration" time="0.005" file="test/storage/json-migration.test.ts" line="557" assertions="4" />
253
- <testcase name="migrates session shares" classname="JSON to SQLite migration" time="0.005" file="test/storage/json-migration.test.ts" line="584" assertions="6" />
254
- <testcase name="returns empty stats when storage directory does not exist" classname="JSON to SQLite migration" time="0.006" file="test/storage/json-migration.test.ts" line="616" assertions="8" />
255
- <testcase name="continues when a JSON file is unreadable and records an error" classname="JSON to SQLite migration" time="0.005" file="test/storage/json-migration.test.ts" line="631" assertions="4" />
256
- <testcase name="skips invalid todo entries while preserving source positions" classname="JSON to SQLite migration" time="0.005" file="test/storage/json-migration.test.ts" line="651" assertions="6" />
257
- <testcase name="skips orphaned todos, permissions, and shares" classname="JSON to SQLite migration" time="0.008" file="test/storage/json-migration.test.ts" line="681" assertions="6" />
258
- <testcase name="handles mixed corruption and partial validity in one migration run" classname="JSON to SQLite migration" time="0.008" file="test/storage/json-migration.test.ts" line="729" assertions="15" />
259
- </testsuite>
260
- </testsuite>
261
- <testsuite name="test/storage/db.test.ts" file="test/storage/db.test.ts" tests="1" assertions="1" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
262
- <testsuite name="Database.Path" file="test/storage/db.test.ts" line="7" tests="1" assertions="1" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
263
- <testcase name="returns database path for the current channel" classname="Database.Path" time="0" file="test/storage/db.test.ts" line="8" assertions="1" />
264
- </testsuite>
265
- </testsuite>
266
- <testsuite name="test/plugin/auth-override.test.ts" file="test/plugin/auth-override.test.ts" tests="2" assertions="6" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
267
- <testsuite name="plugin.auth-override" file="test/plugin/auth-override.test.ts" line="9" tests="1" assertions="4" failures="0" skipped="0" time="0.095" hostname="benmurray-MS-7C84">
268
- <testcase name="user plugin overrides built-in github-copilot auth" classname="plugin.auth-override" time="0.095001" file="test/plugin/auth-override.test.ts" line="10" assertions="4" />
269
- </testsuite>
270
- <testsuite name="plugin.config-hook-error-isolation" file="test/plugin/auth-override.test.ts" line="63" tests="1" assertions="2" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
271
- <testcase name="config hooks are individually error-isolated in the layer factory" classname="plugin.config-hook-error-isolation" time="0" file="test/plugin/auth-override.test.ts" line="64" assertions="2" />
272
- </testsuite>
273
- </testsuite>
274
- <testsuite name="test/plugin/github-copilot-models.test.ts" file="test/plugin/github-copilot-models.test.ts" tests="1" assertions="2" failures="0" skipped="0" time="0.006" hostname="benmurray-MS-7C84">
275
- <testcase name="preserves temperature support from existing provider models" classname="" time="0.006" file="test/plugin/github-copilot-models.test.ts" line="10" assertions="2" />
276
- </testsuite>
277
- <testsuite name="test/plugin/trigger.test.ts" file="test/plugin/trigger.test.ts" tests="2" assertions="2" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
278
- <testsuite name="plugin.trigger" file="test/plugin/trigger.test.ts" line="44" tests="2" assertions="2" failures="0" skipped="0" time="0.174" hostname="benmurray-MS-7C84">
279
- <testcase name="runs synchronous hooks without crashing" classname="plugin.trigger" time="0.131002" file="test/plugin/trigger.test.ts" line="45" assertions="1" />
280
- <testcase name="awaits asynchronous hooks" classname="plugin.trigger" time="0.043001" file="test/plugin/trigger.test.ts" line="78" assertions="1" />
281
- </testsuite>
282
- </testsuite>
283
- <testsuite name="test/plugin/codex.test.ts" file="test/plugin/codex.test.ts" tests="13" assertions="14" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
284
- <testsuite name="plugin.codex" file="test/plugin/codex.test.ts" line="15" tests="13" assertions="14" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
285
- <testsuite name="parseJwtClaims" file="test/plugin/codex.test.ts" line="16" tests="4" assertions="5" failures="0" skipped="0" time="0.002" hostname="benmurray-MS-7C84">
286
- <testcase name="parses valid JWT with claims" classname="parseJwtClaims &amp;gt; plugin.codex" time="0.001" file="test/plugin/codex.test.ts" line="17" assertions="1" />
287
- <testcase name="returns undefined for JWT with less than 3 parts" classname="parseJwtClaims &amp;gt; plugin.codex" time="0" file="test/plugin/codex.test.ts" line="24" assertions="2" />
288
- <testcase name="returns undefined for invalid base64" classname="parseJwtClaims &amp;gt; plugin.codex" time="0.001" file="test/plugin/codex.test.ts" line="29" assertions="1" />
289
- <testcase name="returns undefined for invalid JSON payload" classname="parseJwtClaims &amp;gt; plugin.codex" time="0" file="test/plugin/codex.test.ts" line="33" assertions="1" />
290
- </testsuite>
291
- <testsuite name="extractAccountIdFromClaims" file="test/plugin/codex.test.ts" line="40" tests="5" assertions="5" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
292
- <testcase name="extracts chatgpt_account_id from root" classname="extractAccountIdFromClaims &amp;gt; plugin.codex" time="0" file="test/plugin/codex.test.ts" line="41" assertions="1" />
293
- <testcase name="extracts chatgpt_account_id from nested https://api.openai.com/auth" classname="extractAccountIdFromClaims &amp;gt; plugin.codex" time="0" file="test/plugin/codex.test.ts" line="46" assertions="1" />
294
- <testcase name="prefers root over nested" classname="extractAccountIdFromClaims &amp;gt; plugin.codex" time="0" file="test/plugin/codex.test.ts" line="53" assertions="1" />
295
- <testcase name="extracts from organizations array as fallback" classname="extractAccountIdFromClaims &amp;gt; plugin.codex" time="0" file="test/plugin/codex.test.ts" line="61" assertions="1" />
296
- <testcase name="returns undefined when no accountId found" classname="extractAccountIdFromClaims &amp;gt; plugin.codex" time="0" file="test/plugin/codex.test.ts" line="68" assertions="1" />
297
- </testsuite>
298
- <testsuite name="extractAccountId" file="test/plugin/codex.test.ts" line="74" tests="4" assertions="4" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
299
- <testcase name="extracts from id_token first" classname="extractAccountId &amp;gt; plugin.codex" time="0" file="test/plugin/codex.test.ts" line="75" assertions="1" />
300
- <testcase name="falls back to access_token when id_token has no accountId" classname="extractAccountId &amp;gt; plugin.codex" time="0" file="test/plugin/codex.test.ts" line="87" assertions="1" />
301
- <testcase name="returns undefined when no tokens have accountId" classname="extractAccountId &amp;gt; plugin.codex" time="0" file="test/plugin/codex.test.ts" line="101" assertions="1" />
302
- <testcase name="handles missing id_token" classname="extractAccountId &amp;gt; plugin.codex" time="0" file="test/plugin/codex.test.ts" line="112" assertions="1" />
303
- </testsuite>
304
- </testsuite>
305
- </testsuite>
306
- <testsuite name="test/plugin/install-concurrency.test.ts" file="test/plugin/install-concurrency.test.ts" tests="3" assertions="19" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
307
- <testsuite name="plugin.install.concurrent" file="test/plugin/install-concurrency.test.ts" line="65" tests="3" assertions="19" failures="0" skipped="0" time="5.3" hostname="benmurray-MS-7C84">
308
- <testcase name="serializes concurrent server config updates across processes" classname="plugin.install.concurrent" time="1.858027" file="test/plugin/install-concurrency.test.ts" line="66" assertions="5" />
309
- <testcase name="serializes concurrent server+tui config updates across processes" classname="plugin.install.concurrent" time="1.993029" file="test/plugin/install-concurrency.test.ts" line="89" assertions="8" />
310
- <testcase name="preserves updates when existing config uses .json" classname="plugin.install.concurrent" time="1.449021" file="test/plugin/install-concurrency.test.ts" line="114" assertions="6" />
311
- </testsuite>
312
- </testsuite>
313
- <testsuite name="test/plugin/loader-shared.test.ts" file="test/plugin/loader-shared.test.ts" tests="27" assertions="43" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
314
- <testsuite name="plugin.loader.shared" file="test/plugin/loader-shared.test.ts" line="61" tests="27" assertions="43" failures="0" skipped="0" time="0.852" hostname="benmurray-MS-7C84">
315
- <testcase name="loads a file:// plugin function export" classname="plugin.loader.shared" time="0.053001" file="test/plugin/loader-shared.test.ts" line="62" assertions="1" />
316
- <testcase name="deduplicates same function exported as default and named" classname="plugin.loader.shared" time="0.044001" file="test/plugin/loader-shared.test.ts" line="91" assertions="1" />
317
- <testcase name="uses only default v1 server plugin when present" classname="plugin.loader.shared" time="0.043001" file="test/plugin/loader-shared.test.ts" line="124" assertions="1" />
318
- <testcase name="rejects v1 file server plugin without id" classname="plugin.loader.shared" time="0.036001" file="test/plugin/loader-shared.test.ts" line="160" assertions="2" />
319
- <testcase name="rejects v1 plugin that exports server and tui together" classname="plugin.loader.shared" time="0.041001" file="test/plugin/loader-shared.test.ts" line="197" assertions="2" />
320
- <testcase name="resolves npm plugin specs with explicit and default versions" classname="plugin.loader.shared" time="0.040001" file="test/plugin/loader-shared.test.ts" line="236" assertions="2" />
321
- <testcase name="loads npm server plugin from package ./server export" classname="plugin.loader.shared" time="0.042001" file="test/plugin/loader-shared.test.ts" line="278" assertions="1" />
322
- <testcase name="loads npm server plugin from package server export without leading dot" classname="plugin.loader.shared" time="0.035001" file="test/plugin/loader-shared.test.ts" line="336" assertions="2" />
323
- <testcase name="loads npm server plugin from package main without leading dot" classname="plugin.loader.shared" time="0.043001" file="test/plugin/loader-shared.test.ts" line="394" assertions="2" />
324
- <testcase name="does not use npm package exports dot for server entry" classname="plugin.loader.shared" time="0.038001" file="test/plugin/loader-shared.test.ts" line="447" assertions="2" />
325
- <testcase name="rejects npm server export that resolves outside plugin directory" classname="plugin.loader.shared" time="0.038001" file="test/plugin/loader-shared.test.ts" line="498" assertions="2" />
326
- <testcase name="skips legacy codex and copilot auth plugin specs" classname="plugin.loader.shared" time="0.044001" file="test/plugin/loader-shared.test.ts" line="561" assertions="3" />
327
- <testcase name="publishes session.error when install fails" classname="plugin.loader.shared" time="0.042001" file="test/plugin/loader-shared.test.ts" line="591" assertions="1" />
328
- <testcase name="publishes session.error when plugin init throws" classname="plugin.loader.shared" time="0.039001" file="test/plugin/loader-shared.test.ts" line="611" assertions="1" />
329
- <testcase name="publishes session.error when plugin module has invalid export" classname="plugin.loader.shared" time="0.051001" file="test/plugin/loader-shared.test.ts" line="639" assertions="1" />
330
- <testcase name="publishes session.error when plugin import fails" classname="plugin.loader.shared" time="0.046001" file="test/plugin/loader-shared.test.ts" line="659" assertions="1" />
331
- <testcase name="loads object plugin via plugin.server" classname="plugin.loader.shared" time="0.044001" file="test/plugin/loader-shared.test.ts" line="674" assertions="1" />
332
- <testcase name="passes tuple plugin options into server plugin" classname="plugin.loader.shared" time="0.050001" file="test/plugin/loader-shared.test.ts" line="707" assertions="1" />
333
- <testcase name="initializes server plugins in config order" classname="plugin.loader.shared" time="0.072001" file="test/plugin/loader-shared.test.ts" line="743" assertions="1" />
334
- <testcase name="skips external plugins in pure mode" classname="plugin.loader.shared" time="0.004" file="test/plugin/loader-shared.test.ts" line="792" assertions="1" />
335
- <testcase name="reads oc-themes from package manifest" classname="plugin.loader.shared" time="0.001" file="test/plugin/loader-shared.test.ts" line="839" assertions="1" />
336
- <testcase name="handles no-entrypoint tui packages via missing callback" classname="plugin.loader.shared" time="0.002" file="test/plugin/loader-shared.test.ts" line="875" assertions="2" />
337
- <testcase name="passes package metadata for entrypoint tui plugins" classname="plugin.loader.shared" time="0.001" file="test/plugin/loader-shared.test.ts" line="940" assertions="1" />
338
- <testcase name="rejects oc-themes path traversal" classname="plugin.loader.shared" time="0.001" file="test/plugin/loader-shared.test.ts" line="998" assertions="1" />
339
- <testcase name="retries failed file plugins once after wait and keeps order" classname="plugin.loader.shared" time="0.001" file="test/plugin/loader-shared.test.ts" line="1019" assertions="3" />
340
- <testcase name="retries file plugins when finish returns undefined" classname="plugin.loader.shared" time="0.001" file="test/plugin/loader-shared.test.ts" line="1064" assertions="3" />
341
- <testcase name="does not wait or retry npm plugin failures" classname="plugin.loader.shared" time="0" file="test/plugin/loader-shared.test.ts" line="1104" assertions="3" />
342
- </testsuite>
343
- </testsuite>
344
- <testsuite name="test/plugin/meta.test.ts" file="test/plugin/meta.test.ts" tests="3" assertions="25" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
345
- <testsuite name="plugin.meta" file="test/plugin/meta.test.ts" line="29" tests="3" assertions="25" failures="0" skipped="0" time="0.76" hostname="benmurray-MS-7C84">
346
- <testcase name="tracks file plugin loads and changes" classname="plugin.meta" time="0.003" file="test/plugin/meta.test.ts" line="30" assertions="12" />
347
- <testcase name="tracks npm plugin versions" classname="plugin.meta" time="0.002" file="test/plugin/meta.test.ts" line="69" assertions="9" />
348
- <testcase name="serializes concurrent metadata updates across processes" classname="plugin.meta" time="0.755011" file="test/plugin/meta.test.ts" line="102" assertions="4" />
349
- </testsuite>
350
- </testsuite>
351
- <testsuite name="test/plugin/install.test.ts" file="test/plugin/install.test.ts" tests="21" assertions="60" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
352
- <testsuite name="plugin.install.task" file="test/plugin/install.test.ts" line="111" tests="21" assertions="60" failures="0" skipped="0" time="0.034" hostname="benmurray-MS-7C84">
353
- <testcase name="writes both server and tui config entries" classname="plugin.install.task" time="0.004" file="test/plugin/install.test.ts" line="112" assertions="3" />
354
- <testcase name="writes default options from exports config metadata" classname="plugin.install.task" time="0.002" file="test/plugin/install.test.ts" line="131" assertions="3" />
355
- <testcase name="preserves JSONC comments when adding plugins to server and tui config" classname="plugin.install.task" time="0.003" file="test/plugin/install.test.ts" line="153" assertions="9" />
356
- <testcase name="preserves JSONC comments when force replacing plugin version" classname="plugin.install.task" time="0.001" file="test/plugin/install.test.ts" line="212" assertions="3" />
357
- <testcase name="supports resolver target pointing to a file" classname="plugin.install.task" time="0.001" file="test/plugin/install.test.ts" line="246" assertions="2" />
358
- <testcase name="does not change configured package version without force" classname="plugin.install.task" time="0.002" file="test/plugin/install.test.ts" line="264" assertions="2" />
359
- <testcase name="does not change scoped package version without force" classname="plugin.install.task" time="0.003" file="test/plugin/install.test.ts" line="284" assertions="2" />
360
- <testcase name="keeps file plugin entries and still adds npm plugin" classname="plugin.install.task" time="0.001" file="test/plugin/install.test.ts" line="304" assertions="2" />
361
- <testcase name="force replaces configured package version and keeps tuple options" classname="plugin.install.task" time="0.002" file="test/plugin/install.test.ts" line="324" assertions="2" />
362
- <testcase name="writes to global scope when global flag is set" classname="plugin.install.task" time="0.001" file="test/plugin/install.test.ts" line="354" assertions="3" />
363
- <testcase name="writes local scope under directory when vcs is not git" classname="plugin.install.task" time="0.002" file="test/plugin/install.test.ts" line="373" assertions="3" />
364
- <testcase name="writes local scope under directory when worktree is root slash" classname="plugin.install.task" time="0.001" file="test/plugin/install.test.ts" line="393" assertions="2" />
365
- <testcase name="writes tui local scope under directory when worktree is root slash" classname="plugin.install.task" time="0.002" file="test/plugin/install.test.ts" line="410" assertions="2" />
366
- <testcase name="writes only tui config for tui-only plugins" classname="plugin.install.task" time="0.001" file="test/plugin/install.test.ts" line="427" assertions="3" />
367
- <testcase name="writes tui config for oc-themes-only packages" classname="plugin.install.task" time="0.001" file="test/plugin/install.test.ts" line="443" assertions="4" />
368
- <testcase name="returns false for oc-themes outside plugin directory" classname="plugin.install.task" time="0.001" file="test/plugin/install.test.ts" line="464" assertions="3" />
369
- <testcase name="force replaces version in both server and tui configs" classname="plugin.install.task" time="0.004" file="test/plugin/install.test.ts" line="480" assertions="3" />
370
- <testcase name="returns false and keeps config unchanged for invalid JSONC" classname="plugin.install.task" time="0.001" file="test/plugin/install.test.ts" line="505" assertions="2" />
371
- <testcase name="returns false when manifest declares no supported targets" classname="plugin.install.task" time="0" file="test/plugin/install.test.ts" line="525" assertions="3" />
372
- <testcase name="returns false when manifest cannot be read" classname="plugin.install.task" time="0.001" file="test/plugin/install.test.ts" line="541" assertions="2" />
373
- <testcase name="returns false when install fails" classname="plugin.install.task" time="0" file="test/plugin/install.test.ts" line="557" assertions="2" />
374
- </testsuite>
375
- </testsuite>
376
- <testsuite name="test/plugin/shared.test.ts" file="test/plugin/shared.test.ts" tests="12" assertions="12" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
377
- <testsuite name="parsePluginSpecifier" file="test/plugin/shared.test.ts" line="4" tests="12" assertions="12" failures="0" skipped="0" time="0.002" hostname="benmurray-MS-7C84">
378
- <testcase name="parses standard npm package without version" classname="parsePluginSpecifier" time="0.001" file="test/plugin/shared.test.ts" line="5" assertions="1" />
379
- <testcase name="parses standard npm package with version" classname="parsePluginSpecifier" time="0" file="test/plugin/shared.test.ts" line="12" assertions="1" />
380
- <testcase name="parses scoped npm package without version" classname="parsePluginSpecifier" time="0" file="test/plugin/shared.test.ts" line="19" assertions="1" />
381
- <testcase name="parses scoped npm package with version" classname="parsePluginSpecifier" time="0" file="test/plugin/shared.test.ts" line="26" assertions="1" />
382
- <testcase name="parses package with git+https url" classname="parsePluginSpecifier" time="0" file="test/plugin/shared.test.ts" line="33" assertions="1" />
383
- <testcase name="parses scoped package with git+https url" classname="parsePluginSpecifier" time="0" file="test/plugin/shared.test.ts" line="40" assertions="1" />
384
- <testcase name="parses package with git+ssh url containing another @" classname="parsePluginSpecifier" time="0" file="test/plugin/shared.test.ts" line="47" assertions="1" />
385
- <testcase name="parses scoped package with git+ssh url containing another @" classname="parsePluginSpecifier" time="0.001" file="test/plugin/shared.test.ts" line="54" assertions="1" />
386
- <testcase name="parses unaliased git+ssh url" classname="parsePluginSpecifier" time="0" file="test/plugin/shared.test.ts" line="61" assertions="1" />
387
- <testcase name="parses npm alias using the alias name" classname="parsePluginSpecifier" time="0" file="test/plugin/shared.test.ts" line="68" assertions="1" />
388
- <testcase name="parses bare npm protocol specifier using the target package" classname="parsePluginSpecifier" time="0" file="test/plugin/shared.test.ts" line="75" assertions="1" />
389
- <testcase name="parses unversioned npm protocol specifier" classname="parsePluginSpecifier" time="0" file="test/plugin/shared.test.ts" line="82" assertions="1" />
390
- </testsuite>
391
- </testsuite>
392
- <testsuite name="test/bus/bus-effect.test.ts" file="test/bus/bus-effect.test.ts" tests="5" assertions="8" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
393
- <testsuite name="Bus (Effect-native)" file="test/bus/bus-effect.test.ts" line="24" tests="5" assertions="8" failures="0" skipped="0" time="0.073" hostname="benmurray-MS-7C84">
394
- <testcase name="publish + subscribe stream delivers events" classname="Bus (Effect-native)" time="0.016" file="test/bus/bus-effect.test.ts" line="25" assertions="1" />
395
- <testcase name="subscribe filters by event type" classname="Bus (Effect-native)" time="0.015" file="test/bus/bus-effect.test.ts" line="49" assertions="1" />
396
- <testcase name="subscribeAll receives all types" classname="Bus (Effect-native)" time="0.013" file="test/bus/bus-effect.test.ts" line="73" assertions="2" />
397
- <testcase name="multiple subscribers each receive the event" classname="Bus (Effect-native)" time="0.015" file="test/bus/bus-effect.test.ts" line="98" assertions="2" />
398
- <testcase name="subscribeAll stream sees InstanceDisposed on disposal" classname="Bus (Effect-native)" time="0.014" file="test/bus/bus-effect.test.ts" line="132" assertions="2" />
399
- </testsuite>
400
- </testsuite>
401
- <testsuite name="test/bus/bus.test.ts" file="test/bus/bus.test.ts" tests="10" assertions="13" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
402
- <testsuite name="Bus" file="test/bus/bus.test.ts" line="17" tests="10" assertions="13" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
403
- <testsuite name="publish + subscribe" file="test/bus/bus.test.ts" line="20" tests="4" assertions="3" failures="0" skipped="0" time="0.064" hostname="benmurray-MS-7C84">
404
- <testcase name="subscriber is live immediately after subscribe returns" classname="publish + subscribe &amp;gt; Bus" time="0.015" file="test/bus/bus.test.ts" line="21" assertions="1" />
405
- <testcase name="subscriber receives matching events" classname="publish + subscribe &amp;gt; Bus" time="0.023" file="test/bus/bus.test.ts" line="36" assertions="1" />
406
- <testcase name="subscriber does not receive events of other types" classname="publish + subscribe &amp;gt; Bus" time="0.025" file="test/bus/bus.test.ts" line="55" assertions="1" />
407
- <testcase name="publish with no subscribers does not throw" classname="publish + subscribe &amp;gt; Bus" time="0.001" file="test/bus/bus.test.ts" line="72" assertions="0" />
408
- </testsuite>
409
- <testsuite name="unsubscribe" file="test/bus/bus.test.ts" line="81" tests="1" assertions="1" failures="0" skipped="0" time="0.047" hostname="benmurray-MS-7C84">
410
- <testcase name="unsubscribe stops delivery" classname="unsubscribe &amp;gt; Bus" time="0.047001" file="test/bus/bus.test.ts" line="82" assertions="1" />
411
- </testsuite>
412
- <testsuite name="subscribeAll" file="test/bus/bus.test.ts" line="103" tests="2" assertions="3" failures="0" skipped="0" time="0.037" hostname="benmurray-MS-7C84">
413
- <testcase name="subscribeAll is live immediately after subscribe returns" classname="subscribeAll &amp;gt; Bus" time="0.012" file="test/bus/bus.test.ts" line="104" assertions="1" />
414
- <testcase name="receives all event types" classname="subscribeAll &amp;gt; Bus" time="0.025" file="test/bus/bus.test.ts" line="119" assertions="2" />
415
- </testsuite>
416
- <testsuite name="multiple subscribers" file="test/bus/bus.test.ts" line="138" tests="1" assertions="2" failures="0" skipped="0" time="0.026" hostname="benmurray-MS-7C84">
417
- <testcase name="all subscribers for same event type are called" classname="multiple subscribers &amp;gt; Bus" time="0.026" file="test/bus/bus.test.ts" line="139" assertions="2" />
418
- </testsuite>
419
- <testsuite name="instance isolation" file="test/bus/bus.test.ts" line="161" tests="1" assertions="2" failures="0" skipped="0" time="0.049" hostname="benmurray-MS-7C84">
420
- <testcase name="events in one directory do not reach subscribers in another" classname="instance isolation &amp;gt; Bus" time="0.049001" file="test/bus/bus.test.ts" line="162" assertions="2" />
421
- </testsuite>
422
- <testsuite name="instance disposal" file="test/bus/bus.test.ts" line="197" tests="1" assertions="2" failures="0" skipped="0" time="0.075" hostname="benmurray-MS-7C84">
423
- <testcase name="InstanceDisposed is delivered to wildcard subscribers before stream ends" classname="instance disposal &amp;gt; Bus" time="0.075001" file="test/bus/bus.test.ts" line="198" assertions="2" />
424
- </testsuite>
425
- </testsuite>
426
- </testsuite>
427
- <testsuite name="test/bus/bus-integration.test.ts" file="test/bus/bus-integration.test.ts" tests="3" assertions="5" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
428
- <testsuite name="Bus integration: acquireRelease subscriber pattern" file="test/bus/bus-integration.test.ts" line="14" tests="3" assertions="5" failures="0" skipped="0" time="0.148" hostname="benmurray-MS-7C84">
429
- <testcase name="subscriber via callback facade receives events and cleans up on unsub" classname="Bus integration: acquireRelease subscriber pattern" time="0.049001" file="test/bus/bus-integration.test.ts" line="17" assertions="2" />
430
- <testcase name="subscribeAll receives events from multiple types" classname="Bus integration: acquireRelease subscriber pattern" time="0.024" file="test/bus/bus-integration.test.ts" line="41" assertions="1" />
431
- <testcase name="subscriber cleanup on instance disposal interrupts the stream" classname="Bus integration: acquireRelease subscriber pattern" time="0.075001" file="test/bus/bus-integration.test.ts" line="63" assertions="2" />
432
- </testsuite>
433
- </testsuite>
434
- <testsuite name="test/tool/external-directory.test.ts" file="test/tool/external-directory.test.ts" tests="5" assertions="9" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
435
- <testsuite name="tool.assertExternalDirectory" file="test/tool/external-directory.test.ts" line="24" tests="5" assertions="9" failures="0" skipped="0" time="0.002" hostname="benmurray-MS-7C84">
436
- <testcase name="no-ops for empty target" classname="tool.assertExternalDirectory" time="0.001" file="test/tool/external-directory.test.ts" line="25" assertions="1" />
437
- <testcase name="no-ops for paths inside Instance.directory" classname="tool.assertExternalDirectory" time="0.001" file="test/tool/external-directory.test.ts" line="44" assertions="1" />
438
- <testcase name="asks with a single canonical glob" classname="tool.assertExternalDirectory" time="0" file="test/tool/external-directory.test.ts" line="63" assertions="3" />
439
- <testcase name="uses target directory when kind=directory" classname="tool.assertExternalDirectory" time="0" file="test/tool/external-directory.test.ts" line="89" assertions="3" />
440
- <testcase name="skips prompting when bypass=true" classname="tool.assertExternalDirectory" time="0" file="test/tool/external-directory.test.ts" line="115" assertions="1" />
441
- </testsuite>
442
- </testsuite>
443
- <testsuite name="test/tool/question.test.ts" file="test/tool/question.test.ts" tests="2" assertions="2" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
444
- <testsuite name="tool.question" file="test/tool/question.test.ts" line="33" tests="2" assertions="2" failures="0" skipped="0" time="0.031" hostname="benmurray-MS-7C84">
445
- <testcase name="should successfully execute with valid question parameters" classname="tool.question" time="0.017" file="test/tool/question.test.ts" line="34" assertions="1" />
446
- <testcase name="should now pass with a header longer than 12 but less than 30 chars" classname="tool.question" time="0.014" file="test/tool/question.test.ts" line="62" assertions="1" />
447
- </testsuite>
448
- </testsuite>
449
- <testsuite name="test/tool/registry.test.ts" file="test/tool/registry.test.ts" tests="3" assertions="2" failures="0" skipped="1" time="0" hostname="benmurray-MS-7C84">
450
- <testsuite name="tool.registry" file="test/tool/registry.test.ts" line="12" tests="3" assertions="2" failures="0" skipped="1" time="0.112" hostname="benmurray-MS-7C84">
451
- <testcase name="loads tools from .epochcli/tool (singular)" classname="tool.registry" time="0.056001" file="test/tool/registry.test.ts" line="13" assertions="1" />
452
- <testcase name="loads tools from .epochcli/tools (plural)" classname="tool.registry" time="0.056001" file="test/tool/registry.test.ts" line="47" assertions="1" />
453
- <testcase name="loads tools with external dependencies without crashing" classname="tool.registry" time="0" file="test/tool/registry.test.ts" line="81" assertions="0">
454
- <skipped />
455
- </testcase>
456
- </testsuite>
457
- </testsuite>
458
- <testsuite name="test/tool/task.test.ts" file="test/tool/task.test.ts" tests="1" assertions="5" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
459
- <testsuite name="tool.task" file="test/tool/task.test.ts" line="11" tests="1" assertions="5" failures="0" skipped="0" time="0.01" hostname="benmurray-MS-7C84">
460
- <testcase name="description sorts subagents by name and is stable across calls" classname="tool.task" time="0.01" file="test/tool/task.test.ts" line="12" assertions="5" />
461
- </testsuite>
462
- </testsuite>
463
- <testsuite name="test/tool/tool-define.test.ts" file="test/tool/tool-define.test.ts" tests="5" assertions="7" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
464
- <testsuite name="Tool.define" file="test/tool/tool-define.test.ts" line="19" tests="5" assertions="7" failures="0" skipped="0" time="0.001" hostname="benmurray-MS-7C84">
465
- <testcase name="object-defined tool does not mutate the original init object" classname="Tool.define" time="0" file="test/tool/tool-define.test.ts" line="20" assertions="1" />
466
- <testcase name="object-defined tool does not accumulate wrapper layers across init() calls" classname="Tool.define" time="0" file="test/tool/tool-define.test.ts" line="33" assertions="2" />
467
- <testcase name="function-defined tool returns fresh objects and is unaffected" classname="Tool.define" time="0" file="test/tool/tool-define.test.ts" line="63" assertions="1" />
468
- <testcase name="object-defined tool returns distinct objects per init() call" classname="Tool.define" time="0" file="test/tool/tool-define.test.ts" line="72" assertions="1" />
469
- <testcase name="validation still works after many init() calls" classname="Tool.define" time="0.001" file="test/tool/tool-define.test.ts" line="81" assertions="2" />
470
- </testsuite>
471
- </testsuite>
472
- <testsuite name="test/tool/apply_patch.test.ts" file="test/tool/apply_patch.test.ts" tests="26" assertions="55" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
473
- <testsuite name="tool.apply_patch freeform" file="test/tool/apply_patch.test.ts" line="61" tests="26" assertions="55" failures="0" skipped="0" time="0.145" hostname="benmurray-MS-7C84">
474
- <testcase name="requires patchText" classname="tool.apply_patch freeform" time="0.001" file="test/tool/apply_patch.test.ts" line="62" assertions="1" />
475
- <testcase name="rejects invalid patch format" classname="tool.apply_patch freeform" time="0.002" file="test/tool/apply_patch.test.ts" line="67" assertions="1" />
476
- <testcase name="rejects empty patch" classname="tool.apply_patch freeform" time="0" file="test/tool/apply_patch.test.ts" line="72" assertions="1" />
477
- <testcase name="applies add/update/delete in one patch" classname="tool.apply_patch freeform" time="0.047001" file="test/tool/apply_patch.test.ts" line="78" assertions="18" />
478
- <testcase name="permission metadata includes move file info" classname="tool.apply_patch freeform" time="0.035001" file="test/tool/apply_patch.test.ts" line="130" assertions="7" />
479
- <testcase name="applies multiple hunks to one file" classname="tool.apply_patch freeform" time="0.003" file="test/tool/apply_patch.test.ts" line="160" assertions="1" />
480
- <testcase name="inserts lines with insert-only hunk" classname="tool.apply_patch freeform" time="0.003" file="test/tool/apply_patch.test.ts" line="180" assertions="1" />
481
- <testcase name="appends trailing newline on update" classname="tool.apply_patch freeform" time="0.008" file="test/tool/apply_patch.test.ts" line="199" assertions="2" />
482
- <testcase name="moves file to a new directory" classname="tool.apply_patch freeform" time="0.003" file="test/tool/apply_patch.test.ts" line="221" assertions="2" />
483
- <testcase name="moves file overwriting existing destination" classname="tool.apply_patch freeform" time="0.002" file="test/tool/apply_patch.test.ts" line="244" assertions="2" />
484
- <testcase name="adds file overwriting existing file" classname="tool.apply_patch freeform" time="0.002" file="test/tool/apply_patch.test.ts" line="269" assertions="1" />
485
- <testcase name="rejects update when target file is missing" classname="tool.apply_patch freeform" time="0.005" file="test/tool/apply_patch.test.ts" line="287" assertions="1" />
486
- <testcase name="rejects delete when file is missing" classname="tool.apply_patch freeform" time="0" file="test/tool/apply_patch.test.ts" line="303" assertions="1" />
487
- <testcase name="rejects delete when target is a directory" classname="tool.apply_patch freeform" time="0.001" file="test/tool/apply_patch.test.ts" line="317" assertions="1" />
488
- <testcase name="rejects invalid hunk header" classname="tool.apply_patch freeform" time="0.001" file="test/tool/apply_patch.test.ts" line="334" assertions="1" />
489
- <testcase name="rejects update with missing context" classname="tool.apply_patch freeform" time="0.001" file="test/tool/apply_patch.test.ts" line="348" assertions="2" />
490
- <testcase name="verification failure leaves no side effects" classname="tool.apply_patch freeform" time="0.002" file="test/tool/apply_patch.test.ts" line="366" assertions="2" />
491
- <testcase name="supports end of file anchor" classname="tool.apply_patch freeform" time="0.002" file="test/tool/apply_patch.test.ts" line="384" assertions="1" />
492
- <testcase name="rejects missing second chunk context" classname="tool.apply_patch freeform" time="0.002" file="test/tool/apply_patch.test.ts" line="402" assertions="2" />
493
- <testcase name="disambiguates change context with @@ header" classname="tool.apply_patch freeform" time="0.003" file="test/tool/apply_patch.test.ts" line="420" assertions="1" />
494
- <testcase name="EOF anchor matches from end of file first" classname="tool.apply_patch freeform" time="0.008" file="test/tool/apply_patch.test.ts" line="438" assertions="1" />
495
- <testcase name="parses heredoc-wrapped patch" classname="tool.apply_patch freeform" time="0.002" file="test/tool/apply_patch.test.ts" line="460" assertions="1" />
496
- <testcase name="parses heredoc-wrapped patch without cat" classname="tool.apply_patch freeform" time="0.002" file="test/tool/apply_patch.test.ts" line="481" assertions="1" />
497
- <testcase name="matches with trailing whitespace differences" classname="tool.apply_patch freeform" time="0.002" file="test/tool/apply_patch.test.ts" line="502" assertions="1" />
498
- <testcase name="matches with leading whitespace differences" classname="tool.apply_patch freeform" time="0.006" file="test/tool/apply_patch.test.ts" line="522" assertions="1" />
499
- <testcase name="matches with Unicode punctuation differences" classname="tool.apply_patch freeform" time="0.002" file="test/tool/apply_patch.test.ts" line="542" assertions="1" />
500
- </testsuite>
501
- </testsuite>
502
- <testsuite name="test/tool/read.test.ts" file="test/tool/read.test.ts" tests="35" assertions="72" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
503
- <testsuite name="tool.read external_directory permission" file="test/tool/read.test.ts" line="105" tests="6" assertions="8" failures="0" skipped="0" time="0.196" hostname="benmurray-MS-7C84">
504
- <testcase name="allows reading absolute path inside project directory" classname="tool.read external_directory permission" time="0.018" file="test/tool/read.test.ts" line="106" assertions="1" />
505
- <testcase name="allows reading file in subdirectory inside project directory" classname="tool.read external_directory permission" time="0.015" file="test/tool/read.test.ts" line="116" assertions="1" />
506
- <testcase name="asks for external_directory permission when reading absolute path outside project" classname="tool.read external_directory permission" time="0.044001" file="test/tool/read.test.ts" line="126" assertions="2" />
507
- <testcase name="asks for directory-scoped external_directory permission when reading external directory" classname="tool.read external_directory permission" time="0.037001" file="test/tool/read.test.ts" line="162" assertions="2" />
508
- <testcase name="asks for external_directory permission when reading relative path outside project" classname="tool.read external_directory permission" time="0.041001" file="test/tool/read.test.ts" line="177" assertions="1" />
509
- <testcase name="does not ask for external_directory permission when reading inside project" classname="tool.read external_directory permission" time="0.041001" file="test/tool/read.test.ts" line="189" assertions="1" />
510
- </testsuite>
511
- <testsuite name="tool.read env file permissions" file="test/tool/read.test.ts" line="203" tests="14" assertions="14" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
512
- <testsuite name="agent=build" file="test/tool/read.test.ts" line="215" tests="7" assertions="7" failures="0" skipped="0" time="0.075" hostname="benmurray-MS-7C84">
513
- <testcase name=".env asks=true" classname="agent=build &amp;gt; tool.read env file permissions" time="0.014" file="test/tool/read.test.ts" line="217" assertions="1" />
514
- <testcase name=".env.local asks=true" classname="agent=build &amp;gt; tool.read env file permissions" time="0.011" file="test/tool/read.test.ts" line="217" assertions="1" />
515
- <testcase name=".env.production asks=true" classname="agent=build &amp;gt; tool.read env file permissions" time="0.006" file="test/tool/read.test.ts" line="217" assertions="1" />
516
- <testcase name=".env.development.local asks=true" classname="agent=build &amp;gt; tool.read env file permissions" time="0.013" file="test/tool/read.test.ts" line="217" assertions="1" />
517
- <testcase name=".env.example asks=false" classname="agent=build &amp;gt; tool.read env file permissions" time="0.006" file="test/tool/read.test.ts" line="217" assertions="1" />
518
- <testcase name=".envrc asks=false" classname="agent=build &amp;gt; tool.read env file permissions" time="0.013" file="test/tool/read.test.ts" line="217" assertions="1" />
519
- <testcase name="environment.ts asks=false" classname="agent=build &amp;gt; tool.read env file permissions" time="0.012" file="test/tool/read.test.ts" line="217" assertions="1" />
520
- </testsuite>
521
- <testsuite name="agent=plan" file="test/tool/read.test.ts" line="215" tests="7" assertions="7" failures="0" skipped="0" time="0.067" hostname="benmurray-MS-7C84">
522
- <testcase name=".env asks=true" classname="agent=plan &amp;gt; tool.read env file permissions" time="0.016" file="test/tool/read.test.ts" line="217" assertions="1" />
523
- <testcase name=".env.local asks=true" classname="agent=plan &amp;gt; tool.read env file permissions" time="0.006" file="test/tool/read.test.ts" line="217" assertions="1" />
524
- <testcase name=".env.production asks=true" classname="agent=plan &amp;gt; tool.read env file permissions" time="0.01" file="test/tool/read.test.ts" line="217" assertions="1" />
525
- <testcase name=".env.development.local asks=true" classname="agent=plan &amp;gt; tool.read env file permissions" time="0.004" file="test/tool/read.test.ts" line="217" assertions="1" />
526
- <testcase name=".env.example asks=false" classname="agent=plan &amp;gt; tool.read env file permissions" time="0.012" file="test/tool/read.test.ts" line="217" assertions="1" />
527
- <testcase name=".envrc asks=false" classname="agent=plan &amp;gt; tool.read env file permissions" time="0.007" file="test/tool/read.test.ts" line="217" assertions="1" />
528
- <testcase name="environment.ts asks=false" classname="agent=plan &amp;gt; tool.read env file permissions" time="0.012" file="test/tool/read.test.ts" line="217" assertions="1" />
529
- </testsuite>
530
- </testsuite>
531
- <testsuite name="tool.read truncation" file="test/tool/read.test.ts" line="255" tests="12" assertions="43" failures="0" skipped="0" time="0.137" hostname="benmurray-MS-7C84">
532
- <testcase name="truncates large file by bytes and sets truncated metadata" classname="tool.read truncation" time="0.021" file="test/tool/read.test.ts" line="256" assertions="3" />
533
- <testcase name="truncates by line count when limit is specified" classname="tool.read truncation" time="0.014" file="test/tool/read.test.ts" line="271" assertions="6" />
534
- <testcase name="does not truncate small file" classname="tool.read truncation" time="0.005" file="test/tool/read.test.ts" line="287" assertions="2" />
535
- <testcase name="respects offset parameter" classname="tool.read truncation" time="0.011" file="test/tool/read.test.ts" line="298" assertions="8" />
536
- <testcase name="throws when offset is beyond end of file" classname="tool.read truncation" time="0.004" file="test/tool/read.test.ts" line="316" assertions="1" />
537
- <testcase name="allows reading empty file at default offset" classname="tool.read truncation" time="0.01" file="test/tool/read.test.ts" line="327" assertions="2" />
538
- <testcase name="throws when offset &gt; 1 for empty file" classname="tool.read truncation" time="0.005" file="test/tool/read.test.ts" line="338" assertions="1" />
539
- <testcase name="does not mark final directory page as truncated" classname="tool.read truncation" time="0.012" file="test/tool/read.test.ts" line="348" assertions="2" />
540
- <testcase name="truncates long lines" classname="tool.read truncation" time="0.005" file="test/tool/read.test.ts" line="365" assertions="2" />
541
- <testcase name="image files set truncated to false" classname="tool.read truncation" time="0.009" file="test/tool/read.test.ts" line="376" assertions="6" />
542
- <testcase name="large image files are properly attached without error" classname="tool.read truncation" time="0.029" file="test/tool/read.test.ts" line="395" assertions="7" />
543
- <testcase name=".fbs files (FlatBuffers schema) are read as text, not images" classname="tool.read truncation" time="0.012" file="test/tool/read.test.ts" line="408" assertions="3" />
544
- </testsuite>
545
- <testsuite name="tool.read loaded instructions" file="test/tool/read.test.ts" line="430" tests="1" assertions="5" failures="0" skipped="0" time="0.005" hostname="benmurray-MS-7C84">
546
- <testcase name="loads AGENTS.md from parent directory and includes in metadata" classname="tool.read loaded instructions" time="0.005" file="test/tool/read.test.ts" line="431" assertions="5" />
547
- </testsuite>
548
- <testsuite name="tool.read binary detection" file="test/tool/read.test.ts" line="447" tests="2" assertions="2" failures="0" skipped="0" time="0.012" hostname="benmurray-MS-7C84">
549
- <testcase name="rejects text extension files with null bytes" classname="tool.read binary detection" time="0.008" file="test/tool/read.test.ts" line="448" assertions="1" />
550
- <testcase name="rejects known binary extensions" classname="tool.read binary detection" time="0.004" file="test/tool/read.test.ts" line="459" assertions="1" />
551
- </testsuite>
552
- </testsuite>
553
- <testsuite name="test/tool/edit.test.ts" file="test/tool/edit.test.ts" tests="27" assertions="51" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
554
- <testsuite name="tool.edit" file="test/tool/edit.test.ts" line="30" tests="27" assertions="51" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
555
- <testsuite name="creating new files" file="test/tool/edit.test.ts" line="31" tests="3" assertions="4" failures="0" skipped="0" time="0.011" hostname="benmurray-MS-7C84">
556
- <testcase name="creates new file when oldString is empty" classname="creating new files &amp;gt; tool.edit" time="0.005" file="test/tool/edit.test.ts" line="32" assertions="2" />
557
- <testcase name="creates new file with nested directories" classname="creating new files &amp;gt; tool.edit" time="0.004" file="test/tool/edit.test.ts" line="57" assertions="1" />
558
- <testcase name="emits add event for new files" classname="creating new files &amp;gt; tool.edit" time="0.002" file="test/tool/edit.test.ts" line="80" assertions="1" />
559
- </testsuite>
560
- <testsuite name="editing existing files" file="test/tool/edit.test.ts" line="111" tests="8" assertions="9" failures="0" skipped="0" time="0.027" hostname="benmurray-MS-7C84">
561
- <testcase name="replaces text in existing file" classname="editing existing files &amp;gt; tool.edit" time="0.009" file="test/tool/edit.test.ts" line="112" assertions="2" />
562
- <testcase name="throws error when file does not exist" classname="editing existing files &amp;gt; tool.edit" time="0.002" file="test/tool/edit.test.ts" line="140" assertions="1" />
563
- <testcase name="throws error when oldString equals newString" classname="editing existing files &amp;gt; tool.edit" time="0.001" file="test/tool/edit.test.ts" line="164" assertions="1" />
564
- <testcase name="throws error when oldString not found in file" classname="editing existing files &amp;gt; tool.edit" time="0.002" file="test/tool/edit.test.ts" line="187" assertions="1" />
565
- <testcase name="throws error when file was not read first (FileTime)" classname="editing existing files &amp;gt; tool.edit" time="0.002" file="test/tool/edit.test.ts" line="212" assertions="1" />
566
- <testcase name="throws error when file has been modified since read" classname="editing existing files &amp;gt; tool.edit" time="0.001" file="test/tool/edit.test.ts" line="235" assertions="1" />
567
- <testcase name="replaces all occurrences with replaceAll option" classname="editing existing files &amp;gt; tool.edit" time="0.006" file="test/tool/edit.test.ts" line="267" assertions="1" />
568
- <testcase name="emits change event for existing files" classname="editing existing files &amp;gt; tool.edit" time="0.004" file="test/tool/edit.test.ts" line="294" assertions="1" />
569
- </testsuite>
570
- <testsuite name="edge cases" file="test/tool/edit.test.ts" line="327" tests="5" assertions="7" failures="0" skipped="0" time="0.014" hostname="benmurray-MS-7C84">
571
- <testcase name="handles multiline replacements" classname="edge cases &amp;gt; tool.edit" time="0.002" file="test/tool/edit.test.ts" line="328" assertions="1" />
572
- <testcase name="handles CRLF line endings" classname="edge cases &amp;gt; tool.edit" time="0.003" file="test/tool/edit.test.ts" line="354" assertions="1" />
573
- <testcase name="throws error when oldString equals newString" classname="edge cases &amp;gt; tool.edit" time="0" file="test/tool/edit.test.ts" line="380" assertions="1" />
574
- <testcase name="throws error when path is directory" classname="edge cases &amp;gt; tool.edit" time="0.002" file="test/tool/edit.test.ts" line="403" assertions="1" />
575
- <testcase name="tracks file diff statistics" classname="edge cases &amp;gt; tool.edit" time="0.007" file="test/tool/edit.test.ts" line="428" assertions="3" />
576
- </testsuite>
577
- <testsuite name="line endings" file="test/tool/edit.test.ts" line="456" tests="10" assertions="30" failures="0" skipped="0" time="0.037" hostname="benmurray-MS-7C84">
578
- <testcase name="preserves LF with LF multi-line strings" classname="line endings &amp;gt; tool.edit" time="0.005" file="test/tool/edit.test.ts" line="522" assertions="3" />
579
- <testcase name="preserves CRLF with CRLF multi-line strings" classname="line endings &amp;gt; tool.edit" time="0.002" file="test/tool/edit.test.ts" line="533" assertions="3" />
580
- <testcase name="preserves LF when old/new use CRLF" classname="line endings &amp;gt; tool.edit" time="0.009" file="test/tool/edit.test.ts" line="544" assertions="3" />
581
- <testcase name="preserves CRLF when old/new use LF" classname="line endings &amp;gt; tool.edit" time="0.003" file="test/tool/edit.test.ts" line="555" assertions="3" />
582
- <testcase name="preserves LF when newString uses CRLF" classname="line endings &amp;gt; tool.edit" time="0.002" file="test/tool/edit.test.ts" line="566" assertions="3" />
583
- <testcase name="preserves CRLF when newString uses LF" classname="line endings &amp;gt; tool.edit" time="0.002" file="test/tool/edit.test.ts" line="577" assertions="3" />
584
- <testcase name="preserves LF with mixed old/new line endings" classname="line endings &amp;gt; tool.edit" time="0.006" file="test/tool/edit.test.ts" line="588" assertions="3" />
585
- <testcase name="preserves CRLF with mixed old/new line endings" classname="line endings &amp;gt; tool.edit" time="0.002" file="test/tool/edit.test.ts" line="599" assertions="3" />
586
- <testcase name="replaceAll preserves LF for multi-line blocks" classname="line endings &amp;gt; tool.edit" time="0.003" file="test/tool/edit.test.ts" line="610" assertions="3" />
587
- <testcase name="replaceAll preserves CRLF for multi-line blocks" classname="line endings &amp;gt; tool.edit" time="0.003" file="test/tool/edit.test.ts" line="624" assertions="3" />
588
- </testsuite>
589
- <testsuite name="concurrent editing" file="test/tool/edit.test.ts" line="639" tests="1" assertions="1" failures="0" skipped="0" time="0.004" hostname="benmurray-MS-7C84">
590
- <testcase name="serializes concurrent edits to same file" classname="concurrent editing &amp;gt; tool.edit" time="0.004" file="test/tool/edit.test.ts" line="640" assertions="1" />
591
- </testsuite>
592
- </testsuite>
593
- </testsuite>
594
- <testsuite name="test/tool/truncation.test.ts" file="test/tool/truncation.test.ts" tests="14" assertions="41" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
595
- <testsuite name="Truncate" file="test/tool/truncation.test.ts" line="15" tests="14" assertions="41" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
596
- <testsuite name="output" file="test/tool/truncation.test.ts" line="16" tests="13" assertions="39" failures="0" skipped="0" time="0.494" hostname="benmurray-MS-7C84">
597
- <testcase name="truncates large json file by bytes" classname="output &amp;gt; Truncate" time="0.01" file="test/tool/truncation.test.ts" line="17" assertions="3" />
598
- <testcase name="returns content unchanged when under limits" classname="output &amp;gt; Truncate" time="0" file="test/tool/truncation.test.ts" line="26" assertions="2" />
599
- <testcase name="truncates by line count" classname="output &amp;gt; Truncate" time="0.001" file="test/tool/truncation.test.ts" line="34" assertions="2" />
600
- <testcase name="truncates by byte count" classname="output &amp;gt; Truncate" time="0" file="test/tool/truncation.test.ts" line="42" assertions="2" />
601
- <testcase name="truncates from head by default" classname="output &amp;gt; Truncate" time="0" file="test/tool/truncation.test.ts" line="50" assertions="5" />
602
- <testcase name="truncates from tail when direction is tail" classname="output &amp;gt; Truncate" time="0" file="test/tool/truncation.test.ts" line="61" assertions="5" />
603
- <testcase name="uses default MAX_LINES and MAX_BYTES" classname="output &amp;gt; Truncate" time="0" file="test/tool/truncation.test.ts" line="72" assertions="2" />
604
- <testcase name="large single-line file truncates with byte message" classname="output &amp;gt; Truncate" time="0.01" file="test/tool/truncation.test.ts" line="77" assertions="3" />
605
- <testcase name="writes full output to file when truncated" classname="output &amp;gt; Truncate" time="0" file="test/tool/truncation.test.ts" line="86" assertions="6" />
606
- <testcase name="suggests Task tool when agent has task permission" classname="output &amp;gt; Truncate" time="0.001" file="test/tool/truncation.test.ts" line="101" assertions="3" />
607
- <testcase name="omits Task tool hint when agent lacks task permission" classname="output &amp;gt; Truncate" time="0.001" file="test/tool/truncation.test.ts" line="111" assertions="3" />
608
- <testcase name="does not write file when not truncated" classname="output &amp;gt; Truncate" time="0" file="test/tool/truncation.test.ts" line="121" assertions="2" />
609
- <testcase name="loads truncate effect in a fresh process" classname="output &amp;gt; Truncate" time="0.471007" file="test/tool/truncation.test.ts" line="130" assertions="1" />
610
- </testsuite>
611
- <testsuite name="cleanup" file="test/tool/truncation.test.ts" line="139" tests="1" assertions="2" failures="0" skipped="0" time="0.003" hostname="benmurray-MS-7C84">
612
- <testcase name="deletes files older than 7 days and preserves recent files" classname="cleanup &amp;gt; Truncate" time="0.003" file="test/tool/truncation.test.ts" line="143" assertions="2" />
613
- </testsuite>
614
- </testsuite>
615
- </testsuite>
616
- <testsuite name="test/tool/webfetch.test.ts" file="test/tool/webfetch.test.ts" tests="3" assertions="13" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
617
- <testsuite name="tool.webfetch" file="test/tool/webfetch.test.ts" line="33" tests="3" assertions="13" failures="0" skipped="0" time="0.01" hostname="benmurray-MS-7C84">
618
- <testcase name="returns image responses as file attachments" classname="tool.webfetch" time="0.009" file="test/tool/webfetch.test.ts" line="34" assertions="9" />
619
- <testcase name="keeps svg as text output" classname="tool.webfetch" time="0" file="test/tool/webfetch.test.ts" line="59" assertions="2" />
620
- <testcase name="keeps text responses as text output" classname="tool.webfetch" time="0.001" file="test/tool/webfetch.test.ts" line="81" assertions="2" />
621
- </testsuite>
622
- </testsuite>
623
- <testsuite name="test/tool/grep.test.ts" file="test/tool/grep.test.ts" tests="6" assertions="12" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
624
- <testsuite name="tool.grep" file="test/tool/grep.test.ts" line="21" tests="3" assertions="5" failures="0" skipped="0" time="0.027" hostname="benmurray-MS-7C84">
625
- <testcase name="basic search" classname="tool.grep" time="0.009" file="test/tool/grep.test.ts" line="22" assertions="2" />
626
- <testcase name="no matches returns correct output" classname="tool.grep" time="0.011" file="test/tool/grep.test.ts" line="41" assertions="2" />
627
- <testcase name="handles CRLF line endings in output" classname="tool.grep" time="0.007" file="test/tool/grep.test.ts" line="64" assertions="1" />
628
- </testsuite>
629
- <testsuite name="CRLF regex handling" file="test/tool/grep.test.ts" line="89" tests="3" assertions="7" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
630
- <testcase name="regex correctly splits Unix line endings" classname="CRLF regex handling" time="0" file="test/tool/grep.test.ts" line="90" assertions="3" />
631
- <testcase name="regex correctly splits Windows CRLF line endings" classname="CRLF regex handling" time="0" file="test/tool/grep.test.ts" line="98" assertions="3" />
632
- <testcase name="regex handles mixed line endings" classname="CRLF regex handling" time="0" file="test/tool/grep.test.ts" line="106" assertions="1" />
633
- </testsuite>
634
- </testsuite>
635
- <testsuite name="test/tool/skill.test.ts" file="test/tool/skill.test.ts" tests="3" assertions="13" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
636
- <testsuite name="tool.skill" file="test/tool/skill.test.ts" line="25" tests="3" assertions="13" failures="0" skipped="0" time="0.138" hostname="benmurray-MS-7C84">
637
- <testcase name="description lists skill location URL" classname="tool.skill" time="0.043001" file="test/tool/skill.test.ts" line="26" assertions="1" />
638
- <testcase name="description sorts skills by name and is stable across calls" classname="tool.skill" time="0.043001" file="test/tool/skill.test.ts" line="61" assertions="4" />
639
- <testcase name="execute returns skill content block with files" classname="tool.skill" time="0.052001" file="test/tool/skill.test.ts" line="111" assertions="8" />
640
- </testsuite>
641
- </testsuite>
642
- <testsuite name="test/tool/bash.test.ts" file="test/tool/bash.test.ts" tests="21" assertions="53" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
643
- <testsuite name="tool.bash" file="test/tool/bash.test.ts" line="116" tests="1" assertions="2" failures="0" skipped="0" time="0.057" hostname="benmurray-MS-7C84">
644
- <testcase name="basic [bash]" classname="tool.bash" time="0.057001" file="test/tool/bash.test.ts" line="92" assertions="2" />
645
- </testsuite>
646
- <testsuite name="tool.bash permissions" file="test/tool/bash.test.ts" line="136" tests="11" assertions="29" failures="0" skipped="0" time="0.067" hostname="benmurray-MS-7C84">
647
- <testcase name="asks for bash permission with correct pattern [bash]" classname="tool.bash permissions" time="0.008" file="test/tool/bash.test.ts" line="92" assertions="3" />
648
- <testcase name="asks for bash permission with multiple commands [bash]" classname="tool.bash permissions" time="0.009" file="test/tool/bash.test.ts" line="92" assertions="4" />
649
- <testcase name="asks for external_directory permission for wildcard external paths [bash]" classname="tool.bash permissions" time="0.002" file="test/tool/bash.test.ts" line="92" assertions="3" />
650
- <testcase name="asks for external_directory permission when cd to parent [bash]" classname="tool.bash permissions" time="0.002" file="test/tool/bash.test.ts" line="92" assertions="2" />
651
- <testcase name="asks for external_directory permission when workdir is outside project [bash]" classname="tool.bash permissions" time="0.002" file="test/tool/bash.test.ts" line="92" assertions="3" />
652
- <testcase name="asks for external_directory permission when file arg is outside project [bash]" classname="tool.bash permissions" time="0.002" file="test/tool/bash.test.ts" line="92" assertions="4" />
653
- <testcase name="does not ask for external_directory permission when rm inside project [bash]" classname="tool.bash permissions" time="0.012" file="test/tool/bash.test.ts" line="92" assertions="1" />
654
- <testcase name="includes always patterns for auto-approval [bash]" classname="tool.bash permissions" time="0.012" file="test/tool/bash.test.ts" line="92" assertions="3" />
655
- <testcase name="does not ask for bash permission when command is cd only [bash]" classname="tool.bash permissions" time="0.006" file="test/tool/bash.test.ts" line="92" assertions="1" />
656
- <testcase name="matches redirects in permission pattern [bash]" classname="tool.bash permissions" time="0.001" file="test/tool/bash.test.ts" line="92" assertions="3" />
657
- <testcase name="always pattern has space before wildcard to not include different commands [bash]" classname="tool.bash permissions" time="0.011" file="test/tool/bash.test.ts" line="92" assertions="2" />
658
- </testsuite>
659
- <testsuite name="tool.bash abort" file="test/tool/bash.test.ts" line="899" tests="5" assertions="12" failures="0" skipped="0" time="0.722" hostname="benmurray-MS-7C84">
660
- <testcase name="preserves output when aborted" classname="tool.bash abort" time="0.004" file="test/tool/bash.test.ts" line="900" assertions="3" />
661
- <testcase name="terminates command on timeout" classname="tool.bash abort" time="0.602009" file="test/tool/bash.test.ts" line="932" assertions="2" />
662
- <testcase name="captures stderr in output" classname="tool.bash abort" time="0.007" file="test/tool/bash.test.ts" line="951" assertions="3" />
663
- <testcase name="returns non-zero exit code" classname="tool.bash abort" time="0.004" file="test/tool/bash.test.ts" line="970" assertions="1" />
664
- <testcase name="streams metadata updates progressively" classname="tool.bash abort" time="0.105002" file="test/tool/bash.test.ts" line="987" assertions="3" />
665
- </testsuite>
666
- <testsuite name="tool.bash truncation" file="test/tool/bash.test.ts" line="1014" tests="4" assertions="10" failures="0" skipped="0" time="0.59" hostname="benmurray-MS-7C84">
667
- <testcase name="truncates output exceeding line limit" classname="tool.bash truncation" time="0.200003" file="test/tool/bash.test.ts" line="1015" assertions="2" />
668
- <testcase name="truncates output exceeding byte limit" classname="tool.bash truncation" time="0.186003" file="test/tool/bash.test.ts" line="1035" assertions="2" />
669
- <testcase name="does not truncate small output" classname="tool.bash truncation" time="0.005" file="test/tool/bash.test.ts" line="1055" assertions="2" />
670
- <testcase name="full output is saved to file when truncated" classname="tool.bash truncation" time="0.199003" file="test/tool/bash.test.ts" line="1073" assertions="4" />
671
- </testsuite>
672
- </testsuite>
673
- <testsuite name="test/tool/write.test.ts" file="test/tool/write.test.ts" tests="13" assertions="19" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
674
- <testsuite name="tool.write" file="test/tool/write.test.ts" line="24" tests="13" assertions="19" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
675
- <testsuite name="new file creation" file="test/tool/write.test.ts" line="25" tests="3" assertions="5" failures="0" skipped="0" time="0.014" hostname="benmurray-MS-7C84">
676
- <testcase name="writes content to new file" classname="new file creation &amp;gt; tool.write" time="0.005" file="test/tool/write.test.ts" line="26" assertions="3" />
677
- <testcase name="creates parent directories if needed" classname="new file creation &amp;gt; tool.write" time="0.007" file="test/tool/write.test.ts" line="51" assertions="1" />
678
- <testcase name="handles relative paths by resolving to instance directory" classname="new file creation &amp;gt; tool.write" time="0.002" file="test/tool/write.test.ts" line="73" assertions="1" />
679
- </testsuite>
680
- <testsuite name="existing file overwrite" file="test/tool/write.test.ts" line="95" tests="2" assertions="5" failures="0" skipped="0" time="0.006" hostname="benmurray-MS-7C84">
681
- <testcase name="overwrites existing file content" classname="existing file overwrite &amp;gt; tool.write" time="0.003" file="test/tool/write.test.ts" line="96" assertions="3" />
682
- <testcase name="returns diff in metadata for existing files" classname="existing file overwrite &amp;gt; tool.write" time="0.003" file="test/tool/write.test.ts" line="126" assertions="2" />
683
- </testsuite>
684
- <testsuite name="file permissions" file="test/tool/write.test.ts" line="154" tests="1" assertions="1" failures="0" skipped="0" time="0.007" hostname="benmurray-MS-7C84">
685
- <testcase name="sets file permissions when writing sensitive data" classname="file permissions &amp;gt; tool.write" time="0.007" file="test/tool/write.test.ts" line="155" assertions="1" />
686
- </testsuite>
687
- <testsuite name="content types" file="test/tool/write.test.ts" line="182" tests="5" assertions="6" failures="0" skipped="0" time="0.014" hostname="benmurray-MS-7C84">
688
- <testcase name="writes JSON content" classname="content types &amp;gt; tool.write" time="0.003" file="test/tool/write.test.ts" line="183" assertions="1" />
689
- <testcase name="writes binary-safe content" classname="content types &amp;gt; tool.write" time="0.002" file="test/tool/write.test.ts" line="206" assertions="1" />
690
- <testcase name="writes empty content" classname="content types &amp;gt; tool.write" time="0.002" file="test/tool/write.test.ts" line="229" assertions="2" />
691
- <testcase name="writes multi-line content" classname="content types &amp;gt; tool.write" time="0.002" file="test/tool/write.test.ts" line="254" assertions="1" />
692
- <testcase name="handles different line endings" classname="content types &amp;gt; tool.write" time="0.005" file="test/tool/write.test.ts" line="277" assertions="1" />
693
- </testsuite>
694
- <testsuite name="error handling" file="test/tool/write.test.ts" line="301" tests="1" assertions="1" failures="0" skipped="0" time="0.002" hostname="benmurray-MS-7C84">
695
- <testcase name="throws error when OS denies write access" classname="error handling &amp;gt; tool.write" time="0.002" file="test/tool/write.test.ts" line="302" assertions="1" />
696
- </testsuite>
697
- <testsuite name="title generation" file="test/tool/write.test.ts" line="331" tests="1" assertions="1" failures="0" skipped="0" time="0.003" hostname="benmurray-MS-7C84">
698
- <testcase name="returns relative path as title" classname="title generation &amp;gt; tool.write" time="0.003" file="test/tool/write.test.ts" line="332" assertions="1" />
699
- </testsuite>
700
- </testsuite>
701
- </testsuite>
702
- <testsuite name="test/patch/patch.test.ts" file="test/patch/patch.test.ts" tests="20" assertions="48" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
703
- <testsuite name="Patch namespace" file="test/patch/patch.test.ts" line="7" tests="20" assertions="48" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
704
- <testsuite name="parsePatch" file="test/patch/patch.test.ts" line="19" tests="5" assertions="13" failures="0" skipped="0" time="0.001" hostname="benmurray-MS-7C84">
705
- <testcase name="should parse simple add file patch" classname="parsePatch &amp;gt; Patch namespace" time="0" file="test/patch/patch.test.ts" line="20" assertions="2" />
706
- <testcase name="should parse delete file patch" classname="parsePatch &amp;gt; Patch namespace" time="0" file="test/patch/patch.test.ts" line="35" assertions="3" />
707
- <testcase name="should parse patch with multiple hunks" classname="parsePatch &amp;gt; Patch namespace" time="0" file="test/patch/patch.test.ts" line="47" assertions="3" />
708
- <testcase name="should parse file move operation" classname="parsePatch &amp;gt; Patch namespace" time="0" file="test/patch/patch.test.ts" line="64" assertions="4" />
709
- <testcase name="should throw error for invalid patch format" classname="parsePatch &amp;gt; Patch namespace" time="0.001" file="test/patch/patch.test.ts" line="83" assertions="1" />
710
- </testsuite>
711
- <testsuite name="maybeParseApplyPatch" file="test/patch/patch.test.ts" line="90" tests="4" assertions="7" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
712
- <testcase name="should parse direct apply_patch command" classname="maybeParseApplyPatch &amp;gt; Patch namespace" time="0" file="test/patch/patch.test.ts" line="91" assertions="3" />
713
- <testcase name="should parse applypatch command" classname="maybeParseApplyPatch &amp;gt; Patch namespace" time="0" file="test/patch/patch.test.ts" line="105" assertions="1" />
714
- <testcase name="should handle bash heredoc format" classname="maybeParseApplyPatch &amp;gt; Patch namespace" time="0" file="test/patch/patch.test.ts" line="115" assertions="2" />
715
- <testcase name="should return NotApplyPatch for non-patch commands" classname="maybeParseApplyPatch &amp;gt; Patch namespace" time="0" file="test/patch/patch.test.ts" line="130" assertions="1" />
716
- </testsuite>
717
- <testsuite name="applyPatch" file="test/patch/patch.test.ts" line="136" tests="6" assertions="20" failures="0" skipped="0" time="0.006" hostname="benmurray-MS-7C84">
718
- <testcase name="should add a new file" classname="applyPatch &amp;gt; Patch namespace" time="0.001" file="test/patch/patch.test.ts" line="137" assertions="4" />
719
- <testcase name="should delete an existing file" classname="applyPatch &amp;gt; Patch namespace" time="0.003" file="test/patch/patch.test.ts" line="153" assertions="3" />
720
- <testcase name="should update an existing file" classname="applyPatch &amp;gt; Patch namespace" time="0" file="test/patch/patch.test.ts" line="172" assertions="3" />
721
- <testcase name="should move and update a file" classname="applyPatch &amp;gt; Patch namespace" time="0.001" file="test/patch/patch.test.ts" line="193" assertions="4" />
722
- <testcase name="should handle multiple operations in one patch" classname="applyPatch &amp;gt; Patch namespace" time="0" file="test/patch/patch.test.ts" line="220" assertions="3" />
723
- <testcase name="should create parent directories when adding files" classname="applyPatch &amp;gt; Patch namespace" time="0.001" file="test/patch/patch.test.ts" line="244" assertions="3" />
724
- </testsuite>
725
- <testsuite name="error handling" file="test/patch/patch.test.ts" line="264" tests="2" assertions="2" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
726
- <testcase name="should throw error when updating non-existent file" classname="error handling &amp;gt; Patch namespace" time="0" file="test/patch/patch.test.ts" line="265" assertions="1" />
727
- <testcase name="should throw error when deleting non-existent file" classname="error handling &amp;gt; Patch namespace" time="0" file="test/patch/patch.test.ts" line="278" assertions="1" />
728
- </testsuite>
729
- <testsuite name="edge cases" file="test/patch/patch.test.ts" line="289" tests="3" assertions="6" failures="0" skipped="0" time="0.001" hostname="benmurray-MS-7C84">
730
- <testcase name="should handle empty files" classname="edge cases &amp;gt; Patch namespace" time="0.001" file="test/patch/patch.test.ts" line="290" assertions="2" />
731
- <testcase name="should handle files with no trailing newline" classname="edge cases &amp;gt; Patch namespace" time="0" file="test/patch/patch.test.ts" line="307" assertions="2" />
732
- <testcase name="should handle multiple update chunks in single file" classname="edge cases &amp;gt; Patch namespace" time="0" file="test/patch/patch.test.ts" line="325" assertions="2" />
733
- </testsuite>
734
- </testsuite>
735
- </testsuite>
736
- <testsuite name="test/shell/shell.test.ts" file="test/shell/shell.test.ts" tests="3" assertions="6" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
737
- <testsuite name="shell" file="test/shell/shell.test.ts" line="22" tests="3" assertions="6" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
738
- <testcase name="normalizes shell names" classname="shell" time="0" file="test/shell/shell.test.ts" line="23" assertions="1" />
739
- <testcase name="detects login shells" classname="shell" time="0" file="test/shell/shell.test.ts" line="31" assertions="2" />
740
- <testcase name="detects posix shells" classname="shell" time="0" file="test/shell/shell.test.ts" line="36" assertions="3" />
741
- </testsuite>
742
- </testsuite>
743
- <testsuite name="test/installation/installation.test.ts" file="test/installation/installation.test.ts" tests="8" assertions="8" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
744
- <testsuite name="installation" file="test/installation/installation.test.ts" line="50" tests="8" assertions="8" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
745
- <testsuite name="latest" file="test/installation/installation.test.ts" line="51" tests="8" assertions="8" failures="0" skipped="0" time="0.006" hostname="benmurray-MS-7C84">
746
- <testcase name="reads release version from GitHub releases" classname="latest &amp;gt; installation" time="0.003" file="test/installation/installation.test.ts" line="52" assertions="1" />
747
- <testcase name="strips v prefix from GitHub release tag" classname="latest &amp;gt; installation" time="0" file="test/installation/installation.test.ts" line="61" assertions="1" />
748
- <testcase name="reads npm registry versions" classname="latest &amp;gt; installation" time="0.001" file="test/installation/installation.test.ts" line="70" assertions="1" />
749
- <testcase name="reads npm registry versions for bun method" classname="latest &amp;gt; installation" time="0" file="test/installation/installation.test.ts" line="85" assertions="1" />
750
- <testcase name="reads scoop manifest versions" classname="latest &amp;gt; installation" time="0.001" file="test/installation/installation.test.ts" line="97" assertions="1" />
751
- <testcase name="reads chocolatey feed versions" classname="latest &amp;gt; installation" time="0" file="test/installation/installation.test.ts" line="106" assertions="1" />
752
- <testcase name="reads brew formulae API versions" classname="latest &amp;gt; installation" time="0.001" file="test/installation/installation.test.ts" line="115" assertions="1" />
753
- <testcase name="reads brew tap info JSON via CLI" classname="latest &amp;gt; installation" time="0" file="test/installation/installation.test.ts" line="132" assertions="1" />
754
- </testsuite>
755
- </testsuite>
756
- </testsuite>
757
- <testsuite name="test/sync/index.test.ts" file="test/sync/index.test.ts" tests="7" assertions="13" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
758
- <testsuite name="SyncEvent" file="test/sync/index.test.ts" line="40" tests="7" assertions="13" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
759
- <testsuite name="run" file="test/sync/index.test.ts" line="69" tests="4" assertions="9" failures="0" skipped="0" time="0.019" hostname="benmurray-MS-7C84">
760
- <testcase name="inserts event row" classname="run &amp;gt; SyncEvent" time="0.005" file="test/sync/index.test.ts" line="71" assertions="3" />
761
- <testcase name="increments seq per aggregate" classname="run &amp;gt; SyncEvent" time="0.004" file="test/sync/index.test.ts" line="83" assertions="2" />
762
- <testcase name="uses custom aggregate field from agg()" classname="run &amp;gt; SyncEvent" time="0.003" file="test/sync/index.test.ts" line="95" assertions="2" />
763
- <testcase name="emits events" classname="run &amp;gt; SyncEvent" time="0.007" file="test/sync/index.test.ts" line="106" assertions="2" />
764
- </testsuite>
765
- <testsuite name="replay" file="test/sync/index.test.ts" line="135" tests="3" assertions="4" failures="0" skipped="0" time="0.011" hostname="benmurray-MS-7C84">
766
- <testcase name="inserts event from external payload" classname="replay &amp;gt; SyncEvent" time="0.004" file="test/sync/index.test.ts" line="137" assertions="2" />
767
- <testcase name="throws on sequence mismatch" classname="replay &amp;gt; SyncEvent" time="0.004" file="test/sync/index.test.ts" line="154" assertions="1" />
768
- <testcase name="throws on unknown event type" classname="replay &amp;gt; SyncEvent" time="0.003" file="test/sync/index.test.ts" line="177" assertions="1" />
769
- </testsuite>
770
- </testsuite>
771
- </testsuite>
772
- <testsuite name="test/agent/agent.test.ts" file="test/agent/agent.test.ts" tests="37" assertions="93" failures="0" skipped="0" time="0.19" hostname="benmurray-MS-7C84">
773
- <testcase name="returns default native agents when no config" classname="" time="0.005" file="test/agent/agent.test.ts" line="18" assertions="7" />
774
- <testcase name="build agent has correct default properties" classname="" time="0.003" file="test/agent/agent.test.ts" line="36" assertions="5" />
775
- <testcase name="plan agent denies edits except .epochcli/plans/*" classname="" time="0.002" file="test/agent/agent.test.ts" line="51" assertions="3" />
776
- <testcase name="explore agent denies edit and write" classname="" time="0.003" file="test/agent/agent.test.ts" line="66" assertions="5" />
777
- <testcase name="explore agent asks for external directories and allows Truncate.GLOB" classname="" time="0.007" file="test/agent/agent.test.ts" line="81" assertions="3" />
778
- <testcase name="general agent denies todo tools" classname="" time="0.002" file="test/agent/agent.test.ts" line="95" assertions="4" />
779
- <testcase name="compaction agent denies all permissions" classname="" time="0.003" file="test/agent/agent.test.ts" line="109" assertions="5" />
780
- <testcase name="custom agent from config creates new agent" classname="" time="0.003" file="test/agent/agent.test.ts" line="124" assertions="8" />
781
- <testcase name="custom agent config overrides native agent properties" classname="" time="0.002" file="test/agent/agent.test.ts" line="153" assertions="7" />
782
- <testcase name="agent disable removes agent from list" classname="" time="0.006" file="test/agent/agent.test.ts" line="181" assertions="2" />
783
- <testcase name="agent permission config merges with defaults" classname="" time="0.004" file="test/agent/agent.test.ts" line="201" assertions="3" />
784
- <testcase name="global permission config applies to all agents" classname="" time="0.002" file="test/agent/agent.test.ts" line="228" assertions="2" />
785
- <testcase name="agent steps/maxSteps config sets steps property" classname="" time="0.004" file="test/agent/agent.test.ts" line="246" assertions="2" />
786
- <testcase name="agent mode can be overridden" classname="" time="0.008" file="test/agent/agent.test.ts" line="266" assertions="1" />
787
- <testcase name="agent name can be overridden" classname="" time="0.003" file="test/agent/agent.test.ts" line="283" assertions="1" />
788
- <testcase name="agent prompt can be set from config" classname="" time="0.002" file="test/agent/agent.test.ts" line="300" assertions="1" />
789
- <testcase name="unknown agent properties are placed into options" classname="" time="0.002" file="test/agent/agent.test.ts" line="317" assertions="2" />
790
- <testcase name="agent options merge correctly" classname="" time="0.006" file="test/agent/agent.test.ts" line="338" assertions="2" />
791
- <testcase name="multiple custom agents can be defined" classname="" time="0.003" file="test/agent/agent.test.ts" line="361" assertions="4" />
792
- <testcase name="Agent.list keeps the default agent first and sorts the rest by name" classname="" time="0.004" file="test/agent/agent.test.ts" line="389" assertions="2" />
793
- <testcase name="Agent.get returns undefined for non-existent agent" classname="" time="0.003" file="test/agent/agent.test.ts" line="415" assertions="1" />
794
- <testcase name="default permission includes doom_loop and external_directory as ask" classname="" time="0.012" file="test/agent/agent.test.ts" line="426" assertions="2" />
795
- <testcase name="webfetch is allowed by default" classname="" time="0.003" file="test/agent/agent.test.ts" line="438" assertions="1" />
796
- <testcase name="legacy tools config converts to permissions" classname="" time="0.002" file="test/agent/agent.test.ts" line="449" assertions="2" />
797
- <testcase name="legacy tools config maps write/edit/patch/multiedit to edit permission" classname="" time="0.006" file="test/agent/agent.test.ts" line="472" assertions="1" />
798
- <testcase name="Truncate.GLOB is allowed even when user denies external_directory globally" classname="" time="0.003" file="test/agent/agent.test.ts" line="493" assertions="3" />
799
- <testcase name="Truncate.GLOB is allowed even when user denies external_directory per-agent" classname="" time="0.002" file="test/agent/agent.test.ts" line="513" assertions="3" />
800
- <testcase name="explicit Truncate.GLOB deny is respected" classname="" time="0.003" file="test/agent/agent.test.ts" line="537" assertions="2" />
801
- <testcase name="skill directories are allowed for external_directory" classname="" time="0.045001" file="test/agent/agent.test.ts" line="559" assertions="1" />
802
- <testcase name="defaultAgent returns build when no default_agent config" classname="" time="0.004" file="test/agent/agent.test.ts" line="595" assertions="1" />
803
- <testcase name="defaultAgent respects default_agent config set to plan" classname="" time="0.01" file="test/agent/agent.test.ts" line="606" assertions="1" />
804
- <testcase name="defaultAgent respects default_agent config set to custom agent with mode all" classname="" time="0.003" file="test/agent/agent.test.ts" line="621" assertions="1" />
805
- <testcase name="defaultAgent throws when default_agent points to subagent" classname="" time="0.003" file="test/agent/agent.test.ts" line="641" assertions="1" />
806
- <testcase name="defaultAgent throws when default_agent points to hidden agent" classname="" time="0.003" file="test/agent/agent.test.ts" line="655" assertions="1" />
807
- <testcase name="defaultAgent throws when default_agent points to non-existent agent" classname="" time="0.007" file="test/agent/agent.test.ts" line="669" assertions="1" />
808
- <testcase name="defaultAgent returns plan when build is disabled and default_agent not set" classname="" time="0.003" file="test/agent/agent.test.ts" line="683" assertions="1" />
809
- <testcase name="defaultAgent throws when all primary agents are disabled" classname="" time="0.004" file="test/agent/agent.test.ts" line="701" assertions="1" />
810
- </testsuite>
811
- <testsuite name="test/acp/event-subscription.test.ts" file="test/acp/event-subscription.test.ts" tests="9" assertions="20" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
812
- <testsuite name="acp.agent event subscription" file="test/acp/event-subscription.test.ts" line="262" tests="9" assertions="20" failures="0" skipped="0" time="0.253" hostname="benmurray-MS-7C84">
813
- <testcase name="routes message.part.delta by the event sessionID (no cross-session pollution)" classname="acp.agent event subscription" time="0.025" file="test/acp/event-subscription.test.ts" line="263" assertions="2" />
814
- <testcase name="keeps concurrent sessions isolated when message.part.delta events are interleaved" classname="acp.agent event subscription" time="0.028" file="test/acp/event-subscription.test.ts" line="298" assertions="8" />
815
- <testcase name="does not create additional event subscriptions on repeated loadSession()" classname="acp.agent event subscription" time="0.005" file="test/acp/event-subscription.test.ts" line="350" assertions="1" />
816
- <testcase name="permission.asked events are handled and replied" classname="acp.agent event subscription" time="0.026" file="test/acp/event-subscription.test.ts" line="372" assertions="1" />
817
- <testcase name="permission prompt on session A does not block message updates for session B" classname="acp.agent event subscription" time="0.059001" file="test/acp/event-subscription.test.ts" line="411" assertions="3" />
818
- <testcase name="streams running bash output snapshots and de-dupes identical snapshots" classname="acp.agent event subscription" time="0.029" file="test/acp/event-subscription.test.ts" line="498" assertions="1" />
819
- <testcase name="emits synthetic pending before first running update for any tool" classname="acp.agent event subscription" time="0.029" file="test/acp/event-subscription.test.ts" line="532" assertions="2" />
820
- <testcase name="does not emit duplicate synthetic pending after replayed running tool" classname="acp.agent event subscription" time="0.029" file="test/acp/event-subscription.test.ts" line="577" assertions="1" />
821
- <testcase name="clears bash snapshot marker on pending state" classname="acp.agent event subscription" time="0.023" file="test/acp/event-subscription.test.ts" line="636" assertions="1" />
822
- </testsuite>
823
- </testsuite>
824
- <testsuite name="test/acp/agent-interface.test.ts" file="test/acp/agent-interface.test.ts" tests="1" assertions="11" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
825
- <testsuite name="acp.agent interface compliance" file="test/acp/agent-interface.test.ts" line="22" tests="1" assertions="11" failures="0" skipped="0" time="0.002" hostname="benmurray-MS-7C84">
826
- <testcase name="Agent implements all SDK-checked methods" classname="acp.agent interface compliance" time="0.002" file="test/acp/agent-interface.test.ts" line="44" assertions="11" />
827
- </testsuite>
828
- </testsuite>
829
- <testsuite name="test/git/git.test.ts" file="test/git/git.test.ts" tests="7" assertions="11" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
830
- <testsuite name="Git" file="test/git/git.test.ts" line="20" tests="7" assertions="11" failures="0" skipped="0" time="0.196" hostname="benmurray-MS-7C84">
831
- <testcase name="branch() returns current branch name" classname="Git" time="0.028" file="test/git/git.test.ts" line="21" assertions="2" />
832
- <testcase name="branch() returns undefined for non-git directories" classname="Git" time="0.006" file="test/git/git.test.ts" line="31" assertions="1" />
833
- <testcase name="branch() returns undefined for detached HEAD" classname="Git" time="0.026" file="test/git/git.test.ts" line="40" assertions="1" />
834
- <testcase name="defaultBranch() uses init.defaultBranch when available" classname="Git" time="0.036001" file="test/git/git.test.ts" line="51" assertions="2" />
835
- <testcase name="status() handles special filenames" classname="Git" time="0.022" file="test/git/git.test.ts" line="63" assertions="1" />
836
- <testcase name="diff(), stats(), and mergeBase() parse tracked changes" classname="Git" time="0.039001" file="test/git/git.test.ts" line="80" assertions="3" />
837
- <testcase name="show() returns empty text for binary blobs" classname="Git" time="0.039001" file="test/git/git.test.ts" line="117" assertions="1" />
838
- </testsuite>
839
- </testsuite>
840
- <testsuite name="test/filesystem/filesystem.test.ts" file="test/filesystem/filesystem.test.ts" tests="24" assertions="35" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
841
- <testsuite name="AppFileSystem" file="test/filesystem/filesystem.test.ts" line="11" tests="24" assertions="35" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
842
- <testsuite name="isDir" file="test/filesystem/filesystem.test.ts" line="12" tests="3" assertions="3" failures="0" skipped="0" time="0.002" hostname="benmurray-MS-7C84">
843
- <testcase name="returns true for directories" classname="isDir &amp;gt; AppFileSystem" time="0.001" file="test/filesystem/filesystem.test.ts" line="14" assertions="1" />
844
- <testcase name="returns false for files" classname="isDir &amp;gt; AppFileSystem" time="0.001" file="test/filesystem/filesystem.test.ts" line="23" assertions="1" />
845
- <testcase name="returns false for non-existent paths" classname="isDir &amp;gt; AppFileSystem" time="0" file="test/filesystem/filesystem.test.ts" line="34" assertions="1" />
846
- </testsuite>
847
- <testsuite name="isFile" file="test/filesystem/filesystem.test.ts" line="42" tests="2" assertions="2" failures="0" skipped="0" time="0.002" hostname="benmurray-MS-7C84">
848
- <testcase name="returns true for files" classname="isFile &amp;gt; AppFileSystem" time="0.001" file="test/filesystem/filesystem.test.ts" line="44" assertions="1" />
849
- <testcase name="returns false for directories" classname="isFile &amp;gt; AppFileSystem" time="0.001" file="test/filesystem/filesystem.test.ts" line="55" assertions="1" />
850
- </testsuite>
851
- <testsuite name="readJson / writeJson" file="test/filesystem/filesystem.test.ts" line="64" tests="1" assertions="1" failures="0" skipped="0" time="0.001" hostname="benmurray-MS-7C84">
852
- <testcase name="round-trips JSON data" classname="readJson / writeJson &amp;gt; AppFileSystem" time="0.001" file="test/filesystem/filesystem.test.ts" line="66" assertions="1" />
853
- </testsuite>
854
- <testsuite name="ensureDir" file="test/filesystem/filesystem.test.ts" line="81" tests="2" assertions="2" failures="0" skipped="0" time="0.005" hostname="benmurray-MS-7C84">
855
- <testcase name="creates nested directories" classname="ensureDir &amp;gt; AppFileSystem" time="0.005" file="test/filesystem/filesystem.test.ts" line="83" assertions="1" />
856
- <testcase name="is idempotent" classname="ensureDir &amp;gt; AppFileSystem" time="0" file="test/filesystem/filesystem.test.ts" line="97" assertions="1" />
857
- </testsuite>
858
- <testsuite name="writeWithDirs" file="test/filesystem/filesystem.test.ts" line="112" tests="3" assertions="3" failures="0" skipped="0" time="0.004" hostname="benmurray-MS-7C84">
859
- <testcase name="creates parent directories if missing" classname="writeWithDirs &amp;gt; AppFileSystem" time="0.002" file="test/filesystem/filesystem.test.ts" line="114" assertions="1" />
860
- <testcase name="writes directly when parent exists" classname="writeWithDirs &amp;gt; AppFileSystem" time="0.001" file="test/filesystem/filesystem.test.ts" line="127" assertions="1" />
861
- <testcase name="writes Uint8Array content" classname="writeWithDirs &amp;gt; AppFileSystem" time="0.001" file="test/filesystem/filesystem.test.ts" line="140" assertions="1" />
862
- </testsuite>
863
- <testsuite name="findUp" file="test/filesystem/filesystem.test.ts" line="155" tests="3" assertions="3" failures="0" skipped="0" time="0.001" hostname="benmurray-MS-7C84">
864
- <testcase name="finds target in start directory" classname="findUp &amp;gt; AppFileSystem" time="0" file="test/filesystem/filesystem.test.ts" line="157" assertions="1" />
865
- <testcase name="finds target in parent directories" classname="findUp &amp;gt; AppFileSystem" time="0.001" file="test/filesystem/filesystem.test.ts" line="169" assertions="1" />
866
- <testcase name="returns empty array when not found" classname="findUp &amp;gt; AppFileSystem" time="0" file="test/filesystem/filesystem.test.ts" line="183" assertions="1" />
867
- </testsuite>
868
- <testsuite name="up" file="test/filesystem/filesystem.test.ts" line="193" tests="1" assertions="3" failures="0" skipped="0" time="0.001" hostname="benmurray-MS-7C84">
869
- <testcase name="finds multiple targets walking up" classname="up &amp;gt; AppFileSystem" time="0.001" file="test/filesystem/filesystem.test.ts" line="195" assertions="3" />
870
- </testsuite>
871
- <testsuite name="glob" file="test/filesystem/filesystem.test.ts" line="214" tests="2" assertions="2" failures="0" skipped="0" time="0.002" hostname="benmurray-MS-7C84">
872
- <testcase name="finds files matching pattern" classname="glob &amp;gt; AppFileSystem" time="0.001" file="test/filesystem/filesystem.test.ts" line="216" assertions="1" />
873
- <testcase name="supports absolute paths" classname="glob &amp;gt; AppFileSystem" time="0.001" file="test/filesystem/filesystem.test.ts" line="230" assertions="1" />
874
- </testsuite>
875
- <testsuite name="globMatch" file="test/filesystem/filesystem.test.ts" line="242" tests="1" assertions="3" failures="0" skipped="0" time="0.002" hostname="benmurray-MS-7C84">
876
- <testcase name="matches patterns" classname="globMatch &amp;gt; AppFileSystem" time="0.002" file="test/filesystem/filesystem.test.ts" line="244" assertions="3" />
877
- </testsuite>
878
- <testsuite name="globUp" file="test/filesystem/filesystem.test.ts" line="254" tests="1" assertions="2" failures="0" skipped="0" time="0.001" hostname="benmurray-MS-7C84">
879
- <testcase name="finds files walking up directories" classname="globUp &amp;gt; AppFileSystem" time="0.001" file="test/filesystem/filesystem.test.ts" line="256" assertions="2" />
880
- </testsuite>
881
- <testsuite name="built-in passthrough" file="test/filesystem/filesystem.test.ts" line="272" tests="2" assertions="3" failures="0" skipped="0" time="0.005" hostname="benmurray-MS-7C84">
882
- <testcase name="exists works" classname="built-in passthrough &amp;gt; AppFileSystem" time="0" file="test/filesystem/filesystem.test.ts" line="274" assertions="2" />
883
- <testcase name="remove works" classname="built-in passthrough &amp;gt; AppFileSystem" time="0.005" file="test/filesystem/filesystem.test.ts" line="287" assertions="1" />
884
- </testsuite>
885
- <testsuite name="pure helpers" file="test/filesystem/filesystem.test.ts" line="301" tests="3" assertions="8" failures="0" skipped="0" time="0.001" hostname="benmurray-MS-7C84">
886
- <testcase name="mimeType returns correct types" classname="pure helpers &amp;gt; AppFileSystem" time="0.001" file="test/filesystem/filesystem.test.ts" line="302" assertions="3" />
887
- <testcase name="contains checks path containment" classname="pure helpers &amp;gt; AppFileSystem" time="0" file="test/filesystem/filesystem.test.ts" line="308" assertions="2" />
888
- <testcase name="overlaps detects overlapping paths" classname="pure helpers &amp;gt; AppFileSystem" time="0" file="test/filesystem/filesystem.test.ts" line="313" assertions="3" />
889
- </testsuite>
890
- </testsuite>
891
- </testsuite>
892
- <testsuite name="test/format/format.test.ts" file="test/format/format.test.ts" tests="7" assertions="88" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
893
- <testsuite name="Format" file="test/format/format.test.ts" line="12" tests="7" assertions="88" failures="0" skipped="0" time="0.13" hostname="benmurray-MS-7C84">
894
- <testcase name="status() returns built-in formatters when no config overrides" classname="Format" time="0.012" file="test/format/format.test.ts" line="13" assertions="82" />
895
- <testcase name="status() returns empty list when formatter is disabled" classname="Format" time="0.003" file="test/format/format.test.ts" line="35" assertions="1" />
896
- <testcase name="status() excludes formatters marked as disabled in config" classname="Format" time="0.007" file="test/format/format.test.ts" line="47" assertions="1" />
897
- <testcase name="service initializes without error" classname="Format" time="0.002" file="test/format/format.test.ts" line="67" assertions="0" />
898
- <testcase name="status() initializes formatter state per directory" classname="Format" time="0.015" file="test/format/format.test.ts" line="69" assertions="2" />
899
- <testcase name="runs enabled checks for matching formatters in parallel" classname="Format" time="0.028" file="test/format/format.test.ts" line="81" assertions="1" />
900
- <testcase name="runs matching formatters sequentially for the same file" classname="Format" time="0.063001" file="test/format/format.test.ts" line="139" assertions="1" />
901
- </testsuite>
902
- </testsuite>
903
- <testsuite name="test/mcp/oauth-browser.test.ts" file="test/mcp/oauth-browser.test.ts" tests="3" assertions="8" failures="0" skipped="0" time="6.014" hostname="benmurray-MS-7C84">
904
- <testcase name="BrowserOpenFailed event is published when open() throws" classname="" time="2.007029" file="test/mcp/oauth-browser.test.ts" line="108" assertions="3" />
905
- <testcase name="BrowserOpenFailed event is NOT published when open() succeeds" classname="" time="2.003029" file="test/mcp/oauth-browser.test.ts" line="159" assertions="2" />
906
- <testcase name="open() is called with the authorization URL" classname="" time="2.004029" file="test/mcp/oauth-browser.test.ts" line="208" assertions="3" />
907
- </testsuite>
908
- <testsuite name="test/mcp/oauth-auto-connect.test.ts" file="test/mcp/oauth-auto-connect.test.ts" tests="3" assertions="7" failures="0" skipped="0" time="0.017" hostname="benmurray-MS-7C84">
909
- <testcase name="first connect to OAuth server shows needs_auth instead of failed" classname="" time="0.007" file="test/mcp/oauth-auto-connect.test.ts" line="104" assertions="2" />
910
- <testcase name="state() generates a new state when none is saved" classname="" time="0.003" file="test/mcp/oauth-auto-connect.test.ts" line="142" assertions="4" />
911
- <testcase name="state() returns existing state when one is saved" classname="" time="0.007" file="test/mcp/oauth-auto-connect.test.ts" line="174" assertions="1" />
912
- </testsuite>
913
- <testsuite name="test/mcp/headers.test.ts" file="test/mcp/headers.test.ts" tests="3" assertions="23" failures="0" skipped="0" time="0.007" hostname="benmurray-MS-7C84">
914
- <testcase name="headers are passed to transports when oauth is enabled (default)" classname="" time="0.003" file="test/mcp/headers.test.ts" line="50" assertions="13" />
915
- <testcase name="headers are passed to transports when oauth is explicitly disabled" classname="" time="0.002" file="test/mcp/headers.test.ts" line="101" assertions="7" />
916
- <testcase name="no requestInit when headers are not provided" classname="" time="0.002" file="test/mcp/headers.test.ts" line="132" assertions="3" />
917
- </testsuite>
918
- <testsuite name="test/mcp/lifecycle.test.ts" file="test/mcp/lifecycle.test.ts" tests="19" assertions="48" failures="0" skipped="0" time="0.714" hostname="benmurray-MS-7C84">
919
- <testcase name="tools() reuses cached tool definitions after connect" classname="" time="0.044001" file="test/mcp/lifecycle.test.ts" line="203" assertions="5" />
920
- <testcase name="tool change notifications refresh cached tool definitions" classname="" time="0.041001" file="test/mcp/lifecycle.test.ts" line="233" assertions="6" />
921
- <testcase name="disconnect sets status to disabled and removes client" classname="" time="0.004" file="test/mcp/lifecycle.test.ts" line="265" assertions="3" />
922
- <testcase name="connect() after disconnect() re-establishes the server" classname="" time="0.040001" file="test/mcp/lifecycle.test.ts" line="299" assertions="3" />
923
- <testcase name="add() closes the old client when replacing a server" classname="" time="0.042001" file="test/mcp/lifecycle.test.ts" line="335" assertions="3" />
924
- <testcase name="init connects available servers even when one fails" classname="" time="0.042001" file="test/mcp/lifecycle.test.ts" line="369" assertions="3" />
925
- <testcase name="disabled server is marked as disabled without attempting connection" classname="" time="0.004" file="test/mcp/lifecycle.test.ts" line="420" assertions="2" />
926
- <testcase name="prompts() returns prompts from connected servers" classname="" time="0.039001" file="test/mcp/lifecycle.test.ts" line="452" assertions="3" />
927
- <testcase name="resources() returns resources from connected servers" classname="" time="0.039001" file="test/mcp/lifecycle.test.ts" line="480" assertions="3" />
928
- <testcase name="prompts() skips disconnected servers" classname="" time="0.004" file="test/mcp/lifecycle.test.ts" line="508" assertions="1" />
929
- <testcase name="connect() on nonexistent server does not throw" classname="" time="0.002" file="test/mcp/lifecycle.test.ts" line="539" assertions="1" />
930
- <testcase name="disconnect() on nonexistent server does not throw" classname="" time="0.002" file="test/mcp/lifecycle.test.ts" line="553" assertions="0" />
931
- <testcase name="tools() returns empty when no MCP servers are configured" classname="" time="0.002" file="test/mcp/lifecycle.test.ts" line="565" assertions="1" />
932
- <testcase name="server that fails to connect is marked as failed" classname="" time="0.002" file="test/mcp/lifecycle.test.ts" line="577" assertions="3" />
933
- <testcase name="McpOAuthCallback.cancelPending is keyed by mcpName but pendingAuths uses oauthState" classname="" time="0.051001" file="test/mcp/lifecycle.test.ts" line="613" assertions="1" />
934
- <testcase name="tools() prefixes tool names with sanitized server name" classname="" time="0.043001" file="test/mcp/lifecycle.test.ts" line="643" assertions="3" />
935
- <testcase name="local stdio transport is closed when connect times out (no process leak)" classname="" time="0.106002" file="test/mcp/lifecycle.test.ts" line="681" assertions="3" />
936
- <testcase name="remote transport is closed when connect times out" classname="" time="0.203003" file="test/mcp/lifecycle.test.ts" line="706" assertions="2" />
937
- <testcase name="failed remote transport is closed before trying next transport" classname="" time="0.004" file="test/mcp/lifecycle.test.ts" line="731" assertions="2" />
938
- </testsuite>
939
- <testsuite name="test/memory/abort-leak.test.ts" file="test/memory/abort-leak.test.ts" tests="2" assertions="2" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
940
- <testsuite name="memory: abort controller leak" file="test/memory/abort-leak.test.ts" line="28" tests="2" assertions="2" failures="0" skipped="0" time="1.756" hostname="benmurray-MS-7C84">
941
- <testcase name="webfetch does not leak memory over many invocations" classname="memory: abort controller leak" time="1.110016" file="test/memory/abort-leak.test.ts" line="29" assertions="1" />
942
- <testcase name="compare closure vs bind pattern directly" classname="memory: abort controller leak" time="0.646009" file="test/memory/abort-leak.test.ts" line="61" assertions="1" />
943
- </testsuite>
944
- </testsuite>
945
- <testsuite name="test/fixture/fixture.test.ts" file="test/fixture/fixture.test.ts" tests="2" assertions="2" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
946
- <testsuite name="tmpdir" file="test/fixture/fixture.test.ts" line="6" tests="2" assertions="2" failures="0" skipped="0" time="0.045" hostname="benmurray-MS-7C84">
947
- <testcase name="disables fsmonitor for git fixtures" classname="tmpdir" time="0.026" file="test/fixture/fixture.test.ts" line="7" assertions="1" />
948
- <testcase name="removes directories on dispose" classname="tmpdir" time="0.019" file="test/fixture/fixture.test.ts" line="14" assertions="1" />
949
- </testsuite>
950
- </testsuite>
951
- <testsuite name="test/control-plane/sse.test.ts" file="test/control-plane/sse.test.ts" tests="2" assertions="2" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
952
- <testsuite name="control-plane/sse" file="test/control-plane/sse.test.ts" line="19" tests="2" assertions="2" failures="0" skipped="0" time="0.01" hostname="benmurray-MS-7C84">
953
- <testcase name="parses JSON events with CRLF and multiline data blocks" classname="control-plane/sse" time="0.006" file="test/control-plane/sse.test.ts" line="20" assertions="1" />
954
- <testcase name="falls back to sse.message for non-json payload" classname="control-plane/sse" time="0.004" file="test/control-plane/sse.test.ts" line="39" assertions="1" />
955
- </testsuite>
956
- </testsuite>
957
- <testsuite name="test/ide/ide.test.ts" file="test/ide/ide.test.ts" tests="10" assertions="10" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
958
- <testsuite name="ide" file="test/ide/ide.test.ts" line="4" tests="10" assertions="10" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
959
- <testcase name="should detect Visual Studio Code" classname="ide" time="0" file="test/ide/ide.test.ts" line="14" assertions="1" />
960
- <testcase name="should detect Visual Studio Code Insiders" classname="ide" time="0" file="test/ide/ide.test.ts" line="21" assertions="1" />
961
- <testcase name="should detect Cursor" classname="ide" time="0" file="test/ide/ide.test.ts" line="29" assertions="1" />
962
- <testcase name="should detect VSCodium" classname="ide" time="0" file="test/ide/ide.test.ts" line="36" assertions="1" />
963
- <testcase name="should detect Windsurf" classname="ide" time="0" file="test/ide/ide.test.ts" line="43" assertions="1" />
964
- <testcase name="should return unknown when TERM_PROGRAM is not vscode" classname="ide" time="0" file="test/ide/ide.test.ts" line="50" assertions="1" />
965
- <testcase name="should return unknown when GIT_ASKPASS does not contain IDE name" classname="ide" time="0" file="test/ide/ide.test.ts" line="58" assertions="1" />
966
- <testcase name="should recognize vscode-insiders EPOCHCLI_CALLER" classname="ide" time="0" file="test/ide/ide.test.ts" line="65" assertions="1" />
967
- <testcase name="should recognize vscode EPOCHCLI_CALLER" classname="ide" time="0" file="test/ide/ide.test.ts" line="71" assertions="1" />
968
- <testcase name="should return false for unknown EPOCHCLI_CALLER" classname="ide" time="0" file="test/ide/ide.test.ts" line="77" assertions="1" />
969
- </testsuite>
970
- </testsuite>
971
- <testsuite name="test/server/session-actions.test.ts" file="test/server/session-actions.test.ts" tests="2" assertions="6" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
972
- <testsuite name="session action routes" file="test/server/session-actions.test.ts" line="37" tests="2" assertions="6" failures="0" skipped="0" time="0.166" hostname="benmurray-MS-7C84">
973
- <testcase name="abort route calls SessionPrompt.cancel" classname="session action routes" time="0.103001" file="test/server/session-actions.test.ts" line="38" assertions="3" />
974
- <testcase name="delete message route returns 400 when session is busy" classname="session action routes" time="0.063001" file="test/server/session-actions.test.ts" line="60" assertions="3" />
975
- </testsuite>
976
- </testsuite>
977
- <testsuite name="test/server/session-list.test.ts" file="test/server/session-list.test.ts" tests="5" assertions="8" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
978
- <testsuite name="Session.list" file="test/server/session-list.test.ts" line="13" tests="5" assertions="8" failures="0" skipped="0" time="0.205" hostname="benmurray-MS-7C84">
979
- <testcase name="filters by directory" classname="Session.list" time="0.068001" file="test/server/session-list.test.ts" line="14" assertions="2" />
980
- <testcase name="filters root sessions" classname="Session.list" time="0.038001" file="test/server/session-list.test.ts" line="36" assertions="2" />
981
- <testcase name="filters by start time" classname="Session.list" time="0.034" file="test/server/session-list.test.ts" line="53" assertions="1" />
982
- <testcase name="filters by search term" classname="Session.list" time="0.031" file="test/server/session-list.test.ts" line="67" assertions="2" />
983
- <testcase name="respects limit parameter" classname="Session.list" time="0.034" file="test/server/session-list.test.ts" line="84" assertions="1" />
984
- </testsuite>
985
- </testsuite>
986
- <testsuite name="test/server/session-messages.test.ts" file="test/server/session-messages.test.ts" tests="5" assertions="16" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
987
- <testsuite name="session messages endpoint" file="test/server/session-messages.test.ts" line="54" tests="4" assertions="12" failures="0" skipped="0" time="0.506" hostname="benmurray-MS-7C84">
988
- <testcase name="returns cursor headers for older pages" classname="session messages endpoint" time="0.067001" file="test/server/session-messages.test.ts" line="55" assertions="6" />
989
- <testcase name="keeps full-history responses when limit is omitted" classname="session messages endpoint" time="0.066001" file="test/server/session-messages.test.ts" line="84" assertions="2" />
990
- <testcase name="rejects invalid cursors and missing sessions" classname="session messages endpoint" time="0.059001" file="test/server/session-messages.test.ts" line="105" assertions="2" />
991
- <testcase name="does not truncate large legacy limit requests" classname="session messages endpoint" time="0.314005" file="test/server/session-messages.test.ts" line="126" assertions="2" />
992
- </testsuite>
993
- <testsuite name="session.prompt_async error handling" file="test/server/session-messages.test.ts" line="148" tests="1" assertions="4" failures="0" skipped="0" time="0.001" hostname="benmurray-MS-7C84">
994
- <testcase name="prompt_async route has error handler for detached prompt call" classname="session.prompt_async error handling" time="0.001" file="test/server/session-messages.test.ts" line="149" assertions="4" />
995
- </testsuite>
996
- </testsuite>
997
- <testsuite name="test/server/project-init-git.test.ts" file="test/server/project-init-git.test.ts" tests="2" assertions="15" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
998
- <testsuite name="project.initGit endpoint" file="test/server/project-init-git.test.ts" line="19" tests="2" assertions="15" failures="0" skipped="0" time="0.101" hostname="benmurray-MS-7C84">
999
- <testcase name="initializes git and reloads immediately" classname="project.initGit endpoint" time="0.051001" file="test/server/project-init-git.test.ts" line="20" assertions="9" />
1000
- <testcase name="does not reload when the project is already git" classname="project.initGit endpoint" time="0.050001" file="test/server/project-init-git.test.ts" line="77" assertions="6" />
1001
- </testsuite>
1002
- </testsuite>
1003
- <testsuite name="test/server/global-session-list.test.ts" file="test/server/global-session-list.test.ts" tests="3" assertions="12" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
1004
- <testsuite name="Session.listGlobal" file="test/server/global-session-list.test.ts" line="10" tests="3" assertions="12" failures="0" skipped="0" time="0.149" hostname="benmurray-MS-7C84">
1005
- <testcase name="lists sessions across projects with project metadata" classname="Session.listGlobal" time="0.073001" file="test/server/global-session-list.test.ts" line="11" assertions="6" />
1006
- <testcase name="excludes archived sessions by default" classname="Session.listGlobal" time="0.035001" file="test/server/global-session-list.test.ts" line="42" assertions="2" />
1007
- <testcase name="supports cursor pagination" classname="Session.listGlobal" time="0.041001" file="test/server/global-session-list.test.ts" line="66" assertions="4" />
1008
- </testsuite>
1009
- </testsuite>
1010
- <testsuite name="test/server/session-select.test.ts" file="test/server/session-select.test.ts" tests="3" assertions="4" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
1011
- <testsuite name="tui.selectSession endpoint" file="test/server/session-select.test.ts" line="14" tests="3" assertions="4" failures="0" skipped="0" time="0.159" hostname="benmurray-MS-7C84">
1012
- <testcase name="should return 200 when called with valid session" classname="tui.selectSession endpoint" time="0.055001" file="test/server/session-select.test.ts" line="15" assertions="2" />
1013
- <testcase name="should return 404 when session does not exist" classname="tui.selectSession endpoint" time="0.051001" file="test/server/session-select.test.ts" line="41" assertions="1" />
1014
- <testcase name="should return 400 when session ID format is invalid" classname="tui.selectSession endpoint" time="0.053001" file="test/server/session-select.test.ts" line="63" assertions="1" />
1015
- </testsuite>
1016
- </testsuite>
1017
- <testsuite name="test/pty/pty-output-isolation.test.ts" file="test/pty/pty-output-isolation.test.ts" tests="3" assertions="3" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
1018
- <testsuite name="pty" file="test/pty/pty-output-isolation.test.ts" line="7" tests="3" assertions="3" failures="0" skipped="0" time="0.574" hostname="benmurray-MS-7C84">
1019
- <testcase name="does not leak output when websocket objects are reused" classname="pty" time="0.224003" file="test/pty/pty-output-isolation.test.ts" line="8" assertions="1" />
1020
- <testcase name="does not leak output when Bun recycles websocket objects before re-connect" classname="pty" time="0.177003" file="test/pty/pty-output-isolation.test.ts" line="58" assertions="1" />
1021
- <testcase name="treats in-place socket data mutation as the same connection" classname="pty" time="0.173002" file="test/pty/pty-output-isolation.test.ts" line="102" assertions="1" />
1022
- </testsuite>
1023
- </testsuite>
1024
- <testsuite name="test/pty/pty-session.test.ts" file="test/pty/pty-session.test.ts" tests="2" assertions="2" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
1025
- <testsuite name="pty" file="test/pty/pty-session.test.ts" line="22" tests="2" assertions="2" failures="0" skipped="0" time="0.409" hostname="benmurray-MS-7C84">
1026
- <testcase name="publishes created, exited, deleted in order for a short-lived process" classname="pty" time="0.233003" file="test/pty/pty-session.test.ts" line="23" assertions="1" />
1027
- <testcase name="publishes created, exited, deleted in order for /bin/sh + remove" classname="pty" time="0.176003" file="test/pty/pty-session.test.ts" line="60" assertions="1" />
1028
- </testsuite>
1029
- </testsuite>
1030
- <testsuite name="test/effect/cross-spawn-spawner.test.ts" file="test/effect/cross-spawn-spawner.test.ts" tests="24" assertions="25" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
1031
- <testsuite name="cross-spawn spawner" file="test/effect/cross-spawn-spawner.test.ts" line="52" tests="24" assertions="25" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
1032
- <testsuite name="basic spawning" file="test/effect/cross-spawn-spawner.test.ts" line="53" tests="4" assertions="4" failures="0" skipped="0" time="0.257" hostname="benmurray-MS-7C84">
1033
- <testcase name="captures stdout" classname="basic spawning &amp;gt; cross-spawn spawner" time="0.196003" file="test/effect/cross-spawn-spawner.test.ts" line="55" assertions="1" />
1034
- <testcase name="captures multiple lines" classname="basic spawning &amp;gt; cross-spawn spawner" time="0.023" file="test/effect/cross-spawn-spawner.test.ts" line="65" assertions="1" />
1035
- <testcase name="returns exit code" classname="basic spawning &amp;gt; cross-spawn spawner" time="0.018" file="test/effect/cross-spawn-spawner.test.ts" line="74" assertions="1" />
1036
- <testcase name="returns non-zero exit code" classname="basic spawning &amp;gt; cross-spawn spawner" time="0.02" file="test/effect/cross-spawn-spawner.test.ts" line="83" assertions="1" />
1037
- </testsuite>
1038
- <testsuite name="cwd option" file="test/effect/cross-spawn-spawner.test.ts" line="92" tests="2" assertions="2" failures="0" skipped="0" time="0.022" hostname="benmurray-MS-7C84">
1039
- <testcase name="uses cwd when spawning commands" classname="cwd option &amp;gt; cross-spawn spawner" time="0.021" file="test/effect/cross-spawn-spawner.test.ts" line="94" assertions="1" />
1040
- <testcase name="fails for invalid cwd" classname="cwd option &amp;gt; cross-spawn spawner" time="0.001" file="test/effect/cross-spawn-spawner.test.ts" line="110" assertions="1" />
1041
- </testsuite>
1042
- <testsuite name="env option" file="test/effect/cross-spawn-spawner.test.ts" line="120" tests="2" assertions="2" failures="0" skipped="0" time="0.043" hostname="benmurray-MS-7C84">
1043
- <testcase name="passes environment variables with extendEnv" classname="env option &amp;gt; cross-spawn spawner" time="0.021" file="test/effect/cross-spawn-spawner.test.ts" line="122" assertions="1" />
1044
- <testcase name="passes multiple environment variables" classname="env option &amp;gt; cross-spawn spawner" time="0.022" file="test/effect/cross-spawn-spawner.test.ts" line="134" assertions="1" />
1045
- </testsuite>
1046
- <testsuite name="stderr" file="test/effect/cross-spawn-spawner.test.ts" line="149" tests="2" assertions="3" failures="0" skipped="0" time="0.043" hostname="benmurray-MS-7C84">
1047
- <testcase name="captures stderr output" classname="stderr &amp;gt; cross-spawn spawner" time="0.02" file="test/effect/cross-spawn-spawner.test.ts" line="151" assertions="1" />
1048
- <testcase name="captures both stdout and stderr" classname="stderr &amp;gt; cross-spawn spawner" time="0.023" file="test/effect/cross-spawn-spawner.test.ts" line="160" assertions="2" />
1049
- </testsuite>
1050
- <testsuite name="combined output (all)" file="test/effect/cross-spawn-spawner.test.ts" line="180" tests="2" assertions="2" failures="0" skipped="0" time="0.041" hostname="benmurray-MS-7C84">
1051
- <testcase name="captures stdout via .all when no stderr" classname="combined output (all) &amp;gt; cross-spawn spawner" time="0.018" file="test/effect/cross-spawn-spawner.test.ts" line="182" assertions="1" />
1052
- <testcase name="captures stderr via .all when no stdout" classname="combined output (all) &amp;gt; cross-spawn spawner" time="0.023" file="test/effect/cross-spawn-spawner.test.ts" line="191" assertions="1" />
1053
- </testsuite>
1054
- <testsuite name="stdin" file="test/effect/cross-spawn-spawner.test.ts" line="200" tests="1" assertions="1" failures="0" skipped="0" time="0.021" hostname="benmurray-MS-7C84">
1055
- <testcase name="allows providing standard input to a command" classname="stdin &amp;gt; cross-spawn spawner" time="0.021" file="test/effect/cross-spawn-spawner.test.ts" line="202" assertions="1" />
1056
- </testsuite>
1057
- <testsuite name="process control" file="test/effect/cross-spawn-spawner.test.ts" line="217" tests="4" assertions="5" failures="0" skipped="0" time="0.031" hostname="benmurray-MS-7C84">
1058
- <testcase name="kills a running process" classname="process control &amp;gt; cross-spawn spawner" time="0.002" file="test/effect/cross-spawn-spawner.test.ts" line="219" assertions="1" />
1059
- <testcase name="kills a child when scope exits" classname="process control &amp;gt; cross-spawn spawner" time="0.006" file="test/effect/cross-spawn-spawner.test.ts" line="233" assertions="1" />
1060
- <testcase name="forceKillAfter escalates for stubborn processes" classname="process control &amp;gt; cross-spawn spawner" time="0.002" file="test/effect/cross-spawn-spawner.test.ts" line="247" assertions="2" />
1061
- <testcase name="isRunning reflects process state" classname="process control &amp;gt; cross-spawn spawner" time="0.021" file="test/effect/cross-spawn-spawner.test.ts" line="266" assertions="1" />
1062
- </testsuite>
1063
- <testsuite name="error handling" file="test/effect/cross-spawn-spawner.test.ts" line="276" tests="1" assertions="1" failures="0" skipped="0" time="0.001" hostname="benmurray-MS-7C84">
1064
- <testcase name="fails for invalid command" classname="error handling &amp;gt; cross-spawn spawner" time="0.001" file="test/effect/cross-spawn-spawner.test.ts" line="278" assertions="1" />
1065
- </testsuite>
1066
- <testsuite name="pipeline" file="test/effect/cross-spawn-spawner.test.ts" line="291" tests="4" assertions="5" failures="0" skipped="0" time="0.113" hostname="benmurray-MS-7C84">
1067
- <testcase name="pipes stdout of one command to stdin of another" classname="pipeline &amp;gt; cross-spawn spawner" time="0.027" file="test/effect/cross-spawn-spawner.test.ts" line="293" assertions="1" />
1068
- <testcase name="three-stage pipeline" classname="pipeline &amp;gt; cross-spawn spawner" time="0.033" file="test/effect/cross-spawn-spawner.test.ts" line="309" assertions="1" />
1069
- <testcase name="pipes stderr with { from: &apos;stderr&apos; }" classname="pipeline &amp;gt; cross-spawn spawner" time="0.027" file="test/effect/cross-spawn-spawner.test.ts" line="330" assertions="1" />
1070
- <testcase name="pipes combined output with { from: &apos;all&apos; }" classname="pipeline &amp;gt; cross-spawn spawner" time="0.026" file="test/effect/cross-spawn-spawner.test.ts" line="347" assertions="2" />
1071
- </testsuite>
1072
- <testsuite name="Windows-specific" file="test/effect/cross-spawn-spawner.test.ts" line="365" tests="2" assertions="0" failures="0" skipped="0" time="0.001" hostname="benmurray-MS-7C84">
1073
- <testcase name="uses shell routing on Windows" classname="Windows-specific &amp;gt; cross-spawn spawner" time="0" file="test/effect/cross-spawn-spawner.test.ts" line="367" assertions="0" />
1074
- <testcase name="runs cmd scripts with spaces on Windows without shell" classname="Windows-specific &amp;gt; cross-spawn spawner" time="0.001" file="test/effect/cross-spawn-spawner.test.ts" line="385" assertions="0" />
1075
- </testsuite>
1076
- </testsuite>
1077
- </testsuite>
1078
- <testsuite name="test/effect/runner.test.ts" file="test/effect/runner.test.ts" tests="25" assertions="59" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
1079
- <testsuite name="Runner" file="test/effect/runner.test.ts" line="6" tests="25" assertions="59" failures="0" skipped="0" time="0.458" hostname="benmurray-MS-7C84">
1080
- <testcase name="ensureRunning starts work and returns result" classname="Runner" time="0.001" file="test/effect/runner.test.ts" line="10" assertions="3" />
1081
- <testcase name="ensureRunning propagates work failures" classname="Runner" time="0" file="test/effect/runner.test.ts" line="22" assertions="2" />
1082
- <testcase name="concurrent callers share the same run" classname="Runner" time="0.011" file="test/effect/runner.test.ts" line="33" assertions="3" />
1083
- <testcase name="concurrent callers all receive same error" classname="Runner" time="0.014" file="test/effect/runner.test.ts" line="55" assertions="2" />
1084
- <testcase name="ensureRunning can be called again after previous run completes" classname="Runner" time="0.004" file="test/effect/runner.test.ts" line="75" assertions="2" />
1085
- <testcase name="second ensureRunning ignores new work if already running" classname="Runner" time="0.056001" file="test/effect/runner.test.ts" line="85" assertions="3" />
1086
- <testcase name="cancel interrupts running work" classname="Runner" time="0.014" file="test/effect/runner.test.ts" line="114" assertions="4" />
1087
- <testcase name="cancel on idle is a no-op" classname="Runner" time="0" file="test/effect/runner.test.ts" line="132" assertions="1" />
1088
- <testcase name="cancel with onInterrupt resolves callers gracefully" classname="Runner" time="0.015" file="test/effect/runner.test.ts" line="142" assertions="2" />
1089
- <testcase name="cancel with queued callers resolves all" classname="Runner" time="0.024" file="test/effect/runner.test.ts" line="158" assertions="4" />
1090
- <testcase name="work can be started after cancel" classname="Runner" time="0.018" file="test/effect/runner.test.ts" line="179" assertions="1" />
1091
- <testcase name="cancel does not deadlock when replacement work starts before interrupted run exits" classname="Runner" time="0.016" file="test/effect/runner.test.ts" line="193" assertions="5" />
1092
- <testcase name="shell runs exclusively" classname="Runner" time="0.003" file="test/effect/runner.test.ts" line="249" assertions="2" />
1093
- <testcase name="shell rejects when run is active" classname="Runner" time="0.011" file="test/effect/runner.test.ts" line="260" assertions="1" />
1094
- <testcase name="shell rejects when another shell is running" classname="Runner" time="0.012" file="test/effect/runner.test.ts" line="276" assertions="1" />
1095
- <testcase name="shell rejects via busy callback and cancel still stops the first shell" classname="Runner" time="0.013" file="test/effect/runner.test.ts" line="296" assertions="2" />
1096
- <testcase name="cancel interrupts shell that ignores abort signal" classname="Runner" time="0.117002" file="test/effect/runner.test.ts" line="327" assertions="3" />
1097
- <testcase name="ensureRunning queues behind shell then runs after" classname="Runner" time="0.029" file="test/effect/runner.test.ts" line="353" assertions="5" />
1098
- <testcase name="multiple ensureRunning callers share the queued run behind shell" classname="Runner" time="0.032" file="test/effect/runner.test.ts" line="380" assertions="3" />
1099
- <testcase name="cancel during shell_then_run cancels both" classname="Runner" time="0.026" file="test/effect/runner.test.ts" line="411" assertions="3" />
1100
- <testcase name="onIdle fires when returning to idle from running" classname="Runner" time="0" file="test/effect/runner.test.ts" line="445" assertions="1" />
1101
- <testcase name="onIdle fires on cancel" classname="Runner" time="0.014" file="test/effect/runner.test.ts" line="458" assertions="1" />
1102
- <testcase name="onBusy fires when shell starts" classname="Runner" time="0" file="test/effect/runner.test.ts" line="474" assertions="1" />
1103
- <testcase name="busy is true during run" classname="Runner" time="0.014" file="test/effect/runner.test.ts" line="489" assertions="2" />
1104
- <testcase name="busy is true during shell" classname="Runner" time="0.014" file="test/effect/runner.test.ts" line="506" assertions="2" />
1105
- </testsuite>
1106
- </testsuite>
1107
- <testsuite name="test/effect/run-service.test.ts" file="test/effect/run-service.test.ts" tests="1" assertions="3" failures="0" skipped="0" time="0.001" hostname="benmurray-MS-7C84">
1108
- <testcase name="makeRuntime shares dependent layers through the shared memo map" classname="" time="0.001" file="test/effect/run-service.test.ts" line="7" assertions="3" />
1109
- </testsuite>
1110
- <testsuite name="test/effect/instance-state.test.ts" file="test/effect/instance-state.test.ts" tests="12" assertions="48" failures="0" skipped="0" time="0.216" hostname="benmurray-MS-7C84">
1111
- <testcase name="InstanceState caches values per directory" classname="" time="0.003" file="test/effect/instance-state.test.ts" line="19" assertions="2" />
1112
- <testcase name="InstanceState isolates directories" classname="" time="0.002" file="test/effect/instance-state.test.ts" line="38" assertions="3" />
1113
- <testcase name="InstanceState invalidates on reload" classname="" time="0.004" file="test/effect/instance-state.test.ts" line="60" assertions="2" />
1114
- <testcase name="InstanceState invalidates on disposeAll" classname="" time="0.002" file="test/effect/instance-state.test.ts" line="89" assertions="1" />
1115
- <testcase name="InstanceState.get reads the current directory lazily" classname="" time="0.002" file="test/effect/instance-state.test.ts" line="117" assertions="2" />
1116
- <testcase name="InstanceState preserves directory across async boundaries" classname="" time="0.081001" file="test/effect/instance-state.test.ts" line="160" assertions="6" />
1117
- <testcase name="InstanceState survives high-contention concurrent access" classname="" time="0.032" file="test/effect/instance-state.test.ts" line="229" assertions="20" />
1118
- <testcase name="InstanceState correct after interleaved init and dispose" classname="" time="0.019" file="test/effect/instance-state.test.ts" line="279" assertions="3" />
1119
- <testcase name="InstanceState mutation in one directory does not leak to another" classname="" time="0.002" file="test/effect/instance-state.test.ts" line="338" assertions="3" />
1120
- <testcase name="InstanceState dedupes concurrent lookups" classname="" time="0.013" file="test/effect/instance-state.test.ts" line="364" assertions="2" />
1121
- <testcase name="InstanceState survives deferred resume from the same instance context" classname="" time="0.031" file="test/effect/instance-state.test.ts" line="387" assertions="2" />
1122
- <testcase name="InstanceState survives deferred resume outside ALS when InstanceRef is set" classname="" time="0.025" file="test/effect/instance-state.test.ts" line="434" assertions="2" />
1123
- </testsuite>
1124
- <testsuite name="test/lsp/index.test.ts" file="test/lsp/index.test.ts" tests="4" assertions="8" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
1125
- <testsuite name="lsp.spawn" file="test/lsp/index.test.ts" line="10" tests="4" assertions="8" failures="0" skipped="0" time="0.348" hostname="benmurray-MS-7C84">
1126
- <testcase name="does not spawn builtin LSP for files outside instance" classname="lsp.spawn" time="0.001" file="test/lsp/index.test.ts" line="11" assertions="1" />
1127
- <testcase name="would spawn builtin LSP for files inside instance" classname="lsp.spawn" time="0.004" file="test/lsp/index.test.ts" line="35" assertions="1" />
1128
- <testcase name="spawns builtin Typescript LSP with correct arguments" classname="lsp.spawn" time="0.340005" file="test/lsp/index.test.ts" line="58" assertions="4" />
1129
- <testcase name="spawns builtin Typescript LSP with --ignore-node-modules if no config is found" classname="lsp.spawn" time="0.003" file="test/lsp/index.test.ts" line="96" assertions="2" />
1130
- </testsuite>
1131
- </testsuite>
1132
- <testsuite name="test/lsp/launch.test.ts" file="test/lsp/launch.test.ts" tests="1" assertions="0" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
1133
- <testsuite name="lsp.launch" file="test/lsp/launch.test.ts" line="7" tests="1" assertions="0" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
1134
- <testcase name="spawns cmd scripts with spaces on Windows" classname="lsp.launch" time="0" file="test/lsp/launch.test.ts" line="8" assertions="0" />
1135
- </testsuite>
1136
- </testsuite>
1137
- <testsuite name="test/lsp/client.test.ts" file="test/lsp/client.test.ts" tests="3" assertions="3" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
1138
- <testsuite name="LSPClient interop" file="test/lsp/client.test.ts" line="19" tests="3" assertions="3" failures="0" skipped="0" time="0.868" hostname="benmurray-MS-7C84">
1139
- <testcase name="handles workspace/workspaceFolders request" classname="LSPClient interop" time="0.287004" file="test/lsp/client.test.ts" line="24" assertions="1" />
1140
- <testcase name="handles client/registerCapability request" classname="LSPClient interop" time="0.295004" file="test/lsp/client.test.ts" line="48" assertions="1" />
1141
- <testcase name="handles client/unregisterCapability request" classname="LSPClient interop" time="0.286004" file="test/lsp/client.test.ts" line="72" assertions="1" />
1142
- </testsuite>
1143
- </testsuite>
1144
- <testsuite name="test/lsp/lifecycle.test.ts" file="test/lsp/lifecycle.test.ts" tests="12" assertions="13" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
1145
- <testsuite name="LSP service lifecycle" file="test/lsp/lifecycle.test.ts" line="22" tests="9" assertions="10" failures="0" skipped="0" time="0.025" hostname="benmurray-MS-7C84">
1146
- <testcase name="init() completes without error" classname="LSP service lifecycle" time="0.003" file="test/lsp/lifecycle.test.ts" line="34" assertions="0" />
1147
- <testcase name="status() returns empty array initially" classname="LSP service lifecycle" time="0.003" file="test/lsp/lifecycle.test.ts" line="41" assertions="2" />
1148
- <testcase name="diagnostics() returns empty object initially" classname="LSP service lifecycle" time="0.003" file="test/lsp/lifecycle.test.ts" line="50" assertions="2" />
1149
- <testcase name="hasClients() returns true for .ts files in instance" classname="LSP service lifecycle" time="0.002" file="test/lsp/lifecycle.test.ts" line="59" assertions="1" />
1150
- <testcase name="hasClients() returns false for files outside instance" classname="LSP service lifecycle" time="0.001" file="test/lsp/lifecycle.test.ts" line="67" assertions="1" />
1151
- <testcase name="workspaceSymbol() returns empty array with no clients" classname="LSP service lifecycle" time="0.007" file="test/lsp/lifecycle.test.ts" line="78" assertions="2" />
1152
- <testcase name="definition() returns empty array for unknown file" classname="LSP service lifecycle" time="0.003" file="test/lsp/lifecycle.test.ts" line="87" assertions="1" />
1153
- <testcase name="references() returns empty array for unknown file" classname="LSP service lifecycle" time="0.002" file="test/lsp/lifecycle.test.ts" line="99" assertions="1" />
1154
- <testcase name="multiple init() calls are idempotent" classname="LSP service lifecycle" time="0.001" file="test/lsp/lifecycle.test.ts" line="111" assertions="0" />
1155
- </testsuite>
1156
- <testsuite name="LSP.Diagnostic" file="test/lsp/lifecycle.test.ts" line="121" tests="3" assertions="3" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
1157
- <testcase name="pretty() formats error diagnostic" classname="LSP.Diagnostic" time="0" file="test/lsp/lifecycle.test.ts" line="122" assertions="1" />
1158
- <testcase name="pretty() formats warning diagnostic" classname="LSP.Diagnostic" time="0" file="test/lsp/lifecycle.test.ts" line="131" assertions="1" />
1159
- <testcase name="pretty() defaults to ERROR when no severity" classname="LSP.Diagnostic" time="0" file="test/lsp/lifecycle.test.ts" line="140" assertions="1" />
1160
- </testsuite>
1161
- </testsuite>
1162
- <testsuite name="test/account/repo.test.ts" file="test/account/repo.test.ts" tests="12" assertions="24" failures="0" skipped="0" time="0.012" hostname="benmurray-MS-7C84">
1163
- <testcase name="list returns empty when no accounts exist" classname="" time="0.001" file="test/account/repo.test.ts" line="19" assertions="1" />
1164
- <testcase name="active returns none when no accounts exist" classname="" time="0" file="test/account/repo.test.ts" line="26" assertions="1" />
1165
- <testcase name="persistAccount inserts and getRow retrieves" classname="" time="0.002" file="test/account/repo.test.ts" line="33" assertions="4" />
1166
- <testcase name="persistAccount sets the active account and org" classname="" time="0.001" file="test/account/repo.test.ts" line="59" assertions="3" />
1167
- <testcase name="list returns all accounts" classname="" time="0.001" file="test/account/repo.test.ts" line="96" assertions="2" />
1168
- <testcase name="remove deletes an account" classname="" time="0.001" file="test/account/repo.test.ts" line="131" assertions="1" />
1169
- <testcase name="use stores the selected org and marks the account active" classname="" time="0.002" file="test/account/repo.test.ts" line="154" assertions="3" />
1170
- <testcase name="persistToken updates token fields" classname="" time="0.001" file="test/account/repo.test.ts" line="194" assertions="3" />
1171
- <testcase name="persistToken with no expiry sets token_expiry to null" classname="" time="0" file="test/account/repo.test.ts" line="228" assertions="1" />
1172
- <testcase name="persistAccount upserts on conflict" classname="" time="0.002" file="test/account/repo.test.ts" line="258" assertions="3" />
1173
- <testcase name="remove clears active state when deleting the active account" classname="" time="0" file="test/account/repo.test.ts" line="298" assertions="1" />
1174
- <testcase name="getRow returns none for nonexistent account" classname="" time="0.001" file="test/account/repo.test.ts" line="321" assertions="1" />
1175
- </testsuite>
1176
- <testsuite name="test/account/service.test.ts" file="test/account/service.test.ts" tests="11" assertions="27" failures="0" skipped="0" time="0.051" hostname="benmurray-MS-7C84">
1177
- <testcase name="orgsByAccount groups orgs per account" classname="" time="0.009" file="test/account/service.test.ts" line="60" assertions="2" />
1178
- <testcase name="token refresh persists the new token" classname="" time="0.002" file="test/account/service.test.ts" line="113" assertions="5" />
1179
- <testcase name="token refreshes before expiry when inside the eager refresh window" classname="" time="0.002" file="test/account/service.test.ts" line="154" assertions="4" />
1180
- <testcase name="concurrent config and token requests coalesce token refresh" classname="" time="0.031" file="test/account/service.test.ts" line="198" assertions="5" />
1181
- <testcase name="config sends the selected org header" classname="" time="0.001" file="test/account/service.test.ts" line="262" assertions="2" />
1182
- <testcase name="poll stores the account and first org on success" classname="" time="0.003" file="test/account/service.test.ts" line="302" assertions="3" />
1183
- <testcase name="poll returns pending for authorization_pending" classname="" time="0.001" file="test/account/service.test.ts" line="373" assertions="1" />
1184
- <testcase name="poll returns slow for slow_down" classname="" time="0" file="test/account/service.test.ts" line="373" assertions="1" />
1185
- <testcase name="poll returns denied for access_denied" classname="" time="0.001" file="test/account/service.test.ts" line="373" assertions="1" />
1186
- <testcase name="poll returns expired for expired_token" classname="" time="0" file="test/account/service.test.ts" line="373" assertions="1" />
1187
- <testcase name="poll returns poll error for other OAuth errors" classname="" time="0.001" file="test/account/service.test.ts" line="381" assertions="2" />
1188
- </testsuite>
1189
- <testsuite name="test/skill/skill.test.ts" file="test/skill/skill.test.ts" tests="11" assertions="29" failures="0" skipped="0" time="0.448" hostname="benmurray-MS-7C84">
1190
- <testcase name="discovers skills from .epochcli/skill/ directory" classname="" time="0.042001" file="test/skill/skill.test.ts" line="29" assertions="4" />
1191
- <testcase name="returns skill directories from Skill.dirs" classname="" time="0.050001" file="test/skill/skill.test.ts" line="62" assertions="2" />
1192
- <testcase name="discovers multiple skills from .epochcli/skill/ directory" classname="" time="0.044001" file="test/skill/skill.test.ts" line="98" assertions="3" />
1193
- <testcase name="skips skills with missing frontmatter" classname="" time="0.039001" file="test/skill/skill.test.ts" line="138" assertions="1" />
1194
- <testcase name="discovers skills from .claude/skills/ directory" classname="" time="0.041001" file="test/skill/skill.test.ts" line="162" assertions="3" />
1195
- <testcase name="discovers global skills from ~/.claude/skills/ directory" classname="" time="0.036001" file="test/skill/skill.test.ts" line="192" assertions="4" />
1196
- <testcase name="returns empty array when no skills exist" classname="" time="0.036001" file="test/skill/skill.test.ts" line="215" assertions="1" />
1197
- <testcase name="discovers skills from .agents/skills/ directory" classname="" time="0.040001" file="test/skill/skill.test.ts" line="227" assertions="3" />
1198
- <testcase name="discovers global skills from ~/.agents/skills/ directory" classname="" time="0.036001" file="test/skill/skill.test.ts" line="257" assertions="4" />
1199
- <testcase name="discovers skills from both .claude/skills/ and .agents/skills/" classname="" time="0.038001" file="test/skill/skill.test.ts" line="294" assertions="3" />
1200
- <testcase name="properly resolves directories that skills live in" classname="" time="0.046001" file="test/skill/skill.test.ts" line="334" assertions="1" />
1201
- </testsuite>
1202
- <testsuite name="test/skill/discovery.test.ts" file="test/skill/discovery.test.ts" tests="6" assertions="18" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
1203
- <testsuite name="Discovery.pull" file="test/skill/discovery.test.ts" line="49" tests="6" assertions="18" failures="0" skipped="0" time="0.014" hostname="benmurray-MS-7C84">
1204
- <testcase name="downloads skills from cloudflare url" classname="Discovery.pull" time="0.005" file="test/skill/discovery.test.ts" line="53" assertions="5" />
1205
- <testcase name="url without trailing slash works" classname="Discovery.pull" time="0.001" file="test/skill/discovery.test.ts" line="63" assertions="3" />
1206
- <testcase name="returns empty array for invalid url" classname="Discovery.pull" time="0" file="test/skill/discovery.test.ts" line="72" assertions="1" />
1207
- <testcase name="returns empty array for non-json response" classname="Discovery.pull" time="0.001" file="test/skill/discovery.test.ts" line="77" assertions="1" />
1208
- <testcase name="downloads reference files alongside SKILL.md" classname="Discovery.pull" time="0.001" file="test/skill/discovery.test.ts" line="83" assertions="3" />
1209
- <testcase name="caches downloaded files on second pull" classname="Discovery.pull" time="0.006" file="test/skill/discovery.test.ts" line="97" assertions="5" />
1210
- </testsuite>
1211
- </testsuite>
1212
- <testsuite name="test/session/messages-pagination.test.ts" file="test/session/messages-pagination.test.ts" tests="43" assertions="103" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
1213
- <testsuite name="MessageV2.page" file="test/session/messages-pagination.test.ts" line="99" tests="12" assertions="39" failures="0" skipped="0" time="0.064" hostname="benmurray-MS-7C84">
1214
- <testcase name="returns sync result" classname="MessageV2.page" time="0.019" file="test/session/messages-pagination.test.ts" line="100" assertions="2" />
1215
- <testcase name="pages backward with opaque cursors" classname="MessageV2.page" time="0.005" file="test/session/messages-pagination.test.ts" line="116" assertions="10" />
1216
- <testcase name="returns items in chronological order within a page" classname="MessageV2.page" time="0.005" file="test/session/messages-pagination.test.ts" line="144" assertions="1" />
1217
- <testcase name="returns empty items for session with no messages" classname="MessageV2.page" time="0.002" file="test/session/messages-pagination.test.ts" line="159" assertions="3" />
1218
- <testcase name="throws NotFoundError for non-existent session" classname="MessageV2.page" time="0" file="test/session/messages-pagination.test.ts" line="175" assertions="1" />
1219
- <testcase name="handles exact limit boundary" classname="MessageV2.page" time="0.004" file="test/session/messages-pagination.test.ts" line="185" assertions="3" />
1220
- <testcase name="limit of 1 returns single newest message" classname="MessageV2.page" time="0.004" file="test/session/messages-pagination.test.ts" line="202" assertions="3" />
1221
- <testcase name="hydrates multiple parts per message" classname="MessageV2.page" time="0.002" file="test/session/messages-pagination.test.ts" line="219" assertions="2" />
1222
- <testcase name="accepts cursors from fractional timestamps" classname="MessageV2.page" time="0.005" file="test/session/messages-pagination.test.ts" line="243" assertions="2" />
1223
- <testcase name="messages with same timestamp are ordered by id" classname="MessageV2.page" time="0.005" file="test/session/messages-pagination.test.ts" line="261" assertions="4" />
1224
- <testcase name="does not return messages from other sessions" classname="MessageV2.page" time="0.006" file="test/session/messages-pagination.test.ts" line="281" assertions="4" />
1225
- <testcase name="large limit returns all messages without cursor" classname="MessageV2.page" time="0.007" file="test/session/messages-pagination.test.ts" line="303" assertions="4" />
1226
- </testsuite>
1227
- <testsuite name="MessageV2.stream" file="test/session/messages-pagination.test.ts" line="322" tests="6" assertions="16" failures="0" skipped="0" time="0.05" hostname="benmurray-MS-7C84">
1228
- <testcase name="yields items newest first" classname="MessageV2.stream" time="0.005" file="test/session/messages-pagination.test.ts" line="323" assertions="1" />
1229
- <testcase name="yields nothing for empty session" classname="MessageV2.stream" time="0.002" file="test/session/messages-pagination.test.ts" line="338" assertions="1" />
1230
- <testcase name="yields single message" classname="MessageV2.stream" time="0.003" file="test/session/messages-pagination.test.ts" line="352" assertions="2" />
1231
- <testcase name="hydrates parts for each yielded message" classname="MessageV2.stream" time="0.004" file="test/session/messages-pagination.test.ts" line="368" assertions="6" />
1232
- <testcase name="handles sets exceeding internal page size" classname="MessageV2.stream" time="0.033" file="test/session/messages-pagination.test.ts" line="386" assertions="3" />
1233
- <testcase name="is a sync generator" classname="MessageV2.stream" time="0.003" file="test/session/messages-pagination.test.ts" line="403" assertions="3" />
1234
- </testsuite>
1235
- <testsuite name="MessageV2.parts" file="test/session/messages-pagination.test.ts" line="423" tests="5" assertions="11" failures="0" skipped="0" time="0.011" hostname="benmurray-MS-7C84">
1236
- <testcase name="returns parts for a message" classname="MessageV2.parts" time="0.003" file="test/session/messages-pagination.test.ts" line="424" assertions="3" />
1237
- <testcase name="returns empty array for message with no parts" classname="MessageV2.parts" time="0.002" file="test/session/messages-pagination.test.ts" line="441" assertions="1" />
1238
- <testcase name="returns multiple parts in order" classname="MessageV2.parts" time="0.003" file="test/session/messages-pagination.test.ts" line="456" assertions="4" />
1239
- <testcase name="returns empty for non-existent message id" classname="MessageV2.parts" time="0.001" file="test/session/messages-pagination.test.ts" line="489" assertions="1" />
1240
- <testcase name="parts contain sessionID and messageID" classname="MessageV2.parts" time="0.002" file="test/session/messages-pagination.test.ts" line="500" assertions="2" />
1241
- </testsuite>
1242
- <testsuite name="MessageV2.get" file="test/session/messages-pagination.test.ts" line="517" tests="6" assertions="14" failures="0" skipped="0" time="0.019" hostname="benmurray-MS-7C84">
1243
- <testcase name="returns message with hydrated parts" classname="MessageV2.get" time="0.003" file="test/session/messages-pagination.test.ts" line="518" assertions="5" />
1244
- <testcase name="throws NotFoundError for non-existent message" classname="MessageV2.get" time="0.001" file="test/session/messages-pagination.test.ts" line="537" assertions="1" />
1245
- <testcase name="scopes by session id" classname="MessageV2.get" time="0.005" file="test/session/messages-pagination.test.ts" line="552" assertions="2" />
1246
- <testcase name="returns message with multiple parts" classname="MessageV2.get" time="0.003" file="test/session/messages-pagination.test.ts" line="570" assertions="1" />
1247
- <testcase name="returns assistant message with correct role" classname="MessageV2.get" time="0.004" file="test/session/messages-pagination.test.ts" line="593" assertions="3" />
1248
- <testcase name="returns message with zero parts" classname="MessageV2.get" time="0.003" file="test/session/messages-pagination.test.ts" line="619" assertions="2" />
1249
- </testsuite>
1250
- <testsuite name="MessageV2.filterCompacted" file="test/session/messages-pagination.test.ts" line="636" tests="7" assertions="10" failures="0" skipped="0" time="0.02" hostname="benmurray-MS-7C84">
1251
- <testcase name="returns all messages when no compaction" classname="MessageV2.filterCompacted" time="0.004" file="test/session/messages-pagination.test.ts" line="637" assertions="2" />
1252
- <testcase name="stops at compaction boundary and returns chronological order" classname="MessageV2.filterCompacted" time="0.005" file="test/session/messages-pagination.test.ts" line="654" assertions="2" />
1253
- <testcase name="handles empty iterable" classname="MessageV2.filterCompacted" time="0" file="test/session/messages-pagination.test.ts" line="693" assertions="1" />
1254
- <testcase name="does not break on compaction part without matching summary" classname="MessageV2.filterCompacted" time="0.003" file="test/session/messages-pagination.test.ts" line="698" assertions="1" />
1255
- <testcase name="skips assistant with error even if marked as summary" classname="MessageV2.filterCompacted" time="0.004" file="test/session/messages-pagination.test.ts" line="716" assertions="1" />
1256
- <testcase name="skips assistant without finish even if marked as summary" classname="MessageV2.filterCompacted" time="0.004" file="test/session/messages-pagination.test.ts" line="741" assertions="1" />
1257
- <testcase name="works with array input" classname="MessageV2.filterCompacted" time="0" file="test/session/messages-pagination.test.ts" line="762" assertions="2" />
1258
- </testsuite>
1259
- <testsuite name="MessageV2.cursor" file="test/session/messages-pagination.test.ts" line="784" tests="3" assertions="4" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
1260
- <testcase name="encode/decode roundtrip" classname="MessageV2.cursor" time="0" file="test/session/messages-pagination.test.ts" line="785" assertions="2" />
1261
- <testcase name="encode/decode with fractional time" classname="MessageV2.cursor" time="0" file="test/session/messages-pagination.test.ts" line="793" assertions="1" />
1262
- <testcase name="encoded cursor is base64url" classname="MessageV2.cursor" time="0" file="test/session/messages-pagination.test.ts" line="800" assertions="1" />
1263
- </testsuite>
1264
- <testsuite name="MessageV2 consistency" file="test/session/messages-pagination.test.ts" line="806" tests="4" assertions="9" failures="0" skipped="0" time="0.019" hostname="benmurray-MS-7C84">
1265
- <testcase name="page hydration matches get for each message" classname="MessageV2 consistency" time="0.004" file="test/session/messages-pagination.test.ts" line="807" assertions="6" />
1266
- <testcase name="parts from get match standalone parts call" classname="MessageV2 consistency" time="0.003" file="test/session/messages-pagination.test.ts" line="826" assertions="1" />
1267
- <testcase name="stream collects same messages as exhaustive page iteration" classname="MessageV2 consistency" time="0.007" file="test/session/messages-pagination.test.ts" line="842" assertions="1" />
1268
- <testcase name="filterCompacted of full stream returns same as Array.from when no compaction" classname="MessageV2 consistency" time="0.005" file="test/session/messages-pagination.test.ts" line="869" assertions="1" />
1269
- </testsuite>
1270
- </testsuite>
1271
- <testsuite name="test/session/session.test.ts" file="test/session/session.test.ts" tests="3" assertions="19" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
1272
- <testsuite name="session.created event" file="test/session/session.test.ts" line="13" tests="2" assertions="9" failures="0" skipped="0" time="0.207" hostname="benmurray-MS-7C84">
1273
- <testcase name="should emit session.created event when session is created" classname="session.created event" time="0.104001" file="test/session/session.test.ts" line="14" assertions="6" />
1274
- <testcase name="session.created event should be emitted before session.updated" classname="session.created event" time="0.103001" file="test/session/session.test.ts" line="44" assertions="3" />
1275
- </testsuite>
1276
- <testsuite name="step-finish token propagation via Bus event" file="test/session/session.test.ts" line="75" tests="1" assertions="10" failures="0" skipped="0" time="0.105" hostname="benmurray-MS-7C84">
1277
- <testcase name="non-zero tokens propagate through PartUpdated event" classname="step-finish token propagation via Bus event" time="0.105002" file="test/session/session.test.ts" line="77" assertions="10" />
1278
- </testsuite>
1279
- </testsuite>
1280
- <testsuite name="test/session/snapshot-tool-race.test.ts" file="test/session/snapshot-tool-race.test.ts" tests="1" assertions="4" failures="0" skipped="0" time="0.378" hostname="benmurray-MS-7C84">
1281
- <testcase name="tool execution produces non-empty session diff (snapshot race)" classname="" time="0.378005" file="test/session/snapshot-tool-race.test.ts" line="183" assertions="4" />
1282
- </testsuite>
1283
- <testsuite name="test/session/compaction.test.ts" file="test/session/compaction.test.ts" tests="38" assertions="88" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
1284
- <testsuite name="session.compaction.isOverflow" file="test/session/compaction.test.ts" line="247" tests="11" assertions="12" failures="0" skipped="0" time="0.032" hostname="benmurray-MS-7C84">
1285
- <testcase name="returns true when token count exceeds usable context" classname="session.compaction.isOverflow" time="0.006" file="test/session/compaction.test.ts" line="248" assertions="1" />
1286
- <testcase name="returns false when token count within usable context" classname="session.compaction.isOverflow" time="0.003" file="test/session/compaction.test.ts" line="260" assertions="1" />
1287
- <testcase name="includes cache.read in token count" classname="session.compaction.isOverflow" time="0.002" file="test/session/compaction.test.ts" line="272" assertions="1" />
1288
- <testcase name="respects input limit for input caps" classname="session.compaction.isOverflow" time="0.006" file="test/session/compaction.test.ts" line="284" assertions="1" />
1289
- <testcase name="returns false when input/output are within input caps" classname="session.compaction.isOverflow" time="0.002" file="test/session/compaction.test.ts" line="296" assertions="1" />
1290
- <testcase name="returns false when output within limit with input caps" classname="session.compaction.isOverflow" time="0.002" file="test/session/compaction.test.ts" line="308" assertions="1" />
1291
- <testcase name="BUG: no headroom when limit.input is set — compaction should trigger near boundary but does not" classname="session.compaction.isOverflow" time="0.001" file="test/session/compaction.test.ts" line="332" assertions="1" />
1292
- <testcase name="BUG: without limit.input, same token count correctly triggers compaction" classname="session.compaction.isOverflow" time="0.002" file="test/session/compaction.test.ts" line="358" assertions="1" />
1293
- <testcase name="BUG: asymmetry — limit.input model allows 30K more usage before compaction than equivalent model without it" classname="session.compaction.isOverflow" time="0.001" file="test/session/compaction.test.ts" line="378" assertions="2" />
1294
- <testcase name="returns false when model context limit is 0" classname="session.compaction.isOverflow" time="0.001" file="test/session/compaction.test.ts" line="400" assertions="1" />
1295
- <testcase name="returns false when compaction.auto is disabled" classname="session.compaction.isOverflow" time="0.006" file="test/session/compaction.test.ts" line="412" assertions="1" />
1296
- </testsuite>
1297
- <testsuite name="session.compaction.create" file="test/session/compaction.test.ts" line="434" tests="1" assertions="4" failures="0" skipped="0" time="0.004" hostname="benmurray-MS-7C84">
1298
- <testcase name="creates a compaction user message and part" classname="session.compaction.create" time="0.004" file="test/session/compaction.test.ts" line="435" assertions="4" />
1299
- </testsuite>
1300
- <testsuite name="session.compaction.prune" file="test/session/compaction.test.ts" line="464" tests="2" assertions="5" failures="0" skipped="0" time="0.018" hostname="benmurray-MS-7C84">
1301
- <testcase name="compacts old completed tool output" classname="session.compaction.prune" time="0.007" file="test/session/compaction.test.ts" line="465" assertions="3" />
1302
- <testcase name="skips protected skill tool output" classname="session.compaction.prune" time="0.011" file="test/session/compaction.test.ts" line="490" assertions="2" />
1303
- </testsuite>
1304
- <testsuite name="session.compaction.process" file="test/session/compaction.test.ts" line="515" tests="9" assertions="25" failures="0" skipped="0" time="0.347" hostname="benmurray-MS-7C84">
1305
- <testcase name="throws when parent is not a user message" classname="session.compaction.process" time="0.008" file="test/session/compaction.test.ts" line="516" assertions="1" />
1306
- <testcase name="publishes compacted event on continue" classname="session.compaction.process" time="0.018" file="test/session/compaction.test.ts" line="546" assertions="2" />
1307
- <testcase name="marks summary message as errored on compact result" classname="session.compaction.process" time="0.014" file="test/session/compaction.test.ts" line="596" assertions="4" />
1308
- <testcase name="adds synthetic continue prompt when auto is enabled" classname="session.compaction.process" time="0.017" file="test/session/compaction.test.ts" line="634" assertions="4" />
1309
- <testcase name="replays the prior user turn on overflow when earlier context exists" classname="session.compaction.process" time="0.026" file="test/session/compaction.test.ts" line="674" assertions="4" />
1310
- <testcase name="falls back to overflow guidance when no replayable turn exists" classname="session.compaction.process" time="0.018" file="test/session/compaction.test.ts" line="722" assertions="3" />
1311
- <testcase name="stops quickly when aborted during retry backoff" classname="session.compaction.process" time="0.100001" file="test/session/compaction.test.ts" line="760" assertions="3" />
1312
- <testcase name="does not leave a summary assistant when aborted before processor setup" classname="session.compaction.process" time="0.050001" file="test/session/compaction.test.ts" line="854" assertions="2" />
1313
- <testcase name="does not allow tool calls while generating the summary" classname="session.compaction.process" time="0.096001" file="test/session/compaction.test.ts" line="909" assertions="2" />
1314
- </testsuite>
1315
- <testsuite name="util.token.estimate" file="test/session/compaction.test.ts" line="993" tests="3" assertions="3" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
1316
- <testcase name="estimates tokens from text (4 chars per token)" classname="util.token.estimate" time="0" file="test/session/compaction.test.ts" line="994" assertions="1" />
1317
- <testcase name="estimates tokens from larger text" classname="util.token.estimate" time="0" file="test/session/compaction.test.ts" line="999" assertions="1" />
1318
- <testcase name="returns 0 for empty string" classname="util.token.estimate" time="0" file="test/session/compaction.test.ts" line="1004" assertions="1" />
1319
- </testsuite>
1320
- <testsuite name="session.getUsage" file="test/session/compaction.test.ts" line="1009" tests="12" assertions="39" failures="0" skipped="0" time="0.002" hostname="benmurray-MS-7C84">
1321
- <testcase name="normalizes standard usage to token format" classname="session.getUsage" time="0" file="test/session/compaction.test.ts" line="1010" assertions="5" />
1322
- <testcase name="extracts cached tokens to cache.read" classname="session.getUsage" time="0.001" file="test/session/compaction.test.ts" line="1028" assertions="2" />
1323
- <testcase name="handles anthropic cache write metadata" classname="session.getUsage" time="0" file="test/session/compaction.test.ts" line="1044" assertions="1" />
1324
- <testcase name="subtracts cached tokens for anthropic provider" classname="session.getUsage" time="0" file="test/session/compaction.test.ts" line="1063" assertions="2" />
1325
- <testcase name="separates reasoning tokens from output tokens" classname="session.getUsage" time="0" file="test/session/compaction.test.ts" line="1083" assertions="4" />
1326
- <testcase name="does not double count reasoning tokens in cost" classname="session.getUsage" time="0" file="test/session/compaction.test.ts" line="1101" assertions="3" />
1327
- <testcase name="handles undefined optional values gracefully" classname="session.getUsage" time="0" file="test/session/compaction.test.ts" line="1126" assertions="6" />
1328
- <testcase name="calculates cost correctly" classname="session.getUsage" time="0" file="test/session/compaction.test.ts" line="1145" assertions="1" />
1329
- <testcase name="computes total from components for @ai-sdk/anthropic models" classname="session.getUsage" time="0.001" file="test/session/compaction.test.ts" line="1168" assertions="4" />
1330
- <testcase name="computes total from components for @ai-sdk/amazon-bedrock models" classname="session.getUsage" time="0" file="test/session/compaction.test.ts" line="1168" assertions="4" />
1331
- <testcase name="computes total from components for @ai-sdk/google-vertex/anthropic models" classname="session.getUsage" time="0" file="test/session/compaction.test.ts" line="1168" assertions="4" />
1332
- <testcase name="extracts cache write tokens from vertex metadata key" classname="session.getUsage" time="0" file="test/session/compaction.test.ts" line="1219" assertions="3" />
1333
- </testsuite>
1334
- </testsuite>
1335
- <testsuite name="test/session/message-v2.test.ts" file="test/session/message-v2.test.ts" tests="22" assertions="32" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
1336
- <testsuite name="session.message-v2.toModelMessage" file="test/session/message-v2.test.ts" line="110" tests="13" assertions="13" failures="0" skipped="0" time="0.002" hostname="benmurray-MS-7C84">
1337
- <testcase name="filters out messages with no parts" classname="session.message-v2.toModelMessage" time="0" file="test/session/message-v2.test.ts" line="111" assertions="1" />
1338
- <testcase name="filters out messages with only ignored parts" classname="session.message-v2.toModelMessage" time="0.001" file="test/session/message-v2.test.ts" line="137" assertions="1" />
1339
- <testcase name="includes synthetic text parts" classname="session.message-v2.toModelMessage" time="0" file="test/session/message-v2.test.ts" line="157" assertions="1" />
1340
- <testcase name="converts user text/file parts and injects compaction/subtask prompts" classname="session.message-v2.toModelMessage" time="0" file="test/session/message-v2.test.ts" line="197" assertions="1" />
1341
- <testcase name="converts assistant tool completion into tool-call + tool-result messages with attachments" classname="session.message-v2.toModelMessage" time="0" file="test/session/message-v2.test.ts" line="270" assertions="1" />
1342
- <testcase name="omits provider metadata when assistant model differs" classname="session.message-v2.toModelMessage" time="0" file="test/session/message-v2.test.ts" line="362" assertions="1" />
1343
- <testcase name="replaces compacted tool output with placeholder" classname="session.message-v2.toModelMessage" time="0.001" file="test/session/message-v2.test.ts" line="437" assertions="1" />
1344
- <testcase name="converts assistant tool error into error-text tool result" classname="session.message-v2.toModelMessage" time="0" file="test/session/message-v2.test.ts" line="504" assertions="1" />
1345
- <testcase name="filters assistant messages with non-abort errors" classname="session.message-v2.toModelMessage" time="0" file="test/session/message-v2.test.ts" line="573" assertions="1" />
1346
- <testcase name="includes aborted assistant messages only when they have non-step-start/reasoning content" classname="session.message-v2.toModelMessage" time="0" file="test/session/message-v2.test.ts" line="596" assertions="1" />
1347
- <testcase name="splits assistant messages on step-start boundaries" classname="session.message-v2.toModelMessage" time="0" file="test/session/message-v2.test.ts" line="647" assertions="1" />
1348
- <testcase name="drops messages that only contain step-start parts" classname="session.message-v2.toModelMessage" time="0" file="test/session/message-v2.test.ts" line="684" assertions="1" />
1349
- <testcase name="converts pending/running tool calls to error results to prevent dangling tool_use" classname="session.message-v2.toModelMessage" time="0" file="test/session/message-v2.test.ts" line="702" assertions="1" />
1350
- </testsuite>
1351
- <testsuite name="session.message-v2.fromError" file="test/session/message-v2.test.ts" line="793" tests="9" assertions="19" failures="0" skipped="0" time="0.001" hostname="benmurray-MS-7C84">
1352
- <testcase name="serializes context_length_exceeded as ContextOverflowError" classname="session.message-v2.fromError" time="0.001" file="test/session/message-v2.test.ts" line="794" assertions="1" />
1353
- <testcase name="serializes response error codes" classname="session.message-v2.fromError" time="0" file="test/session/message-v2.test.ts" line="812" assertions="3" />
1354
- <testcase name="detects context overflow from APICallError provider messages" classname="session.message-v2.fromError" time="0" file="test/session/message-v2.test.ts" line="849" assertions="6" />
1355
- <testcase name="detects context overflow from context_length_exceeded code in response body" classname="session.message-v2.fromError" time="0" file="test/session/message-v2.test.ts" line="873" assertions="1" />
1356
- <testcase name="does not classify 429 no body as context overflow" classname="session.message-v2.fromError" time="0" file="test/session/message-v2.test.ts" line="893" assertions="2" />
1357
- <testcase name="serializes unknown inputs" classname="session.message-v2.fromError" time="0" file="test/session/message-v2.test.ts" line="909" assertions="1" />
1358
- <testcase name="serializes tagged errors with their message" classname="session.message-v2.fromError" time="0" file="test/session/message-v2.test.ts" line="920" assertions="1" />
1359
- <testcase name="classifies ZlibError from fetch as retryable APIError" classname="session.message-v2.fromError" time="0" file="test/session/message-v2.test.ts" line="931" assertions="3" />
1360
- <testcase name="classifies ZlibError as AbortedError when abort context is provided" classname="session.message-v2.fromError" time="0" file="test/session/message-v2.test.ts" line="946" assertions="1" />
1361
- </testsuite>
1362
- </testsuite>
1363
- <testsuite name="test/session/structured-output-integration.test.ts" file="test/session/structured-output-integration.test.ts" tests="5" assertions="5" failures="0" skipped="4" time="0" hostname="benmurray-MS-7C84">
1364
- <testsuite name="StructuredOutput Integration" file="test/session/structured-output-integration.test.ts" line="23" tests="5" assertions="5" failures="0" skipped="4" time="0" hostname="benmurray-MS-7C84">
1365
- <testcase name="produces structured output with simple schema" classname="StructuredOutput Integration" time="0" file="test/session/structured-output-integration.test.ts" line="25" assertions="0">
1366
- <skipped />
1367
- </testcase>
1368
- <testcase name="produces structured output with nested objects" classname="StructuredOutput Integration" time="0" file="test/session/structured-output-integration.test.ts" line="73" assertions="0">
1369
- <skipped />
1370
- </testcase>
1371
- <testcase name="works with text outputFormat (default)" classname="StructuredOutput Integration" time="0" file="test/session/structured-output-integration.test.ts" line="136" assertions="0">
1372
- <skipped />
1373
- </testcase>
1374
- <testcase name="stores outputFormat on user message" classname="StructuredOutput Integration" time="0" file="test/session/structured-output-integration.test.ts" line="172" assertions="0">
1375
- <skipped />
1376
- </testcase>
1377
- <testcase name="unit test: StructuredOutputError is properly structured" classname="StructuredOutput Integration" time="0" file="test/session/structured-output-integration.test.ts" line="219" assertions="5" />
1378
- </testsuite>
1379
- </testsuite>
1380
- <testsuite name="test/session/structured-output.test.ts" file="test/session/structured-output.test.ts" tests="23" assertions="50" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
1381
- <testsuite name="structured-output.OutputFormat" file="test/session/structured-output.test.ts" line="6" tests="6" assertions="10" failures="0" skipped="0" time="0.001" hostname="benmurray-MS-7C84">
1382
- <testcase name="parses text format" classname="structured-output.OutputFormat" time="0.001" file="test/session/structured-output.test.ts" line="7" assertions="2" />
1383
- <testcase name="parses json_schema format with defaults" classname="structured-output.OutputFormat" time="0" file="test/session/structured-output.test.ts" line="15" assertions="3" />
1384
- <testcase name="parses json_schema format with custom retryCount" classname="structured-output.OutputFormat" time="0" file="test/session/structured-output.test.ts" line="29" assertions="2" />
1385
- <testcase name="rejects invalid type" classname="structured-output.OutputFormat" time="0" file="test/session/structured-output.test.ts" line="41" assertions="1" />
1386
- <testcase name="rejects json_schema without schema" classname="structured-output.OutputFormat" time="0" file="test/session/structured-output.test.ts" line="46" assertions="1" />
1387
- <testcase name="rejects negative retryCount" classname="structured-output.OutputFormat" time="0" file="test/session/structured-output.test.ts" line="51" assertions="1" />
1388
- </testsuite>
1389
- <testsuite name="structured-output.StructuredOutputError" file="test/session/structured-output.test.ts" line="61" tests="3" assertions="8" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
1390
- <testcase name="creates error with message and retries" classname="structured-output.StructuredOutputError" time="0" file="test/session/structured-output.test.ts" line="62" assertions="3" />
1391
- <testcase name="converts to object correctly" classname="structured-output.StructuredOutputError" time="0" file="test/session/structured-output.test.ts" line="73" assertions="3" />
1392
- <testcase name="isInstance correctly identifies error" classname="structured-output.StructuredOutputError" time="0" file="test/session/structured-output.test.ts" line="85" assertions="2" />
1393
- </testsuite>
1394
- <testsuite name="structured-output.UserMessage" file="test/session/structured-output.test.ts" line="96" tests="2" assertions="2" failures="0" skipped="0" time="0.001" hostname="benmurray-MS-7C84">
1395
- <testcase name="user message accepts outputFormat" classname="structured-output.UserMessage" time="0.001" file="test/session/structured-output.test.ts" line="97" assertions="1" />
1396
- <testcase name="user message works without outputFormat (optional)" classname="structured-output.UserMessage" time="0" file="test/session/structured-output.test.ts" line="113" assertions="1" />
1397
- </testsuite>
1398
- <testsuite name="structured-output.AssistantMessage" file="test/session/structured-output.test.ts" line="126" tests="2" assertions="3" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
1399
- <testcase name="assistant message accepts structured" classname="structured-output.AssistantMessage" time="0" file="test/session/structured-output.test.ts" line="142" assertions="2" />
1400
- <testcase name="assistant message works without structured_output (optional)" classname="structured-output.AssistantMessage" time="0" file="test/session/structured-output.test.ts" line="153" assertions="1" />
1401
- </testsuite>
1402
- <testsuite name="structured-output.createStructuredOutputTool" file="test/session/structured-output.test.ts" line="159" tests="10" assertions="27" failures="0" skipped="0" time="0.001" hostname="benmurray-MS-7C84">
1403
- <testcase name="creates tool with correct id" classname="structured-output.createStructuredOutputTool" time="0" file="test/session/structured-output.test.ts" line="160" assertions="1" />
1404
- <testcase name="creates tool with description" classname="structured-output.createStructuredOutputTool" time="0" file="test/session/structured-output.test.ts" line="170" assertions="1" />
1405
- <testcase name="creates tool with schema as inputSchema" classname="structured-output.createStructuredOutputTool" time="0" file="test/session/structured-output.test.ts" line="179" assertions="3" />
1406
- <testcase name="strips $schema property from inputSchema" classname="structured-output.createStructuredOutputTool" time="0" file="test/session/structured-output.test.ts" line="201" assertions="1" />
1407
- <testcase name="execute calls onSuccess with valid args" classname="structured-output.createStructuredOutputTool" time="0" file="test/session/structured-output.test.ts" line="218" assertions="4" />
1408
- <testcase name="AI SDK validates schema before execute - missing required field" classname="structured-output.createStructuredOutputTool" time="0" file="test/session/structured-output.test.ts" line="241" assertions="3" />
1409
- <testcase name="AI SDK validates schema types before execute - wrong type" classname="structured-output.createStructuredOutputTool" time="0" file="test/session/structured-output.test.ts" line="264" assertions="2" />
1410
- <testcase name="execute handles nested objects" classname="structured-output.createStructuredOutputTool" time="0" file="test/session/structured-output.test.ts" line="285" assertions="5" />
1411
- <testcase name="execute handles arrays" classname="structured-output.createStructuredOutputTool" time="0.001" file="test/session/structured-output.test.ts" line="328" assertions="4" />
1412
- <testcase name="toModelOutput returns text value" classname="structured-output.createStructuredOutputTool" time="0" file="test/session/structured-output.test.ts" line="366" assertions="3" />
1413
- </testsuite>
1414
- </testsuite>
1415
- <testsuite name="test/session/instruction.test.ts" file="test/session/instruction.test.ts" tests="10" assertions="19" failures="0" skipped="1" time="0" hostname="benmurray-MS-7C84">
1416
- <testsuite name="Instruction.resolve" file="test/session/instruction.test.ts" line="50" tests="7" assertions="14" failures="0" skipped="1" time="0.027" hostname="benmurray-MS-7C84">
1417
- <testcase name="returns empty when AGENTS.md is at project root (already in systemPaths)" classname="Instruction.resolve" time="0.006" file="test/session/instruction.test.ts" line="51" assertions="2" />
1418
- <testcase name="returns AGENTS.md from subdirectory (not in systemPaths)" classname="Instruction.resolve" time="0.003" file="test/session/instruction.test.ts" line="74" assertions="3" />
1419
- <testcase name="doesn&apos;t reload AGENTS.md when reading it directly" classname="Instruction.resolve" time="0.003" file="test/session/instruction.test.ts" line="98" assertions="2" />
1420
- <testcase name="does not reattach the same nearby instructions twice for one message" classname="Instruction.resolve" time="0.009" file="test/session/instruction.test.ts" line="118" assertions="3" />
1421
- <testcase name="clear allows nearby instructions to be attached again for the same message" classname="Instruction.resolve" time="0.003" file="test/session/instruction.test.ts" line="141" assertions="3" />
1422
- <testcase name="skips instructions already reported by prior read metadata" classname="Instruction.resolve" time="0.003" file="test/session/instruction.test.ts" line="165" assertions="1" />
1423
- <testcase name="fetches remote instructions from config URLs via HttpClient" classname="Instruction.resolve" time="0" file="test/session/instruction.test.ts" line="186" assertions="0">
1424
- <skipped message="TODO" />
1425
- </testcase>
1426
- </testsuite>
1427
- <testsuite name="Instruction.systemPaths EPOCHCLI_CONFIG_DIR" file="test/session/instruction.test.ts" line="189" tests="3" assertions="5" failures="0" skipped="0" time="0.022" hostname="benmurray-MS-7C84">
1428
- <testcase name="prefers EPOCHCLI_CONFIG_DIR AGENTS.md over global when both exist" classname="Instruction.systemPaths EPOCHCLI_CONFIG_DIR" time="0.012" file="test/session/instruction.test.ts" line="204" assertions="2" />
1429
- <testcase name="falls back to global AGENTS.md when EPOCHCLI_CONFIG_DIR has no AGENTS.md" classname="Instruction.systemPaths EPOCHCLI_CONFIG_DIR" time="0.007" file="test/session/instruction.test.ts" line="235" assertions="2" />
1430
- <testcase name="uses global AGENTS.md when EPOCHCLI_CONFIG_DIR is not set" classname="Instruction.systemPaths EPOCHCLI_CONFIG_DIR" time="0.003" file="test/session/instruction.test.ts" line="262" assertions="1" />
1431
- </testsuite>
1432
- </testsuite>
1433
- <testsuite name="test/session/llm.test.ts" file="test/session/llm.test.ts" tests="14" assertions="33" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
1434
- <testsuite name="session.llm.hasToolCalls" file="test/session/llm.test.ts" line="19" tests="6" assertions="6" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
1435
- <testcase name="returns false for empty messages array" classname="session.llm.hasToolCalls" time="0" file="test/session/llm.test.ts" line="20" assertions="1" />
1436
- <testcase name="returns false for messages with only text content" classname="session.llm.hasToolCalls" time="0" file="test/session/llm.test.ts" line="24" assertions="1" />
1437
- <testcase name="returns true when messages contain tool-call" classname="session.llm.hasToolCalls" time="0" file="test/session/llm.test.ts" line="38" assertions="1" />
1438
- <testcase name="returns true when messages contain tool-result" classname="session.llm.hasToolCalls" time="0" file="test/session/llm.test.ts" line="58" assertions="1" />
1439
- <testcase name="returns false for messages with string content" classname="session.llm.hasToolCalls" time="0" file="test/session/llm.test.ts" line="74" assertions="1" />
1440
- <testcase name="returns true when tool-call is mixed with text content" classname="session.llm.hasToolCalls" time="0" file="test/session/llm.test.ts" line="88" assertions="1" />
1441
- </testsuite>
1442
- <testsuite name="session.llm.stream" file="test/session/llm.test.ts" line="285" tests="8" assertions="27" failures="0" skipped="0" time="0.505" hostname="benmurray-MS-7C84">
1443
- <testcase name="sends temperature, tokens, and reasoning options for openai-compatible models" classname="session.llm.stream" time="0.047001" file="test/session/llm.test.ts" line="286" assertions="9" />
1444
- <testcase name="raw stream abort signal cancels provider response body promptly" classname="session.llm.stream" time="0.038001" file="test/session/llm.test.ts" line="386" assertions="0" />
1445
- <testcase name="service stream cancellation cancels provider response body promptly" classname="session.llm.stream" time="0.043001" file="test/session/llm.test.ts" line="460" assertions="2" />
1446
- <testcase name="keeps tools enabled by prompt permissions" classname="session.llm.stream" time="0.044001" file="test/session/llm.test.ts" line="542" assertions="1" />
1447
- <testcase name="sends responses API payload for OpenAI models" classname="session.llm.stream" time="0.056001" file="test/session/llm.test.ts" line="631" assertions="5" />
1448
- <testcase name="accepts user image attachments as data URLs for OpenAI models" classname="session.llm.stream" time="0.163002" file="test/session/llm.test.ts" line="749" assertions="1" />
1449
- <testcase name="sends messages API payload for Anthropic Compatible models" classname="session.llm.stream" time="0.063001" file="test/session/llm.test.ts" line="873" assertions="5" />
1450
- <testcase name="sends Google API payload for Gemini models" classname="session.llm.stream" time="0.051001" file="test/session/llm.test.ts" line="991" assertions="4" />
1451
- </testsuite>
1452
- </testsuite>
1453
- <testsuite name="test/session/prompt-effect.test.ts" file="test/session/prompt-effect.test.ts" tests="29" assertions="109" failures="0" skipped="0" time="8.505" hostname="benmurray-MS-7C84">
1454
- <testcase name="loop exits immediately when last assistant has stop finish" classname="" time="0.063001" file="test/session/prompt-effect.test.ts" line="311" assertions="3" />
1455
- <testcase name="loop calls LLM and returns assistant message" classname="" time="0.181003" file="test/session/prompt-effect.test.ts" line="328" assertions="3" />
1456
- <testcase name="static loop returns assistant text through local provider" classname="" time="0.179003" file="test/session/prompt-effect.test.ts" line="355" assertions="4" />
1457
- <testcase name="static loop consumes queued replies across turns" classname="" time="0.246004" file="test/session/prompt-effect.test.ts" line="386" assertions="6" />
1458
- <testcase name="loop continues when finish is tool-calls" classname="" time="0.255004" file="test/session/prompt-effect.test.ts" line="433" assertions="4" />
1459
- <testcase name="loop continues when finish is stop but assistant has tool parts" classname="" time="0.251004" file="test/session/prompt-effect.test.ts" line="463" assertions="4" />
1460
- <testcase name="failed subtask preserves metadata on error tool state" classname="" time="0.274004" file="test/session/prompt-effect.test.ts" line="493" assertions="8" />
1461
- <testcase name="loop sets status to busy then idle" classname="" time="0.127002" file="test/session/prompt-effect.test.ts" line="543" assertions="2" />
1462
- <testcase name="cancel interrupts loop and resolves with an assistant message" classname="" time="0.167002" file="test/session/prompt-effect.test.ts" line="571" assertions="2" />
1463
- <testcase name="cancel records MessageAbortedError on interrupted process" classname="" time="0.181003" file="test/session/prompt-effect.test.ts" line="599" assertions="2" />
1464
- <testcase name="cancel finalizes subtask tool state" classname="" time="0.081001" file="test/session/prompt-effect.test.ts" line="627" assertions="6" />
1465
- <testcase name="cancel with queued callers resolves all cleanly" classname="" time="0.227003" file="test/session/prompt-effect.test.ts" line="690" assertions="3" />
1466
- <testcase name="concurrent loop callers get same result" classname="" time="0.066001" file="test/session/prompt-effect.test.ts" line="720" assertions="2" />
1467
- <testcase name="concurrent loop callers all receive same error result" classname="" time="0.199003" file="test/session/prompt-effect.test.ts" line="740" assertions="2" />
1468
- <testcase name="prompt submitted during an active run is included in the next LLM input" classname="" time="0.257004" file="test/session/prompt-effect.test.ts" line="763" assertions="8" />
1469
- <testcase name="assertNotBusy throws BusyError when loop running" classname="" time="0.130002" file="test/session/prompt-effect.test.ts" line="832" assertions="2" />
1470
- <testcase name="assertNotBusy succeeds when idle" classname="" time="0.060001" file="test/session/prompt-effect.test.ts" line="860" assertions="1" />
1471
- <testcase name="shell rejects with BusyError when loop running" classname="" time="0.167002" file="test/session/prompt-effect.test.ts" line="878" assertions="2" />
1472
- <testcase name="shell captures stdout and stderr in completed tool output" classname="" time="0.102001" file="test/session/prompt-effect.test.ts" line="905" assertions="6" />
1473
- <testcase name="shell completes a fast command on the preferred shell" classname="" time="0.090001" file="test/session/prompt-effect.test.ts" line="930" assertions="5" />
1474
- <testcase name="shell lists files from the project directory" classname="" time="0.093001" file="test/session/prompt-effect.test.ts" line="954" assertions="5" />
1475
- <testcase name="shell captures stderr from a failing command" classname="" time="0.088001" file="test/session/prompt-effect.test.ts" line="980" assertions="4" />
1476
- <testcase name="shell updates running metadata before process exit" classname="" time="0.286004" file="test/session/prompt-effect.test.ts" line="1004" assertions="1" />
1477
- <testcase name="loop waits while shell runs and starts after shell exits" classname="" time="0.386006" file="test/session/prompt-effect.test.ts" line="1038" assertions="5" />
1478
- <testcase name="shell completion resumes queued loop callers" classname="" time="0.408006" file="test/session/prompt-effect.test.ts" line="1076" assertions="6" />
1479
- <testcase name="cancel interrupts shell and resolves cleanly" classname="" time="0.229003" file="test/session/prompt-effect.test.ts" line="1116" assertions="6" />
1480
- <testcase name="cancel persists aborted shell result when shell ignores TERM" classname="" time="3.224046" file="test/session/prompt-effect.test.ts" line="1153" assertions="4" />
1481
- <testcase name="cancel interrupts loop queued behind shell" classname="" time="0.274004" file="test/session/prompt-effect.test.ts" line="1185" assertions="1" />
1482
- <testcase name="shell rejects when another shell is already running" classname="" time="0.214003" file="test/session/prompt-effect.test.ts" line="1213" assertions="2" />
1483
- </testsuite>
1484
- <testsuite name="test/session/revert-compact.test.ts" file="test/session/revert-compact.test.ts" tests="7" assertions="50" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
1485
- <testsuite name="revert + compact workflow" file="test/session/revert-compact.test.ts" line="82" tests="7" assertions="50" failures="0" skipped="0" time="0.905" hostname="benmurray-MS-7C84">
1486
- <testcase name="should properly handle compact command after revert" classname="revert + compact workflow" time="0.085001" file="test/session/revert-compact.test.ts" line="83" assertions="12" />
1487
- <testcase name="should properly clean up revert state before creating compaction message" classname="revert + compact workflow" time="0.083001" file="test/session/revert-compact.test.ts" line="259" assertions="3" />
1488
- <testcase name="cleanup with partID removes parts from the revert point onward" classname="revert + compact workflow" time="0.039001" file="test/session/revert-compact.test.ts" line="353" assertions="4" />
1489
- <testcase name="cleanup removes messages after revert point but keeps earlier ones" classname="revert + compact workflow" time="0.047001" file="test/session/revert-compact.test.ts" line="388" assertions="4" />
1490
- <testcase name="cleanup is a no-op when session has no revert state" classname="revert + compact workflow" time="0.038001" file="test/session/revert-compact.test.ts" line="426" assertions="2" />
1491
- <testcase name="restore messages in sequential order" classname="revert + compact workflow" time="0.344005" file="test/session/revert-compact.test.ts" line="447" assertions="16" />
1492
- <testcase name="restore same file in sequential order" classname="revert + compact workflow" time="0.269004" file="test/session/revert-compact.test.ts" line="539" assertions="9" />
1493
- </testsuite>
1494
- </testsuite>
1495
- <testsuite name="test/session/system.test.ts" file="test/session/system.test.ts" tests="1" assertions="4" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
1496
- <testsuite name="session.system" file="test/session/system.test.ts" line="8" tests="1" assertions="4" failures="0" skipped="0" time="0.042" hostname="benmurray-MS-7C84">
1497
- <testcase name="skills output is sorted by name and stable across calls" classname="session.system" time="0.042001" file="test/session/system.test.ts" line="9" assertions="4" />
1498
- </testsuite>
1499
- </testsuite>
1500
- <testsuite name="test/session/retry.test.ts" file="test/session/retry.test.ts" tests="20" assertions="28" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
1501
- <testsuite name="session.retry.delay" file="test/session/retry.test.ts" line="28" tests="10" assertions="12" failures="0" skipped="0" time="0.002" hostname="benmurray-MS-7C84">
1502
- <testcase name="caps delay at 30 seconds when headers missing" classname="session.retry.delay" time="0" file="test/session/retry.test.ts" line="29" assertions="1" />
1503
- <testcase name="prefers retry-after-ms when shorter than exponential" classname="session.retry.delay" time="0" file="test/session/retry.test.ts" line="35" assertions="1" />
1504
- <testcase name="uses retry-after seconds when reasonable" classname="session.retry.delay" time="0" file="test/session/retry.test.ts" line="40" assertions="1" />
1505
- <testcase name="accepts http-date retry-after values" classname="session.retry.delay" time="0" file="test/session/retry.test.ts" line="45" assertions="2" />
1506
- <testcase name="ignores invalid retry hints" classname="session.retry.delay" time="0" file="test/session/retry.test.ts" line="53" assertions="1" />
1507
- <testcase name="ignores malformed date retry hints" classname="session.retry.delay" time="0" file="test/session/retry.test.ts" line="58" assertions="1" />
1508
- <testcase name="ignores past date retry hints" classname="session.retry.delay" time="0" file="test/session/retry.test.ts" line="63" assertions="1" />
1509
- <testcase name="uses retry-after values even when exceeding 10 minutes with headers" classname="session.retry.delay" time="0" file="test/session/retry.test.ts" line="69" assertions="2" />
1510
- <testcase name="caps oversized header delays to the runtime timer limit" classname="session.retry.delay" time="0" file="test/session/retry.test.ts" line="77" assertions="1" />
1511
- <testcase name="policy updates retry status and increments attempts" classname="session.retry.delay" time="0.002" file="test/session/retry.test.ts" line="82" assertions="1" />
1512
- </testsuite>
1513
- <testsuite name="session.retry.retryable" file="test/session/retry.test.ts" line="121" tests="7" assertions="8" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
1514
- <testcase name="maps too_many_requests json messages" classname="session.retry.retryable" time="0" file="test/session/retry.test.ts" line="122" assertions="1" />
1515
- <testcase name="maps overloaded provider codes" classname="session.retry.retryable" time="0" file="test/session/retry.test.ts" line="127" assertions="1" />
1516
- <testcase name="does not retry unknown json messages" classname="session.retry.retryable" time="0" file="test/session/retry.test.ts" line="132" assertions="1" />
1517
- <testcase name="does not throw on numeric error codes" classname="session.retry.retryable" time="0" file="test/session/retry.test.ts" line="137" assertions="1" />
1518
- <testcase name="returns undefined for non-json message" classname="session.retry.retryable" time="0" file="test/session/retry.test.ts" line="143" assertions="1" />
1519
- <testcase name="does not retry context overflow errors" classname="session.retry.retryable" time="0" file="test/session/retry.test.ts" line="148" assertions="1" />
1520
- <testcase name="retries ZlibError decompression failures" classname="session.retry.retryable" time="0" file="test/session/retry.test.ts" line="157" assertions="2" />
1521
- </testsuite>
1522
- <testsuite name="session.message-v2.fromError" file="test/session/retry.test.ts" line="170" tests="3" assertions="8" failures="0" skipped="0" time="4.596" hostname="benmurray-MS-7C84">
1523
- <testcase name="converts ECONNRESET socket errors to retryable APIError" classname="session.message-v2.fromError" time="4.595066" file="test/session/retry.test.ts" line="172" assertions="5" />
1524
- <testcase name="ECONNRESET socket error is retryable" classname="session.message-v2.fromError" time="0" file="test/session/retry.test.ts" line="207" assertions="2" />
1525
- <testcase name="marks OpenAI 404 status codes as retryable" classname="session.message-v2.fromError" time="0.001" file="test/session/retry.test.ts" line="219" assertions="1" />
1526
- </testsuite>
1527
- </testsuite>
1528
- <testsuite name="test/session/prompt.test.ts" file="test/session/prompt.test.ts" tests="9" assertions="32" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
1529
- <testsuite name="session.prompt missing file" file="test/session/prompt.test.ts" line="92" tests="2" assertions="4" failures="0" skipped="0" time="0.132" hostname="benmurray-MS-7C84">
1530
- <testcase name="does not fail the prompt when a file part is missing" classname="session.prompt missing file" time="0.070001" file="test/session/prompt.test.ts" line="93" assertions="1" />
1531
- <testcase name="keeps stored part order stable when file resolution is async" classname="session.prompt missing file" time="0.062001" file="test/session/prompt.test.ts" line="138" assertions="3" />
1532
- </testsuite>
1533
- <testsuite name="session.prompt special characters" file="test/session/prompt.test.ts" line="189" tests="1" assertions="5" failures="0" skipped="0" time="0.085" hostname="benmurray-MS-7C84">
1534
- <testcase name="handles filenames with # character" classname="session.prompt special characters" time="0.085001" file="test/session/prompt.test.ts" line="190" assertions="5" />
1535
- </testsuite>
1536
- <testsuite name="session.prompt regression" file="test/session/prompt.test.ts" line="229" tests="2" assertions="8" failures="0" skipped="0" time="0.267" hostname="benmurray-MS-7C84">
1537
- <testcase name="does not loop empty assistant turns for a simple reply" classname="session.prompt regression" time="0.140002" file="test/session/prompt.test.ts" line="230" assertions="4" />
1538
- <testcase name="records aborted errors when prompt is cancelled mid-stream" classname="session.prompt regression" time="0.127002" file="test/session/prompt.test.ts" line="297" assertions="4" />
1539
- </testsuite>
1540
- <testsuite name="session.prompt agent variant" file="test/session/prompt.test.ts" line="382" tests="1" assertions="4" failures="0" skipped="0" time="0.058" hostname="benmurray-MS-7C84">
1541
- <testcase name="applies agent variant only when using agent model" classname="session.prompt agent variant" time="0.058001" file="test/session/prompt.test.ts" line="383" assertions="4" />
1542
- </testsuite>
1543
- <testsuite name="session.agent-resolution" file="test/session/prompt.test.ts" line="449" tests="3" assertions="11" failures="0" skipped="0" time="0.12" hostname="benmurray-MS-7C84">
1544
- <testcase name="unknown agent throws typed error" classname="session.agent-resolution" time="0.043001" file="test/session/prompt.test.ts" line="450" assertions="4" />
1545
- <testcase name="unknown agent error includes available agent names" classname="session.agent-resolution" time="0.037001" file="test/session/prompt.test.ts" line="475" assertions="2" />
1546
- <testcase name="unknown command throws typed error with available names" classname="session.agent-resolution" time="0.040001" file="test/session/prompt.test.ts" line="498" assertions="5" />
1547
- </testsuite>
1548
- </testsuite>
1549
- <testsuite name="test/session/processor-effect.test.ts" file="test/session/processor-effect.test.ts" tests="11" assertions="45" failures="0" skipped="0" time="7.757" hostname="benmurray-MS-7C84">
1550
- <testcase name="session.processor effect tests capture llm input cleanly" classname="" time="0.208003" file="test/session/processor-effect.test.ts" line="174" assertions="3" />
1551
- <testcase name="session.processor effect tests stop after token overflow requests compaction" classname="" time="0.150002" file="test/session/processor-effect.test.ts" line="221" assertions="3" />
1552
- <testcase name="session.processor effect tests capture reasoning from http mock" classname="" time="0.172002" file="test/session/processor-effect.test.ts" line="267" assertions="4" />
1553
- <testcase name="session.processor effect tests reset reasoning state across retries" classname="" time="2.161031" file="test/session/processor-effect.test.ts" line="315" assertions="4" />
1554
- <testcase name="session.processor effect tests do not retry unknown json errors" classname="" time="0.143002" file="test/session/processor-effect.test.ts" line="362" assertions="3" />
1555
- <testcase name="session.processor effect tests retry recognized structured json errors" classname="" time="2.158031" file="test/session/processor-effect.test.ts" line="405" assertions="4" />
1556
- <testcase name="session.processor effect tests publish retry status updates" classname="" time="2.158031" file="test/session/processor-effect.test.ts" line="452" assertions="3" />
1557
- <testcase name="session.processor effect tests compact on structured context overflow" classname="" time="0.137002" file="test/session/processor-effect.test.ts" line="504" assertions="3" />
1558
- <testcase name="session.processor effect tests mark pending tools as aborted on cleanup" classname="" time="0.157002" file="test/session/processor-effect.test.ts" line="547" assertions="6" />
1559
- <testcase name="session.processor effect tests record aborted errors and idle state" classname="" time="0.164002" file="test/session/processor-effect.test.ts" line="617" assertions="7" />
1560
- <testcase name="session.processor effect tests mark interruptions aborted without manual abort" classname="" time="0.149002" file="test/session/processor-effect.test.ts" line="692" assertions="5" />
1561
- </testsuite>
1562
- <testsuite name="test/snapshot/snapshot.test.ts" file="test/snapshot/snapshot.test.ts" tests="50" assertions="1581" failures="0" skipped="1" time="5.044" hostname="benmurray-MS-7C84">
1563
- <testcase name="tracks deleted files correctly" classname="" time="0.101001" file="test/snapshot/snapshot.test.ts" line="38" assertions="2" />
1564
- <testcase name="revert should remove new files" classname="" time="0.097001" file="test/snapshot/snapshot.test.ts" line="53" assertions="2" />
1565
- <testcase name="revert in subdirectory" classname="" time="0.096001" file="test/snapshot/snapshot.test.ts" line="75" assertions="2" />
1566
- <testcase name="multiple file operations" classname="" time="0.096001" file="test/snapshot/snapshot.test.ts" line="100" assertions="4" />
1567
- <testcase name="empty directory handling" classname="" time="0.078001" file="test/snapshot/snapshot.test.ts" line="130" assertions="2" />
1568
- <testcase name="binary file handling" classname="" time="0.096001" file="test/snapshot/snapshot.test.ts" line="145" assertions="3" />
1569
- <testcase name="symlink handling" classname="" time="0.101001" file="test/snapshot/snapshot.test.ts" line="169" assertions="2" />
1570
- <testcase name="file under size limit handling" classname="" time="0.098001" file="test/snapshot/snapshot.test.ts" line="184" assertions="2" />
1571
- <testcase name="large added files are skipped" classname="" time="0.124002" file="test/snapshot/snapshot.test.ts" line="199" assertions="4" />
1572
- <testcase name="nested directory revert" classname="" time="0.087001" file="test/snapshot/snapshot.test.ts" line="216" assertions="2" />
1573
- <testcase name="special characters in filenames" classname="" time="0.089001" file="test/snapshot/snapshot.test.ts" line="239" assertions="4" />
1574
- <testcase name="revert with empty patches" classname="" time="0.035001" file="test/snapshot/snapshot.test.ts" line="259" assertions="2" />
1575
- <testcase name="patch with invalid hash" classname="" time="0.081001" file="test/snapshot/snapshot.test.ts" line="273" assertions="3" />
1576
- <testcase name="revert non-existent file" classname="" time="0.070001" file="test/snapshot/snapshot.test.ts" line="292" assertions="2" />
1577
- <testcase name="unicode filenames" classname="" time="0.093001" file="test/snapshot/snapshot.test.ts" line="314" assertions="10" />
1578
- <testcase name="unicode filenames modification and restore" classname="" time="0" file="test/snapshot/snapshot.test.ts" line="354" assertions="0">
1579
- <skipped />
1580
- </testcase>
1581
- <testcase name="unicode filenames in subdirectories" classname="" time="0.094001" file="test/snapshot/snapshot.test.ts" line="383" assertions="3" />
1582
- <testcase name="very long filenames" classname="" time="0.093001" file="test/snapshot/snapshot.test.ts" line="409" assertions="3" />
1583
- <testcase name="hidden files" classname="" time="0.087001" file="test/snapshot/snapshot.test.ts" line="436" assertions="4" />
1584
- <testcase name="nested symlinks" classname="" time="0.085001" file="test/snapshot/snapshot.test.ts" line="456" assertions="3" />
1585
- <testcase name="file permissions and ownership changes" classname="" time="0.088001" file="test/snapshot/snapshot.test.ts" line="476" assertions="2" />
1586
- <testcase name="circular symlinks" classname="" time="0.083001" file="test/snapshot/snapshot.test.ts" line="497" assertions="2" />
1587
- <testcase name="gitignore changes" classname="" time="0.086001" file="test/snapshot/snapshot.test.ts" line="514" assertions="4" />
1588
- <testcase name="git info exclude changes" classname="" time="0.108002" file="test/snapshot/snapshot.test.ts" line="538" assertions="5" />
1589
- <testcase name="git info exclude keeps global excludes" classname="" time="0.088001" file="test/snapshot/snapshot.test.ts" line="564" assertions="4" />
1590
- <testcase name="concurrent file operations during patch" classname="" time="0.091001" file="test/snapshot/snapshot.test.ts" line="600" assertions="2" />
1591
- <testcase name="snapshot state isolation between projects" classname="" time="0.174003" file="test/snapshot/snapshot.test.ts" line="629" assertions="3" />
1592
- <testcase name="patch detects changes in secondary worktree" classname="" time="0.135002" file="test/snapshot/snapshot.test.ts" line="658" assertions="3" />
1593
- <testcase name="revert only removes files in invoking worktree" classname="" time="0.145002" file="test/snapshot/snapshot.test.ts" line="690" assertions="4" />
1594
- <testcase name="diff reports worktree-only/shared edits and ignores primary-only" classname="" time="0.138002" file="test/snapshot/snapshot.test.ts" line="734" assertions="5" />
1595
- <testcase name="track with no changes returns same hash" classname="" time="0.086001" file="test/snapshot/snapshot.test.ts" line="772" assertions="3" />
1596
- <testcase name="diff function with various changes" classname="" time="0.083001" file="test/snapshot/snapshot.test.ts" line="791" assertions="4" />
1597
- <testcase name="restore function" classname="" time="0.078001" file="test/snapshot/snapshot.test.ts" line="812" assertions="5" />
1598
- <testcase name="revert should not delete files that existed but were deleted in snapshot" classname="" time="0.109002" file="test/snapshot/snapshot.test.ts" line="846" assertions="4" />
1599
- <testcase name="revert preserves file that existed in snapshot when deleted then recreated" classname="" time="0.090001" file="test/snapshot/snapshot.test.ts" line="876" assertions="6" />
1600
- <testcase name="diffFull sets status based on git change type" classname="" time="0.100001" file="test/snapshot/snapshot.test.ts" line="913" assertions="15" />
1601
- <testcase name="diffFull with new file additions" classname="" time="0.097001" file="test/snapshot/snapshot.test.ts" line="959" assertions="8" />
1602
- <testcase name="diffFull with a large interleaved mixed diff" classname="" time="0.187003" file="test/snapshot/snapshot.test.ts" line="985" assertions="1083" />
1603
- <testcase name="diffFull preserves git diff order across batch boundaries" classname="" time="0.177003" file="test/snapshot/snapshot.test.ts" line="1051" assertions="3" />
1604
- <testcase name="diffFull with file modifications" classname="" time="0.095001" file="test/snapshot/snapshot.test.ts" line="1077" assertions="8" />
1605
- <testcase name="diffFull with file deletions" classname="" time="0.097001" file="test/snapshot/snapshot.test.ts" line="1103" assertions="8" />
1606
- <testcase name="diffFull with multiple line additions" classname="" time="0.096001" file="test/snapshot/snapshot.test.ts" line="1129" assertions="8" />
1607
- <testcase name="diffFull with addition and deletion" classname="" time="0.095001" file="test/snapshot/snapshot.test.ts" line="1155" assertions="13" />
1608
- <testcase name="diffFull with multiple additions and deletions" classname="" time="0.099001" file="test/snapshot/snapshot.test.ts" line="1189" assertions="15" />
1609
- <testcase name="diffFull with no changes" classname="" time="0.084001" file="test/snapshot/snapshot.test.ts" line="1231" assertions="3" />
1610
- <testcase name="diffFull with binary file changes" classname="" time="0.091001" file="test/snapshot/snapshot.test.ts" line="1248" assertions="5" />
1611
- <testcase name="diffFull with whitespace changes" classname="" time="0.094001" file="test/snapshot/snapshot.test.ts" line="1271" assertions="5" />
1612
- <testcase name="revert with overlapping files across patches uses first patch hash" classname="" time="0.140002" file="test/snapshot/snapshot.test.ts" line="1295" assertions="5" />
1613
- <testcase name="revert preserves patch order when the same hash appears again" classname="" time="0.103001" file="test/snapshot/snapshot.test.ts" line="1329" assertions="5" />
1614
- <testcase name="revert handles large mixed batches across chunk boundaries" classname="" time="0.206003" file="test/snapshot/snapshot.test.ts" line="1364" assertions="282" />
1615
- </testsuite>
1616
- <testsuite name="test/auth/auth.test.ts" file="test/auth/auth.test.ts" tests="4" assertions="9" failures="0" skipped="0" time="0.005" hostname="benmurray-MS-7C84">
1617
- <testcase name="set normalizes trailing slashes in keys" classname="" time="0.003" file="test/auth/auth.test.ts" line="4" assertions="2" />
1618
- <testcase name="set cleans up pre-existing trailing-slash entry" classname="" time="0" file="test/auth/auth.test.ts" line="15" assertions="3" />
1619
- <testcase name="remove deletes both trailing-slash and normalized keys" classname="" time="0.001" file="test/auth/auth.test.ts" line="36" assertions="2" />
1620
- <testcase name="set and remove are no-ops on keys without trailing slashes" classname="" time="0.001" file="test/auth/auth.test.ts" line="48" assertions="2" />
1621
- </testsuite>
1622
- <testsuite name="test/file/index.test.ts" file="test/file/index.test.ts" tests="52" assertions="129" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
1623
- <testsuite name="file/index Filesystem patterns" file="test/file/index.test.ts" line="14" tests="52" assertions="129" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
1624
- <testsuite name="File.read() - text content" file="test/file/index.test.ts" line="15" tests="5" assertions="8" failures="0" skipped="0" time="0.009" hostname="benmurray-MS-7C84">
1625
- <testcase name="reads text file via Filesystem.readText()" classname="File.read() - text content &amp;gt; file/index Filesystem patterns" time="0.005" file="test/file/index.test.ts" line="16" assertions="2" />
1626
- <testcase name="reads with Filesystem.exists() check" classname="File.read() - text content &amp;gt; file/index Filesystem patterns" time="0.001" file="test/file/index.test.ts" line="31" assertions="2" />
1627
- <testcase name="trims whitespace from text content" classname="File.read() - text content &amp;gt; file/index Filesystem patterns" time="0.001" file="test/file/index.test.ts" line="45" assertions="1" />
1628
- <testcase name="handles empty text file" classname="File.read() - text content &amp;gt; file/index Filesystem patterns" time="0.001" file="test/file/index.test.ts" line="59" assertions="2" />
1629
- <testcase name="handles multi-line text files" classname="File.read() - text content &amp;gt; file/index Filesystem patterns" time="0.001" file="test/file/index.test.ts" line="74" assertions="1" />
1630
- </testsuite>
1631
- <testsuite name="File.read() - binary content" file="test/file/index.test.ts" line="89" tests="2" assertions="6" failures="0" skipped="0" time="0.002" hostname="benmurray-MS-7C84">
1632
- <testcase name="reads binary file via Filesystem.readArrayBuffer()" classname="File.read() - binary content &amp;gt; file/index Filesystem patterns" time="0.001" file="test/file/index.test.ts" line="90" assertions="4" />
1633
- <testcase name="returns empty for binary non-image files" classname="File.read() - binary content &amp;gt; file/index Filesystem patterns" time="0.001" file="test/file/index.test.ts" line="108" assertions="2" />
1634
- </testsuite>
1635
- <testsuite name="File.read() - Filesystem.mimeType()" file="test/file/index.test.ts" line="124" tests="2" assertions="6" failures="0" skipped="0" time="0.002" hostname="benmurray-MS-7C84">
1636
- <testcase name="detects MIME type via Filesystem.mimeType()" classname="File.read() - Filesystem.mimeType() &amp;gt; file/index Filesystem patterns" time="0.001" file="test/file/index.test.ts" line="125" assertions="2" />
1637
- <testcase name="handles various image MIME types" classname="File.read() - Filesystem.mimeType() &amp;gt; file/index Filesystem patterns" time="0.001" file="test/file/index.test.ts" line="141" assertions="4" />
1638
- </testsuite>
1639
- <testsuite name="File.list() - Filesystem.exists() and readText()" file="test/file/index.test.ts" line="164" tests="3" assertions="6" failures="0" skipped="0" time="0.092" hostname="benmurray-MS-7C84">
1640
- <testcase name="reads .gitignore via Filesystem.exists() and readText()" classname="File.list() - Filesystem.exists() and readText() &amp;gt; file/index Filesystem patterns" time="0.034" file="test/file/index.test.ts" line="165" assertions="2" />
1641
- <testcase name="reads .ignore file similarly" classname="File.list() - Filesystem.exists() and readText() &amp;gt; file/index Filesystem patterns" time="0.03" file="test/file/index.test.ts" line="183" assertions="2" />
1642
- <testcase name="handles missing .gitignore gracefully" classname="File.list() - Filesystem.exists() and readText() &amp;gt; file/index Filesystem patterns" time="0.028" file="test/file/index.test.ts" line="198" assertions="2" />
1643
- </testsuite>
1644
- <testsuite name="File.changed() - Filesystem.readText() for untracked files" file="test/file/index.test.ts" line="215" tests="1" assertions="1" failures="0" skipped="0" time="0.026" hostname="benmurray-MS-7C84">
1645
- <testcase name="reads untracked files via Filesystem.readText()" classname="File.changed() - Filesystem.readText() for untracked files &amp;gt; file/index Filesystem patterns" time="0.026" file="test/file/index.test.ts" line="216" assertions="1" />
1646
- </testsuite>
1647
- <testsuite name="Error handling" file="test/file/index.test.ts" line="234" tests="3" assertions="5" failures="0" skipped="0" time="0.006" hostname="benmurray-MS-7C84">
1648
- <testcase name="handles errors gracefully in Filesystem.readText()" classname="Error handling &amp;gt; file/index Filesystem patterns" time="0.004" file="test/file/index.test.ts" line="235" assertions="2" />
1649
- <testcase name="handles errors in Filesystem.readArrayBuffer()" classname="Error handling &amp;gt; file/index Filesystem patterns" time="0.001" file="test/file/index.test.ts" line="254" assertions="1" />
1650
- <testcase name="returns empty array buffer on error for images" classname="Error handling &amp;gt; file/index Filesystem patterns" time="0.001" file="test/file/index.test.ts" line="267" assertions="2" />
1651
- </testsuite>
1652
- <testsuite name="shouldEncode() logic" file="test/file/index.test.ts" line="284" tests="6" assertions="12" failures="0" skipped="0" time="0.006" hostname="benmurray-MS-7C84">
1653
- <testcase name="treats .ts files as text" classname="shouldEncode() logic &amp;gt; file/index Filesystem patterns" time="0.001" file="test/file/index.test.ts" line="285" assertions="2" />
1654
- <testcase name="treats .mts files as text" classname="shouldEncode() logic &amp;gt; file/index Filesystem patterns" time="0.001" file="test/file/index.test.ts" line="300" assertions="2" />
1655
- <testcase name="treats .sh files as text" classname="shouldEncode() logic &amp;gt; file/index Filesystem patterns" time="0.001" file="test/file/index.test.ts" line="315" assertions="2" />
1656
- <testcase name="treats Dockerfile as text" classname="shouldEncode() logic &amp;gt; file/index Filesystem patterns" time="0.001" file="test/file/index.test.ts" line="330" assertions="2" />
1657
- <testcase name="returns encoding info for text files" classname="shouldEncode() logic &amp;gt; file/index Filesystem patterns" time="0.001" file="test/file/index.test.ts" line="345" assertions="2" />
1658
- <testcase name="returns base64 encoding for images" classname="shouldEncode() logic &amp;gt; file/index Filesystem patterns" time="0.001" file="test/file/index.test.ts" line="360" assertions="2" />
1659
- </testsuite>
1660
- <testsuite name="Path security" file="test/file/index.test.ts" line="376" tests="2" assertions="2" failures="0" skipped="0" time="0.002" hostname="benmurray-MS-7C84">
1661
- <testcase name="throws for paths outside project directory" classname="Path security &amp;gt; file/index Filesystem patterns" time="0.001" file="test/file/index.test.ts" line="377" assertions="1" />
1662
- <testcase name="throws for paths outside project directory" classname="Path security &amp;gt; file/index Filesystem patterns" time="0.001" file="test/file/index.test.ts" line="388" assertions="1" />
1663
- </testsuite>
1664
- <testsuite name="File.status()" file="test/file/index.test.ts" line="400" tests="7" assertions="18" failures="0" skipped="0" time="0.265" hostname="benmurray-MS-7C84">
1665
- <testcase name="detects modified file" classname="File.status() &amp;gt; file/index Filesystem patterns" time="0.047001" file="test/file/index.test.ts" line="401" assertions="4" />
1666
- <testcase name="detects untracked file as added" classname="File.status() &amp;gt; file/index Filesystem patterns" time="0.033" file="test/file/index.test.ts" line="422" assertions="4" />
1667
- <testcase name="detects deleted file" classname="File.status() &amp;gt; file/index Filesystem patterns" time="0.048001" file="test/file/index.test.ts" line="439" assertions="1" />
1668
- <testcase name="detects mixed changes" classname="File.status() &amp;gt; file/index Filesystem patterns" time="0.049001" file="test/file/index.test.ts" line="458" assertions="3" />
1669
- <testcase name="returns empty for non-git project" classname="File.status() &amp;gt; file/index Filesystem patterns" time="0.001" file="test/file/index.test.ts" line="481" assertions="1" />
1670
- <testcase name="returns empty for clean repo" classname="File.status() &amp;gt; file/index Filesystem patterns" time="0.037001" file="test/file/index.test.ts" line="493" assertions="1" />
1671
- <testcase name="parses binary numstat as 0" classname="File.status() &amp;gt; file/index Filesystem patterns" time="0.050001" file="test/file/index.test.ts" line="505" assertions="4" />
1672
- </testsuite>
1673
- <testsuite name="File.list()" file="test/file/index.test.ts" line="533" tests="7" assertions="28" failures="0" skipped="0" time="0.175" hostname="benmurray-MS-7C84">
1674
- <testcase name="returns files and directories with correct shape" classname="File.list() &amp;gt; file/index Filesystem patterns" time="0.025" file="test/file/index.test.ts" line="534" assertions="13" />
1675
- <testcase name="sorts directories before files, alphabetical within each" classname="File.list() &amp;gt; file/index Filesystem patterns" time="0.027" file="test/file/index.test.ts" line="557" assertions="3" />
1676
- <testcase name="excludes .git and .DS_Store" classname="File.list() &amp;gt; file/index Filesystem patterns" time="0.033" file="test/file/index.test.ts" line="584" assertions="3" />
1677
- <testcase name="marks gitignored files as ignored" classname="File.list() &amp;gt; file/index Filesystem patterns" time="0.03" file="test/file/index.test.ts" line="601" assertions="3" />
1678
- <testcase name="lists subdirectory contents" classname="File.list() &amp;gt; file/index Filesystem patterns" time="0.029" file="test/file/index.test.ts" line="622" assertions="3" />
1679
- <testcase name="throws for paths outside project directory" classname="File.list() &amp;gt; file/index Filesystem patterns" time="0.025" file="test/file/index.test.ts" line="640" assertions="1" />
1680
- <testcase name="works without git" classname="File.list() &amp;gt; file/index Filesystem patterns" time="0.006" file="test/file/index.test.ts" line="651" assertions="2" />
1681
- </testsuite>
1682
- <testsuite name="File.search()" file="test/file/index.test.ts" line="669" tests="9" assertions="17" failures="0" skipped="0" time="0.364" hostname="benmurray-MS-7C84">
1683
- <testcase name="empty query returns files" classname="File.search() &amp;gt; file/index Filesystem patterns" time="0.042001" file="test/file/index.test.ts" line="682" assertions="1" />
1684
- <testcase name="search works before explicit init" classname="File.search() &amp;gt; file/index Filesystem patterns" time="0.039001" file="test/file/index.test.ts" line="696" assertions="1" />
1685
- <testcase name="empty query returns dirs sorted with hidden last" classname="File.search() &amp;gt; file/index Filesystem patterns" time="0.037001" file="test/file/index.test.ts" line="708" assertions="2" />
1686
- <testcase name="fuzzy matches file names" classname="File.search() &amp;gt; file/index Filesystem patterns" time="0.043001" file="test/file/index.test.ts" line="728" assertions="1" />
1687
- <testcase name="type filter returns only files" classname="File.search() &amp;gt; file/index Filesystem patterns" time="0.041001" file="test/file/index.test.ts" line="742" assertions="5" />
1688
- <testcase name="type filter returns only directories" classname="File.search() &amp;gt; file/index Filesystem patterns" time="0.040001" file="test/file/index.test.ts" line="759" assertions="2" />
1689
- <testcase name="respects limit" classname="File.search() &amp;gt; file/index Filesystem patterns" time="0.040001" file="test/file/index.test.ts" line="776" assertions="1" />
1690
- <testcase name="query starting with dot prefers hidden files" classname="File.search() &amp;gt; file/index Filesystem patterns" time="0.041001" file="test/file/index.test.ts" line="790" assertions="2" />
1691
- <testcase name="search refreshes after init when files change" classname="File.search() &amp;gt; file/index Filesystem patterns" time="0.041001" file="test/file/index.test.ts" line="805" assertions="2" />
1692
- </testsuite>
1693
- <testsuite name="File.read() - diff/patch" file="test/file/index.test.ts" line="823" tests="3" assertions="13" failures="0" skipped="0" time="0.136" hostname="benmurray-MS-7C84">
1694
- <testcase name="returns diff and patch for modified tracked file" classname="File.read() - diff/patch &amp;gt; file/index Filesystem patterns" time="0.048001" file="test/file/index.test.ts" line="824" assertions="7" />
1695
- <testcase name="returns diff for staged changes" classname="File.read() - diff/patch &amp;gt; file/index Filesystem patterns" time="0.044001" file="test/file/index.test.ts" line="847" assertions="2" />
1696
- <testcase name="returns no diff for unmodified file" classname="File.read() - diff/patch &amp;gt; file/index Filesystem patterns" time="0.044001" file="test/file/index.test.ts" line="866" assertions="4" />
1697
- </testsuite>
1698
- <testsuite name="InstanceState isolation" file="test/file/index.test.ts" line="886" tests="2" assertions="7" failures="0" skipped="0" time="0.15" hostname="benmurray-MS-7C84">
1699
- <testcase name="two directories get independent file caches" classname="InstanceState isolation &amp;gt; file/index Filesystem patterns" time="0.086001" file="test/file/index.test.ts" line="887" assertions="4" />
1700
- <testcase name="disposal gives fresh state on next access" classname="InstanceState isolation &amp;gt; file/index Filesystem patterns" time="0.064001" file="test/file/index.test.ts" line="916" assertions="3" />
1701
- </testsuite>
1702
- </testsuite>
1703
- </testsuite>
1704
- <testsuite name="test/file/time.test.ts" file="test/file/time.test.ts" tests="19" assertions="26" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
1705
- <testsuite name="file/time" file="test/file/time.test.ts" line="27" tests="19" assertions="26" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
1706
- <testsuite name="read() and get()" file="test/file/time.test.ts" line="30" tests="4" assertions="7" failures="0" skipped="0" time="0.008" hostname="benmurray-MS-7C84">
1707
- <testcase name="stores read timestamp" classname="read() and get() &amp;gt; file/time" time="0.004" file="test/file/time.test.ts" line="31" assertions="3" />
1708
- <testcase name="tracks separate timestamps per session" classname="read() and get() &amp;gt; file/time" time="0.001" file="test/file/time.test.ts" line="51" assertions="2" />
1709
- <testcase name="updates timestamp on subsequent reads" classname="read() and get() &amp;gt; file/time" time="0.001" file="test/file/time.test.ts" line="71" assertions="1" />
1710
- <testcase name="isolates reads by directory" classname="read() and get() &amp;gt; file/time" time="0.002" file="test/file/time.test.ts" line="90" assertions="1" />
1711
- </testsuite>
1712
- <testsuite name="assert()" file="test/file/time.test.ts" line="113" tests="4" assertions="5" failures="0" skipped="0" time="0.005" hostname="benmurray-MS-7C84">
1713
- <testcase name="passes when file has not been modified" classname="assert() &amp;gt; file/time" time="0.002" file="test/file/time.test.ts" line="114" assertions="0" />
1714
- <testcase name="throws when file was not read first" classname="assert() &amp;gt; file/time" time="0.001" file="test/file/time.test.ts" line="129" assertions="1" />
1715
- <testcase name="throws when file was modified after read" classname="assert() &amp;gt; file/time" time="0.001" file="test/file/time.test.ts" line="142" assertions="1" />
1716
- <testcase name="includes timestamps in error message" classname="assert() &amp;gt; file/time" time="0.001" file="test/file/time.test.ts" line="159" assertions="3" />
1717
- </testsuite>
1718
- <testsuite name="withLock()" file="test/file/time.test.ts" line="186" tests="5" assertions="8" failures="0" skipped="0" time="0.008" hostname="benmurray-MS-7C84">
1719
- <testcase name="executes function within lock" classname="withLock() &amp;gt; file/time" time="0.001" file="test/file/time.test.ts" line="187" assertions="1" />
1720
- <testcase name="returns function result" classname="withLock() &amp;gt; file/time" time="0.001" file="test/file/time.test.ts" line="204" assertions="1" />
1721
- <testcase name="serializes concurrent operations on same file" classname="withLock() &amp;gt; file/time" time="0.003" file="test/file/time.test.ts" line="219" assertions="1" />
1722
- <testcase name="allows concurrent operations on different files" classname="withLock() &amp;gt; file/time" time="0.002" file="test/file/time.test.ts" line="252" assertions="3" />
1723
- <testcase name="releases lock even if function throws" classname="withLock() &amp;gt; file/time" time="0.001" file="test/file/time.test.ts" line="286" assertions="2" />
1724
- </testsuite>
1725
- <testsuite name="path normalization" file="test/file/time.test.ts" line="309" tests="4" assertions="2" failures="0" skipped="0" time="0.004" hostname="benmurray-MS-7C84">
1726
- <testcase name="read with forward slashes, assert with backslashes" classname="path normalization &amp;gt; file/time" time="0.001" file="test/file/time.test.ts" line="310" assertions="0" />
1727
- <testcase name="read with backslashes, assert with forward slashes" classname="path normalization &amp;gt; file/time" time="0.001" file="test/file/time.test.ts" line="328" assertions="0" />
1728
- <testcase name="get returns timestamp regardless of slash direction" classname="path normalization &amp;gt; file/time" time="0.001" file="test/file/time.test.ts" line="346" assertions="1" />
1729
- <testcase name="withLock serializes regardless of slash direction" classname="path normalization &amp;gt; file/time" time="0.001" file="test/file/time.test.ts" line="363" assertions="1" />
1730
- </testsuite>
1731
- <testsuite name="stat() Filesystem.stat pattern" file="test/file/time.test.ts" line="400" tests="2" assertions="4" failures="0" skipped="0" time="0.002" hostname="benmurray-MS-7C84">
1732
- <testcase name="reads file modification time via Filesystem.stat()" classname="stat() Filesystem.stat pattern &amp;gt; file/time" time="0.001" file="test/file/time.test.ts" line="401" assertions="2" />
1733
- <testcase name="detects modification via stat mtime" classname="stat() Filesystem.stat pattern &amp;gt; file/time" time="0.001" file="test/file/time.test.ts" line="421" assertions="2" />
1734
- </testsuite>
1735
- </testsuite>
1736
- </testsuite>
1737
- <testsuite name="test/file/watcher.test.ts" file="test/file/watcher.test.ts" tests="5" assertions="0" failures="0" skipped="5" time="0" hostname="benmurray-MS-7C84">
1738
- <testsuite name="FileWatcher" file="test/file/watcher.test.ts" line="146" tests="5" assertions="0" failures="0" skipped="5" time="0" hostname="benmurray-MS-7C84">
1739
- <testcase name="publishes root create, update, and delete events" classname="FileWatcher" time="0" file="test/file/watcher.test.ts" line="151" assertions="0">
1740
- <skipped />
1741
- </testcase>
1742
- <testcase name="watches non-git roots" classname="FileWatcher" time="0" file="test/file/watcher.test.ts" line="171" assertions="0">
1743
- <skipped />
1744
- </testcase>
1745
- <testcase name="cleanup stops publishing events" classname="FileWatcher" time="0" file="test/file/watcher.test.ts" line="186" assertions="0">
1746
- <skipped />
1747
- </testcase>
1748
- <testcase name="ignores .git/index changes" classname="FileWatcher" time="0" file="test/file/watcher.test.ts" line="207" assertions="0">
1749
- <skipped />
1750
- </testcase>
1751
- <testcase name="publishes .git/HEAD events" classname="FileWatcher" time="0" file="test/file/watcher.test.ts" line="225" assertions="0">
1752
- <skipped />
1753
- </testcase>
1754
- </testsuite>
1755
- </testsuite>
1756
- <testsuite name="test/file/fsmonitor.test.ts" file="test/file/fsmonitor.test.ts" tests="2" assertions="0" failures="0" skipped="2" time="0" hostname="benmurray-MS-7C84">
1757
- <testsuite name="file fsmonitor" file="test/file/fsmonitor.test.ts" line="11" tests="2" assertions="0" failures="0" skipped="2" time="0" hostname="benmurray-MS-7C84">
1758
- <testcase name="status does not start fsmonitor for readonly git checks" classname="file fsmonitor" time="0" file="test/file/fsmonitor.test.ts" line="12" assertions="0">
1759
- <skipped />
1760
- </testcase>
1761
- <testcase name="read does not start fsmonitor for git diffs" classname="file fsmonitor" time="0" file="test/file/fsmonitor.test.ts" line="38" assertions="0">
1762
- <skipped />
1763
- </testcase>
1764
- </testsuite>
1765
- </testsuite>
1766
- <testsuite name="test/file/ignore.test.ts" file="test/file/ignore.test.ts" tests="1" assertions="5" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
1767
- <testcase name="match nested and non-nested" classname="" time="0" file="test/file/ignore.test.ts" line="4" assertions="5" />
1768
- </testsuite>
1769
- <testsuite name="test/file/path-traversal.test.ts" file="test/file/path-traversal.test.ts" tests="15" assertions="30" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
1770
- <testsuite name="Filesystem.contains" file="test/file/path-traversal.test.ts" line="9" tests="4" assertions="11" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
1771
- <testcase name="allows paths within project" classname="Filesystem.contains" time="0" file="test/file/path-traversal.test.ts" line="10" assertions="3" />
1772
- <testcase name="blocks ../ traversal" classname="Filesystem.contains" time="0" file="test/file/path-traversal.test.ts" line="16" assertions="3" />
1773
- <testcase name="blocks absolute paths outside project" classname="Filesystem.contains" time="0" file="test/file/path-traversal.test.ts" line="22" assertions="3" />
1774
- <testcase name="handles prefix collision edge cases" classname="Filesystem.contains" time="0" file="test/file/path-traversal.test.ts" line="28" assertions="2" />
1775
- </testsuite>
1776
- <testsuite name="File.read path traversal protection" file="test/file/path-traversal.test.ts" line="43" tests="3" assertions="3" failures="0" skipped="0" time="0.003" hostname="benmurray-MS-7C84">
1777
- <testcase name="rejects ../ traversal attempting to read /etc/passwd" classname="File.read path traversal protection" time="0.001" file="test/file/path-traversal.test.ts" line="44" assertions="1" />
1778
- <testcase name="rejects deeply nested traversal" classname="File.read path traversal protection" time="0.001" file="test/file/path-traversal.test.ts" line="59" assertions="1" />
1779
- <testcase name="allows valid paths within project" classname="File.read path traversal protection" time="0.001" file="test/file/path-traversal.test.ts" line="72" assertions="1" />
1780
- </testsuite>
1781
- <testsuite name="File.list path traversal protection" file="test/file/path-traversal.test.ts" line="89" tests="2" assertions="2" failures="0" skipped="0" time="0.001" hostname="benmurray-MS-7C84">
1782
- <testcase name="rejects ../ traversal attempting to list /etc" classname="File.list path traversal protection" time="0" file="test/file/path-traversal.test.ts" line="90" assertions="1" />
1783
- <testcase name="allows valid subdirectory listing" classname="File.list path traversal protection" time="0.001" file="test/file/path-traversal.test.ts" line="101" assertions="1" />
1784
- </testsuite>
1785
- <testsuite name="Instance.containsPath" file="test/file/path-traversal.test.ts" line="118" tests="6" assertions="14" failures="0" skipped="0" time="0.154" hostname="benmurray-MS-7C84">
1786
- <testcase name="returns true for path inside directory" classname="Instance.containsPath" time="0.03" file="test/file/path-traversal.test.ts" line="119" assertions="2" />
1787
- <testcase name="returns true for path inside worktree but outside directory (monorepo subdirectory scenario)" classname="Instance.containsPath" time="0.03" file="test/file/path-traversal.test.ts" line="131" assertions="3" />
1788
- <testcase name="returns false for path outside both directory and worktree" classname="Instance.containsPath" time="0.031" file="test/file/path-traversal.test.ts" line="149" assertions="2" />
1789
- <testcase name="returns false for path with .. escaping worktree" classname="Instance.containsPath" time="0.026" file="test/file/path-traversal.test.ts" line="161" assertions="1" />
1790
- <testcase name="handles directory === worktree (running from repo root)" classname="Instance.containsPath" time="0.032" file="test/file/path-traversal.test.ts" line="172" assertions="3" />
1791
- <testcase name="non-git project does not allow arbitrary paths via worktree=&apos;/&apos;" classname="Instance.containsPath" time="0.005" file="test/file/path-traversal.test.ts" line="185" assertions="3" />
1792
- </testsuite>
1793
- </testsuite>
1794
- <testsuite name="test/file/ripgrep.test.ts" file="test/file/ripgrep.test.ts" tests="3" assertions="5" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
1795
- <testsuite name="file.ripgrep" file="test/file/ripgrep.test.ts" line="7" tests="3" assertions="5" failures="0" skipped="0" time="0.019" hostname="benmurray-MS-7C84">
1796
- <testcase name="defaults to include hidden" classname="file.ripgrep" time="0.006" file="test/file/ripgrep.test.ts" line="8" assertions="2" />
1797
- <testcase name="hidden false excludes hidden" classname="file.ripgrep" time="0.006" file="test/file/ripgrep.test.ts" line="24" assertions="2" />
1798
- <testcase name="search returns empty when nothing matches" classname="file.ripgrep" time="0.007" file="test/file/ripgrep.test.ts" line="40" assertions="1" />
1799
- </testsuite>
1800
- </testsuite>
1801
- <testsuite name="test/question/question.test.ts" file="test/question/question.test.ts" tests="14" assertions="20" failures="0" skipped="0" time="0.431" hostname="benmurray-MS-7C84">
1802
- <testcase name="ask - returns pending promise" classname="" time="0.033" file="test/question/question.test.ts" line="20" assertions="1" />
1803
- <testcase name="ask - adds to pending list" classname="" time="0.027" file="test/question/question.test.ts" line="45" assertions="2" />
1804
- <testcase name="reply - resolves the pending ask with answers" classname="" time="0.03" file="test/question/question.test.ts" line="77" assertions="1" />
1805
- <testcase name="reply - removes from pending list" classname="" time="0.034" file="test/question/question.test.ts" line="112" assertions="2" />
1806
- <testcase name="reply - does nothing for unknown requestID" classname="" time="0.029" file="test/question/question.test.ts" line="146" assertions="0" />
1807
- <testcase name="reject - throws RejectedError" classname="" time="0.025" file="test/question/question.test.ts" line="162" assertions="1" />
1808
- <testcase name="reject - removes from pending list" classname="" time="0.028" file="test/question/question.test.ts" line="189" assertions="2" />
1809
- <testcase name="reject - does nothing for unknown requestID" classname="" time="0.03" file="test/question/question.test.ts" line="220" assertions="0" />
1810
- <testcase name="ask - handles multiple questions" classname="" time="0.026" file="test/question/question.test.ts" line="233" assertions="1" />
1811
- <testcase name="list - returns all pending requests" classname="" time="0.029" file="test/question/question.test.ts" line="277" assertions="1" />
1812
- <testcase name="list - returns empty when no pending" classname="" time="0.028" file="test/question/question.test.ts" line="313" assertions="1" />
1813
- <testcase name="questions stay isolated by directory" classname="" time="0.053001" file="test/question/question.test.ts" line="324" assertions="4" />
1814
- <testcase name="pending question rejects on instance dispose" classname="" time="0.028" file="test/question/question.test.ts" line="385" assertions="2" />
1815
- <testcase name="pending question rejects on instance reload" classname="" time="0.031" file="test/question/question.test.ts" line="420" assertions="2" />
1816
- </testsuite>
1817
- <testsuite name="test/provider/amazon-bedrock.test.ts" file="test/provider/amazon-bedrock.test.ts" tests="19" assertions="29" failures="0" skipped="0" time="0.189" hostname="benmurray-MS-7C84">
1818
- <testcase name="Bedrock: config region takes precedence over AWS_REGION env var" classname="" time="0.017" file="test/provider/amazon-bedrock.test.ts" line="13" assertions="2" />
1819
- <testcase name="Bedrock: falls back to AWS_REGION env var when no config region" classname="" time="0.018" file="test/provider/amazon-bedrock.test.ts" line="45" assertions="2" />
1820
- <testcase name="Bedrock: loads when bearer token from auth.json is present" classname="" time="0.022" file="test/provider/amazon-bedrock.test.ts" line="70" assertions="2" />
1821
- <testcase name="Bedrock: config profile takes precedence over AWS_PROFILE env var" classname="" time="0.019" file="test/provider/amazon-bedrock.test.ts" line="138" assertions="2" />
1822
- <testcase name="Bedrock: includes custom endpoint in options when specified" classname="" time="0.022" file="test/provider/amazon-bedrock.test.ts" line="171" assertions="2" />
1823
- <testcase name="Bedrock: autoloads when AWS_WEB_IDENTITY_TOKEN_FILE is present" classname="" time="0.018" file="test/provider/amazon-bedrock.test.ts" line="204" assertions="2" />
1824
- <testcase name="Bedrock: model with us. prefix should not be double-prefixed" classname="" time="0.018" file="test/provider/amazon-bedrock.test.ts" line="242" assertions="2" />
1825
- <testcase name="Bedrock: model with global. prefix should not be prefixed" classname="" time="0.019" file="test/provider/amazon-bedrock.test.ts" line="279" assertions="2" />
1826
- <testcase name="Bedrock: model with eu. prefix should not be double-prefixed" classname="" time="0.018" file="test/provider/amazon-bedrock.test.ts" line="315" assertions="2" />
1827
- <testcase name="Bedrock: model without prefix in US region should get us. prefix added" classname="" time="0.018" file="test/provider/amazon-bedrock.test.ts" line="351" assertions="2" />
1828
- <testsuite name="Bedrock cross-region prefix detection" file="test/provider/amazon-bedrock.test.ts" line="391" tests="9" assertions="9" failures="0" skipped="0" time="0.001" hostname="benmurray-MS-7C84">
1829
- <testcase name="should detect global. prefix" classname="Bedrock cross-region prefix detection" time="0" file="test/provider/amazon-bedrock.test.ts" line="394" assertions="1" />
1830
- <testcase name="should detect us. prefix" classname="Bedrock cross-region prefix detection" time="0" file="test/provider/amazon-bedrock.test.ts" line="400" assertions="1" />
1831
- <testcase name="should detect eu. prefix" classname="Bedrock cross-region prefix detection" time="0" file="test/provider/amazon-bedrock.test.ts" line="406" assertions="1" />
1832
- <testcase name="should detect jp. prefix" classname="Bedrock cross-region prefix detection" time="0.001" file="test/provider/amazon-bedrock.test.ts" line="412" assertions="1" />
1833
- <testcase name="should detect apac. prefix" classname="Bedrock cross-region prefix detection" time="0" file="test/provider/amazon-bedrock.test.ts" line="418" assertions="1" />
1834
- <testcase name="should detect au. prefix" classname="Bedrock cross-region prefix detection" time="0" file="test/provider/amazon-bedrock.test.ts" line="424" assertions="1" />
1835
- <testcase name="should NOT detect prefix for non-prefixed model" classname="Bedrock cross-region prefix detection" time="0" file="test/provider/amazon-bedrock.test.ts" line="430" assertions="1" />
1836
- <testcase name="should NOT detect prefix for amazon nova models" classname="Bedrock cross-region prefix detection" time="0" file="test/provider/amazon-bedrock.test.ts" line="436" assertions="1" />
1837
- <testcase name="should NOT detect prefix for cohere models" classname="Bedrock cross-region prefix detection" time="0" file="test/provider/amazon-bedrock.test.ts" line="442" assertions="1" />
1838
- </testsuite>
1839
- </testsuite>
1840
- <testsuite name="test/provider/provider.test.ts" file="test/provider/provider.test.ts" tests="74" assertions="183" failures="0" skipped="0" time="4.282" hostname="benmurray-MS-7C84">
1841
- <testcase name="provider loaded from env variable" classname="" time="0.019" file="test/provider/provider.test.ts" line="20" assertions="3" />
1842
- <testcase name="provider loaded from config with apiKey option" classname="" time="0.02" file="test/provider/provider.test.ts" line="47" assertions="1" />
1843
- <testcase name="disabled_providers excludes provider" classname="" time="0.02" file="test/provider/provider.test.ts" line="74" assertions="1" />
1844
- <testcase name="enabled_providers restricts to only listed providers" classname="" time="0.02" file="test/provider/provider.test.ts" line="98" assertions="2" />
1845
- <testcase name="model whitelist filters models for provider" classname="" time="0.019" file="test/provider/provider.test.ts" line="124" assertions="3" />
1846
- <testcase name="model blacklist excludes specific models" classname="" time="0.02" file="test/provider/provider.test.ts" line="155" assertions="2" />
1847
- <testcase name="custom model alias via config" classname="" time="0.018" file="test/provider/provider.test.ts" line="185" assertions="3" />
1848
- <testcase name="custom provider with npm package" classname="" time="0.02" file="test/provider/provider.test.ts" line="220" assertions="3" />
1849
- <testcase name="env variable takes precedence, config merges options" classname="" time="0.02" file="test/provider/provider.test.ts" line="263" assertions="3" />
1850
- <testcase name="getModel returns model for valid provider/model" classname="" time="0.022" file="test/provider/provider.test.ts" line="297" assertions="4" />
1851
- <testcase name="getModel throws ModelNotFoundError for invalid model" classname="" time="0.018" file="test/provider/provider.test.ts" line="324" assertions="1" />
1852
- <testcase name="getModel throws ModelNotFoundError for invalid provider" classname="" time="0.045001" file="test/provider/provider.test.ts" line="346" assertions="1" />
1853
- <testcase name="parseModel correctly parses provider/model string" classname="" time="0" file="test/provider/provider.test.ts" line="365" assertions="2" />
1854
- <testcase name="parseModel handles model IDs with slashes" classname="" time="0" file="test/provider/provider.test.ts" line="371" assertions="2" />
1855
- <testcase name="defaultModel returns first available model when no config set" classname="" time="0.027" file="test/provider/provider.test.ts" line="377" assertions="2" />
1856
- <testcase name="defaultModel respects config model setting" classname="" time="0.003" file="test/provider/provider.test.ts" line="401" assertions="2" />
1857
- <testcase name="provider with baseURL from config" classname="" time="0.024" file="test/provider/provider.test.ts" line="426" assertions="2" />
1858
- <testcase name="model cost defaults to zero when not specified" classname="" time="0.02" file="test/provider/provider.test.ts" line="465" assertions="4" />
1859
- <testcase name="model options are merged from existing model" classname="" time="0.02" file="test/provider/provider.test.ts" line="506" assertions="1" />
1860
- <testcase name="provider removed when all models filtered out" classname="" time="0.02" file="test/provider/provider.test.ts" line="541" assertions="1" />
1861
- <testcase name="closest finds model by partial match" classname="" time="0.022" file="test/provider/provider.test.ts" line="569" assertions="3" />
1862
- <testcase name="closest returns undefined for nonexistent provider" classname="" time="0.02" file="test/provider/provider.test.ts" line="594" assertions="1" />
1863
- <testcase name="getModel uses realIdByKey for aliased models" classname="" time="0.022" file="test/provider/provider.test.ts" line="614" assertions="4" />
1864
- <testcase name="provider api field sets model api.url" classname="" time="0.02" file="test/provider/provider.test.ts" line="652" assertions="1" />
1865
- <testcase name="explicit baseURL overrides api field" classname="" time="0.02" file="test/provider/provider.test.ts" line="691" assertions="1" />
1866
- <testcase name="model inherits properties from existing database model" classname="" time="0.02" file="test/provider/provider.test.ts" line="730" assertions="4" />
1867
- <testcase name="disabled_providers prevents loading even with env var" classname="" time="0.014" file="test/provider/provider.test.ts" line="766" assertions="1" />
1868
- <testcase name="enabled_providers with empty array allows no providers" classname="" time="0.023" file="test/provider/provider.test.ts" line="790" assertions="1" />
1869
- <testcase name="whitelist and blacklist can be combined" classname="" time="0.021" file="test/provider/provider.test.ts" line="815" assertions="4" />
1870
- <testcase name="model modalities default correctly" classname="" time="0.022" file="test/provider/provider.test.ts" line="848" assertions="2" />
1871
- <testcase name="model with custom cost values" classname="" time="0.02" file="test/provider/provider.test.ts" line="885" assertions="4" />
1872
- <testcase name="getSmallModel returns appropriate small model" classname="" time="0.023" file="test/provider/provider.test.ts" line="930" assertions="2" />
1873
- <testcase name="getSmallModel respects config small_model override" classname="" time="0.023" file="test/provider/provider.test.ts" line="954" assertions="3" />
1874
- <testcase name="provider.sort prioritizes preferred models" classname="" time="0" file="test/provider/provider.test.ts" line="980" assertions="4" />
1875
- <testcase name="multiple providers can be configured simultaneously" classname="" time="0.022" file="test/provider/provider.test.ts" line="995" assertions="4" />
1876
- <testcase name="provider with custom npm package" classname="" time="0.023" file="test/provider/provider.test.ts" line="1030" assertions="3" />
1877
- <testcase name="model alias name defaults to alias key when id differs" classname="" time="0.023" file="test/provider/provider.test.ts" line="1072" assertions="1" />
1878
- <testcase name="provider with multiple env var options only includes apiKey when single env" classname="" time="0.025" file="test/provider/provider.test.ts" line="1105" assertions="2" />
1879
- <testcase name="provider with single env var includes apiKey automatically" classname="" time="0.02" file="test/provider/provider.test.ts" line="1147" assertions="2" />
1880
- <testcase name="model cost overrides existing cost values" classname="" time="0.024" file="test/provider/provider.test.ts" line="1189" assertions="2" />
1881
- <testcase name="completely new provider not in database can be configured" classname="" time="0.022" file="test/provider/provider.test.ts" line="1226" assertions="5" />
1882
- <testcase name="disabled_providers and enabled_providers interaction" classname="" time="0.019" file="test/provider/provider.test.ts" line="1276" assertions="3" />
1883
- <testcase name="model with tool_call false" classname="" time="0.022" file="test/provider/provider.test.ts" line="1310" assertions="1" />
1884
- <testcase name="model defaults tool_call to true when not specified" classname="" time="0.022" file="test/provider/provider.test.ts" line="1345" assertions="1" />
1885
- <testcase name="model headers are preserved" classname="" time="0.022" file="test/provider/provider.test.ts" line="1380" assertions="1" />
1886
- <testcase name="provider env fallback - second env var used if first missing" classname="" time="0.021" file="test/provider/provider.test.ts" line="1423" assertions="1" />
1887
- <testcase name="getModel returns consistent results" classname="" time="0.021" file="test/provider/provider.test.ts" line="1463" assertions="3" />
1888
- <testcase name="provider name defaults to id when not in database" classname="" time="0.021" file="test/provider/provider.test.ts" line="1489" assertions="1" />
1889
- <testcase name="ModelNotFoundError includes suggestions for typos" classname="" time="0.022" file="test/provider/provider.test.ts" line="1524" assertions="2" />
1890
- <testcase name="ModelNotFoundError for provider includes suggestions" classname="" time="0.022" file="test/provider/provider.test.ts" line="1552" assertions="2" />
1891
- <testcase name="getProvider returns undefined for nonexistent provider" classname="" time="0.021" file="test/provider/provider.test.ts" line="1580" assertions="1" />
1892
- <testcase name="getProvider returns provider info" classname="" time="0.021" file="test/provider/provider.test.ts" line="1600" assertions="2" />
1893
- <testcase name="closest returns undefined when no partial match found" classname="" time="0.019" file="test/provider/provider.test.ts" line="1624" assertions="1" />
1894
- <testcase name="closest checks multiple query terms in order" classname="" time="0.022" file="test/provider/provider.test.ts" line="1647" assertions="2" />
1895
- <testcase name="model limit defaults to zero when not specified" classname="" time="0.02" file="test/provider/provider.test.ts" line="1672" assertions="2" />
1896
- <testcase name="provider options are deeply merged" classname="" time="0.02" file="test/provider/provider.test.ts" line="1709" assertions="3" />
1897
- <testcase name="custom model inherits npm package from models.dev provider config" classname="" time="0.02" file="test/provider/provider.test.ts" line="1746" assertions="2" />
1898
- <testcase name="custom model inherits api.url from models.dev provider" classname="" time="0.021" file="test/provider/provider.test.ts" line="1782" assertions="6" />
1899
- <testcase name="model variants are generated for reasoning models" classname="" time="0.02" file="test/provider/provider.test.ts" line="1826" assertions="3" />
1900
- <testcase name="model variants can be disabled via config" classname="" time="0.022" file="test/provider/provider.test.ts" line="1853" assertions="3" />
1901
- <testcase name="model variants can be customized via config" classname="" time="0.021" file="test/provider/provider.test.ts" line="1891" assertions="2" />
1902
- <testcase name="disabled key is stripped from variant config" classname="" time="0.022" file="test/provider/provider.test.ts" line="1932" assertions="3" />
1903
- <testcase name="all variants can be disabled via config" classname="" time="0.023" file="test/provider/provider.test.ts" line="1972" assertions="2" />
1904
- <testcase name="variant config merges with generated variants" classname="" time="0.021" file="test/provider/provider.test.ts" line="2009" assertions="3" />
1905
- <testcase name="variants filtered in second pass for database models" classname="" time="0.021" file="test/provider/provider.test.ts" line="2049" assertions="3" />
1906
- <testcase name="custom model with variants enabled and disabled" classname="" time="0.025" file="test/provider/provider.test.ts" line="2087" assertions="12" />
1907
- <testcase name="Google Vertex: retains baseURL for custom proxy" classname="" time="0.021" file="test/provider/provider.test.ts" line="2144" assertions="2" />
1908
- <testcase name="Google Vertex: supports OpenAI compatible models" classname="" time="0.021" file="test/provider/provider.test.ts" line="2188" assertions="2" />
1909
- <testcase name="cloudflare-ai-gateway loads with env variables" classname="" time="0.021" file="test/provider/provider.test.ts" line="2235" assertions="1" />
1910
- <testcase name="cloudflare-ai-gateway forwards config metadata options" classname="" time="0.021" file="test/provider/provider.test.ts" line="2260" assertions="2" />
1911
- <testcase name="plugin config providers persist after instance dispose" classname="" time="0.782011" file="test/provider/provider.test.ts" line="2296" assertions="4" />
1912
- <testcase name="plugin config enabled and disabled providers are honored" classname="" time="1.999029" file="test/provider/provider.test.ts" line="2350" assertions="2" />
1913
- <testcase name="epochcli loader keeps paid models when config apiKey is present" classname="" time="0.042001" file="test/provider/provider.test.ts" line="2387" assertions="4" />
1914
- <testcase name="epochcli loader keeps paid models when auth exists" classname="" time="0.040001" file="test/provider/provider.test.ts" line="2431" assertions="4" />
1915
- </testsuite>
1916
- <testsuite name="test/provider/transform.test.ts" file="test/provider/transform.test.ts" tests="121" assertions="229" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
1917
- <testsuite name="ProviderTransform.options - setCacheKey" file="test/provider/transform.test.ts" line="7" tests="6" assertions="6" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
1918
- <testcase name="should set promptCacheKey when providerOptions.setCacheKey is true" classname="ProviderTransform.options - setCacheKey" time="0" file="test/provider/transform.test.ts" line="42" assertions="1" />
1919
- <testcase name="should not set promptCacheKey when providerOptions.setCacheKey is false" classname="ProviderTransform.options - setCacheKey" time="0" file="test/provider/transform.test.ts" line="51" assertions="1" />
1920
- <testcase name="should not set promptCacheKey when providerOptions is undefined" classname="ProviderTransform.options - setCacheKey" time="0" file="test/provider/transform.test.ts" line="60" assertions="1" />
1921
- <testcase name="should not set promptCacheKey when providerOptions does not have setCacheKey" classname="ProviderTransform.options - setCacheKey" time="0" file="test/provider/transform.test.ts" line="69" assertions="1" />
1922
- <testcase name="should set promptCacheKey for openai provider regardless of setCacheKey" classname="ProviderTransform.options - setCacheKey" time="0" file="test/provider/transform.test.ts" line="74" assertions="1" />
1923
- <testcase name="should set store=false for openai provider" classname="ProviderTransform.options - setCacheKey" time="0" file="test/provider/transform.test.ts" line="88" assertions="1" />
1924
- </testsuite>
1925
- <testsuite name="ProviderTransform.options - google thinkingConfig gating" file="test/provider/transform.test.ts" line="107" tests="3" assertions="3" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
1926
- <testcase name="does not set thinkingConfig for google models without reasoning capability" classname="ProviderTransform.options - google thinkingConfig gating" time="0" file="test/provider/transform.test.ts" line="143" assertions="1" />
1927
- <testcase name="sets thinkingConfig for google models with reasoning capability" classname="ProviderTransform.options - google thinkingConfig gating" time="0" file="test/provider/transform.test.ts" line="152" assertions="1" />
1928
- <testcase name="does not set thinkingConfig for vertex models without reasoning capability" classname="ProviderTransform.options - google thinkingConfig gating" time="0" file="test/provider/transform.test.ts" line="163" assertions="1" />
1929
- </testsuite>
1930
- <testsuite name="ProviderTransform.options - gpt-5 textVerbosity" file="test/provider/transform.test.ts" line="173" tests="7" assertions="7" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
1931
- <testcase name="gpt-5.2 should have textVerbosity set to low" classname="ProviderTransform.options - gpt-5 textVerbosity" time="0" file="test/provider/transform.test.ts" line="202" assertions="1" />
1932
- <testcase name="gpt-5.1 should have textVerbosity set to low" classname="ProviderTransform.options - gpt-5 textVerbosity" time="0" file="test/provider/transform.test.ts" line="208" assertions="1" />
1933
- <testcase name="gpt-5.2-chat-latest should NOT have textVerbosity set (only supports medium)" classname="ProviderTransform.options - gpt-5 textVerbosity" time="0" file="test/provider/transform.test.ts" line="214" assertions="1" />
1934
- <testcase name="gpt-5.1-chat-latest should NOT have textVerbosity set (only supports medium)" classname="ProviderTransform.options - gpt-5 textVerbosity" time="0" file="test/provider/transform.test.ts" line="220" assertions="1" />
1935
- <testcase name="gpt-5.2-chat should NOT have textVerbosity set" classname="ProviderTransform.options - gpt-5 textVerbosity" time="0" file="test/provider/transform.test.ts" line="226" assertions="1" />
1936
- <testcase name="gpt-5-chat should NOT have textVerbosity set" classname="ProviderTransform.options - gpt-5 textVerbosity" time="0" file="test/provider/transform.test.ts" line="232" assertions="1" />
1937
- <testcase name="gpt-5.2-codex should NOT have textVerbosity set (codex models excluded)" classname="ProviderTransform.options - gpt-5 textVerbosity" time="0" file="test/provider/transform.test.ts" line="238" assertions="1" />
1938
- </testsuite>
1939
- <testsuite name="ProviderTransform.options - gateway" file="test/provider/transform.test.ts" line="245" tests="1" assertions="1" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
1940
- <testcase name="puts gateway defaults under gateway key" classname="ProviderTransform.options - gateway" time="0" file="test/provider/transform.test.ts" line="282" assertions="1" />
1941
- </testsuite>
1942
- <testsuite name="ProviderTransform.providerOptions" file="test/provider/transform.test.ts" line="293" tests="7" assertions="7" failures="0" skipped="0" time="0.001" hostname="benmurray-MS-7C84">
1943
- <testcase name="uses sdk key for non-gateway models" classname="ProviderTransform.providerOptions" time="0" file="test/provider/transform.test.ts" line="329" assertions="1" />
1944
- <testcase name="uses gateway model provider slug for gateway models" classname="ProviderTransform.providerOptions" time="0" file="test/provider/transform.test.ts" line="344" assertions="1" />
1945
- <testcase name="falls back to gateway key when gateway api id is unscoped" classname="ProviderTransform.providerOptions" time="0.001" file="test/provider/transform.test.ts" line="359" assertions="1" />
1946
- <testcase name="splits gateway routing options from provider-specific options" classname="ProviderTransform.providerOptions" time="0" file="test/provider/transform.test.ts" line="375" assertions="1" />
1947
- <testcase name="falls back to gateway key when model id has no provider slug" classname="ProviderTransform.providerOptions" time="0" file="test/provider/transform.test.ts" line="396" assertions="1" />
1948
- <testcase name="maps amazon slug to bedrock for provider options" classname="ProviderTransform.providerOptions" time="0" file="test/provider/transform.test.ts" line="412" assertions="1" />
1949
- <testcase name="uses groq slug for groq models" classname="ProviderTransform.providerOptions" time="0" file="test/provider/transform.test.ts" line="427" assertions="1" />
1950
- </testsuite>
1951
- <testsuite name="ProviderTransform.schema - gemini array items" file="test/provider/transform.test.ts" line="443" tests="1" assertions="2" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
1952
- <testcase name="adds missing items for array properties" classname="ProviderTransform.schema - gemini array items" time="0" file="test/provider/transform.test.ts" line="444" assertions="2" />
1953
- </testsuite>
1954
- <testsuite name="ProviderTransform.schema - gemini nested array items" file="test/provider/transform.test.ts" line="467" tests="5" assertions="7" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
1955
- <testcase name="adds type to 2D array with empty inner items" classname="ProviderTransform.schema - gemini nested array items" time="0" file="test/provider/transform.test.ts" line="475" assertions="1" />
1956
- <testcase name="adds items and type to 2D array with missing inner items" classname="ProviderTransform.schema - gemini nested array items" time="0" file="test/provider/transform.test.ts" line="495" assertions="2" />
1957
- <testcase name="handles deeply nested arrays (3D)" classname="ProviderTransform.schema - gemini nested array items" time="0" file="test/provider/transform.test.ts" line="512" assertions="2" />
1958
- <testcase name="preserves existing item types in nested arrays" classname="ProviderTransform.schema - gemini nested array items" time="0" file="test/provider/transform.test.ts" line="535" assertions="1" />
1959
- <testcase name="handles mixed nested structures with objects and arrays" classname="ProviderTransform.schema - gemini nested array items" time="0" file="test/provider/transform.test.ts" line="555" assertions="1" />
1960
- </testsuite>
1961
- <testsuite name="ProviderTransform.schema - gemini combiner nodes" file="test/provider/transform.test.ts" line="580" tests="2" assertions="5" failures="0" skipped="0" time="0.001" hostname="benmurray-MS-7C84">
1962
- <testcase name="keeps edits.items.anyOf without adding type" classname="ProviderTransform.schema - gemini combiner nodes" time="0" file="test/provider/transform.test.ts" line="600" assertions="2" />
1963
- <testcase name="does not add sibling keys to combiner nodes during sanitize" classname="ProviderTransform.schema - gemini combiner nodes" time="0.001" file="test/provider/transform.test.ts" line="638" assertions="3" />
1964
- </testsuite>
1965
- <testsuite name="ProviderTransform.schema - gemini non-object properties removal" file="test/provider/transform.test.ts" line="680" tests="5" assertions="11" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
1966
- <testcase name="removes properties from non-object types" classname="ProviderTransform.schema - gemini non-object properties removal" time="0" file="test/provider/transform.test.ts" line="688" assertions="2" />
1967
- <testcase name="removes required from non-object types" classname="ProviderTransform.schema - gemini non-object properties removal" time="0" file="test/provider/transform.test.ts" line="705" assertions="2" />
1968
- <testcase name="removes properties and required from nested non-object types" classname="ProviderTransform.schema - gemini non-object properties removal" time="0" file="test/provider/transform.test.ts" line="723" assertions="3" />
1969
- <testcase name="keeps properties and required on object types" classname="ProviderTransform.schema - gemini non-object properties removal" time="0" file="test/provider/transform.test.ts" line="747" assertions="3" />
1970
- <testcase name="does not affect non-gemini providers" classname="ProviderTransform.schema - gemini non-object properties removal" time="0" file="test/provider/transform.test.ts" line="766" assertions="1" />
1971
- </testsuite>
1972
- <testsuite name="ProviderTransform.message - DeepSeek reasoning content" file="test/provider/transform.test.ts" line="790" tests="2" assertions="5" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
1973
- <testcase name="DeepSeek with tool calls includes reasoning_content in providerOptions" classname="ProviderTransform.message - DeepSeek reasoning content" time="0" file="test/provider/transform.test.ts" line="791" assertions="3" />
1974
- <testcase name="Non-DeepSeek providers leave reasoning content unchanged" classname="ProviderTransform.message - DeepSeek reasoning content" time="0" file="test/provider/transform.test.ts" line="858" assertions="2" />
1975
- </testsuite>
1976
- <testsuite name="ProviderTransform.message - empty image handling" file="test/provider/transform.test.ts" line="914" tests="3" assertions="13" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
1977
- <testcase name="should replace empty base64 image with error text" classname="ProviderTransform.message - empty image handling" time="0" file="test/provider/transform.test.ts" line="947" assertions="4" />
1978
- <testcase name="should keep valid base64 images unchanged" classname="ProviderTransform.message - empty image handling" time="0" file="test/provider/transform.test.ts" line="969" assertions="4" />
1979
- <testcase name="should handle mixed valid and empty images" classname="ProviderTransform.message - empty image handling" time="0" file="test/provider/transform.test.ts" line="990" assertions="5" />
1980
- </testsuite>
1981
- <testsuite name="ProviderTransform.message - anthropic empty content filtering" file="test/provider/transform.test.ts" line="1017" tests="8" assertions="26" failures="0" skipped="0" time="0.001" hostname="benmurray-MS-7C84">
1982
- <testcase name="filters out messages with empty string content" classname="ProviderTransform.message - anthropic empty content filtering" time="0" file="test/provider/transform.test.ts" line="1050" assertions="3" />
1983
- <testcase name="filters out empty text parts from array content" classname="ProviderTransform.message - anthropic empty content filtering" time="0.001" file="test/provider/transform.test.ts" line="1064" assertions="3" />
1984
- <testcase name="filters out empty reasoning parts from array content" classname="ProviderTransform.message - anthropic empty content filtering" time="0" file="test/provider/transform.test.ts" line="1083" assertions="3" />
1985
- <testcase name="removes entire message when all parts are empty" classname="ProviderTransform.message - anthropic empty content filtering" time="0" file="test/provider/transform.test.ts" line="1102" assertions="3" />
1986
- <testcase name="keeps non-text/reasoning parts even if text parts are empty" classname="ProviderTransform.message - anthropic empty content filtering" time="0" file="test/provider/transform.test.ts" line="1122" assertions="3" />
1987
- <testcase name="keeps messages with valid text alongside empty parts" classname="ProviderTransform.message - anthropic empty content filtering" time="0" file="test/provider/transform.test.ts" line="1145" assertions="4" />
1988
- <testcase name="filters empty content for bedrock provider" classname="ProviderTransform.message - anthropic empty content filtering" time="0" file="test/provider/transform.test.ts" line="1165" assertions="4" />
1989
- <testcase name="does not filter for non-anthropic providers" classname="ProviderTransform.message - anthropic empty content filtering" time="0" file="test/provider/transform.test.ts" line="1197" assertions="3" />
1990
- </testsuite>
1991
- <testsuite name="ProviderTransform.message - strip openai metadata when store=false" file="test/provider/transform.test.ts" line="1224" tests="8" assertions="19" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
1992
- <testcase name="preserves itemId and reasoningEncryptedContent when store=false" classname="ProviderTransform.message - strip openai metadata when store=false" time="0" file="test/provider/transform.test.ts" line="1250" assertions="3" />
1993
- <testcase name="preserves itemId and reasoningEncryptedContent when store=false even when not openai" classname="ProviderTransform.message - strip openai metadata when store=false" time="0" file="test/provider/transform.test.ts" line="1285" assertions="3" />
1994
- <testcase name="preserves other openai options including itemId" classname="ProviderTransform.message - strip openai metadata when store=false" time="0" file="test/provider/transform.test.ts" line="1324" assertions="2" />
1995
- <testcase name="preserves metadata for openai package when store is true" classname="ProviderTransform.message - strip openai metadata when store=false" time="0" file="test/provider/transform.test.ts" line="1349" assertions="1" />
1996
- <testcase name="preserves metadata for non-openai packages when store is false" classname="ProviderTransform.message - strip openai metadata when store=false" time="0" file="test/provider/transform.test.ts" line="1373" assertions="1" />
1997
- <testcase name="preserves metadata using providerID key when store is false" classname="ProviderTransform.message - strip openai metadata when store=false" time="0" file="test/provider/transform.test.ts" line="1406" assertions="2" />
1998
- <testcase name="preserves itemId across all providerOptions keys" classname="ProviderTransform.message - strip openai metadata when store=false" time="0" file="test/provider/transform.test.ts" line="1440" assertions="6" />
1999
- <testcase name="does not strip metadata for non-openai packages when store is not false" classname="ProviderTransform.message - strip openai metadata when store=false" time="0" file="test/provider/transform.test.ts" line="1482" assertions="1" />
2000
- </testsuite>
2001
- <testsuite name="ProviderTransform.message - providerOptions key remapping" file="test/provider/transform.test.ts" line="1515" tests="4" assertions="10" failures="0" skipped="0" time="0.001" hostname="benmurray-MS-7C84">
2002
- <testcase name="azure keeps &apos;azure&apos; key and does not remap to &apos;openai&apos;" classname="ProviderTransform.message - providerOptions key remapping" time="0" file="test/provider/transform.test.ts" line="1542" assertions="2" />
2003
- <testcase name="azure cognitive services remaps providerID to &apos;azure&apos; key" classname="ProviderTransform.message - providerOptions key remapping" time="0" file="test/provider/transform.test.ts" line="1560" assertions="4" />
2004
- <testcase name="copilot remaps providerID to &apos;copilot&apos; key" classname="ProviderTransform.message - providerOptions key remapping" time="0" file="test/provider/transform.test.ts" line="1589" assertions="2" />
2005
- <testcase name="bedrock remaps providerID to &apos;bedrock&apos; key" classname="ProviderTransform.message - providerOptions key remapping" time="0.001" file="test/provider/transform.test.ts" line="1607" assertions="2" />
2006
- </testsuite>
2007
- <testsuite name="ProviderTransform.message - claude w/bedrock custom inference profile" file="test/provider/transform.test.ts" line="1626" tests="1" assertions="1" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
2008
- <testcase name="adds cachePoint" classname="ProviderTransform.message - claude w/bedrock custom inference profile" time="0" file="test/provider/transform.test.ts" line="1627" assertions="1" />
2009
- </testsuite>
2010
- <testsuite name="ProviderTransform.message - bedrock caching with non-bedrock providerID" file="test/provider/transform.test.ts" line="1661" tests="1" assertions="2" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
2011
- <testcase name="applies cache options at message level when npm package is amazon-bedrock" classname="ProviderTransform.message - bedrock caching with non-bedrock providerID" time="0" file="test/provider/transform.test.ts" line="1662" assertions="2" />
2012
- </testsuite>
2013
- <testsuite name="ProviderTransform.message - cache control on gateway" file="test/provider/transform.test.ts" line="1698" tests="3" assertions="4" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
2014
- <testcase name="gateway does not set cache control for anthropic models" classname="ProviderTransform.message - cache control on gateway" time="0" file="test/provider/transform.test.ts" line="1726" assertions="2" />
2015
- <testcase name="non-gateway anthropic keeps existing cache control behavior" classname="ProviderTransform.message - cache control on gateway" time="0" file="test/provider/transform.test.ts" line="1745" assertions="1" />
2016
- <testcase name="google-vertex-anthropic applies cache control" classname="ProviderTransform.message - cache control on gateway" time="0" file="test/provider/transform.test.ts" line="1796" assertions="1" />
2017
- </testsuite>
2018
- <testsuite name="ProviderTransform.variants" file="test/provider/transform.test.ts" line="1849" tests="54" assertions="100" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
2019
- <testcase name="returns empty object when model has no reasoning capabilities" classname="ProviderTransform.variants" time="0" file="test/provider/transform.test.ts" line="1884" assertions="1" />
2020
- <testcase name="deepseek returns empty object" classname="ProviderTransform.variants" time="0" file="test/provider/transform.test.ts" line="1892" assertions="1" />
2021
- <testcase name="minimax returns empty object" classname="ProviderTransform.variants" time="0" file="test/provider/transform.test.ts" line="1906" assertions="1" />
2022
- <testcase name="glm returns empty object" classname="ProviderTransform.variants" time="0" file="test/provider/transform.test.ts" line="1920" assertions="1" />
2023
- <testcase name="mistral returns empty object" classname="ProviderTransform.variants" time="0" file="test/provider/transform.test.ts" line="1934" assertions="1" />
2024
- <testsuite name="@openrouter/ai-sdk-provider" file="test/provider/transform.test.ts" line="1948" tests="5" assertions="9" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
2025
- <testcase name="returns empty object for non-qualifying models" classname="@openrouter/ai-sdk-provider &amp;gt; ProviderTransform.variants" time="0" file="test/provider/transform.test.ts" line="1949" assertions="1" />
2026
- <testcase name="gpt models return OPENAI_EFFORTS with reasoning" classname="@openrouter/ai-sdk-provider &amp;gt; ProviderTransform.variants" time="0" file="test/provider/transform.test.ts" line="1963" assertions="3" />
2027
- <testcase name="gemini-3 returns OPENAI_EFFORTS with reasoning" classname="@openrouter/ai-sdk-provider &amp;gt; ProviderTransform.variants" time="0" file="test/provider/transform.test.ts" line="1979" assertions="1" />
2028
- <testcase name="grok-4 returns empty object" classname="@openrouter/ai-sdk-provider &amp;gt; ProviderTransform.variants" time="0" file="test/provider/transform.test.ts" line="1993" assertions="1" />
2029
- <testcase name="grok-3-mini returns low and high with reasoning" classname="@openrouter/ai-sdk-provider &amp;gt; ProviderTransform.variants" time="0" file="test/provider/transform.test.ts" line="2007" assertions="3" />
2030
- </testsuite>
2031
- <testsuite name="@ai-sdk/gateway" file="test/provider/transform.test.ts" line="2024" tests="5" assertions="12" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
2032
- <testcase name="anthropic sonnet 4.6 models return adaptive thinking options" classname="@ai-sdk/gateway &amp;gt; ProviderTransform.variants" time="0" file="test/provider/transform.test.ts" line="2025" assertions="2" />
2033
- <testcase name="anthropic sonnet 4.6 dot-format models return adaptive thinking options" classname="@ai-sdk/gateway &amp;gt; ProviderTransform.variants" time="0" file="test/provider/transform.test.ts" line="2045" assertions="2" />
2034
- <testcase name="anthropic opus 4.6 dot-format models return adaptive thinking options" classname="@ai-sdk/gateway &amp;gt; ProviderTransform.variants" time="0" file="test/provider/transform.test.ts" line="2065" assertions="2" />
2035
- <testcase name="anthropic models return anthropic thinking options" classname="@ai-sdk/gateway &amp;gt; ProviderTransform.variants" time="0" file="test/provider/transform.test.ts" line="2085" assertions="3" />
2036
- <testcase name="returns OPENAI_EFFORTS with reasoningEffort" classname="@ai-sdk/gateway &amp;gt; ProviderTransform.variants" time="0" file="test/provider/transform.test.ts" line="2111" assertions="3" />
2037
- </testsuite>
2038
- <testsuite name="@ai-sdk/github-copilot" file="test/provider/transform.test.ts" line="2128" tests="8" assertions="10" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
2039
- <testcase name="standard models return low, medium, high" classname="@ai-sdk/github-copilot &amp;gt; ProviderTransform.variants" time="0" file="test/provider/transform.test.ts" line="2129" assertions="2" />
2040
- <testcase name="gpt-5.1-codex-max includes xhigh" classname="@ai-sdk/github-copilot &amp;gt; ProviderTransform.variants" time="0" file="test/provider/transform.test.ts" line="2148" assertions="1" />
2041
- <testcase name="gpt-5.1-codex-mini does not include xhigh" classname="@ai-sdk/github-copilot &amp;gt; ProviderTransform.variants" time="0" file="test/provider/transform.test.ts" line="2162" assertions="1" />
2042
- <testcase name="gpt-5.1-codex does not include xhigh" classname="@ai-sdk/github-copilot &amp;gt; ProviderTransform.variants" time="0" file="test/provider/transform.test.ts" line="2176" assertions="1" />
2043
- <testcase name="gpt-5.2 includes xhigh" classname="@ai-sdk/github-copilot &amp;gt; ProviderTransform.variants" time="0" file="test/provider/transform.test.ts" line="2190" assertions="2" />
2044
- <testcase name="gpt-5.2-codex includes xhigh" classname="@ai-sdk/github-copilot &amp;gt; ProviderTransform.variants" time="0" file="test/provider/transform.test.ts" line="2209" assertions="1" />
2045
- <testcase name="gpt-5.3-codex includes xhigh" classname="@ai-sdk/github-copilot &amp;gt; ProviderTransform.variants" time="0" file="test/provider/transform.test.ts" line="2223" assertions="1" />
2046
- <testcase name="gpt-5.4 includes xhigh" classname="@ai-sdk/github-copilot &amp;gt; ProviderTransform.variants" time="0" file="test/provider/transform.test.ts" line="2237" assertions="1" />
2047
- </testsuite>
2048
- <testsuite name="@ai-sdk/cerebras" file="test/provider/transform.test.ts" line="2253" tests="1" assertions="3" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
2049
- <testcase name="returns WIDELY_SUPPORTED_EFFORTS with reasoningEffort" classname="@ai-sdk/cerebras &amp;gt; ProviderTransform.variants" time="0" file="test/provider/transform.test.ts" line="2254" assertions="3" />
2050
- </testsuite>
2051
- <testsuite name="@ai-sdk/togetherai" file="test/provider/transform.test.ts" line="2271" tests="1" assertions="3" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
2052
- <testcase name="returns WIDELY_SUPPORTED_EFFORTS with reasoningEffort" classname="@ai-sdk/togetherai &amp;gt; ProviderTransform.variants" time="0" file="test/provider/transform.test.ts" line="2272" assertions="3" />
2053
- </testsuite>
2054
- <testsuite name="@ai-sdk/xai" file="test/provider/transform.test.ts" line="2289" tests="2" assertions="4" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
2055
- <testcase name="grok-3 returns empty object" classname="@ai-sdk/xai &amp;gt; ProviderTransform.variants" time="0" file="test/provider/transform.test.ts" line="2290" assertions="1" />
2056
- <testcase name="grok-3-mini returns low and high with reasoningEffort" classname="@ai-sdk/xai &amp;gt; ProviderTransform.variants" time="0" file="test/provider/transform.test.ts" line="2304" assertions="3" />
2057
- </testsuite>
2058
- <testsuite name="@ai-sdk/deepinfra" file="test/provider/transform.test.ts" line="2321" tests="1" assertions="3" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
2059
- <testcase name="returns WIDELY_SUPPORTED_EFFORTS with reasoningEffort" classname="@ai-sdk/deepinfra &amp;gt; ProviderTransform.variants" time="0" file="test/provider/transform.test.ts" line="2322" assertions="3" />
2060
- </testsuite>
2061
- <testsuite name="@ai-sdk/openai-compatible" file="test/provider/transform.test.ts" line="2339" tests="1" assertions="3" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
2062
- <testcase name="returns WIDELY_SUPPORTED_EFFORTS with reasoningEffort" classname="@ai-sdk/openai-compatible &amp;gt; ProviderTransform.variants" time="0" file="test/provider/transform.test.ts" line="2340" assertions="3" />
2063
- </testsuite>
2064
- <testsuite name="@ai-sdk/azure" file="test/provider/transform.test.ts" line="2357" tests="3" assertions="4" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
2065
- <testcase name="o1-mini returns empty object" classname="@ai-sdk/azure &amp;gt; ProviderTransform.variants" time="0" file="test/provider/transform.test.ts" line="2358" assertions="1" />
2066
- <testcase name="standard azure models return custom efforts with reasoningSummary" classname="@ai-sdk/azure &amp;gt; ProviderTransform.variants" time="0" file="test/provider/transform.test.ts" line="2372" assertions="2" />
2067
- <testcase name="gpt-5 adds minimal effort" classname="@ai-sdk/azure &amp;gt; ProviderTransform.variants" time="0" file="test/provider/transform.test.ts" line="2391" assertions="1" />
2068
- </testsuite>
2069
- <testsuite name="@ai-sdk/openai" file="test/provider/transform.test.ts" line="2406" tests="4" assertions="5" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
2070
- <testcase name="gpt-5-pro returns empty object" classname="@ai-sdk/openai &amp;gt; ProviderTransform.variants" time="0" file="test/provider/transform.test.ts" line="2407" assertions="1" />
2071
- <testcase name="standard openai models return custom efforts with reasoningSummary" classname="@ai-sdk/openai &amp;gt; ProviderTransform.variants" time="0" file="test/provider/transform.test.ts" line="2421" assertions="2" />
2072
- <testcase name="models after 2025-11-13 include &apos;none&apos; effort" classname="@ai-sdk/openai &amp;gt; ProviderTransform.variants" time="0" file="test/provider/transform.test.ts" line="2441" assertions="1" />
2073
- <testcase name="models after 2025-12-04 include &apos;xhigh&apos; effort" classname="@ai-sdk/openai &amp;gt; ProviderTransform.variants" time="0" file="test/provider/transform.test.ts" line="2456" assertions="1" />
2074
- </testsuite>
2075
- <testsuite name="@ai-sdk/anthropic" file="test/provider/transform.test.ts" line="2472" tests="2" assertions="5" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
2076
- <testcase name="sonnet 4.6 returns adaptive thinking options" classname="@ai-sdk/anthropic &amp;gt; ProviderTransform.variants" time="0" file="test/provider/transform.test.ts" line="2473" assertions="2" />
2077
- <testcase name="returns high and max with thinking config" classname="@ai-sdk/anthropic &amp;gt; ProviderTransform.variants" time="0" file="test/provider/transform.test.ts" line="2493" assertions="3" />
2078
- </testsuite>
2079
- <testsuite name="@ai-sdk/amazon-bedrock" file="test/provider/transform.test.ts" line="2520" tests="2" assertions="4" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
2080
- <testcase name="anthropic sonnet 4.6 returns adaptive reasoning options" classname="@ai-sdk/amazon-bedrock &amp;gt; ProviderTransform.variants" time="0" file="test/provider/transform.test.ts" line="2521" assertions="2" />
2081
- <testcase name="returns WIDELY_SUPPORTED_EFFORTS with reasoningConfig" classname="@ai-sdk/amazon-bedrock &amp;gt; ProviderTransform.variants" time="0" file="test/provider/transform.test.ts" line="2541" assertions="2" />
2082
- </testsuite>
2083
- <testsuite name="@ai-sdk/google" file="test/provider/transform.test.ts" line="2562" tests="2" assertions="6" failures="0" skipped="0" time="0.001" hostname="benmurray-MS-7C84">
2084
- <testcase name="gemini-2.5 returns high and max with thinkingConfig and thinkingBudget" classname="@ai-sdk/google &amp;gt; ProviderTransform.variants" time="0" file="test/provider/transform.test.ts" line="2563" assertions="3" />
2085
- <testcase name="other gemini models return low and high with thinkingLevel" classname="@ai-sdk/google &amp;gt; ProviderTransform.variants" time="0.001" file="test/provider/transform.test.ts" line="2589" assertions="3" />
2086
- </testsuite>
2087
- <testsuite name="@ai-sdk/google-vertex" file="test/provider/transform.test.ts" line="2616" tests="2" assertions="2" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
2088
- <testcase name="gemini-2.5 returns high and max with thinkingConfig and thinkingBudget" classname="@ai-sdk/google-vertex &amp;gt; ProviderTransform.variants" time="0" file="test/provider/transform.test.ts" line="2617" assertions="1" />
2089
- <testcase name="other vertex models return low and high with thinkingLevel" classname="@ai-sdk/google-vertex &amp;gt; ProviderTransform.variants" time="0" file="test/provider/transform.test.ts" line="2631" assertions="1" />
2090
- </testsuite>
2091
- <testsuite name="@ai-sdk/cohere" file="test/provider/transform.test.ts" line="2646" tests="1" assertions="1" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
2092
- <testcase name="returns empty object" classname="@ai-sdk/cohere &amp;gt; ProviderTransform.variants" time="0" file="test/provider/transform.test.ts" line="2647" assertions="1" />
2093
- </testsuite>
2094
- <testsuite name="@ai-sdk/groq" file="test/provider/transform.test.ts" line="2662" tests="1" assertions="3" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
2095
- <testcase name="returns none and WIDELY_SUPPORTED_EFFORTS with thinkingLevel" classname="@ai-sdk/groq &amp;gt; ProviderTransform.variants" time="0" file="test/provider/transform.test.ts" line="2663" assertions="3" />
2096
- </testsuite>
2097
- <testsuite name="@ai-sdk/perplexity" file="test/provider/transform.test.ts" line="2684" tests="1" assertions="1" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
2098
- <testcase name="returns empty object" classname="@ai-sdk/perplexity &amp;gt; ProviderTransform.variants" time="0" file="test/provider/transform.test.ts" line="2685" assertions="1" />
2099
- </testsuite>
2100
- <testsuite name="@jerome-benoit/sap-ai-provider-v2" file="test/provider/transform.test.ts" line="2700" tests="7" assertions="17" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
2101
- <testcase name="anthropic models return thinking variants" classname="@jerome-benoit/sap-ai-provider-v2 &amp;gt; ProviderTransform.variants" time="0" file="test/provider/transform.test.ts" line="2701" assertions="3" />
2102
- <testcase name="anthropic 4.6 models return adaptive thinking variants" classname="@jerome-benoit/sap-ai-provider-v2 &amp;gt; ProviderTransform.variants" time="0" file="test/provider/transform.test.ts" line="2727" assertions="3" />
2103
- <testcase name="gemini 2.5 models return thinkingConfig variants" classname="@jerome-benoit/sap-ai-provider-v2 &amp;gt; ProviderTransform.variants" time="0" file="test/provider/transform.test.ts" line="2753" assertions="3" />
2104
- <testcase name="gpt models return reasoningEffort variants" classname="@jerome-benoit/sap-ai-provider-v2 &amp;gt; ProviderTransform.variants" time="0" file="test/provider/transform.test.ts" line="2779" assertions="3" />
2105
- <testcase name="o-series models return reasoningEffort variants" classname="@jerome-benoit/sap-ai-provider-v2 &amp;gt; ProviderTransform.variants" time="0" file="test/provider/transform.test.ts" line="2795" assertions="3" />
2106
- <testcase name="sonar models return empty object" classname="@jerome-benoit/sap-ai-provider-v2 &amp;gt; ProviderTransform.variants" time="0" file="test/provider/transform.test.ts" line="2811" assertions="1" />
2107
- <testcase name="mistral models return empty object" classname="@jerome-benoit/sap-ai-provider-v2 &amp;gt; ProviderTransform.variants" time="0" file="test/provider/transform.test.ts" line="2825" assertions="1" />
2108
- </testsuite>
2109
- </testsuite>
2110
- </testsuite>
2111
- <testsuite name="test/config/markdown.test.ts" file="test/config/markdown.test.ts" tests="37" assertions="55" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
2112
- <testsuite name="ConfigMarkdown: normal template" file="test/config/markdown.test.ts" line="4" tests="15" assertions="15" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
2113
- <testcase name="should extract exactly 12 file references" classname="ConfigMarkdown: normal template" time="0" file="test/config/markdown.test.ts" line="28" assertions="1" />
2114
- <testcase name="should extract valid/path/to/a/file" classname="ConfigMarkdown: normal template" time="0" file="test/config/markdown.test.ts" line="32" assertions="1" />
2115
- <testcase name="should extract another-valid/path/to/a/file" classname="ConfigMarkdown: normal template" time="0" file="test/config/markdown.test.ts" line="36" assertions="1" />
2116
- <testcase name="should extract paths ignoring comma after" classname="ConfigMarkdown: normal template" time="0" file="test/config/markdown.test.ts" line="40" assertions="1" />
2117
- <testcase name="should extract a path with a file extension and comma after" classname="ConfigMarkdown: normal template" time="0" file="test/config/markdown.test.ts" line="44" assertions="1" />
2118
- <testcase name="should extract a path with multiple dots and comma after" classname="ConfigMarkdown: normal template" time="0" file="test/config/markdown.test.ts" line="48" assertions="1" />
2119
- <testcase name="should extract hidden directory" classname="ConfigMarkdown: normal template" time="0" file="test/config/markdown.test.ts" line="52" assertions="1" />
2120
- <testcase name="should extract hidden file" classname="ConfigMarkdown: normal template" time="0" file="test/config/markdown.test.ts" line="56" assertions="1" />
2121
- <testcase name="should extract a file ignoring period at end of sentence" classname="ConfigMarkdown: normal template" time="0" file="test/config/markdown.test.ts" line="60" assertions="1" />
2122
- <testcase name="should extract an absolute path with an extension" classname="ConfigMarkdown: normal template" time="0" file="test/config/markdown.test.ts" line="64" assertions="1" />
2123
- <testcase name="should extract an absolute path without an extension" classname="ConfigMarkdown: normal template" time="0" file="test/config/markdown.test.ts" line="68" assertions="1" />
2124
- <testcase name="should extract an absolute path in home directory" classname="ConfigMarkdown: normal template" time="0" file="test/config/markdown.test.ts" line="72" assertions="1" />
2125
- <testcase name="should extract an absolute path under home directory" classname="ConfigMarkdown: normal template" time="0" file="test/config/markdown.test.ts" line="76" assertions="1" />
2126
- <testcase name="should not match when preceded by backtick" classname="ConfigMarkdown: normal template" time="0" file="test/config/markdown.test.ts" line="80" assertions="1" />
2127
- <testcase name="should not match email addresses" classname="ConfigMarkdown: normal template" time="0" file="test/config/markdown.test.ts" line="86" assertions="1" />
2128
- </testsuite>
2129
- <testsuite name="ConfigMarkdown: frontmatter parsing" file="test/config/markdown.test.ts" line="93" tests="18" assertions="23" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
2130
- <testcase name="should parse without throwing" classname="ConfigMarkdown: frontmatter parsing" time="0" file="test/config/markdown.test.ts" line="96" assertions="3" />
2131
- <testcase name="should extract description field" classname="ConfigMarkdown: frontmatter parsing" time="0" file="test/config/markdown.test.ts" line="102" assertions="1" />
2132
- <testcase name="should extract occupation field with colon in value" classname="ConfigMarkdown: frontmatter parsing" time="0" file="test/config/markdown.test.ts" line="106" assertions="1" />
2133
- <testcase name="should extract title field with single quotes" classname="ConfigMarkdown: frontmatter parsing" time="0" file="test/config/markdown.test.ts" line="110" assertions="1" />
2134
- <testcase name="should extract name field with embedded quotes" classname="ConfigMarkdown: frontmatter parsing" time="0" file="test/config/markdown.test.ts" line="114" assertions="1" />
2135
- <testcase name="should extract family field with embedded single quotes" classname="ConfigMarkdown: frontmatter parsing" time="0" file="test/config/markdown.test.ts" line="118" assertions="1" />
2136
- <testcase name="should extract multiline summary field" classname="ConfigMarkdown: frontmatter parsing" time="0" file="test/config/markdown.test.ts" line="122" assertions="1" />
2137
- <testcase name="should not include commented fields in data" classname="ConfigMarkdown: frontmatter parsing" time="0" file="test/config/markdown.test.ts" line="126" assertions="1" />
2138
- <testcase name="should extract URL with port" classname="ConfigMarkdown: frontmatter parsing" time="0" file="test/config/markdown.test.ts" line="130" assertions="1" />
2139
- <testcase name="should extract time with colons" classname="ConfigMarkdown: frontmatter parsing" time="0" file="test/config/markdown.test.ts" line="134" assertions="1" />
2140
- <testcase name="should extract value with multiple colons" classname="ConfigMarkdown: frontmatter parsing" time="0" file="test/config/markdown.test.ts" line="138" assertions="1" />
2141
- <testcase name="should preserve already double-quoted values with colons" classname="ConfigMarkdown: frontmatter parsing" time="0" file="test/config/markdown.test.ts" line="142" assertions="1" />
2142
- <testcase name="should preserve already single-quoted values with colons" classname="ConfigMarkdown: frontmatter parsing" time="0" file="test/config/markdown.test.ts" line="146" assertions="1" />
2143
- <testcase name="should extract value with quotes and colons mixed" classname="ConfigMarkdown: frontmatter parsing" time="0" file="test/config/markdown.test.ts" line="150" assertions="1" />
2144
- <testcase name="should handle empty values" classname="ConfigMarkdown: frontmatter parsing" time="0" file="test/config/markdown.test.ts" line="154" assertions="1" />
2145
- <testcase name="should handle dollar sign replacement patterns literally" classname="ConfigMarkdown: frontmatter parsing" time="0" file="test/config/markdown.test.ts" line="158" assertions="1" />
2146
- <testcase name="should not parse fake yaml from content" classname="ConfigMarkdown: frontmatter parsing" time="0" file="test/config/markdown.test.ts" line="162" assertions="2" />
2147
- <testcase name="should extract content after frontmatter without modification" classname="ConfigMarkdown: frontmatter parsing" time="0" file="test/config/markdown.test.ts" line="167" assertions="3" />
2148
- </testsuite>
2149
- <testsuite name="ConfigMarkdown: frontmatter parsing w/ empty frontmatter" file="test/config/markdown.test.ts" line="174" tests="1" assertions="3" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
2150
- <testcase name="should parse without throwing" classname="ConfigMarkdown: frontmatter parsing w/ empty frontmatter" time="0" file="test/config/markdown.test.ts" line="177" assertions="3" />
2151
- </testsuite>
2152
- <testsuite name="ConfigMarkdown: frontmatter parsing w/ no frontmatter" file="test/config/markdown.test.ts" line="184" tests="1" assertions="3" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
2153
- <testcase name="should parse without throwing" classname="ConfigMarkdown: frontmatter parsing w/ no frontmatter" time="0" file="test/config/markdown.test.ts" line="187" assertions="3" />
2154
- </testsuite>
2155
- <testsuite name="ConfigMarkdown: frontmatter parsing w/ Markdown header" file="test/config/markdown.test.ts" line="194" tests="1" assertions="3" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
2156
- <testcase name="should parse and match" classname="ConfigMarkdown: frontmatter parsing w/ Markdown header" time="0" file="test/config/markdown.test.ts" line="197" assertions="3" />
2157
- </testsuite>
2158
- <testsuite name="ConfigMarkdown: frontmatter has weird model id" file="test/config/markdown.test.ts" line="214" tests="1" assertions="8" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
2159
- <testcase name="should parse and match" classname="ConfigMarkdown: frontmatter has weird model id" time="0" file="test/config/markdown.test.ts" line="217" assertions="8" />
2160
- </testsuite>
2161
- </testsuite>
2162
- <testsuite name="test/config/config.test.ts" file="test/config/config.test.ts" tests="75" assertions="131" failures="0" skipped="0" time="0.606" hostname="benmurray-MS-7C84">
2163
- <testcase name="loads config with defaults when no files exist" classname="" time="0.004" file="test/config/config.test.ts" line="84" assertions="1" />
2164
- <testcase name="loads JSON config file" classname="" time="0.003" file="test/config/config.test.ts" line="95" assertions="2" />
2165
- <testcase name="loads project config from Git Bash and MSYS2 paths on Windows" classname="" time="0.003" file="test/config/config.test.ts" line="115" assertions="0" />
2166
- <testcase name="loads project config from Cygwin paths on Windows" classname="" time="0" file="test/config/config.test.ts" line="124" assertions="0" />
2167
- <testcase name="ignores legacy tui keys in epochcli config" classname="" time="0.003" file="test/config/config.test.ts" line="132" assertions="3" />
2168
- <testcase name="loads JSONC config file" classname="" time="0.003" file="test/config/config.test.ts" line="154" assertions="2" />
2169
- <testcase name="jsonc overrides json in the same directory" classname="" time="0.003" file="test/config/config.test.ts" line="178" assertions="2" />
2170
- <testcase name="handles environment variable substitution" classname="" time="0.002" file="test/config/config.test.ts" line="206" assertions="1" />
2171
- <testcase name="preserves env variables when adding $schema to config" classname="" time="0.002" file="test/config/config.test.ts" line="235" assertions="4" />
2172
- <testcase name="resolves env templates in account config with account token" classname="" time="0.008" file="test/config/config.test.ts" line="273" assertions="1" />
2173
- <testcase name="handles file inclusion substitution" classname="" time="0.002" file="test/config/config.test.ts" line="335" assertions="1" />
2174
- <testcase name="handles file inclusion with replacement tokens" classname="" time="0.002" file="test/config/config.test.ts" line="354" assertions="1" />
2175
- <testcase name="validates config schema and throws on invalid fields" classname="" time="0.002" file="test/config/config.test.ts" line="373" assertions="1" />
2176
- <testcase name="throws error for invalid JSON" classname="" time="0.001" file="test/config/config.test.ts" line="391" assertions="1" />
2177
- <testcase name="handles agent configuration" classname="" time="0.006" file="test/config/config.test.ts" line="405" assertions="1" />
2178
- <testcase name="treats agent variant as model-scoped setting (not provider option)" classname="" time="0.003" file="test/config/config.test.ts" line="435" assertions="3" />
2179
- <testcase name="handles command configuration" classname="" time="0.002" file="test/config/config.test.ts" line="466" assertions="1" />
2180
- <testcase name="migrates autoshare to share field" classname="" time="0.002" file="test/config/config.test.ts" line="494" assertions="2" />
2181
- <testcase name="migrates mode field to agent field" classname="" time="0.002" file="test/config/config.test.ts" line="516" assertions="1" />
2182
- <testcase name="loads config from .epochcli directory" classname="" time="0.008" file="test/config/config.test.ts" line="548" assertions="1" />
2183
- <testcase name="loads agents from .epochcli/agents (plural)" classname="" time="0.005" file="test/config/config.test.ts" line="580" assertions="2" />
2184
- <testcase name="loads commands from .epochcli/command (singular)" classname="" time="0.004" file="test/config/config.test.ts" line="631" assertions="2" />
2185
- <testcase name="loads commands from .epochcli/commands (plural)" classname="" time="0.007" file="test/config/config.test.ts" line="676" assertions="2" />
2186
- <testcase name="updates config and writes to file" classname="" time="0.002" file="test/config/config.test.ts" line="721" assertions="1" />
2187
- <testcase name="gets config directories" classname="" time="0.002" file="test/config/config.test.ts" line="735" assertions="1" />
2188
- <testcase name="does not try to install dependencies in read-only EPOCHCLI_CONFIG_DIR" classname="" time="0.003" file="test/config/config.test.ts" line="746" assertions="0" />
2189
- <testcase name="installs dependencies in writable EPOCHCLI_CONFIG_DIR" classname="" time="0.264004" file="test/config/config.test.ts" line="779" assertions="3" />
2190
- <testcase name="dedupes concurrent config dependency installs for the same dir" classname="" time="0.100001" file="test/config/config.test.ts" line="820" assertions="3" />
2191
- <testcase name="serializes config dependency installs across dirs" classname="" time="0" file="test/config/config.test.ts" line="883" assertions="0" />
2192
- <testcase name="resolves scoped npm plugins in config" classname="" time="0.004" file="test/config/config.test.ts" line="943" assertions="1" />
2193
- <testcase name="merges plugin arrays from global and local configs" classname="" time="0.008" file="test/config/config.test.ts" line="987" assertions="4" />
2194
- <testcase name="does not error when only custom agent is a subagent" classname="" time="0.003" file="test/config/config.test.ts" line="1033" assertions="1" />
2195
- <testcase name="merges instructions arrays from global and local configs" classname="" time="0.009" file="test/config/config.test.ts" line="1065" assertions="4" />
2196
- <testcase name="deduplicates duplicate instructions from global and local configs" classname="" time="0.004" file="test/config/config.test.ts" line="1104" assertions="5" />
2197
- <testcase name="deduplicates duplicate plugins from global and local configs" classname="" time="0.004" file="test/config/config.test.ts" line="1146" assertions="5" />
2198
- <testcase name="keeps plugin origins aligned with merged plugin list" classname="" time="0.008" file="test/config/config.test.ts" line="1198" assertions="6" />
2199
- <testcase name="migrates legacy tools config to permissions - allow" classname="" time="0.003" file="test/config/config.test.ts" line="1245" assertions="1" />
2200
- <testcase name="migrates legacy tools config to permissions - deny" classname="" time="0.002" file="test/config/config.test.ts" line="1276" assertions="1" />
2201
- <testcase name="migrates legacy write tool to edit permission" classname="" time="0.002" file="test/config/config.test.ts" line="1307" assertions="1" />
2202
- <testcase name="managed settings override user settings" classname="" time="0.003" file="test/config/config.test.ts" line="1339" assertions="3" />
2203
- <testcase name="managed settings override project settings" classname="" time="0.006" file="test/config/config.test.ts" line="1368" assertions="2" />
2204
- <testcase name="missing managed settings file is not an error" classname="" time="0.002" file="test/config/config.test.ts" line="1395" assertions="1" />
2205
- <testcase name="migrates legacy edit tool to edit permission" classname="" time="0.002" file="test/config/config.test.ts" line="1414" assertions="1" />
2206
- <testcase name="migrates legacy patch tool to edit permission" classname="" time="0.002" file="test/config/config.test.ts" line="1443" assertions="1" />
2207
- <testcase name="migrates legacy multiedit tool to edit permission" classname="" time="0.002" file="test/config/config.test.ts" line="1472" assertions="1" />
2208
- <testcase name="migrates mixed legacy tools config" classname="" time="0.005" file="test/config/config.test.ts" line="1501" assertions="1" />
2209
- <testcase name="merges legacy tools with existing permission config" classname="" time="0.003" file="test/config/config.test.ts" line="1536" assertions="1" />
2210
- <testcase name="permission config preserves key order" classname="" time="0.002" file="test/config/config.test.ts" line="1569" assertions="1" />
2211
- <testcase name="project config can override MCP server enabled status" classname="" time="0.002" file="test/config/config.test.ts" line="1614" assertions="2" />
2212
- <testcase name="MCP config deep merges preserving base config properties" classname="" time="0.002" file="test/config/config.test.ts" line="1672" assertions="1" />
2213
- <testcase name="local .epochcli config can override MCP from project config" classname="" time="0.003" file="test/config/config.test.ts" line="1724" assertions="1" />
2214
- <testcase name="project config overrides remote well-known config" classname="" time="0.039001" file="test/config/config.test.ts" line="1768" assertions="2" />
2215
- <testcase name="wellknown URL with trailing slash is normalized" classname="" time="0.036001" file="test/config/config.test.ts" line="1823" assertions="1" />
2216
- <testsuite name="resolvePluginSpec" file="test/config/config.test.ts" line="1874" tests="5" assertions="5" failures="0" skipped="0" time="0.003" hostname="benmurray-MS-7C84">
2217
- <testcase name="keeps package specs unchanged" classname="resolvePluginSpec" time="0" file="test/config/config.test.ts" line="1875" assertions="2" />
2218
- <testcase name="resolves windows-style relative plugin directory specs" classname="resolvePluginSpec" time="0" file="test/config/config.test.ts" line="1882" assertions="0" />
2219
- <testcase name="resolves relative file plugin paths to file urls" classname="resolvePluginSpec" time="0.001" file="test/config/config.test.ts" line="1898" assertions="1" />
2220
- <testcase name="resolves plugin directory paths to directory urls" classname="resolvePluginSpec" time="0.001" file="test/config/config.test.ts" line="1910" assertions="1" />
2221
- <testcase name="resolves plugin directories without package.json to index.ts" classname="resolvePluginSpec" time="0.001" file="test/config/config.test.ts" line="1929" assertions="1" />
2222
- </testsuite>
2223
- <testsuite name="deduplicatePluginOrigins" file="test/config/config.test.ts" line="1944" tests="5" assertions="10" failures="0" skipped="0" time="0.004" hostname="benmurray-MS-7C84">
2224
- <testcase name="removes duplicates keeping higher priority (later entries)" classname="deduplicatePluginOrigins" time="0" file="test/config/config.test.ts" line="1954" assertions="5" />
2225
- <testcase name="keeps path plugins separate from package plugins" classname="deduplicatePluginOrigins" time="0" file="test/config/config.test.ts" line="1966" assertions="1" />
2226
- <testcase name="deduplicates direct path plugins by exact spec" classname="deduplicatePluginOrigins" time="0" file="test/config/config.test.ts" line="1974" assertions="1" />
2227
- <testcase name="preserves order of remaining plugins" classname="deduplicatePluginOrigins" time="0" file="test/config/config.test.ts" line="1982" assertions="1" />
2228
- <testcase name="loads auto-discovered local plugins as file urls" classname="deduplicatePluginOrigins" time="0.004" file="test/config/config.test.ts" line="1990" assertions="2" />
2229
- </testsuite>
2230
- <testsuite name="EPOCHCLI_DISABLE_PROJECT_CONFIG" file="test/config/config.test.ts" line="2023" tests="5" assertions="7" failures="0" skipped="0" time="0.017" hostname="benmurray-MS-7C84">
2231
- <testcase name="skips project config files when flag is set" classname="EPOCHCLI_DISABLE_PROJECT_CONFIG" time="0.007" file="test/config/config.test.ts" line="2024" assertions="2" />
2232
- <testcase name="skips project .epochcli/ directories when flag is set" classname="EPOCHCLI_DISABLE_PROJECT_CONFIG" time="0.002" file="test/config/config.test.ts" line="2060" assertions="1" />
2233
- <testcase name="still loads global config when flag is set" classname="EPOCHCLI_DISABLE_PROJECT_CONFIG" time="0.002" file="test/config/config.test.ts" line="2091" assertions="2" />
2234
- <testcase name="skips relative instructions with warning when flag is set but no config dir" classname="EPOCHCLI_DISABLE_PROJECT_CONFIG" time="0.002" file="test/config/config.test.ts" line="2115" assertions="1" />
2235
- <testcase name="EPOCHCLI_CONFIG_DIR still works when flag is set" classname="EPOCHCLI_DISABLE_PROJECT_CONFIG" time="0.004" file="test/config/config.test.ts" line="2165" assertions="1" />
2236
- </testsuite>
2237
- <testsuite name="EPOCHCLI_CONFIG_CONTENT token substitution" file="test/config/config.test.ts" line="2222" tests="2" assertions="2" failures="0" skipped="0" time="0.009" hostname="benmurray-MS-7C84">
2238
- <testcase name="substitutes {env:} tokens in EPOCHCLI_CONFIG_CONTENT" classname="EPOCHCLI_CONFIG_CONTENT token substitution" time="0.007" file="test/config/config.test.ts" line="2223" assertions="1" />
2239
- <testcase name="substitutes {file:} tokens in EPOCHCLI_CONFIG_CONTENT" classname="EPOCHCLI_CONFIG_CONTENT token substitution" time="0.002" file="test/config/config.test.ts" line="2255" assertions="1" />
2240
- </testsuite>
2241
- <testcase name="parseManagedPlist strips MDM metadata keys" classname="" time="0.001" file="test/config/config.test.ts" line="2287" assertions="5" />
2242
- <testcase name="parseManagedPlist parses server settings" classname="" time="0" file="test/config/config.test.ts" line="2309" assertions="3" />
2243
- <testcase name="parseManagedPlist parses permission rules" classname="" time="0.001" file="test/config/config.test.ts" line="2323" assertions="6" />
2244
- <testcase name="parseManagedPlist parses enabled_providers" classname="" time="0" file="test/config/config.test.ts" line="2347" assertions="1" />
2245
- <testcase name="parseManagedPlist handles empty config" classname="" time="0" file="test/config/config.test.ts" line="2358" assertions="1" />
2246
- </testsuite>
2247
- <testsuite name="test/config/tui.test.ts" file="test/config/tui.test.ts" tests="28" assertions="74" failures="0" skipped="3" time="0.063" hostname="benmurray-MS-7C84">
2248
- <testcase name="keeps server and tui plugin merge semantics aligned" classname="" time="0.012" file="test/config/tui.test.ts" line="29" assertions="6" />
2249
- <testcase name="loads tui config with the same precedence order as server config paths" classname="" time="0.001" file="test/config/tui.test.ts" line="100" assertions="2" />
2250
- <testcase name="migrates tui-specific keys from epochcli.json when tui.json does not exist" classname="" time="0.008" file="test/config/tui.test.ts" line="123" assertions="9" />
2251
- <testcase name="migrates project legacy tui keys even when global tui.json already exists" classname="" time="0.002" file="test/config/tui.test.ts" line="163" assertions="5" />
2252
- <testcase name="drops unknown legacy tui keys during migration" classname="" time="0.002" file="test/config/tui.test.ts" line="196" assertions="4" />
2253
- <testcase name="skips migration when epochcli.jsonc is syntactically invalid" classname="" time="0.002" file="test/config/tui.test.ts" line="228" assertions="6" />
2254
- <testcase name="skips migration when tui.json already exists" classname="" time="0.001" file="test/config/tui.test.ts" line="257" assertions="4" />
2255
- <testcase name="continues loading tui config when legacy source cannot be stripped" classname="" time="0.002" file="test/config/tui.test.ts" line="279" assertions="3" />
2256
- <testcase name="migration backup preserves JSONC comments" classname="" time="0.002" file="test/config/tui.test.ts" line="306" assertions="4" />
2257
- <testcase name="migrates legacy tui keys across multiple epochcli.json levels" classname="" time="0.006" file="test/config/tui.test.ts" line="336" assertions="3" />
2258
- <testcase name="flattens nested tui key inside tui.json" classname="" time="0.001" file="test/config/tui.test.ts" line="357" assertions="3" />
2259
- <testcase name="top-level keys in tui.json take precedence over nested tui key" classname="" time="0.002" file="test/config/tui.test.ts" line="382" assertions="2" />
2260
- <testcase name="project config takes precedence over EPOCHCLI_TUI_CONFIG (matches EPOCHCLI_CONFIG)" classname="" time="0.001" file="test/config/tui.test.ts" line="405" assertions="2" />
2261
- <testcase name="merges keybind overrides across precedence layers" classname="" time="0.002" file="test/config/tui.test.ts" line="427" assertions="2" />
2262
- <testcase name="defaults Ctrl+Z to input undo on Windows" classname="" time="0" file="test/config/tui.test.ts" line="445" assertions="0">
2263
- <skipped />
2264
- </testcase>
2265
- <testcase name="keeps explicit input undo overrides on Windows" classname="" time="0" file="test/config/tui.test.ts" line="458" assertions="0">
2266
- <skipped />
2267
- </testcase>
2268
- <testcase name="ignores terminal suspend bindings on Windows" classname="" time="0" file="test/config/tui.test.ts" line="475" assertions="0">
2269
- <skipped />
2270
- </testcase>
2271
- <testcase name="EPOCHCLI_TUI_CONFIG provides settings when no project config exists" classname="" time="0.001" file="test/config/tui.test.ts" line="492" assertions="2" />
2272
- <testcase name="does not derive tui path from EPOCHCLI_CONFIG" classname="" time="0.001" file="test/config/tui.test.ts" line="511" assertions="1" />
2273
- <testcase name="applies env and file substitutions in tui.json" classname="" time="0.002" file="test/config/tui.test.ts" line="531" assertions="2" />
2274
- <testcase name="applies file substitutions when first identical token is in a commented line" classname="" time="0.004" file="test/config/tui.test.ts" line="562" assertions="1" />
2275
- <testcase name="loads managed tui config and gives it highest precedence" classname="" time="0.002" file="test/config/tui.test.ts" line="585" assertions="3" />
2276
- <testcase name="loads .epochcli/tui.json" classname="" time="0.001" file="test/config/tui.test.ts" line="617" assertions="1" />
2277
- <testcase name="gracefully falls back when tui.json has invalid JSON" classname="" time="0.002" file="test/config/tui.test.ts" line="634" assertions="2" />
2278
- <testcase name="supports tuple plugin specs with options in tui.json" classname="" time="0.001" file="test/config/tui.test.ts" line="653" assertions="2" />
2279
- <testcase name="deduplicates tuple plugin specs by name with higher precedence winning" classname="" time="0.002" file="test/config/tui.test.ts" line="681" assertions="2" />
2280
- <testcase name="tracks global and local plugin metadata in merged tui config" classname="" time="0.002" file="test/config/tui.test.ts" line="726" assertions="2" />
2281
- <testcase name="merges plugin_enabled flags across config layers" classname="" time="0.001" file="test/config/tui.test.ts" line="765" assertions="1" />
2282
- </testsuite>
2283
- <testsuite name="test/config/agent-color.test.ts" file="test/config/agent-color.test.ts" tests="4" assertions="10" failures="0" skipped="0" time="0.007" hostname="benmurray-MS-7C84">
2284
- <testcase name="agent color parsed from project config" classname="" time="0.004" file="test/config/agent-color.test.ts" line="9" assertions="2" />
2285
- <testcase name="Agent.get includes color from config" classname="" time="0.003" file="test/config/agent-color.test.ts" line="34" assertions="2" />
2286
- <testcase name="Color.hexToAnsiBold converts valid hex to ANSI" classname="" time="0" file="test/config/agent-color.test.ts" line="60" assertions="1" />
2287
- <testcase name="Color.hexToAnsiBold returns undefined for invalid hex" classname="" time="0" file="test/config/agent-color.test.ts" line="65" assertions="5" />
2288
- </testsuite>
2289
- <testsuite name="test/util/flock.test.ts" file="test/util/flock.test.ts" tests="10" assertions="26" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
2290
- <testsuite name="util.flock" file="test/util/flock.test.ts" line="69" tests="10" assertions="26" failures="0" skipped="0" time="5.587" hostname="benmurray-MS-7C84">
2291
- <testcase name="enforces mutual exclusion under process contention" classname="util.flock" time="2.352034" file="test/util/flock.test.ts" line="70" assertions="3" />
2292
- <testcase name="times out while waiting when lock is still healthy" classname="util.flock" time="1.41402" file="test/util/flock.test.ts" line="102" assertions="4" />
2293
- <testcase name="recovers after a crashed lock owner" classname="util.flock" time="0.756011" file="test/util/flock.test.ts" line="139" assertions="1" />
2294
- <testcase name="breaks stale lock dirs when heartbeat is missing" classname="util.flock" time="0.001" file="test/util/flock.test.ts" line="173" assertions="1" />
2295
- <testcase name="recovers when a stale breaker claim was left behind" classname="util.flock" time="0.107002" file="test/util/flock.test.ts" line="199" assertions="2" />
2296
- <testcase name="fails clearly if lock dir is removed while held" classname="util.flock" time="0.002" file="test/util/flock.test.ts" line="230" assertions="3" />
2297
- <testcase name="writes owner metadata while lock is held" classname="util.flock" time="0.001" file="test/util/flock.test.ts" line="270" assertions="4" />
2298
- <testcase name="supports acquire with await using" classname="util.flock" time="0" file="test/util/flock.test.ts" line="299" assertions="2" />
2299
- <testcase name="refuses token mismatch release and recovers from stale" classname="util.flock" time="0.953014" file="test/util/flock.test.ts" line="317" assertions="4" />
2300
- <testcase name="fails clearly on unwritable lock roots" classname="util.flock" time="0.001" file="test/util/flock.test.ts" line="358" assertions="2" />
2301
- </testsuite>
2302
- </testsuite>
2303
- <testsuite name="test/util/filesystem.test.ts" file="test/util/filesystem.test.ts" tests="61" assertions="58" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
2304
- <testsuite name="filesystem" file="test/util/filesystem.test.ts" line="7" tests="61" assertions="58" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
2305
- <testsuite name="exists()" file="test/util/filesystem.test.ts" line="8" tests="3" assertions="3" failures="0" skipped="0" time="0.001" hostname="benmurray-MS-7C84">
2306
- <testcase name="returns true for existing file" classname="exists() &amp;gt; filesystem" time="0" file="test/util/filesystem.test.ts" line="9" assertions="1" />
2307
- <testcase name="returns false for non-existent file" classname="exists() &amp;gt; filesystem" time="0" file="test/util/filesystem.test.ts" line="17" assertions="1" />
2308
- <testcase name="returns true for existing directory" classname="exists() &amp;gt; filesystem" time="0.001" file="test/util/filesystem.test.ts" line="24" assertions="1" />
2309
- </testsuite>
2310
- <testsuite name="isDir()" file="test/util/filesystem.test.ts" line="33" tests="3" assertions="3" failures="0" skipped="0" time="0.001" hostname="benmurray-MS-7C84">
2311
- <testcase name="returns true for directory" classname="isDir() &amp;gt; filesystem" time="0" file="test/util/filesystem.test.ts" line="34" assertions="1" />
2312
- <testcase name="returns false for file" classname="isDir() &amp;gt; filesystem" time="0.001" file="test/util/filesystem.test.ts" line="42" assertions="1" />
2313
- <testcase name="returns false for non-existent path" classname="isDir() &amp;gt; filesystem" time="0" file="test/util/filesystem.test.ts" line="50" assertions="1" />
2314
- </testsuite>
2315
- <testsuite name="size()" file="test/util/filesystem.test.ts" line="58" tests="3" assertions="3" failures="0" skipped="0" time="0.001" hostname="benmurray-MS-7C84">
2316
- <testcase name="returns file size" classname="size() &amp;gt; filesystem" time="0" file="test/util/filesystem.test.ts" line="59" assertions="1" />
2317
- <testcase name="returns 0 for non-existent file" classname="size() &amp;gt; filesystem" time="0.001" file="test/util/filesystem.test.ts" line="68" assertions="1" />
2318
- <testcase name="returns directory size" classname="size() &amp;gt; filesystem" time="0" file="test/util/filesystem.test.ts" line="75" assertions="1" />
2319
- </testsuite>
2320
- <testsuite name="findUp()" file="test/util/filesystem.test.ts" line="86" tests="5" assertions="5" failures="0" skipped="0" time="0.005" hostname="benmurray-MS-7C84">
2321
- <testcase name="keeps previous nearest-first behavior for single target" classname="findUp() &amp;gt; filesystem" time="0.001" file="test/util/filesystem.test.ts" line="87" assertions="1" />
2322
- <testcase name="respects stop boundary" classname="findUp() &amp;gt; filesystem" time="0" file="test/util/filesystem.test.ts" line="100" assertions="1" />
2323
- <testcase name="supports multiple targets with nearest-first default ordering" classname="findUp() &amp;gt; filesystem" time="0.001" file="test/util/filesystem.test.ts" line="113" assertions="1" />
2324
- <testcase name="supports rootFirst ordering for multiple targets" classname="findUp() &amp;gt; filesystem" time="0.001" file="test/util/filesystem.test.ts" line="132" assertions="1" />
2325
- <testcase name="rootFirst preserves json then jsonc order per directory" classname="findUp() &amp;gt; filesystem" time="0.002" file="test/util/filesystem.test.ts" line="151" assertions="1" />
2326
- </testsuite>
2327
- <testsuite name="readText()" file="test/util/filesystem.test.ts" line="175" tests="3" assertions="3" failures="0" skipped="0" time="0.001" hostname="benmurray-MS-7C84">
2328
- <testcase name="reads file content" classname="readText() &amp;gt; filesystem" time="0.001" file="test/util/filesystem.test.ts" line="176" assertions="1" />
2329
- <testcase name="throws for non-existent file" classname="readText() &amp;gt; filesystem" time="0" file="test/util/filesystem.test.ts" line="185" assertions="1" />
2330
- <testcase name="reads UTF-8 content correctly" classname="readText() &amp;gt; filesystem" time="0" file="test/util/filesystem.test.ts" line="192" assertions="1" />
2331
- </testsuite>
2332
- <testsuite name="readJson()" file="test/util/filesystem.test.ts" line="202" tests="4" assertions="5" failures="0" skipped="0" time="0.002" hostname="benmurray-MS-7C84">
2333
- <testcase name="reads and parses JSON" classname="readJson() &amp;gt; filesystem" time="0.001" file="test/util/filesystem.test.ts" line="203" assertions="1" />
2334
- <testcase name="throws for invalid JSON" classname="readJson() &amp;gt; filesystem" time="0" file="test/util/filesystem.test.ts" line="213" assertions="1" />
2335
- <testcase name="throws for non-existent file" classname="readJson() &amp;gt; filesystem" time="0" file="test/util/filesystem.test.ts" line="221" assertions="1" />
2336
- <testcase name="returns typed data" classname="readJson() &amp;gt; filesystem" time="0.001" file="test/util/filesystem.test.ts" line="228" assertions="2" />
2337
- </testsuite>
2338
- <testsuite name="readBytes()" file="test/util/filesystem.test.ts" line="244" tests="2" assertions="3" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
2339
- <testcase name="reads file as buffer" classname="readBytes() &amp;gt; filesystem" time="0" file="test/util/filesystem.test.ts" line="245" assertions="2" />
2340
- <testcase name="throws for non-existent file" classname="readBytes() &amp;gt; filesystem" time="0" file="test/util/filesystem.test.ts" line="256" assertions="1" />
2341
- </testsuite>
2342
- <testsuite name="write()" file="test/util/filesystem.test.ts" line="264" tests="4" assertions="4" failures="0" skipped="0" time="0.002" hostname="benmurray-MS-7C84">
2343
- <testcase name="writes text content" classname="write() &amp;gt; filesystem" time="0.001" file="test/util/filesystem.test.ts" line="265" assertions="1" />
2344
- <testcase name="writes buffer content" classname="write() &amp;gt; filesystem" time="0" file="test/util/filesystem.test.ts" line="275" assertions="1" />
2345
- <testcase name="writes with permissions" classname="write() &amp;gt; filesystem" time="0" file="test/util/filesystem.test.ts" line="286" assertions="1" />
2346
- <testcase name="creates parent directories" classname="write() &amp;gt; filesystem" time="0.001" file="test/util/filesystem.test.ts" line="300" assertions="1" />
2347
- </testsuite>
2348
- <testsuite name="writeJson()" file="test/util/filesystem.test.ts" line="311" tests="3" assertions="4" failures="0" skipped="0" time="0.001" hostname="benmurray-MS-7C84">
2349
- <testcase name="writes JSON data" classname="writeJson() &amp;gt; filesystem" time="0" file="test/util/filesystem.test.ts" line="312" assertions="1" />
2350
- <testcase name="writes formatted JSON" classname="writeJson() &amp;gt; filesystem" time="0.001" file="test/util/filesystem.test.ts" line="323" assertions="2" />
2351
- <testcase name="writes with permissions" classname="writeJson() &amp;gt; filesystem" time="0" file="test/util/filesystem.test.ts" line="335" assertions="1" />
2352
- </testsuite>
2353
- <testsuite name="mimeType()" file="test/util/filesystem.test.ts" line="349" tests="6" assertions="7" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
2354
- <testcase name="returns correct MIME type for JSON" classname="mimeType() &amp;gt; filesystem" time="0" file="test/util/filesystem.test.ts" line="350" assertions="1" />
2355
- <testcase name="returns correct MIME type for JavaScript" classname="mimeType() &amp;gt; filesystem" time="0" file="test/util/filesystem.test.ts" line="354" assertions="1" />
2356
- <testcase name="returns MIME type for TypeScript (or video/mp2t due to extension conflict)" classname="mimeType() &amp;gt; filesystem" time="0" file="test/util/filesystem.test.ts" line="358" assertions="1" />
2357
- <testcase name="returns correct MIME type for images" classname="mimeType() &amp;gt; filesystem" time="0" file="test/util/filesystem.test.ts" line="364" assertions="2" />
2358
- <testcase name="returns default for unknown extension" classname="mimeType() &amp;gt; filesystem" time="0" file="test/util/filesystem.test.ts" line="369" assertions="1" />
2359
- <testcase name="handles files without extension" classname="mimeType() &amp;gt; filesystem" time="0" file="test/util/filesystem.test.ts" line="373" assertions="1" />
2360
- </testsuite>
2361
- <testsuite name="windowsPath()" file="test/util/filesystem.test.ts" line="378" tests="4" assertions="5" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
2362
- <testcase name="converts Git Bash paths" classname="windowsPath() &amp;gt; filesystem" time="0" file="test/util/filesystem.test.ts" line="379" assertions="1" />
2363
- <testcase name="converts Cygwin paths" classname="windowsPath() &amp;gt; filesystem" time="0" file="test/util/filesystem.test.ts" line="388" assertions="1" />
2364
- <testcase name="converts WSL paths" classname="windowsPath() &amp;gt; filesystem" time="0" file="test/util/filesystem.test.ts" line="397" assertions="1" />
2365
- <testcase name="ignores normal Windows paths" classname="windowsPath() &amp;gt; filesystem" time="0" file="test/util/filesystem.test.ts" line="406" assertions="2" />
2366
- </testsuite>
2367
- <testsuite name="writeStream()" file="test/util/filesystem.test.ts" line="412" tests="7" assertions="8" failures="0" skipped="0" time="0.009" hostname="benmurray-MS-7C84">
2368
- <testcase name="writes from Web ReadableStream" classname="writeStream() &amp;gt; filesystem" time="0.003" file="test/util/filesystem.test.ts" line="413" assertions="1" />
2369
- <testcase name="writes from Node.js Readable stream" classname="writeStream() &amp;gt; filesystem" time="0.001" file="test/util/filesystem.test.ts" line="430" assertions="1" />
2370
- <testcase name="writes binary data from Web ReadableStream" classname="writeStream() &amp;gt; filesystem" time="0.001" file="test/util/filesystem.test.ts" line="442" assertions="1" />
2371
- <testcase name="writes large content in chunks" classname="writeStream() &amp;gt; filesystem" time="0" file="test/util/filesystem.test.ts" line="459" assertions="1" />
2372
- <testcase name="creates parent directories" classname="writeStream() &amp;gt; filesystem" time="0" file="test/util/filesystem.test.ts" line="477" assertions="1" />
2373
- <testcase name="writes with permissions" classname="writeStream() &amp;gt; filesystem" time="0.001" file="test/util/filesystem.test.ts" line="493" assertions="1" />
2374
- <testcase name="writes executable with permissions" classname="writeStream() &amp;gt; filesystem" time="0.003" file="test/util/filesystem.test.ts" line="512" assertions="2" />
2375
- </testsuite>
2376
- <testsuite name="resolve()" file="test/util/filesystem.test.ts" line="533" tests="13" assertions="5" failures="0" skipped="0" time="0.003" hostname="benmurray-MS-7C84">
2377
- <testcase name="resolves slash-prefixed drive paths on Windows" classname="resolve() &amp;gt; filesystem" time="0" file="test/util/filesystem.test.ts" line="534" assertions="0" />
2378
- <testcase name="resolves slash-prefixed drive roots on Windows" classname="resolve() &amp;gt; filesystem" time="0" file="test/util/filesystem.test.ts" line="541" assertions="0" />
2379
- <testcase name="resolves Git Bash and MSYS2 paths on Windows" classname="resolve() &amp;gt; filesystem" time="0" file="test/util/filesystem.test.ts" line="548" assertions="0" />
2380
- <testcase name="resolves Git Bash and MSYS2 drive roots on Windows" classname="resolve() &amp;gt; filesystem" time="0" file="test/util/filesystem.test.ts" line="557" assertions="0" />
2381
- <testcase name="resolves Cygwin paths on Windows" classname="resolve() &amp;gt; filesystem" time="0" file="test/util/filesystem.test.ts" line="565" assertions="0" />
2382
- <testcase name="resolves Cygwin drive roots on Windows" classname="resolve() &amp;gt; filesystem" time="0" file="test/util/filesystem.test.ts" line="573" assertions="0" />
2383
- <testcase name="resolves WSL mount paths on Windows" classname="resolve() &amp;gt; filesystem" time="0" file="test/util/filesystem.test.ts" line="580" assertions="0" />
2384
- <testcase name="resolves WSL mount roots on Windows" classname="resolve() &amp;gt; filesystem" time="0" file="test/util/filesystem.test.ts" line="588" assertions="0" />
2385
- <testcase name="resolves symlinked directory to canonical path" classname="resolve() &amp;gt; filesystem" time="0.001" file="test/util/filesystem.test.ts" line="595" assertions="1" />
2386
- <testcase name="returns unresolved path when target does not exist" classname="resolve() &amp;gt; filesystem" time="0" file="test/util/filesystem.test.ts" line="604" assertions="1" />
2387
- <testcase name="throws ELOOP on symlink cycle" classname="resolve() &amp;gt; filesystem" time="0.001" file="test/util/filesystem.test.ts" line="611" assertions="1" />
2388
- <testcase name="throws EACCES on permission-denied symlink target" classname="resolve() &amp;gt; filesystem" time="0" file="test/util/filesystem.test.ts" line="621" assertions="1" />
2389
- <testcase name="rethrows non-ENOENT errors" classname="resolve() &amp;gt; filesystem" time="0.001" file="test/util/filesystem.test.ts" line="639" assertions="1" />
2390
- </testsuite>
2391
- <testsuite name="normalizePathPattern()" file="test/util/filesystem.test.ts" line="648" tests="1" assertions="0" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
2392
- <testcase name="preserves drive root globs on Windows" classname="normalizePathPattern() &amp;gt; filesystem" time="0" file="test/util/filesystem.test.ts" line="649" assertions="0" />
2393
- </testsuite>
2394
- </testsuite>
2395
- </testsuite>
2396
- <testsuite name="test/util/format.test.ts" file="test/util/format.test.ts" tests="7" assertions="32" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
2397
- <testsuite name="util.format" file="test/util/format.test.ts" line="4" tests="7" assertions="32" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
2398
- <testsuite name="formatDuration" file="test/util/format.test.ts" line="5" tests="7" assertions="32" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
2399
- <testcase name="returns empty string for zero or negative values" classname="formatDuration &amp;gt; util.format" time="0" file="test/util/format.test.ts" line="6" assertions="3" />
2400
- <testcase name="formats seconds under a minute" classname="formatDuration &amp;gt; util.format" time="0" file="test/util/format.test.ts" line="12" assertions="3" />
2401
- <testcase name="formats minutes under an hour" classname="formatDuration &amp;gt; util.format" time="0" file="test/util/format.test.ts" line="18" assertions="6" />
2402
- <testcase name="formats hours under a day" classname="formatDuration &amp;gt; util.format" time="0" file="test/util/format.test.ts" line="27" assertions="5" />
2403
- <testcase name="formats days under a week" classname="formatDuration &amp;gt; util.format" time="0" file="test/util/format.test.ts" line="35" assertions="4" />
2404
- <testcase name="formats weeks" classname="formatDuration &amp;gt; util.format" time="0" file="test/util/format.test.ts" line="42" assertions="3" />
2405
- <testcase name="handles boundary values correctly" classname="formatDuration &amp;gt; util.format" time="0" file="test/util/format.test.ts" line="48" assertions="8" />
2406
- </testsuite>
2407
- </testsuite>
2408
- </testsuite>
2409
- <testsuite name="test/util/wildcard.test.ts" file="test/util/wildcard.test.ts" tests="8" assertions="29" failures="0" skipped="0" time="0.001" hostname="benmurray-MS-7C84">
2410
- <testcase name="match handles glob tokens" classname="" time="0" file="test/util/wildcard.test.ts" line="4" assertions="3" />
2411
- <testcase name="match with trailing space+wildcard matches command with or without args" classname="" time="0" file="test/util/wildcard.test.ts" line="10" assertions="9" />
2412
- <testcase name="all picks the most specific pattern" classname="" time="0.001" file="test/util/wildcard.test.ts" line="30" assertions="3" />
2413
- <testcase name="allStructured matches command sequences" classname="" time="0" file="test/util/wildcard.test.ts" line="41" assertions="3" />
2414
- <testcase name="allStructured prioritizes flag-specific patterns" classname="" time="0" file="test/util/wildcard.test.ts" line="53" assertions="4" />
2415
- <testcase name="allStructured handles sed flags" classname="" time="0" file="test/util/wildcard.test.ts" line="66" assertions="4" />
2416
- <testcase name="match normalizes slashes for cross-platform globbing" classname="" time="0" file="test/util/wildcard.test.ts" line="77" assertions="2" />
2417
- <testcase name="match handles case-insensitivity on Windows" classname="" time="0" file="test/util/wildcard.test.ts" line="82" assertions="1" />
2418
- </testsuite>
2419
- <testsuite name="test/util/effect-zod.test.ts" file="test/util/effect-zod.test.ts" tests="3" assertions="5" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
2420
- <testsuite name="util.effect-zod" file="test/util/effect-zod.test.ts" line="6" tests="3" assertions="5" failures="0" skipped="0" time="0.002" hostname="benmurray-MS-7C84">
2421
- <testcase name="converts class schemas for route dto shapes" classname="util.effect-zod" time="0.001" file="test/util/effect-zod.test.ts" line="7" assertions="2" />
2422
- <testcase name="converts structs with optional fields, arrays, and records" classname="util.effect-zod" time="0.001" file="test/util/effect-zod.test.ts" line="27" assertions="2" />
2423
- <testcase name="throws for unsupported tuple schemas" classname="util.effect-zod" time="0" file="test/util/effect-zod.test.ts" line="58" assertions="1" />
2424
- </testsuite>
2425
- </testsuite>
2426
- <testsuite name="test/util/data-url.test.ts" file="test/util/data-url.test.ts" tests="2" assertions="2" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
2427
- <testsuite name="decodeDataUrl" file="test/util/data-url.test.ts" line="4" tests="2" assertions="2" failures="0" skipped="0" time="0.001" hostname="benmurray-MS-7C84">
2428
- <testcase name="decodes base64 data URLs" classname="decodeDataUrl" time="0.001" file="test/util/data-url.test.ts" line="5" assertions="1" />
2429
- <testcase name="decodes plain data URLs" classname="decodeDataUrl" time="0" file="test/util/data-url.test.ts" line="11" assertions="1" />
2430
- </testsuite>
2431
- </testsuite>
2432
- <testsuite name="test/util/lazy.test.ts" file="test/util/lazy.test.ts" tests="3" assertions="13" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
2433
- <testsuite name="util.lazy" file="test/util/lazy.test.ts" line="4" tests="3" assertions="13" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
2434
- <testcase name="should call function only once" classname="util.lazy" time="0" file="test/util/lazy.test.ts" line="5" assertions="5" />
2435
- <testcase name="should preserve the same reference" classname="util.lazy" time="0" file="test/util/lazy.test.ts" line="25" assertions="3" />
2436
- <testcase name="should work with different return types" classname="util.lazy" time="0" file="test/util/lazy.test.ts" line="37" assertions="5" />
2437
- </testsuite>
2438
- </testsuite>
2439
- <testsuite name="test/util/timeout.test.ts" file="test/util/timeout.test.ts" tests="2" assertions="2" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
2440
- <testsuite name="util.timeout" file="test/util/timeout.test.ts" line="4" tests="2" assertions="2" failures="0" skipped="0" time="0.061" hostname="benmurray-MS-7C84">
2441
- <testcase name="should resolve when promise completes before timeout" classname="util.timeout" time="0.01" file="test/util/timeout.test.ts" line="5" assertions="1" />
2442
- <testcase name="should reject when promise exceeds timeout" classname="util.timeout" time="0.051001" file="test/util/timeout.test.ts" line="14" assertions="1" />
2443
- </testsuite>
2444
- </testsuite>
2445
- <testsuite name="test/util/iife.test.ts" file="test/util/iife.test.ts" tests="3" assertions="6" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
2446
- <testsuite name="util.iife" file="test/util/iife.test.ts" line="4" tests="3" assertions="6" failures="0" skipped="0" time="0.001" hostname="benmurray-MS-7C84">
2447
- <testcase name="should execute function immediately and return result" classname="util.iife" time="0" file="test/util/iife.test.ts" line="5" assertions="2" />
2448
- <testcase name="should work with async functions" classname="util.iife" time="0.001" file="test/util/iife.test.ts" line="16" assertions="2" />
2449
- <testcase name="should handle functions with no return value" classname="util.iife" time="0" file="test/util/iife.test.ts" line="27" assertions="2" />
2450
- </testsuite>
2451
- </testsuite>
2452
- <testsuite name="test/util/module.test.ts" file="test/util/module.test.ts" tests="4" assertions="6" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
2453
- <testsuite name="util.module" file="test/util/module.test.ts" line="7" tests="4" assertions="6" failures="0" skipped="0" time="0.003" hostname="benmurray-MS-7C84">
2454
- <testcase name="resolves package subpaths from the provided dir" classname="util.module" time="0.001" file="test/util/module.test.ts" line="8" assertions="1" />
2455
- <testcase name="resolves packages through ancestor node_modules" classname="util.module" time="0.001" file="test/util/module.test.ts" line="18" assertions="1" />
2456
- <testcase name="resolves relative to the provided dir" classname="util.module" time="0.001" file="test/util/module.test.ts" line="33" assertions="3" />
2457
- <testcase name="returns undefined when resolution fails" classname="util.module" time="0" file="test/util/module.test.ts" line="55" assertions="1" />
2458
- </testsuite>
2459
- </testsuite>
2460
- <testsuite name="test/util/which.test.ts" file="test/util/which.test.ts" tests="6" assertions="4" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
2461
- <testsuite name="util.which" file="test/util/which.test.ts" line="41" tests="6" assertions="4" failures="0" skipped="0" time="0.003" hostname="benmurray-MS-7C84">
2462
- <testcase name="returns null when command is missing" classname="util.which" time="0.001" file="test/util/which.test.ts" line="42" assertions="1" />
2463
- <testcase name="finds a command from PATH override" classname="util.which" time="0" file="test/util/which.test.ts" line="46" assertions="1" />
2464
- <testcase name="uses first PATH match" classname="util.which" time="0.001" file="test/util/which.test.ts" line="55" assertions="1" />
2465
- <testcase name="returns null for non-executable file on unix" classname="util.which" time="0.001" file="test/util/which.test.ts" line="67" assertions="1" />
2466
- <testcase name="uses PATHEXT on windows" classname="util.which" time="0" file="test/util/which.test.ts" line="78" assertions="0" />
2467
- <testcase name="uses Windows Path casing fallback" classname="util.which" time="0" file="test/util/which.test.ts" line="90" assertions="0" />
2468
- </testsuite>
2469
- </testsuite>
2470
- <testsuite name="test/util/process.test.ts" file="test/util/process.test.ts" tests="10" assertions="15" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
2471
- <testsuite name="util.process" file="test/util/process.test.ts" line="11" tests="10" assertions="15" failures="0" skipped="0" time="0.823" hostname="benmurray-MS-7C84">
2472
- <testcase name="captures stdout and stderr" classname="util.process" time="0.184003" file="test/util/process.test.ts" line="12" assertions="3" />
2473
- <testcase name="returns code when nothrow is enabled" classname="util.process" time="0.181003" file="test/util/process.test.ts" line="19" assertions="1" />
2474
- <testcase name="throws RunFailedError on non-zero exit" classname="util.process" time="0.188003" file="test/util/process.test.ts" line="24" assertions="3" />
2475
- <testcase name="aborts a running process" classname="util.process" time="0.03" file="test/util/process.test.ts" line="32" assertions="2" />
2476
- <testcase name="kills after timeout when process ignores terminate signal" classname="util.process" time="0.031" file="test/util/process.test.ts" line="46" assertions="2" />
2477
- <testcase name="uses cwd when spawning commands" classname="util.process" time="0.019" file="test/util/process.test.ts" line="63" assertions="1" />
2478
- <testcase name="merges environment overrides" classname="util.process" time="0.186003" file="test/util/process.test.ts" line="71" assertions="1" />
2479
- <testcase name="uses shell in run on Windows" classname="util.process" time="0" file="test/util/process.test.ts" line="80" assertions="0" />
2480
- <testcase name="runs cmd scripts with spaces on Windows without shell" classname="util.process" time="0.001" file="test/util/process.test.ts" line="94" assertions="0" />
2481
- <testcase name="rejects missing commands without leaking unhandled errors" classname="util.process" time="0.003" file="test/util/process.test.ts" line="113" assertions="2" />
2482
- </testsuite>
2483
- </testsuite>
2484
- <testsuite name="test/util/glob.test.ts" file="test/util/glob.test.ts" tests="17" assertions="22" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
2485
- <testsuite name="Glob" file="test/util/glob.test.ts" line="7" tests="17" assertions="22" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
2486
- <testsuite name="scan()" file="test/util/glob.test.ts" line="8" tests="11" assertions="11" failures="0" skipped="0" time="0.009" hostname="benmurray-MS-7C84">
2487
- <testcase name="finds files matching pattern" classname="scan() &amp;gt; Glob" time="0.003" file="test/util/glob.test.ts" line="9" assertions="1" />
2488
- <testcase name="returns absolute paths when absolute option is true" classname="scan() &amp;gt; Glob" time="0.001" file="test/util/glob.test.ts" line="20" assertions="1" />
2489
- <testcase name="excludes directories by default" classname="scan() &amp;gt; Glob" time="0.001" file="test/util/glob.test.ts" line="29" assertions="1" />
2490
- <testcase name="excludes directories when include is &apos;file&apos;" classname="scan() &amp;gt; Glob" time="0" file="test/util/glob.test.ts" line="39" assertions="1" />
2491
- <testcase name="includes directories when include is &apos;all&apos;" classname="scan() &amp;gt; Glob" time="0.001" file="test/util/glob.test.ts" line="49" assertions="1" />
2492
- <testcase name="handles nested patterns" classname="scan() &amp;gt; Glob" time="0" file="test/util/glob.test.ts" line="59" assertions="1" />
2493
- <testcase name="returns empty array for no matches" classname="scan() &amp;gt; Glob" time="0.001" file="test/util/glob.test.ts" line="69" assertions="1" />
2494
- <testcase name="does not follow symlinks by default" classname="scan() &amp;gt; Glob" time="0.001" file="test/util/glob.test.ts" line="77" assertions="1" />
2495
- <testcase name="follows symlinks when symlink option is true" classname="scan() &amp;gt; Glob" time="0" file="test/util/glob.test.ts" line="88" assertions="1" />
2496
- <testcase name="includes dotfiles when dot option is true" classname="scan() &amp;gt; Glob" time="0.001" file="test/util/glob.test.ts" line="99" assertions="1" />
2497
- <testcase name="excludes dotfiles when dot option is false" classname="scan() &amp;gt; Glob" time="0" file="test/util/glob.test.ts" line="109" assertions="1" />
2498
- </testsuite>
2499
- <testsuite name="scanSync()" file="test/util/glob.test.ts" line="120" tests="2" assertions="2" failures="0" skipped="0" time="0.002" hostname="benmurray-MS-7C84">
2500
- <testcase name="finds files matching pattern synchronously" classname="scanSync() &amp;gt; Glob" time="0.001" file="test/util/glob.test.ts" line="121" assertions="1" />
2501
- <testcase name="respects options" classname="scanSync() &amp;gt; Glob" time="0.001" file="test/util/glob.test.ts" line="131" assertions="1" />
2502
- </testsuite>
2503
- <testsuite name="match()" file="test/util/glob.test.ts" line="142" tests="4" assertions="9" failures="0" skipped="0" time="0.002" hostname="benmurray-MS-7C84">
2504
- <testcase name="matches simple patterns" classname="match() &amp;gt; Glob" time="0.001" file="test/util/glob.test.ts" line="143" assertions="2" />
2505
- <testcase name="matches directory patterns" classname="match() &amp;gt; Glob" time="0" file="test/util/glob.test.ts" line="148" assertions="2" />
2506
- <testcase name="matches dot files" classname="match() &amp;gt; Glob" time="0" file="test/util/glob.test.ts" line="153" assertions="2" />
2507
- <testcase name="matches brace expansion" classname="match() &amp;gt; Glob" time="0.001" file="test/util/glob.test.ts" line="158" assertions="3" />
2508
- </testsuite>
2509
- </testsuite>
2510
- </testsuite>
2511
- <testsuite name="test/util/error.test.ts" file="test/util/error.test.ts" tests="3" assertions="11" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
2512
- <testsuite name="util.error" file="test/util/error.test.ts" line="4" tests="3" assertions="11" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
2513
- <testcase name="formats native Error instances" classname="util.error" time="0" file="test/util/error.test.ts" line="5" assertions="5" />
2514
- <testcase name="extracts message from record-like values" classname="util.error" time="0" file="test/util/error.test.ts" line="16" assertions="3" />
2515
- <testcase name="handles opaque throwables with custom toString" classname="util.error" time="0" file="test/util/error.test.ts" line="25" assertions="3" />
2516
- </testsuite>
2517
- </testsuite>
2518
- <testsuite name="test/util/lock.test.ts" file="test/util/lock.test.ts" tests="1" assertions="7" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
2519
- <testsuite name="util.lock" file="test/util/lock.test.ts" line="12" tests="1" assertions="7" failures="0" skipped="0" time="0.003" hostname="benmurray-MS-7C84">
2520
- <testcase name="writer exclusivity: blocks reads and other writes while held" classname="util.lock" time="0.003" file="test/util/lock.test.ts" line="13" assertions="7" />
2521
- </testsuite>
2522
- </testsuite>
2523
- <testsuite name="test/permission/arity.test.ts" file="test/permission/arity.test.ts" tests="6" assertions="13" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
2524
- <testcase name="arity 1 - unknown commands default to first token" classname="" time="0" file="test/permission/arity.test.ts" line="4" assertions="2" />
2525
- <testcase name="arity 2 - two token commands" classname="" time="0" file="test/permission/arity.test.ts" line="9" assertions="2" />
2526
- <testcase name="arity 3 - three token commands" classname="" time="0" file="test/permission/arity.test.ts" line="14" assertions="2" />
2527
- <testcase name="longest match wins - nested prefixes" classname="" time="0" file="test/permission/arity.test.ts" line="19" assertions="2" />
2528
- <testcase name="exact length matches" classname="" time="0" file="test/permission/arity.test.ts" line="24" assertions="2" />
2529
- <testcase name="edge cases" classname="" time="0" file="test/permission/arity.test.ts" line="29" assertions="3" />
2530
- </testsuite>
2531
- <testsuite name="test/permission/next.test.ts" file="test/permission/next.test.ts" tests="74" assertions="103" failures="0" skipped="0" time="0.655" hostname="benmurray-MS-7C84">
2532
- <testcase name="fromConfig - string value becomes wildcard rule" classname="" time="0.001" file="test/permission/next.test.ts" line="35" assertions="1" />
2533
- <testcase name="fromConfig - object value converts to rules array" classname="" time="0" file="test/permission/next.test.ts" line="40" assertions="1" />
2534
- <testcase name="fromConfig - mixed string and object values" classname="" time="0" file="test/permission/next.test.ts" line="48" assertions="1" />
2535
- <testcase name="fromConfig - empty object" classname="" time="0" file="test/permission/next.test.ts" line="62" assertions="1" />
2536
- <testcase name="fromConfig - expands tilde to home directory" classname="" time="0" file="test/permission/next.test.ts" line="67" assertions="1" />
2537
- <testcase name="fromConfig - expands $HOME to home directory" classname="" time="0" file="test/permission/next.test.ts" line="72" assertions="1" />
2538
- <testcase name="fromConfig - expands $HOME without trailing slash" classname="" time="0" file="test/permission/next.test.ts" line="77" assertions="1" />
2539
- <testcase name="fromConfig - does not expand tilde in middle of path" classname="" time="0" file="test/permission/next.test.ts" line="82" assertions="1" />
2540
- <testcase name="fromConfig - expands exact tilde to home directory" classname="" time="0" file="test/permission/next.test.ts" line="87" assertions="1" />
2541
- <testcase name="evaluate - matches expanded tilde pattern" classname="" time="0" file="test/permission/next.test.ts" line="92" assertions="1" />
2542
- <testcase name="evaluate - matches expanded $HOME pattern" classname="" time="0" file="test/permission/next.test.ts" line="98" assertions="1" />
2543
- <testcase name="merge - simple concatenation" classname="" time="0" file="test/permission/next.test.ts" line="106" assertions="1" />
2544
- <testcase name="merge - adds new permission" classname="" time="0" file="test/permission/next.test.ts" line="117" assertions="1" />
2545
- <testcase name="merge - concatenates rules for same permission" classname="" time="0.001" file="test/permission/next.test.ts" line="128" assertions="1" />
2546
- <testcase name="merge - multiple rulesets" classname="" time="0" file="test/permission/next.test.ts" line="139" assertions="1" />
2547
- <testcase name="merge - empty ruleset does nothing" classname="" time="0" file="test/permission/next.test.ts" line="152" assertions="1" />
2548
- <testcase name="merge - preserves rule order" classname="" time="0" file="test/permission/next.test.ts" line="157" assertions="1" />
2549
- <testcase name="merge - config permission overrides default ask" classname="" time="0" file="test/permission/next.test.ts" line="172" assertions="2" />
2550
- <testcase name="merge - config ask overrides default allow" classname="" time="0" file="test/permission/next.test.ts" line="184" assertions="1" />
2551
- <testcase name="evaluate - exact pattern match" classname="" time="0" file="test/permission/next.test.ts" line="196" assertions="1" />
2552
- <testcase name="evaluate - wildcard pattern match" classname="" time="0" file="test/permission/next.test.ts" line="201" assertions="1" />
2553
- <testcase name="evaluate - last matching rule wins" classname="" time="0" file="test/permission/next.test.ts" line="206" assertions="1" />
2554
- <testcase name="evaluate - last matching rule wins (wildcard after specific)" classname="" time="0" file="test/permission/next.test.ts" line="214" assertions="1" />
2555
- <testcase name="evaluate - glob pattern match" classname="" time="0" file="test/permission/next.test.ts" line="222" assertions="1" />
2556
- <testcase name="evaluate - last matching glob wins" classname="" time="0" file="test/permission/next.test.ts" line="227" assertions="1" />
2557
- <testcase name="evaluate - order matters for specificity" classname="" time="0" file="test/permission/next.test.ts" line="235" assertions="1" />
2558
- <testcase name="evaluate - unknown permission returns ask" classname="" time="0" file="test/permission/next.test.ts" line="244" assertions="1" />
2559
- <testcase name="evaluate - empty ruleset returns ask" classname="" time="0" file="test/permission/next.test.ts" line="251" assertions="1" />
2560
- <testcase name="evaluate - no matching pattern returns ask" classname="" time="0" file="test/permission/next.test.ts" line="256" assertions="1" />
2561
- <testcase name="evaluate - empty rules array returns ask" classname="" time="0" file="test/permission/next.test.ts" line="261" assertions="1" />
2562
- <testcase name="evaluate - multiple matching patterns, last wins" classname="" time="0" file="test/permission/next.test.ts" line="266" assertions="1" />
2563
- <testcase name="evaluate - non-matching patterns are skipped" classname="" time="0" file="test/permission/next.test.ts" line="275" assertions="1" />
2564
- <testcase name="evaluate - exact match at end wins over earlier wildcard" classname="" time="0" file="test/permission/next.test.ts" line="284" assertions="1" />
2565
- <testcase name="evaluate - wildcard at end overrides earlier exact match" classname="" time="0" file="test/permission/next.test.ts" line="292" assertions="1" />
2566
- <testcase name="evaluate - wildcard permission matches any permission" classname="" time="0.001" file="test/permission/next.test.ts" line="302" assertions="1" />
2567
- <testcase name="evaluate - wildcard permission with specific pattern" classname="" time="0" file="test/permission/next.test.ts" line="307" assertions="1" />
2568
- <testcase name="evaluate - glob permission pattern" classname="" time="0" file="test/permission/next.test.ts" line="312" assertions="1" />
2569
- <testcase name="evaluate - specific permission and wildcard permission combined" classname="" time="0" file="test/permission/next.test.ts" line="319" assertions="1" />
2570
- <testcase name="evaluate - wildcard permission does not match when specific exists" classname="" time="0" file="test/permission/next.test.ts" line="327" assertions="1" />
2571
- <testcase name="evaluate - multiple matching permission patterns combine rules" classname="" time="0" file="test/permission/next.test.ts" line="335" assertions="1" />
2572
- <testcase name="evaluate - wildcard permission fallback for unknown tool" classname="" time="0" file="test/permission/next.test.ts" line="344" assertions="1" />
2573
- <testcase name="evaluate - permission patterns sorted by length regardless of object order" classname="" time="0" file="test/permission/next.test.ts" line="352" assertions="1" />
2574
- <testcase name="evaluate - merges multiple rulesets" classname="" time="0" file="test/permission/next.test.ts" line="362" assertions="1" />
2575
- <testcase name="disabled - returns empty set when all tools allowed" classname="" time="0" file="test/permission/next.test.ts" line="372" assertions="1" />
2576
- <testcase name="disabled - disables tool when denied" classname="" time="0" file="test/permission/next.test.ts" line="377" assertions="3" />
2577
- <testcase name="disabled - disables edit/write/apply_patch/multiedit when edit denied" classname="" time="0" file="test/permission/next.test.ts" line="390" assertions="5" />
2578
- <testcase name="disabled - does not disable when partially denied" classname="" time="0" file="test/permission/next.test.ts" line="405" assertions="1" />
2579
- <testcase name="disabled - does not disable when action is ask" classname="" time="0" file="test/permission/next.test.ts" line="416" assertions="1" />
2580
- <testcase name="disabled - does not disable when specific allow after wildcard deny" classname="" time="0" file="test/permission/next.test.ts" line="421" assertions="1" />
2581
- <testcase name="disabled - does not disable when wildcard allow after deny" classname="" time="0" file="test/permission/next.test.ts" line="434" assertions="1" />
2582
- <testcase name="disabled - disables multiple tools" classname="" time="0" file="test/permission/next.test.ts" line="445" assertions="3" />
2583
- <testcase name="disabled - wildcard permission denies all tools" classname="" time="0" file="test/permission/next.test.ts" line="459" assertions="3" />
2584
- <testcase name="disabled - specific allow overrides wildcard deny" classname="" time="0" file="test/permission/next.test.ts" line="466" assertions="3" />
2585
- <testcase name="ask - resolves immediately when action is allow" classname="" time="0.028" file="test/permission/next.test.ts" line="481" assertions="1" />
2586
- <testcase name="ask - throws RejectedError when action is deny" classname="" time="0.029" file="test/permission/next.test.ts" line="499" assertions="1" />
2587
- <testcase name="ask - returns pending promise when action is ask" classname="" time="0.032" file="test/permission/next.test.ts" line="518" assertions="1" />
2588
- <testcase name="ask - adds request to pending list" classname="" time="0.033" file="test/permission/next.test.ts" line="540" assertions="2" />
2589
- <testcase name="ask - publishes asked event" classname="" time="0.027" file="test/permission/next.test.ts" line="578" assertions="3" />
2590
- <testcase name="reply - once resolves the pending ask" classname="" time="0.03" file="test/permission/next.test.ts" line="618" assertions="1" />
2591
- <testcase name="reply - reject throws RejectedError" classname="" time="0.027" file="test/permission/next.test.ts" line="645" assertions="1" />
2592
- <testcase name="reply - reject with message throws CorrectedError" classname="" time="0.031" file="test/permission/next.test.ts" line="672" assertions="2" />
2593
- <testcase name="reply - always persists approval and resolves" classname="" time="0.025" file="test/permission/next.test.ts" line="702" assertions="2" />
2594
- <testcase name="reply - reject cancels all pending for same session" classname="" time="0.029" file="test/permission/next.test.ts" line="745" assertions="2" />
2595
- <testcase name="reply - always resolves matching pending requests in same session" classname="" time="0.032" file="test/permission/next.test.ts" line="789" assertions="3" />
2596
- <testcase name="reply - always keeps other session pending" classname="" time="0.031" file="test/permission/next.test.ts" line="828" assertions="2" />
2597
- <testcase name="reply - publishes replied event" classname="" time="0.031" file="test/permission/next.test.ts" line="869" assertions="2" />
2598
- <testcase name="permission requests stay isolated by directory" classname="" time="0.050001" file="test/permission/next.test.ts" line="913" assertions="4" />
2599
- <testcase name="pending permission rejects on instance dispose" classname="" time="0.032" file="test/permission/next.test.ts" line="972" assertions="2" />
2600
- <testcase name="pending permission rejects on instance reload" classname="" time="0.031" file="test/permission/next.test.ts" line="1005" assertions="2" />
2601
- <testcase name="reply - does nothing for unknown requestID" classname="" time="0.029" file="test/permission/next.test.ts" line="1038" assertions="1" />
2602
- <testcase name="ask - checks all patterns and stops on first deny" classname="" time="0.035001" file="test/permission/next.test.ts" line="1052" assertions="1" />
2603
- <testcase name="ask - allows all patterns when all match allow rules" classname="" time="0.03" file="test/permission/next.test.ts" line="1074" assertions="1" />
2604
- <testcase name="ask - should deny even when an earlier pattern is ask" classname="" time="0.031" file="test/permission/next.test.ts" line="1092" assertions="2" />
2605
- <testcase name="ask - abort should clear pending request" classname="" time="0.029" file="test/permission/next.test.ts" line="1118" assertions="1" />
2606
- </testsuite>
2607
- <testsuite name="test/cli/import.test.ts" file="test/cli/import.test.ts" tests="5" assertions="17" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
2608
- <testcase name="parses valid share URLs" classname="" time="0" file="test/cli/import.test.ts" line="10" assertions="3" />
2609
- <testcase name="rejects invalid URLs" classname="" time="0" file="test/cli/import.test.ts" line="16" assertions="4" />
2610
- <testcase name="only attaches share auth headers for same-origin URLs" classname="" time="0" file="test/cli/import.test.ts" line="23" assertions="4" />
2611
- <testcase name="transforms share data to storage format" classname="" time="0" file="test/cli/import.test.ts" line="35" assertions="3" />
2612
- <testcase name="returns null for invalid share data" classname="" time="0" file="test/cli/import.test.ts" line="50" assertions="3" />
2613
- </testsuite>
2614
- <testsuite name="test/cli/plugin-auth-picker.test.ts" file="test/cli/plugin-auth-picker.test.ts" tests="10" assertions="10" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
2615
- <testsuite name="resolvePluginProviders" file="test/cli/plugin-auth-picker.test.ts" line="18" tests="10" assertions="10" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
2616
- <testcase name="returns plugin providers not in models.dev" classname="resolvePluginProviders" time="0" file="test/cli/plugin-auth-picker.test.ts" line="19" assertions="1" />
2617
- <testcase name="skips providers already in models.dev" classname="resolvePluginProviders" time="0" file="test/cli/plugin-auth-picker.test.ts" line="29" assertions="1" />
2618
- <testcase name="deduplicates across plugins" classname="resolvePluginProviders" time="0" file="test/cli/plugin-auth-picker.test.ts" line="39" assertions="1" />
2619
- <testcase name="respects disabled_providers" classname="resolvePluginProviders" time="0" file="test/cli/plugin-auth-picker.test.ts" line="49" assertions="1" />
2620
- <testcase name="respects enabled_providers when provider is absent" classname="resolvePluginProviders" time="0" file="test/cli/plugin-auth-picker.test.ts" line="59" assertions="1" />
2621
- <testcase name="includes provider when in enabled set" classname="resolvePluginProviders" time="0" file="test/cli/plugin-auth-picker.test.ts" line="70" assertions="1" />
2622
- <testcase name="resolves name from providerNames" classname="resolvePluginProviders" time="0" file="test/cli/plugin-auth-picker.test.ts" line="81" assertions="1" />
2623
- <testcase name="falls back to id when no name configured" classname="resolvePluginProviders" time="0" file="test/cli/plugin-auth-picker.test.ts" line="91" assertions="1" />
2624
- <testcase name="skips hooks without auth" classname="resolvePluginProviders" time="0" file="test/cli/plugin-auth-picker.test.ts" line="101" assertions="1" />
2625
- <testcase name="returns empty for no hooks" classname="resolvePluginProviders" time="0" file="test/cli/plugin-auth-picker.test.ts" line="111" assertions="1" />
2626
- </testsuite>
2627
- </testsuite>
2628
- <testsuite name="test/cli/github-action.test.ts" file="test/cli/github-action.test.ts" tests="17" assertions="22" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
2629
- <testsuite name="extractResponseText" file="test/cli/github-action.test.ts" line="83" tests="14" assertions="14" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
2630
- <testcase name="returns text from text part" classname="extractResponseText" time="0" file="test/cli/github-action.test.ts" line="84" assertions="1" />
2631
- <testcase name="returns last text part when multiple exist" classname="extractResponseText" time="0" file="test/cli/github-action.test.ts" line="89" assertions="1" />
2632
- <testcase name="returns text even when tool parts follow" classname="extractResponseText" time="0" file="test/cli/github-action.test.ts" line="94" assertions="1" />
2633
- <testcase name="returns null for reasoning-only response (signals summary needed)" classname="extractResponseText" time="0" file="test/cli/github-action.test.ts" line="99" assertions="1" />
2634
- <testcase name="returns null for tool-only response (signals summary needed)" classname="extractResponseText" time="0" file="test/cli/github-action.test.ts" line="104" assertions="1" />
2635
- <testcase name="returns null for multiple completed tools" classname="extractResponseText" time="0" file="test/cli/github-action.test.ts" line="110" assertions="1" />
2636
- <testcase name="returns null for running tool parts (signals summary needed)" classname="extractResponseText" time="0" file="test/cli/github-action.test.ts" line="119" assertions="1" />
2637
- <testcase name="throws on empty array" classname="extractResponseText" time="0" file="test/cli/github-action.test.ts" line="124" assertions="1" />
2638
- <testcase name="returns null for step-start only" classname="extractResponseText" time="0" file="test/cli/github-action.test.ts" line="128" assertions="1" />
2639
- <testcase name="returns null for step-finish only" classname="extractResponseText" time="0" file="test/cli/github-action.test.ts" line="133" assertions="1" />
2640
- <testcase name="returns null for step-start and step-finish" classname="extractResponseText" time="0" file="test/cli/github-action.test.ts" line="138" assertions="1" />
2641
- <testcase name="returns text from multi-step response" classname="extractResponseText" time="0" file="test/cli/github-action.test.ts" line="143" assertions="1" />
2642
- <testcase name="prefers text over reasoning when both present" classname="extractResponseText" time="0" file="test/cli/github-action.test.ts" line="153" assertions="1" />
2643
- <testcase name="prefers text over tools when both present" classname="extractResponseText" time="0" file="test/cli/github-action.test.ts" line="158" assertions="1" />
2644
- </testsuite>
2645
- <testsuite name="formatPromptTooLargeError" file="test/cli/github-action.test.ts" line="164" tests="3" assertions="8" failures="0" skipped="0" time="0.001" hostname="benmurray-MS-7C84">
2646
- <testcase name="formats error without files" classname="formatPromptTooLargeError" time="0" file="test/cli/github-action.test.ts" line="165" assertions="1" />
2647
- <testcase name="formats error with files (base64 content)" classname="formatPromptTooLargeError" time="0.001" file="test/cli/github-action.test.ts" line="170" assertions="4" />
2648
- <testcase name="lists all files when multiple present" classname="formatPromptTooLargeError" time="0" file="test/cli/github-action.test.ts" line="185" assertions="3" />
2649
- </testsuite>
2650
- </testsuite>
2651
- <testsuite name="test/cli/github-remote.test.ts" file="test/cli/github-remote.test.ts" tests="14" assertions="24" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
2652
- <testcase name="parses https URL with .git suffix" classname="" time="0" file="test/cli/github-remote.test.ts" line="4" assertions="1" />
2653
- <testcase name="parses https URL without .git suffix" classname="" time="0" file="test/cli/github-remote.test.ts" line="8" assertions="1" />
2654
- <testcase name="parses git@ URL with .git suffix" classname="" time="0" file="test/cli/github-remote.test.ts" line="12" assertions="1" />
2655
- <testcase name="parses git@ URL without .git suffix" classname="" time="0" file="test/cli/github-remote.test.ts" line="16" assertions="1" />
2656
- <testcase name="parses ssh:// URL with .git suffix" classname="" time="0" file="test/cli/github-remote.test.ts" line="20" assertions="1" />
2657
- <testcase name="parses ssh:// URL without .git suffix" classname="" time="0" file="test/cli/github-remote.test.ts" line="24" assertions="1" />
2658
- <testcase name="parses http URL" classname="" time="0" file="test/cli/github-remote.test.ts" line="28" assertions="1" />
2659
- <testcase name="parses URL with hyphenated owner and repo names" classname="" time="0" file="test/cli/github-remote.test.ts" line="32" assertions="1" />
2660
- <testcase name="parses URL with underscores in names" classname="" time="0" file="test/cli/github-remote.test.ts" line="36" assertions="1" />
2661
- <testcase name="parses URL with numbers in names" classname="" time="0" file="test/cli/github-remote.test.ts" line="40" assertions="1" />
2662
- <testcase name="parses repos with dots in the name" classname="" time="0" file="test/cli/github-remote.test.ts" line="44" assertions="4" />
2663
- <testcase name="returns null for non-github URLs" classname="" time="0" file="test/cli/github-remote.test.ts" line="63" assertions="3" />
2664
- <testcase name="returns null for invalid URLs" classname="" time="0" file="test/cli/github-remote.test.ts" line="69" assertions="5" />
2665
- <testcase name="returns null for URLs with extra path segments" classname="" time="0" file="test/cli/github-remote.test.ts" line="77" assertions="2" />
2666
- </testsuite>
2667
- <testsuite name="test/cli/account.test.ts" file="test/cli/account.test.ts" tests="3" assertions="3" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
2668
- <testsuite name="console account display" file="test/cli/account.test.ts" line="6" tests="3" assertions="3" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
2669
- <testcase name="includes the account url in account labels" classname="console account display" time="0" file="test/cli/account.test.ts" line="7" assertions="1" />
2670
- <testcase name="includes the active marker in account labels" classname="console account display" time="0" file="test/cli/account.test.ts" line="13" assertions="1" />
2671
- <testcase name="includes the account url in org rows" classname="console account display" time="0" file="test/cli/account.test.ts" line="19" assertions="1" />
2672
- </testsuite>
2673
- </testsuite>
2674
- <testsuite name="test/provider/copilot/copilot-chat-model.test.ts" file="test/provider/copilot/copilot-chat-model.test.ts" tests="11" assertions="62" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
2675
- <testsuite name="doStream" file="test/provider/copilot/copilot-chat-model.test.ts" line="103" tests="10" assertions="61" failures="0" skipped="0" time="0.01" hostname="benmurray-MS-7C84">
2676
- <testcase name="should stream text deltas" classname="doStream" time="0.003" file="test/provider/copilot/copilot-chat-model.test.ts" line="104" assertions="1" />
2677
- <testcase name="should stream reasoning with tool calls and capture reasoning_opaque" classname="doStream" time="0.001" file="test/provider/copilot/copilot-chat-model.test.ts" line="130" assertions="10" />
2678
- <testcase name="should handle reasoning_opaque that comes at end with text in between" classname="doStream" time="0.001" file="test/provider/copilot/copilot-chat-model.test.ts" line="212" assertions="11" />
2679
- <testcase name="should handle reasoning_opaque and content in the same chunk" classname="doStream" time="0.001" file="test/provider/copilot/copilot-chat-model.test.ts" line="272" assertions="11" />
2680
- <testcase name="should handle reasoning_opaque and content followed by tool calls" classname="doStream" time="0.001" file="test/provider/copilot/copilot-chat-model.test.ts" line="322" assertions="13" />
2681
- <testcase name="should emit reasoning-end before tool-input-start when reasoning goes directly to tool calls" classname="doStream" time="0" file="test/provider/copilot/copilot-chat-model.test.ts" line="399" assertions="10" />
2682
- <testcase name="should attach reasoning_opaque to tool calls without reasoning_text" classname="doStream" time="0.001" file="test/provider/copilot/copilot-chat-model.test.ts" line="456" assertions="2" />
2683
- <testcase name="should include response metadata from first chunk" classname="doStream" time="0.001" file="test/provider/copilot/copilot-chat-model.test.ts" line="485" assertions="1" />
2684
- <testcase name="should emit stream-start with warnings" classname="doStream" time="0" file="test/provider/copilot/copilot-chat-model.test.ts" line="504" assertions="1" />
2685
- <testcase name="should include raw chunks when requested" classname="doStream" time="0.001" file="test/provider/copilot/copilot-chat-model.test.ts" line="522" assertions="1" />
2686
- </testsuite>
2687
- <testsuite name="request body" file="test/provider/copilot/copilot-chat-model.test.ts" line="538" tests="1" assertions="1" failures="0" skipped="0" time="0.001" hostname="benmurray-MS-7C84">
2688
- <testcase name="should send tools in OpenAI format" classname="request body" time="0.001" file="test/provider/copilot/copilot-chat-model.test.ts" line="539" assertions="1" />
2689
- </testsuite>
2690
- </testsuite>
2691
- <testsuite name="test/provider/copilot/convert-to-copilot-messages.test.ts" file="test/provider/copilot/convert-to-copilot-messages.test.ts" tests="18" assertions="23" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
2692
- <testsuite name="system messages" file="test/provider/copilot/convert-to-copilot-messages.test.ts" line="4" tests="1" assertions="1" failures="0" skipped="0" time="0.003" hostname="benmurray-MS-7C84">
2693
- <testcase name="should convert system message content to string" classname="system messages" time="0.003" file="test/provider/copilot/convert-to-copilot-messages.test.ts" line="5" assertions="1" />
2694
- </testsuite>
2695
- <testsuite name="user messages" file="test/provider/copilot/convert-to-copilot-messages.test.ts" line="22" tests="5" assertions="5" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
2696
- <testcase name="should convert messages with only a text part to a string content" classname="user messages" time="0" file="test/provider/copilot/convert-to-copilot-messages.test.ts" line="23" assertions="1" />
2697
- <testcase name="should convert messages with image parts" classname="user messages" time="0" file="test/provider/copilot/convert-to-copilot-messages.test.ts" line="34" assertions="1" />
2698
- <testcase name="should convert messages with image parts from Uint8Array" classname="user messages" time="0" file="test/provider/copilot/convert-to-copilot-messages.test.ts" line="63" assertions="1" />
2699
- <testcase name="should handle URL-based images" classname="user messages" time="0" file="test/provider/copilot/convert-to-copilot-messages.test.ts" line="92" assertions="1" />
2700
- <testcase name="should handle multiple text parts without flattening" classname="user messages" time="0" file="test/provider/copilot/convert-to-copilot-messages.test.ts" line="119" assertions="1" />
2701
- </testsuite>
2702
- <testsuite name="assistant messages" file="test/provider/copilot/convert-to-copilot-messages.test.ts" line="142" tests="3" assertions="3" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
2703
- <testcase name="should convert assistant text messages" classname="assistant messages" time="0" file="test/provider/copilot/convert-to-copilot-messages.test.ts" line="143" assertions="1" />
2704
- <testcase name="should handle assistant message with null content when only tool calls" classname="assistant messages" time="0" file="test/provider/copilot/convert-to-copilot-messages.test.ts" line="162" assertions="1" />
2705
- <testcase name="should concatenate multiple text parts" classname="assistant messages" time="0" file="test/provider/copilot/convert-to-copilot-messages.test.ts" line="197" assertions="1" />
2706
- </testsuite>
2707
- <testsuite name="tool calls" file="test/provider/copilot/convert-to-copilot-messages.test.ts" line="212" tests="4" assertions="6" failures="0" skipped="0" time="0.001" hostname="benmurray-MS-7C84">
2708
- <testcase name="should stringify arguments to tool calls" classname="tool calls" time="0" file="test/provider/copilot/convert-to-copilot-messages.test.ts" line="213" assertions="1" />
2709
- <testcase name="should handle text output type in tool results" classname="tool calls" time="0" file="test/provider/copilot/convert-to-copilot-messages.test.ts" line="264" assertions="1" />
2710
- <testcase name="should handle multiple tool results as separate messages" classname="tool calls" time="0.001" file="test/provider/copilot/convert-to-copilot-messages.test.ts" line="288" assertions="3" />
2711
- <testcase name="should handle text plus multiple tool calls" classname="tool calls" time="0" file="test/provider/copilot/convert-to-copilot-messages.test.ts" line="322" assertions="1" />
2712
- </testsuite>
2713
- <testsuite name="reasoning (copilot-specific)" file="test/provider/copilot/convert-to-copilot-messages.test.ts" line="374" tests="4" assertions="4" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
2714
- <testcase name="should omit reasoning_text without reasoning_opaque" classname="reasoning (copilot-specific)" time="0" file="test/provider/copilot/convert-to-copilot-messages.test.ts" line="375" assertions="1" />
2715
- <testcase name="should include reasoning_opaque from providerOptions" classname="reasoning (copilot-specific)" time="0" file="test/provider/copilot/convert-to-copilot-messages.test.ts" line="397" assertions="1" />
2716
- <testcase name="should include reasoning_opaque from text part providerOptions" classname="reasoning (copilot-specific)" time="0" file="test/provider/copilot/convert-to-copilot-messages.test.ts" line="425" assertions="1" />
2717
- <testcase name="should handle reasoning-only assistant message" classname="reasoning (copilot-specific)" time="0" file="test/provider/copilot/convert-to-copilot-messages.test.ts" line="452" assertions="1" />
2718
- </testsuite>
2719
- <testsuite name="full conversation" file="test/provider/copilot/convert-to-copilot-messages.test.ts" line="480" tests="1" assertions="4" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
2720
- <testcase name="should convert a multi-turn conversation with reasoning" classname="full conversation" time="0" file="test/provider/copilot/convert-to-copilot-messages.test.ts" line="481" assertions="4" />
2721
- </testsuite>
2722
- </testsuite>
2723
- <testsuite name="test/cli/tui/keybind-plugin.test.ts" file="test/cli/tui/keybind-plugin.test.ts" tests="5" assertions="10" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
2724
- <testsuite name="createPluginKeybind" file="test/cli/tui/keybind-plugin.test.ts" line="5" tests="5" assertions="10" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
2725
- <testcase name="uses defaults when overrides are missing" classname="createPluginKeybind" time="0" file="test/cli/tui/keybind-plugin.test.ts" line="11" assertions="3" />
2726
- <testcase name="applies valid overrides" classname="createPluginKeybind" time="0" file="test/cli/tui/keybind-plugin.test.ts" line="23" assertions="1" />
2727
- <testcase name="ignores invalid overrides" classname="createPluginKeybind" time="0" file="test/cli/tui/keybind-plugin.test.ts" line="39" assertions="2" />
2728
- <testcase name="resolves names for match" classname="createPluginKeybind" time="0" file="test/cli/tui/keybind-plugin.test.ts" line="54" assertions="1" />
2729
- <testcase name="resolves names for print" classname="createPluginKeybind" time="0" file="test/cli/tui/keybind-plugin.test.ts" line="73" assertions="3" />
2730
- </testsuite>
2731
- </testsuite>
2732
- <testsuite name="test/cli/tui/plugin-lifecycle.test.ts" file="test/cli/tui/plugin-lifecycle.test.ts" tests="4" assertions="11" failures="0" skipped="0" time="5.053" hostname="benmurray-MS-7C84">
2733
- <testcase name="runs onDispose callbacks with aborted signal and is idempotent" classname="" time="0.038001" file="test/cli/tui/plugin-lifecycle.test.ts" line="12" assertions="3" />
2734
- <testcase name="rolls back failed plugin and continues loading next" classname="" time="0.003" file="test/cli/tui/plugin-lifecycle.test.ts" line="63" assertions="2" />
2735
- <testcase name="assigns sequential slot ids scoped to plugin" classname="" time="0.002" file="test/cli/tui/plugin-lifecycle.test.ts" line="120" assertions="5" />
2736
- <testcase name="times out hanging plugin cleanup on dispose" classname="" time="5.010072" file="test/cli/tui/plugin-lifecycle.test.ts" line="184" assertions="1" />
2737
- </testsuite>
2738
- <testsuite name="test/cli/tui/plugin-install.test.ts" file="test/cli/tui/plugin-install.test.ts" tests="1" assertions="4" failures="0" skipped="0" time="0.009" hostname="benmurray-MS-7C84">
2739
- <testcase name="installs plugin without loading it" classname="" time="0.009" file="test/cli/tui/plugin-install.test.ts" line="11" assertions="4" />
2740
- </testsuite>
2741
- <testsuite name="test/cli/tui/plugin-add.test.ts" file="test/cli/tui/plugin-add.test.ts" tests="2" assertions="7" failures="0" skipped="0" time="0.008" hostname="benmurray-MS-7C84">
2742
- <testcase name="adds tui plugin at runtime from spec" classname="" time="0.005" file="test/cli/tui/plugin-add.test.ts" line="11" assertions="3" />
2743
- <testcase name="retries runtime add for file plugins after dependency wait" classname="" time="0.003" file="test/cli/tui/plugin-add.test.ts" line="63" assertions="4" />
2744
- </testsuite>
2745
- <testsuite name="test/cli/tui/plugin-loader-pure.test.ts" file="test/cli/tui/plugin-loader-pure.test.ts" tests="1" assertions="1" failures="0" skipped="0" time="0.004" hostname="benmurray-MS-7C84">
2746
- <testcase name="skips external tui plugins in pure mode" classname="" time="0.004" file="test/cli/tui/plugin-loader-pure.test.ts" line="11" assertions="1" />
2747
- </testsuite>
2748
- <testsuite name="test/cli/tui/theme-store.test.ts" file="test/cli/tui/theme-store.test.ts" tests="5" assertions="12" failures="0" skipped="0" time="0.007" hostname="benmurray-MS-7C84">
2749
- <testcase name="addTheme writes into module theme store" classname="" time="0.004" file="test/cli/tui/theme-store.test.ts" line="7" assertions="2" />
2750
- <testcase name="addTheme keeps first theme for duplicate names" classname="" time="0.001" file="test/cli/tui/theme-store.test.ts" line="14" assertions="4" />
2751
- <testcase name="addTheme ignores entries without a theme object" classname="" time="0" file="test/cli/tui/theme-store.test.ts" line="28" assertions="2" />
2752
- <testcase name="hasTheme checks theme presence" classname="" time="0.001" file="test/cli/tui/theme-store.test.ts" line="34" assertions="3" />
2753
- <testcase name="resolveTheme rejects circular color refs" classname="" time="0.001" file="test/cli/tui/theme-store.test.ts" line="41" assertions="1" />
2754
- </testsuite>
2755
- <testsuite name="test/cli/tui/plugin-loader.test.ts" file="test/cli/tui/plugin-loader.test.ts" tests="5" assertions="59" failures="0" skipped="0" time="0.052" hostname="benmurray-MS-7C84">
2756
- <testcase name="continues loading when a plugin is missing config metadata" classname="" time="0.007" file="test/cli/tui/plugin-loader.test.ts" line="420" assertions="3" />
2757
- <testcase name="initializes external tui plugins in config order" classname="" time="0.033" file="test/cli/tui/plugin-loader.test.ts" line="504" assertions="1" />
2758
- <testsuite name="tui.plugin.loader" file="test/cli/tui/plugin-loader.test.ts" line="582" tests="2" assertions="51" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
2759
- <testcase name="passes keybind, kv, state, and dialog APIs to v1 plugins" classname="tui.plugin.loader" time="0" file="test/cli/tui/plugin-loader.test.ts" line="589" assertions="26" />
2760
- <testcase name="installs themes in the correct scope and remains resilient" classname="tui.plugin.loader" time="0" file="test/cli/tui/plugin-loader.test.ts" line="618" assertions="25" />
2761
- </testsuite>
2762
- <testcase name="updates installed theme when plugin metadata changes" classname="" time="0.012" file="test/cli/tui/plugin-loader.test.ts" line="651" assertions="4" />
2763
- </testsuite>
2764
- <testsuite name="test/cli/tui/transcript.test.ts" file="test/cli/tui/transcript.test.ts" tests="18" assertions="37" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
2765
- <testsuite name="transcript" file="test/cli/tui/transcript.test.ts" line="69" tests="18" assertions="37" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
2766
- <testsuite name="formatAssistantHeader" file="test/cli/tui/transcript.test.ts" line="70" tests="5" assertions="5" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
2767
- <testcase name="includes metadata when enabled" classname="formatAssistantHeader &amp;gt; transcript" time="0" file="test/cli/tui/transcript.test.ts" line="86" assertions="1" />
2768
- <testcase name="uses model display name when available" classname="formatAssistantHeader &amp;gt; transcript" time="0" file="test/cli/tui/transcript.test.ts" line="91" assertions="1" />
2769
- <testcase name="excludes metadata when disabled" classname="formatAssistantHeader &amp;gt; transcript" time="0" file="test/cli/tui/transcript.test.ts" line="96" assertions="1" />
2770
- <testcase name="handles missing completed time" classname="formatAssistantHeader &amp;gt; transcript" time="0" file="test/cli/tui/transcript.test.ts" line="101" assertions="1" />
2771
- <testcase name="titlecases agent name" classname="formatAssistantHeader &amp;gt; transcript" time="0" file="test/cli/tui/transcript.test.ts" line="107" assertions="1" />
2772
- </testsuite>
2773
- <testsuite name="formatPart" file="test/cli/tui/transcript.test.ts" line="114" tests="8" assertions="17" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
2774
- <testcase name="formats text part" classname="formatPart &amp;gt; transcript" time="0" file="test/cli/tui/transcript.test.ts" line="117" assertions="1" />
2775
- <testcase name="skips synthetic text parts" classname="formatPart &amp;gt; transcript" time="0" file="test/cli/tui/transcript.test.ts" line="129" assertions="1" />
2776
- <testcase name="formats reasoning when thinking enabled" classname="formatPart &amp;gt; transcript" time="0" file="test/cli/tui/transcript.test.ts" line="142" assertions="1" />
2777
- <testcase name="skips reasoning when thinking disabled" classname="formatPart &amp;gt; transcript" time="0" file="test/cli/tui/transcript.test.ts" line="155" assertions="1" />
2778
- <testcase name="formats tool part with details" classname="formatPart &amp;gt; transcript" time="0" file="test/cli/tui/transcript.test.ts" line="168" assertions="5" />
2779
- <testcase name="formats tool output containing triple backticks without breaking markdown" classname="formatPart &amp;gt; transcript" time="0" file="test/cli/tui/transcript.test.ts" line="193" assertions="3" />
2780
- <testcase name="formats tool part without details when disabled" classname="formatPart &amp;gt; transcript" time="0" file="test/cli/tui/transcript.test.ts" line="218" assertions="3" />
2781
- <testcase name="formats tool error" classname="formatPart &amp;gt; transcript" time="0" file="test/cli/tui/transcript.test.ts" line="241" assertions="2" />
2782
- </testsuite>
2783
- <testsuite name="formatMessage" file="test/cli/tui/transcript.test.ts" line="262" tests="2" assertions="4" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
2784
- <testcase name="formats user message" classname="formatMessage &amp;gt; transcript" time="0" file="test/cli/tui/transcript.test.ts" line="265" assertions="2" />
2785
- <testcase name="formats assistant message with metadata" classname="formatMessage &amp;gt; transcript" time="0" file="test/cli/tui/transcript.test.ts" line="280" assertions="2" />
2786
- </testsuite>
2787
- <testsuite name="formatTranscript" file="test/cli/tui/transcript.test.ts" line="302" tests="3" assertions="11" failures="0" skipped="0" time="0.002" hostname="benmurray-MS-7C84">
2788
- <testcase name="formats complete transcript" classname="formatTranscript &amp;gt; transcript" time="0.001" file="test/cli/tui/transcript.test.ts" line="303" assertions="7" />
2789
- <testcase name="falls back to raw model id when provider data is missing" classname="formatTranscript &amp;gt; transcript" time="0" file="test/cli/tui/transcript.test.ts" line="357" assertions="1" />
2790
- <testcase name="formats transcript without assistant metadata" classname="formatTranscript &amp;gt; transcript" time="0.001" file="test/cli/tui/transcript.test.ts" line="392" assertions="3" />
2791
- </testsuite>
2792
- </testsuite>
2793
- </testsuite>
2794
- <testsuite name="test/cli/tui/slot-replace.test.tsx" file="test/cli/tui/slot-replace.test.tsx" tests="1" assertions="1" failures="0" skipped="0" time="0.015" hostname="benmurray-MS-7C84">
2795
- <testcase name="replace slot mounts plugin content once" classname="" time="0.015" file="test/cli/tui/slot-replace.test.tsx" line="8" assertions="1" />
2796
- </testsuite>
2797
- <testsuite name="test/cli/tui/thread.test.ts" file="test/cli/tui/thread.test.ts" tests="2" assertions="6" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
2798
- <testsuite name="tui thread" file="test/cli/tui/thread.test.ts" line="52" tests="2" assertions="6" failures="0" skipped="0" time="0.05" hostname="benmurray-MS-7C84">
2799
- <testcase name="uses the real cwd when PWD points at a symlink" classname="tui thread" time="0.028" file="test/cli/tui/thread.test.ts" line="121" assertions="3" />
2800
- <testcase name="uses the real cwd after resolving a relative project from PWD" classname="tui thread" time="0.022" file="test/cli/tui/thread.test.ts" line="125" assertions="3" />
2801
- </testsuite>
2802
- </testsuite>
2803
- <testsuite name="test/cli/tui/plugin-loader-entrypoint.test.ts" file="test/cli/tui/plugin-loader-entrypoint.test.ts" tests="8" assertions="20" failures="0" skipped="0" time="0.026" hostname="benmurray-MS-7C84">
2804
- <testcase name="loads npm tui plugin from package ./tui export" classname="" time="0.007" file="test/cli/tui/plugin-loader-entrypoint.test.ts" line="12" assertions="4" />
2805
- <testcase name="does not use npm package exports dot for tui entry" classname="" time="0.002" file="test/cli/tui/plugin-loader-entrypoint.test.ts" line="78" assertions="2" />
2806
- <testcase name="rejects npm tui export that resolves outside plugin directory" classname="" time="0.002" file="test/cli/tui/plugin-loader-entrypoint.test.ts" line="137" assertions="2" />
2807
- <testcase name="rejects npm tui plugin that exports server and tui together" classname="" time="0.002" file="test/cli/tui/plugin-loader-entrypoint.test.ts" line="202" assertions="2" />
2808
- <testcase name="does not use npm package main for tui entry" classname="" time="0.002" file="test/cli/tui/plugin-loader-entrypoint.test.ts" line="263" assertions="4" />
2809
- <testcase name="does not use directory package main for tui entry" classname="" time="0.005" file="test/cli/tui/plugin-loader-entrypoint.test.ts" line="328" assertions="2" />
2810
- <testcase name="uses directory index fallback for tui when package.json is missing" classname="" time="0.003" file="test/cli/tui/plugin-loader-entrypoint.test.ts" line="386" assertions="2" />
2811
- <testcase name="uses npm package name when tui plugin id is omitted" classname="" time="0.003" file="test/cli/tui/plugin-loader-entrypoint.test.ts" line="434" assertions="2" />
2812
- </testsuite>
2813
- <testsuite name="test/cli/tui/plugin-toggle.test.ts" file="test/cli/tui/plugin-toggle.test.ts" tests="2" assertions="11" failures="0" skipped="0" time="0.007" hostname="benmurray-MS-7C84">
2814
- <testcase name="toggles plugin runtime state by exported id" classname="" time="0.005" file="test/cli/tui/plugin-toggle.test.ts" line="11" assertions="9" />
2815
- <testcase name="kv plugin_enabled overrides tui config on startup" classname="" time="0.002" file="test/cli/tui/plugin-toggle.test.ts" line="94" assertions="2" />
2816
- </testsuite>
2817
- <testsuite name="test/cli/cmd/tui/prompt-part.test.ts" file="test/cli/cmd/tui/prompt-part.test.ts" tests="2" assertions="4" failures="0" skipped="0" time="0" hostname="benmurray-MS-7C84">
2818
- <testsuite name="prompt part" file="test/cli/cmd/tui/prompt-part.test.ts" line="5" tests="2" assertions="4" failures="0" skipped="0" time="0.003" hostname="benmurray-MS-7C84">
2819
- <testcase name="strip removes persisted ids from reused file parts" classname="prompt part" time="0.002" file="test/cli/cmd/tui/prompt-part.test.ts" line="6" assertions="1" />
2820
- <testcase name="assign overwrites stale runtime ids" classname="prompt part" time="0.001" file="test/cli/cmd/tui/prompt-part.test.ts" line="25" assertions="3" />
2821
- </testsuite>
2822
- </testsuite>
2823
- </testsuites>