@tyvm/knowhow 0.0.159 → 0.0.161

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 (906) hide show
  1. package/README.md +6 -6
  2. package/package.json +2 -2
  3. package/ts_build/package.json +2 -2
  4. package/ts_build/src/chat/CliChatService.d.ts +2 -1
  5. package/ts_build/src/chat/CliChatService.js +29 -3
  6. package/ts_build/src/chat/CliChatService.js.map +1 -1
  7. package/ts_build/src/chat/modules/AgentModule.js +21 -17
  8. package/ts_build/src/chat/modules/AgentModule.js.map +1 -1
  9. package/ts_build/src/chat/renderer/ConsoleRenderer.js +32 -25
  10. package/ts_build/src/chat/renderer/ConsoleRenderer.js.map +1 -1
  11. package/ts_build/src/clients/anthropic.js +4 -1
  12. package/ts_build/src/clients/anthropic.js.map +1 -1
  13. package/ts_build/src/clients/contextLimits.js +13 -7
  14. package/ts_build/src/clients/contextLimits.js.map +1 -1
  15. package/ts_build/src/clients/index.js +3 -1
  16. package/ts_build/src/clients/index.js.map +1 -1
  17. package/ts_build/src/clients/openai.js +18 -5
  18. package/ts_build/src/clients/openai.js.map +1 -1
  19. package/ts_build/src/clients/pricing/anthropic.d.ts +2 -0
  20. package/ts_build/src/clients/pricing/anthropic.js +21 -1
  21. package/ts_build/src/clients/pricing/anthropic.js.map +1 -1
  22. package/ts_build/src/clients/pricing/openai.d.ts +2 -0
  23. package/ts_build/src/clients/pricing/openai.js +32 -7
  24. package/ts_build/src/clients/pricing/openai.js.map +1 -1
  25. package/ts_build/src/clients/pricing/types.d.ts +4 -0
  26. package/ts_build/src/clients/pricing/types.js.map +1 -1
  27. package/ts_build/src/clients/pricing/xai.d.ts +2 -0
  28. package/ts_build/src/clients/pricing/xai.js +13 -8
  29. package/ts_build/src/clients/pricing/xai.js.map +1 -1
  30. package/ts_build/src/clients/xai.js +20 -8
  31. package/ts_build/src/clients/xai.js.map +1 -1
  32. package/ts_build/src/commands/misc.js +15 -2
  33. package/ts_build/src/commands/misc.js.map +1 -1
  34. package/ts_build/src/logger.d.ts +1 -0
  35. package/ts_build/src/logger.js +13 -1
  36. package/ts_build/src/logger.js.map +1 -1
  37. package/ts_build/src/remotes.d.ts +2 -0
  38. package/ts_build/src/remotes.js +20 -2
  39. package/ts_build/src/remotes.js.map +1 -1
  40. package/ts_build/src/tunnel.js +7 -2
  41. package/ts_build/src/tunnel.js.map +1 -1
  42. package/ts_build/src/types.d.ts +12 -1
  43. package/ts_build/src/types.js.map +1 -1
  44. package/ts_build/src/utils/InputQueueManager.d.ts +8 -1
  45. package/ts_build/src/utils/InputQueueManager.js +74 -3
  46. package/ts_build/src/utils/InputQueueManager.js.map +1 -1
  47. package/ts_build/src/utils/index.d.ts +3 -1
  48. package/ts_build/src/utils/index.js +11 -3
  49. package/ts_build/src/utils/index.js.map +1 -1
  50. package/ts_build/src/worker.js +4 -1
  51. package/ts_build/src/worker.js.map +1 -1
  52. package/ts_build/src/workers/tools/listAllowedPorts.d.ts +2 -1
  53. package/ts_build/src/workers/tools/listAllowedPorts.js +1 -1
  54. package/ts_build/src/workers/tools/listAllowedPorts.js.map +1 -1
  55. package/CONFIG.md +0 -429
  56. package/PROCESSING.md +0 -450
  57. package/WORKER.md +0 -260
  58. package/autodoc/README.md +0 -324
  59. package/autodoc/chat-guide.md +0 -444
  60. package/autodoc/cli-reference.md +0 -720
  61. package/autodoc/config-reference.md +0 -642
  62. package/autodoc/embeddings-guide.md +0 -467
  63. package/autodoc/generate-guide.md +0 -437
  64. package/autodoc/language-plugin-guide.md +0 -417
  65. package/autodoc/modules-guide.md +0 -379
  66. package/autodoc/plugins-guide.md +0 -721
  67. package/autodoc/quickstart-guide.md +0 -126
  68. package/autodoc/skills-guide.md +0 -584
  69. package/autodoc/worker-guide.md +0 -519
  70. package/docs/input-queue-manager.md +0 -142
  71. package/docs/multi-worker-management.md +0 -142
  72. package/docs/shell-commands.md +0 -174
  73. package/jest.config.js +0 -19
  74. package/jest.manual.config.js +0 -19
  75. package/scripts/README.md +0 -119
  76. package/scripts/build-for-node.sh +0 -148
  77. package/scripts/cache-miss-debug.ts +0 -365
  78. package/scripts/check-isolated-deps.sh +0 -69
  79. package/scripts/check-model-pricing.ts +0 -509
  80. package/scripts/compare-openrouter-coverage.ts +0 -576
  81. package/scripts/migrate-usage-json.js +0 -147
  82. package/scripts/publish.sh +0 -86
  83. package/scripts/restore_keys.sh +0 -59
  84. package/scripts/test-repetition-hint.ts +0 -302
  85. package/scripts/unset_keys.sh +0 -60
  86. package/src/agents/base/base.ts +0 -1963
  87. package/src/agents/base/prompt.ts +0 -55
  88. package/src/agents/configurable/ConfigAgent.ts +0 -24
  89. package/src/agents/developer/developer.ts +0 -76
  90. package/src/agents/historyRollback.ts +0 -36
  91. package/src/agents/index.ts +0 -52
  92. package/src/agents/interface.ts +0 -11
  93. package/src/agents/patcher/codebase.md +0 -27
  94. package/src/agents/patcher/patcher.ts +0 -131
  95. package/src/agents/researcher/researcher.ts +0 -115
  96. package/src/agents/setup/setup.ts +0 -63
  97. package/src/agents/tools/addInternalTools.ts +0 -21
  98. package/src/agents/tools/agentCall.ts +0 -34
  99. package/src/agents/tools/aiClient.ts +0 -178
  100. package/src/agents/tools/askHuman.ts +0 -10
  101. package/src/agents/tools/callPlugin.ts +0 -10
  102. package/src/agents/tools/connectAgent.ts +0 -355
  103. package/src/agents/tools/embeddingSearch.ts +0 -6
  104. package/src/agents/tools/execCommand.ts +0 -162
  105. package/src/agents/tools/fileSearch.ts +0 -35
  106. package/src/agents/tools/finalAnswer.ts +0 -4
  107. package/src/agents/tools/googleSearch.ts +0 -243
  108. package/src/agents/tools/index.ts +0 -33
  109. package/src/agents/tools/language/definitions.ts +0 -105
  110. package/src/agents/tools/language/index.ts +0 -20
  111. package/src/agents/tools/lazy/definitions.ts +0 -72
  112. package/src/agents/tools/lazy/disableTools.ts +0 -16
  113. package/src/agents/tools/lazy/enableTools.ts +0 -16
  114. package/src/agents/tools/lazy/index.ts +0 -3
  115. package/src/agents/tools/lazy/listAvailableTools.ts +0 -17
  116. package/src/agents/tools/lintFile.ts +0 -19
  117. package/src/agents/tools/list.ts +0 -739
  118. package/src/agents/tools/loadImageAsBase64.ts +0 -83
  119. package/src/agents/tools/loadWebpage.ts +0 -19
  120. package/src/agents/tools/mcp/connectMcpServer.ts +0 -40
  121. package/src/agents/tools/mcp/definitions.ts +0 -67
  122. package/src/agents/tools/mcp/disconnectMcpServer.ts +0 -40
  123. package/src/agents/tools/mcp/index.ts +0 -3
  124. package/src/agents/tools/mcp/listAvailableMcpServers.ts +0 -28
  125. package/src/agents/tools/minimal/callTool.ts +0 -45
  126. package/src/agents/tools/minimal/definitions.ts +0 -50
  127. package/src/agents/tools/minimal/index.ts +0 -3
  128. package/src/agents/tools/minimal/inspectTools.ts +0 -27
  129. package/src/agents/tools/modifyFile.ts +0 -53
  130. package/src/agents/tools/observe.ts +0 -247
  131. package/src/agents/tools/patch.ts +0 -1287
  132. package/src/agents/tools/readBlocks.ts +0 -83
  133. package/src/agents/tools/readFile.ts +0 -105
  134. package/src/agents/tools/replyToParent.ts +0 -123
  135. package/src/agents/tools/runGenerate.ts +0 -210
  136. package/src/agents/tools/scanFile.ts +0 -16
  137. package/src/agents/tools/sendAgentMessage.ts +0 -139
  138. package/src/agents/tools/skills.ts +0 -79
  139. package/src/agents/tools/startAgentTask.ts +0 -393
  140. package/src/agents/tools/stringReplace.ts +0 -105
  141. package/src/agents/tools/textSearch.ts +0 -128
  142. package/src/agents/tools/types/fileblock.ts +0 -5
  143. package/src/agents/tools/visionTool.ts +0 -35
  144. package/src/agents/tools/waitForAgentCompleted.ts +0 -270
  145. package/src/agents/tools/writeFile.ts +0 -106
  146. package/src/agents/tools/ycmd/client.ts +0 -608
  147. package/src/agents/tools/ycmd/definitions.ts +0 -294
  148. package/src/agents/tools/ycmd/detection.ts +0 -211
  149. package/src/agents/tools/ycmd/index.ts +0 -11
  150. package/src/agents/tools/ycmd/installer.ts +0 -251
  151. package/src/agents/tools/ycmd/server.ts +0 -545
  152. package/src/agents/tools/ycmd/serverManager.ts +0 -316
  153. package/src/agents/tools/ycmd/tools/completion.ts +0 -113
  154. package/src/agents/tools/ycmd/tools/diagnostics.ts +0 -166
  155. package/src/agents/tools/ycmd/tools/getLocations.ts +0 -173
  156. package/src/agents/tools/ycmd/tools/goto.ts +0 -169
  157. package/src/agents/tools/ycmd/tools/refactor.ts +0 -204
  158. package/src/agents/tools/ycmd/tools/signature.ts +0 -174
  159. package/src/agents/tools/ycmd/tools/start.ts +0 -95
  160. package/src/agents/tools/ycmd/utils/pathUtils.ts +0 -59
  161. package/src/ai.ts +0 -306
  162. package/src/auth/browserLogin.ts +0 -406
  163. package/src/auth/environmentAuth.ts +0 -51
  164. package/src/auth/errors.ts +0 -6
  165. package/src/auth/jwtStore.ts +0 -70
  166. package/src/auth/keyAuth.ts +0 -142
  167. package/src/auth/keyManager.ts +0 -331
  168. package/src/auth/registerIdentity.ts +0 -67
  169. package/src/auth/spinner.ts +0 -23
  170. package/src/chat/CliChatService.ts +0 -438
  171. package/src/chat/modules/AgentModule.ts +0 -1664
  172. package/src/chat/modules/AskModule.ts +0 -98
  173. package/src/chat/modules/BaseChatModule.ts +0 -65
  174. package/src/chat/modules/ClipboardImageModule.ts +0 -136
  175. package/src/chat/modules/CustomCommandsModule.ts +0 -80
  176. package/src/chat/modules/InternalChatModule.ts +0 -216
  177. package/src/chat/modules/RemoteSyncModule.ts +0 -482
  178. package/src/chat/modules/RendererModule.ts +0 -139
  179. package/src/chat/modules/SearchModule.ts +0 -168
  180. package/src/chat/modules/SessionsModule.ts +0 -969
  181. package/src/chat/modules/SetupModule.ts +0 -185
  182. package/src/chat/modules/ShellCommandModule.ts +0 -98
  183. package/src/chat/modules/SystemModule.ts +0 -161
  184. package/src/chat/modules/ToolCommandModule.ts +0 -102
  185. package/src/chat/modules/VoiceModule.ts +0 -70
  186. package/src/chat/modules/index.ts +0 -8
  187. package/src/chat/renderer/CompactRenderer.ts +0 -229
  188. package/src/chat/renderer/ConsoleRenderer.ts +0 -160
  189. package/src/chat/renderer/FancyRenderer.ts +0 -440
  190. package/src/chat/renderer/PlainRenderer.ts +0 -218
  191. package/src/chat/renderer/index.ts +0 -6
  192. package/src/chat/renderer/loadRenderer.ts +0 -316
  193. package/src/chat/renderer/messagesToRenderEvents.ts +0 -96
  194. package/src/chat/renderer/types.ts +0 -99
  195. package/src/chat/types.ts +0 -146
  196. package/src/chat.ts +0 -140
  197. package/src/cli.ts +0 -180
  198. package/src/clients/anthropic.ts +0 -772
  199. package/src/clients/attribution.ts +0 -53
  200. package/src/clients/cerebras.ts +0 -10
  201. package/src/clients/contextLimits.ts +0 -263
  202. package/src/clients/copilot.ts +0 -23
  203. package/src/clients/deepseek.ts +0 -16
  204. package/src/clients/fireworks.ts +0 -71
  205. package/src/clients/gemini.ts +0 -1169
  206. package/src/clients/github.ts +0 -16
  207. package/src/clients/groq.ts +0 -15
  208. package/src/clients/http.ts +0 -719
  209. package/src/clients/index.ts +0 -1153
  210. package/src/clients/knowhow.ts +0 -130
  211. package/src/clients/knowhowMcp.ts +0 -118
  212. package/src/clients/llama.ts +0 -16
  213. package/src/clients/meta.ts +0 -27
  214. package/src/clients/mistral.ts +0 -16
  215. package/src/clients/nvidia.ts +0 -16
  216. package/src/clients/openai.ts +0 -1186
  217. package/src/clients/openrouter.ts +0 -24
  218. package/src/clients/pricing/anthropic.ts +0 -149
  219. package/src/clients/pricing/cerebras.ts +0 -11
  220. package/src/clients/pricing/copilot.ts +0 -60
  221. package/src/clients/pricing/deepseek.ts +0 -15
  222. package/src/clients/pricing/fireworks.ts +0 -182
  223. package/src/clients/pricing/github.ts +0 -69
  224. package/src/clients/pricing/google.ts +0 -385
  225. package/src/clients/pricing/groq.ts +0 -56
  226. package/src/clients/pricing/index.ts +0 -44
  227. package/src/clients/pricing/llama.ts +0 -18
  228. package/src/clients/pricing/meta.ts +0 -12
  229. package/src/clients/pricing/mistral.ts +0 -34
  230. package/src/clients/pricing/models.ts +0 -25
  231. package/src/clients/pricing/nvidia.ts +0 -102
  232. package/src/clients/pricing/openai.ts +0 -409
  233. package/src/clients/pricing/openrouter.ts +0 -36
  234. package/src/clients/pricing/qwen.ts +0 -80
  235. package/src/clients/pricing/types.ts +0 -125
  236. package/src/clients/pricing/xai.ts +0 -137
  237. package/src/clients/qwen.ts +0 -16
  238. package/src/clients/responseMetadata.ts +0 -221
  239. package/src/clients/types.ts +0 -531
  240. package/src/clients/withRetry.ts +0 -89
  241. package/src/clients/xai.ts +0 -693
  242. package/src/cloudWorker.ts +0 -394
  243. package/src/commands/agent.ts +0 -342
  244. package/src/commands/agents.ts +0 -1037
  245. package/src/commands/behaviors.ts +0 -47
  246. package/src/commands/convert.ts +0 -291
  247. package/src/commands/hash.ts +0 -179
  248. package/src/commands/mcp.ts +0 -743
  249. package/src/commands/misc.ts +0 -373
  250. package/src/commands/modules.ts +0 -704
  251. package/src/commands/processes.ts +0 -248
  252. package/src/commands/remote.ts +0 -77
  253. package/src/commands/replay.ts +0 -503
  254. package/src/commands/sandbox.ts +0 -566
  255. package/src/commands/services.ts +0 -168
  256. package/src/commands/skills.ts +0 -107
  257. package/src/commands/workers.ts +0 -168
  258. package/src/config.ts +0 -468
  259. package/src/conversion.ts +0 -69
  260. package/src/dataset/diffs/README.md +0 -12
  261. package/src/dataset/diffs/debug-errors.ts +0 -29
  262. package/src/dataset/diffs/debug.ts +0 -64
  263. package/src/dataset/diffs/generate.ts +0 -71
  264. package/src/dataset/diffs/jsonl.ts +0 -53
  265. package/src/dataset/diffs/test.ts +0 -194
  266. package/src/embeddings.ts +0 -494
  267. package/src/fileSync.ts +0 -369
  268. package/src/generate.ts +0 -529
  269. package/src/hashes.ts +0 -180
  270. package/src/index.ts +0 -261
  271. package/src/logger.ts +0 -197
  272. package/src/login.ts +0 -209
  273. package/src/microphone.ts +0 -141
  274. package/src/migrations.ts +0 -151
  275. package/src/plugins/AgentsMdPlugin.ts +0 -118
  276. package/src/plugins/GitPlugin.ts +0 -598
  277. package/src/plugins/LinterPlugin.ts +0 -214
  278. package/src/plugins/PluginBase.ts +0 -70
  279. package/src/plugins/SkillsPlugin.ts +0 -37
  280. package/src/plugins/embedding.ts +0 -82
  281. package/src/plugins/exec.ts +0 -70
  282. package/src/plugins/language.ts +0 -290
  283. package/src/plugins/plugins.ts +0 -175
  284. package/src/plugins/tmux.ts +0 -132
  285. package/src/plugins/types.ts +0 -36
  286. package/src/plugins/url.ts +0 -101
  287. package/src/plugins/vim.ts +0 -89
  288. package/src/processes/ProcessManager.ts +0 -96
  289. package/src/processes/managedProcessShim.ts +0 -138
  290. package/src/processors/Base64ImageDetector.ts +0 -502
  291. package/src/processors/CustomVariables.ts +0 -693
  292. package/src/processors/GemmaToolProcessor.ts +0 -163
  293. package/src/processors/HarmonyToolProcessor.ts +0 -264
  294. package/src/processors/JsonCompressor.ts +0 -510
  295. package/src/processors/MinimalToolsMessageProcessor.ts +0 -113
  296. package/src/processors/TokenCompressor.ts +0 -620
  297. package/src/processors/ToolResponseCache.ts +0 -322
  298. package/src/processors/XmlToolCallProcessor.ts +0 -533
  299. package/src/processors/index.ts +0 -14
  300. package/src/processors/tools/boundedToolResponse.ts +0 -49
  301. package/src/processors/tools/grepToolResponse.ts +0 -230
  302. package/src/processors/tools/index.ts +0 -23
  303. package/src/processors/tools/jqToolResponse.ts +0 -159
  304. package/src/processors/tools/listStoredToolResponses.ts +0 -124
  305. package/src/processors/tools/tailToolResponse.ts +0 -148
  306. package/src/prompts/BasicCodeDocumenter.ts +0 -1
  307. package/src/prompts/BasicProjectDocumenter.ts +0 -1
  308. package/src/prompts/EmbeddingSeachHelper.ts +0 -1
  309. package/src/prompts/KnowhowConfigExamples.ts +0 -376
  310. package/src/prompts/index.ts +0 -9
  311. package/src/remotes.ts +0 -110
  312. package/src/server/index.ts +0 -16
  313. package/src/services/AgentService.ts +0 -134
  314. package/src/services/AgentSyncFs.ts +0 -775
  315. package/src/services/AgentSyncKnowhowWeb.ts +0 -389
  316. package/src/services/BehaviorsService.ts +0 -466
  317. package/src/services/DockerService.ts +0 -511
  318. package/src/services/EmbeddingService.ts +0 -427
  319. package/src/services/EmbeddingsService.ts +0 -73
  320. package/src/services/EventService.ts +0 -279
  321. package/src/services/ExtensionsService.ts +0 -25
  322. package/src/services/KnowhowClient.ts +0 -928
  323. package/src/services/LazyToolsService.ts +0 -210
  324. package/src/services/Mcp.ts +0 -727
  325. package/src/services/McpServer.ts +0 -155
  326. package/src/services/McpWebsocketTransport.ts +0 -87
  327. package/src/services/MediaProcessorService.ts +0 -669
  328. package/src/services/MessageProcessor.ts +0 -114
  329. package/src/services/MinimalToolsService.ts +0 -177
  330. package/src/services/RuntimeReloadService.ts +0 -31
  331. package/src/services/S3.ts +0 -61
  332. package/src/services/SessionManager.ts +0 -358
  333. package/src/services/SkillsService.ts +0 -822
  334. package/src/services/SyncedAgentWatcher.ts +0 -124
  335. package/src/services/SyncerService.ts +0 -191
  336. package/src/services/TaskRegistry.ts +0 -110
  337. package/src/services/Tools.ts +0 -580
  338. package/src/services/TracingService.ts +0 -116
  339. package/src/services/conversion/ConversionService.ts +0 -757
  340. package/src/services/conversion/index.ts +0 -2
  341. package/src/services/conversion/types.ts +0 -87
  342. package/src/services/flags.ts +0 -51
  343. package/src/services/index.ts +0 -117
  344. package/src/services/modules/computerUse.ts +0 -218
  345. package/src/services/modules/index.ts +0 -314
  346. package/src/services/modules/types.ts +0 -109
  347. package/src/services/types.ts +0 -60
  348. package/src/services/watchers/FsSyncer.ts +0 -199
  349. package/src/services/watchers/RemoteSyncer.ts +0 -196
  350. package/src/services/watchers/index.ts +0 -2
  351. package/src/tunnel.ts +0 -243
  352. package/src/types.ts +0 -282
  353. package/src/util/Trace.ts +0 -236
  354. package/src/utils/InputQueueManager.ts +0 -493
  355. package/src/utils/errors.ts +0 -0
  356. package/src/utils/http.ts +0 -150
  357. package/src/utils/index.ts +0 -111
  358. package/src/worker.ts +0 -696
  359. package/src/workerRegistry.ts +0 -152
  360. package/src/workers/auth/PasskeySetup.ts +0 -181
  361. package/src/workers/auth/WorkerPasskeyAuth.ts +0 -190
  362. package/src/workers/auth/WsMiddleware.ts +0 -99
  363. package/src/workers/auth/authMiddleware.ts +0 -104
  364. package/src/workers/auth/types.ts +0 -70
  365. package/src/workers/tools/getChallenge.ts +0 -33
  366. package/src/workers/tools/index.ts +0 -20
  367. package/src/workers/tools/listAllowedPorts.ts +0 -30
  368. package/src/workers/tools/lock.ts +0 -31
  369. package/src/workers/tools/reloadConfig.ts +0 -84
  370. package/src/workers/tools/unlock.ts +0 -116
  371. package/tests/XmlToolCallProcessor.test.ts +0 -468
  372. package/tests/agents/interrupt.test.ts +0 -200
  373. package/tests/agents/observe-base.test.ts +0 -183
  374. package/tests/agents/tools/connectAgent.test.ts +0 -138
  375. package/tests/agents/tools/observe.test.ts +0 -179
  376. package/tests/agents/tools/readFile.test.ts +0 -88
  377. package/tests/agents/tools/replyToParent.test.ts +0 -125
  378. package/tests/agents/tools/sendAgentMessage.test.ts +0 -99
  379. package/tests/agents/tools/waitForAgentCompleted.test.ts +0 -147
  380. package/tests/chat/detach-attach-rendering.test.ts +0 -315
  381. package/tests/clients/AIClient.test.ts +0 -668
  382. package/tests/clients/anthropic.test.ts +0 -202
  383. package/tests/clients/contextLimits.test.ts +0 -97
  384. package/tests/clients/fireworks.test.ts +0 -65
  385. package/tests/clients/openai.images.test.ts +0 -105
  386. package/tests/clients/pricing.test.ts +0 -206
  387. package/tests/clients/reasoningEffort.test.ts +0 -140
  388. package/tests/compressor/bigstring.test.ts +0 -450
  389. package/tests/compressor/bigstring.txt +0 -1
  390. package/tests/compressor/githubjson.txt +0 -1
  391. package/tests/compressor/toolResponseCache.test.ts +0 -304
  392. package/tests/compressor/usageBase64.json +0 -159
  393. package/tests/compressor/usageBase64.test.ts +0 -175
  394. package/tests/fixtures/fake-secret.txt +0 -1
  395. package/tests/manual/agent-events/run-test.ts +0 -203
  396. package/tests/manual/browser-login/README.md +0 -189
  397. package/tests/manual/browser-login/test_browser_login_basic.ts +0 -115
  398. package/tests/manual/browser-login/test_cli_integration.ts +0 -169
  399. package/tests/manual/browser-login/test_cross_platform_browser.ts +0 -186
  400. package/tests/manual/browser-login/test_error_scenarios.ts +0 -223
  401. package/tests/manual/cli/no-env.sh +0 -274
  402. package/tests/manual/clients/completions.json +0 -1151
  403. package/tests/manual/clients/completions.test.ts +0 -198
  404. package/tests/manual/file-edits/figma.test.ts +0 -3
  405. package/tests/manual/file-edits/fileblocks/readwrite.test.ts +0 -100
  406. package/tests/manual/file-edits/patching/input.txt +0 -145
  407. package/tests/manual/file-edits/patching/output.txt +0 -145
  408. package/tests/manual/file-edits/patching/patch.txt +0 -15
  409. package/tests/manual/file-edits/patching/unseen.txt +0 -80
  410. package/tests/manual/file-edits/patching.test.ts +0 -139
  411. package/tests/manual/modalities/README.md +0 -157
  412. package/tests/manual/modalities/google.modalities.test.ts +0 -335
  413. package/tests/manual/modalities/openai.modalities.test.ts +0 -329
  414. package/tests/manual/modalities/streaming.test.ts +0 -260
  415. package/tests/manual/modalities/xai.modalities.test.ts +0 -294
  416. package/tests/manual/test-concurrent-ask.ts +0 -43
  417. package/tests/manual/ycmd/debug_diagnostics_test.ts +0 -127
  418. package/tests/manual/ycmd/fixtures/debug_diagnostics.ts +0 -26
  419. package/tests/manual/ycmd/fixtures/file_change_test.ts +0 -17
  420. package/tests/manual/ycmd/minimal_advanced_test.ts +0 -108
  421. package/tests/manual/ycmd/simple_diagnostics_test.ts +0 -61
  422. package/tests/manual/ycmd/simple_test.ts +0 -74
  423. package/tests/manual/ycmd/test-typescript-sample.ts +0 -34
  424. package/tests/manual/ycmd/test_advanced_features.ts +0 -407
  425. package/tests/manual/ycmd/test_advanced_with_tools.ts +0 -320
  426. package/tests/manual/ycmd/test_comprehensive_typescript.ts +0 -179
  427. package/tests/manual/ycmd/test_diagnostics_file_changes.ts +0 -249
  428. package/tests/manual/ycmd/test_diagnostics_fix.ts +0 -99
  429. package/tests/manual/ycmd/test_diagnostics_simple.ts +0 -100
  430. package/tests/manual/ycmd/test_diagnostics_timing.ts +0 -120
  431. package/tests/manual/ycmd/test_discover_commands.ts +0 -310
  432. package/tests/manual/ycmd/test_endpoints.ts +0 -115
  433. package/tests/manual/ycmd/test_final_comprehensive.ts +0 -218
  434. package/tests/manual/ycmd/test_final_validation.ts +0 -150
  435. package/tests/manual/ycmd/test_implementation.js +0 -42
  436. package/tests/manual/ycmd/test_individual_ycmd_tool.ts +0 -39
  437. package/tests/manual/ycmd/test_server_manager.ts +0 -52
  438. package/tests/manual/ycmd/test_simple_debug.ts +0 -86
  439. package/tests/manual/ycmd/test_tsserver_workflow.js +0 -83
  440. package/tests/manual/ycmd/test_tsserver_workflow.ts +0 -122
  441. package/tests/manual/ycmd/test_typescript_simple.ts +0 -48
  442. package/tests/manual/ycmd/test_typescript_ycmd.ts +0 -105
  443. package/tests/manual/ycmd/test_workspace_config.ts +0 -90
  444. package/tests/manual/ycmd/test_ycmd_auto_start.ts +0 -137
  445. package/tests/manual/ycmd/test_ycmd_comprehensive.ts +0 -73
  446. package/tests/manual/ycmd/test_ycmd_connection.py +0 -10
  447. package/tests/manual/ycmd/test_ycmd_direct.ts +0 -142
  448. package/tests/manual/ycmd/test_ycmd_experiment.ts +0 -48
  449. package/tests/manual/ycmd/test_ycmd_final.ts +0 -200
  450. package/tests/manual/ycmd/test_ycmd_fixed.py +0 -18
  451. package/tests/manual/ycmd/test_ycmd_integration.ts +0 -112
  452. package/tests/manual/ycmd/test_ycmd_simple.ts +0 -45
  453. package/tests/manual/ycmd/test_ycmd_usage.py +0 -27
  454. package/tests/manual/ycmd/working_simple_test.ts +0 -134
  455. package/tests/patching/corrupted.test.ts +0 -78
  456. package/tests/patching/fixtures/transcript-mangles/agent-sync-fs-nested-catch.json +0 -9
  457. package/tests/patching/fixtures/transcript-mangles/automation-functions-crossed.json +0 -9
  458. package/tests/patching/fixtures/transcript-mangles/fruit-ninja-confirmed-retirement.json +0 -8
  459. package/tests/patching/imports.patch.txt +0 -11
  460. package/tests/patching/imports.test.ts +0 -43
  461. package/tests/patching/imports.txt +0 -11
  462. package/tests/patching/interface.patch.txt +0 -15
  463. package/tests/patching/interface.txt +0 -7
  464. package/tests/patching/patchFileOutput.test.ts +0 -328
  465. package/tests/patching/regression-2026.test.ts +0 -752
  466. package/tests/patching/transcriptMangleRegression.test.ts +0 -125
  467. package/tests/plugins/language/languagePlugin-content-triggers.test.ts +0 -346
  468. package/tests/plugins/language/languagePlugin-integration.test.ts +0 -471
  469. package/tests/plugins/language/languagePlugin.test.ts +0 -385
  470. package/tests/processes/managedProcessShim.test.ts +0 -59
  471. package/tests/processors/Base64ImageDetector.test.ts +0 -979
  472. package/tests/processors/CustomVariables.test.ts +0 -981
  473. package/tests/processors/CustomVariablesBenchmark.test.ts +0 -237
  474. package/tests/processors/HarmonyToolProcessor.test.ts +0 -490
  475. package/tests/processors/TokenCompressor.test.ts +0 -674
  476. package/tests/processors/ToolResponseCache.test.ts +0 -864
  477. package/tests/processors/tools/boundedRetrievalTools.test.ts +0 -68
  478. package/tests/processors/tools/grepToolResponse.test.ts +0 -159
  479. package/tests/services/ConversionService.test.ts +0 -154
  480. package/tests/services/DockerService.test.ts +0 -24
  481. package/tests/services/Tools.test.ts +0 -1738
  482. package/tests/services/ToolsService.setFunction.test.ts +0 -68
  483. package/tests/services/WorkerReloadConfig.test.ts +0 -141
  484. package/tests/test.spec.ts +0 -163
  485. package/tests/unit/InputQueueManager.test.ts +0 -174
  486. package/tests/unit/McpWebsocketTransport.test.ts +0 -56
  487. package/tests/unit/agents/historyRollback.test.ts +0 -53
  488. package/tests/unit/agents/tools/loadImageAsBase64.test.ts +0 -44
  489. package/tests/unit/auth/jwtStore.test.ts +0 -55
  490. package/tests/unit/auth/keyAuth.test.ts +0 -152
  491. package/tests/unit/auth/keyManager.test.ts +0 -130
  492. package/tests/unit/auth/registerIdentity.test.ts +0 -99
  493. package/tests/unit/chat/ToolCommandModule.test.ts +0 -71
  494. package/tests/unit/chat/historyCommandArgs.test.ts +0 -37
  495. package/tests/unit/clients/AIClient.test.ts +0 -454
  496. package/tests/unit/clients/anthropic.responseMetadata.test.ts +0 -81
  497. package/tests/unit/clients/attribution.test.ts +0 -185
  498. package/tests/unit/clients/http.responseMetadata.test.ts +0 -86
  499. package/tests/unit/clients/openai.responseMetadata.test.ts +0 -90
  500. package/tests/unit/clients/responseMetadata.test.ts +0 -123
  501. package/tests/unit/clients/withRetry.test.ts +0 -319
  502. package/tests/unit/commands/agents.test.ts +0 -111
  503. package/tests/unit/commands/github-credentials.test.ts +0 -210
  504. package/tests/unit/commands/misc.test.ts +0 -85
  505. package/tests/unit/commands/remote.test.ts +0 -79
  506. package/tests/unit/commands/sandbox.test.ts +0 -350
  507. package/tests/unit/hashes.test.ts +0 -23
  508. package/tests/unit/input-queue.test.ts +0 -80
  509. package/tests/unit/login.test.ts +0 -218
  510. package/tests/unit/modules/moduleLoading.test.ts +0 -305
  511. package/tests/unit/plugins/pluginLoading.test.ts +0 -97
  512. package/tests/unit/services/AgentSyncKnowhowWeb.test.ts +0 -38
  513. package/tests/unit/services/KnowhowClient.test.ts +0 -84
  514. package/tests/unit/services/LazyToolsService.test.ts +0 -53
  515. package/tests/unit/services/Mcp.test.ts +0 -56
  516. package/tests/unit/services/MinimalToolsService.test.ts +0 -424
  517. package/tests/unit/services/RuntimeReloadService.test.ts +0 -29
  518. package/tests/unit/services/SessionManager.test.ts +0 -43
  519. package/tests/unit/services/SyncedAgentWatcher.test.ts +0 -89
  520. package/tests/unit/services/SyncerService.test.ts +0 -45
  521. package/tests/unit/tunnel.test.ts +0 -51
  522. package/tests/unit/util/Trace.test.ts +0 -119
  523. package/tests/unit/utils/http.test.ts +0 -43
  524. package/ts_build/tests/XmlToolCallProcessor.test.d.ts +0 -1
  525. package/ts_build/tests/XmlToolCallProcessor.test.js +0 -376
  526. package/ts_build/tests/XmlToolCallProcessor.test.js.map +0 -1
  527. package/ts_build/tests/agents/interrupt.test.d.ts +0 -14
  528. package/ts_build/tests/agents/interrupt.test.js +0 -136
  529. package/ts_build/tests/agents/interrupt.test.js.map +0 -1
  530. package/ts_build/tests/agents/observe-base.test.d.ts +0 -1
  531. package/ts_build/tests/agents/observe-base.test.js +0 -149
  532. package/ts_build/tests/agents/observe-base.test.js.map +0 -1
  533. package/ts_build/tests/agents/tools/connectAgent.test.d.ts +0 -1
  534. package/ts_build/tests/agents/tools/connectAgent.test.js +0 -142
  535. package/ts_build/tests/agents/tools/connectAgent.test.js.map +0 -1
  536. package/ts_build/tests/agents/tools/observe.test.d.ts +0 -1
  537. package/ts_build/tests/agents/tools/observe.test.js +0 -148
  538. package/ts_build/tests/agents/tools/observe.test.js.map +0 -1
  539. package/ts_build/tests/agents/tools/readFile.test.d.ts +0 -1
  540. package/ts_build/tests/agents/tools/readFile.test.js +0 -90
  541. package/ts_build/tests/agents/tools/readFile.test.js.map +0 -1
  542. package/ts_build/tests/agents/tools/replyToParent.test.d.ts +0 -1
  543. package/ts_build/tests/agents/tools/replyToParent.test.js +0 -116
  544. package/ts_build/tests/agents/tools/replyToParent.test.js.map +0 -1
  545. package/ts_build/tests/agents/tools/sendAgentMessage.test.d.ts +0 -1
  546. package/ts_build/tests/agents/tools/sendAgentMessage.test.js +0 -112
  547. package/ts_build/tests/agents/tools/sendAgentMessage.test.js.map +0 -1
  548. package/ts_build/tests/agents/tools/waitForAgentCompleted.test.d.ts +0 -1
  549. package/ts_build/tests/agents/tools/waitForAgentCompleted.test.js +0 -147
  550. package/ts_build/tests/agents/tools/waitForAgentCompleted.test.js.map +0 -1
  551. package/ts_build/tests/chat/detach-attach-rendering.test.d.ts +0 -1
  552. package/ts_build/tests/chat/detach-attach-rendering.test.js +0 -168
  553. package/ts_build/tests/chat/detach-attach-rendering.test.js.map +0 -1
  554. package/ts_build/tests/clients/AIClient.test.d.ts +0 -1
  555. package/ts_build/tests/clients/AIClient.test.js +0 -483
  556. package/ts_build/tests/clients/AIClient.test.js.map +0 -1
  557. package/ts_build/tests/clients/anthropic.test.d.ts +0 -1
  558. package/ts_build/tests/clients/anthropic.test.js +0 -159
  559. package/ts_build/tests/clients/anthropic.test.js.map +0 -1
  560. package/ts_build/tests/clients/contextLimits.test.d.ts +0 -1
  561. package/ts_build/tests/clients/contextLimits.test.js +0 -69
  562. package/ts_build/tests/clients/contextLimits.test.js.map +0 -1
  563. package/ts_build/tests/clients/fireworks.test.d.ts +0 -1
  564. package/ts_build/tests/clients/fireworks.test.js +0 -65
  565. package/ts_build/tests/clients/fireworks.test.js.map +0 -1
  566. package/ts_build/tests/clients/openai.images.test.d.ts +0 -1
  567. package/ts_build/tests/clients/openai.images.test.js +0 -94
  568. package/ts_build/tests/clients/openai.images.test.js.map +0 -1
  569. package/ts_build/tests/clients/pricing.test.d.ts +0 -1
  570. package/ts_build/tests/clients/pricing.test.js +0 -124
  571. package/ts_build/tests/clients/pricing.test.js.map +0 -1
  572. package/ts_build/tests/clients/reasoningEffort.test.d.ts +0 -1
  573. package/ts_build/tests/clients/reasoningEffort.test.js +0 -116
  574. package/ts_build/tests/clients/reasoningEffort.test.js.map +0 -1
  575. package/ts_build/tests/compressor/bigstring.test.d.ts +0 -1
  576. package/ts_build/tests/compressor/bigstring.test.js +0 -275
  577. package/ts_build/tests/compressor/bigstring.test.js.map +0 -1
  578. package/ts_build/tests/compressor/toolResponseCache.test.d.ts +0 -1
  579. package/ts_build/tests/compressor/toolResponseCache.test.js +0 -250
  580. package/ts_build/tests/compressor/toolResponseCache.test.js.map +0 -1
  581. package/ts_build/tests/compressor/usageBase64.test.d.ts +0 -1
  582. package/ts_build/tests/compressor/usageBase64.test.js +0 -109
  583. package/ts_build/tests/compressor/usageBase64.test.js.map +0 -1
  584. package/ts_build/tests/manual/agent-events/run-test.d.ts +0 -2
  585. package/ts_build/tests/manual/agent-events/run-test.js +0 -148
  586. package/ts_build/tests/manual/agent-events/run-test.js.map +0 -1
  587. package/ts_build/tests/manual/browser-login/test_browser_login_basic.d.ts +0 -2
  588. package/ts_build/tests/manual/browser-login/test_browser_login_basic.js +0 -118
  589. package/ts_build/tests/manual/browser-login/test_browser_login_basic.js.map +0 -1
  590. package/ts_build/tests/manual/browser-login/test_cli_integration.d.ts +0 -2
  591. package/ts_build/tests/manual/browser-login/test_cli_integration.js +0 -163
  592. package/ts_build/tests/manual/browser-login/test_cli_integration.js.map +0 -1
  593. package/ts_build/tests/manual/browser-login/test_cross_platform_browser.d.ts +0 -2
  594. package/ts_build/tests/manual/browser-login/test_cross_platform_browser.js +0 -169
  595. package/ts_build/tests/manual/browser-login/test_cross_platform_browser.js.map +0 -1
  596. package/ts_build/tests/manual/browser-login/test_error_scenarios.d.ts +0 -2
  597. package/ts_build/tests/manual/browser-login/test_error_scenarios.js +0 -207
  598. package/ts_build/tests/manual/browser-login/test_error_scenarios.js.map +0 -1
  599. package/ts_build/tests/manual/clients/completions.test.d.ts +0 -1
  600. package/ts_build/tests/manual/clients/completions.test.js +0 -151
  601. package/ts_build/tests/manual/clients/completions.test.js.map +0 -1
  602. package/ts_build/tests/manual/file-edits/figma.test.d.ts +0 -0
  603. package/ts_build/tests/manual/file-edits/figma.test.js +0 -2
  604. package/ts_build/tests/manual/file-edits/figma.test.js.map +0 -1
  605. package/ts_build/tests/manual/file-edits/fileblocks/readwrite.test.d.ts +0 -1
  606. package/ts_build/tests/manual/file-edits/fileblocks/readwrite.test.js +0 -110
  607. package/ts_build/tests/manual/file-edits/fileblocks/readwrite.test.js.map +0 -1
  608. package/ts_build/tests/manual/file-edits/patching.test.d.ts +0 -1
  609. package/ts_build/tests/manual/file-edits/patching.test.js +0 -129
  610. package/ts_build/tests/manual/file-edits/patching.test.js.map +0 -1
  611. package/ts_build/tests/manual/modalities/google.modalities.test.d.ts +0 -1
  612. package/ts_build/tests/manual/modalities/google.modalities.test.js +0 -262
  613. package/ts_build/tests/manual/modalities/google.modalities.test.js.map +0 -1
  614. package/ts_build/tests/manual/modalities/openai.modalities.test.d.ts +0 -1
  615. package/ts_build/tests/manual/modalities/openai.modalities.test.js +0 -262
  616. package/ts_build/tests/manual/modalities/openai.modalities.test.js.map +0 -1
  617. package/ts_build/tests/manual/modalities/streaming.test.d.ts +0 -1
  618. package/ts_build/tests/manual/modalities/streaming.test.js +0 -216
  619. package/ts_build/tests/manual/modalities/streaming.test.js.map +0 -1
  620. package/ts_build/tests/manual/modalities/xai.modalities.test.d.ts +0 -1
  621. package/ts_build/tests/manual/modalities/xai.modalities.test.js +0 -219
  622. package/ts_build/tests/manual/modalities/xai.modalities.test.js.map +0 -1
  623. package/ts_build/tests/manual/test-concurrent-ask.d.ts +0 -1
  624. package/ts_build/tests/manual/test-concurrent-ask.js +0 -22
  625. package/ts_build/tests/manual/test-concurrent-ask.js.map +0 -1
  626. package/ts_build/tests/manual/ycmd/debug_diagnostics_test.d.ts +0 -1
  627. package/ts_build/tests/manual/ycmd/debug_diagnostics_test.js +0 -124
  628. package/ts_build/tests/manual/ycmd/debug_diagnostics_test.js.map +0 -1
  629. package/ts_build/tests/manual/ycmd/minimal_advanced_test.d.ts +0 -2
  630. package/ts_build/tests/manual/ycmd/minimal_advanced_test.js +0 -114
  631. package/ts_build/tests/manual/ycmd/minimal_advanced_test.js.map +0 -1
  632. package/ts_build/tests/manual/ycmd/simple_diagnostics_test.d.ts +0 -1
  633. package/ts_build/tests/manual/ycmd/simple_diagnostics_test.js +0 -84
  634. package/ts_build/tests/manual/ycmd/simple_diagnostics_test.js.map +0 -1
  635. package/ts_build/tests/manual/ycmd/simple_test.d.ts +0 -2
  636. package/ts_build/tests/manual/ycmd/simple_test.js +0 -92
  637. package/ts_build/tests/manual/ycmd/simple_test.js.map +0 -1
  638. package/ts_build/tests/manual/ycmd/test-typescript-sample.d.ts +0 -14
  639. package/ts_build/tests/manual/ycmd/test-typescript-sample.js +0 -20
  640. package/ts_build/tests/manual/ycmd/test-typescript-sample.js.map +0 -1
  641. package/ts_build/tests/manual/ycmd/test_advanced_features.d.ts +0 -2
  642. package/ts_build/tests/manual/ycmd/test_advanced_features.js +0 -306
  643. package/ts_build/tests/manual/ycmd/test_advanced_features.js.map +0 -1
  644. package/ts_build/tests/manual/ycmd/test_advanced_with_tools.d.ts +0 -3
  645. package/ts_build/tests/manual/ycmd/test_advanced_with_tools.js +0 -271
  646. package/ts_build/tests/manual/ycmd/test_advanced_with_tools.js.map +0 -1
  647. package/ts_build/tests/manual/ycmd/test_comprehensive_typescript.d.ts +0 -2
  648. package/ts_build/tests/manual/ycmd/test_comprehensive_typescript.js +0 -196
  649. package/ts_build/tests/manual/ycmd/test_comprehensive_typescript.js.map +0 -1
  650. package/ts_build/tests/manual/ycmd/test_diagnostics_file_changes.d.ts +0 -1
  651. package/ts_build/tests/manual/ycmd/test_diagnostics_file_changes.js +0 -184
  652. package/ts_build/tests/manual/ycmd/test_diagnostics_file_changes.js.map +0 -1
  653. package/ts_build/tests/manual/ycmd/test_diagnostics_fix.d.ts +0 -2
  654. package/ts_build/tests/manual/ycmd/test_diagnostics_fix.js +0 -116
  655. package/ts_build/tests/manual/ycmd/test_diagnostics_fix.js.map +0 -1
  656. package/ts_build/tests/manual/ycmd/test_diagnostics_simple.d.ts +0 -1
  657. package/ts_build/tests/manual/ycmd/test_diagnostics_simple.js +0 -114
  658. package/ts_build/tests/manual/ycmd/test_diagnostics_simple.js.map +0 -1
  659. package/ts_build/tests/manual/ycmd/test_diagnostics_timing.d.ts +0 -1
  660. package/ts_build/tests/manual/ycmd/test_diagnostics_timing.js +0 -129
  661. package/ts_build/tests/manual/ycmd/test_diagnostics_timing.js.map +0 -1
  662. package/ts_build/tests/manual/ycmd/test_discover_commands.d.ts +0 -2
  663. package/ts_build/tests/manual/ycmd/test_discover_commands.js +0 -252
  664. package/ts_build/tests/manual/ycmd/test_discover_commands.js.map +0 -1
  665. package/ts_build/tests/manual/ycmd/test_endpoints.d.ts +0 -2
  666. package/ts_build/tests/manual/ycmd/test_endpoints.js +0 -130
  667. package/ts_build/tests/manual/ycmd/test_endpoints.js.map +0 -1
  668. package/ts_build/tests/manual/ycmd/test_final_comprehensive.d.ts +0 -2
  669. package/ts_build/tests/manual/ycmd/test_final_comprehensive.js +0 -231
  670. package/ts_build/tests/manual/ycmd/test_final_comprehensive.js.map +0 -1
  671. package/ts_build/tests/manual/ycmd/test_final_validation.d.ts +0 -2
  672. package/ts_build/tests/manual/ycmd/test_final_validation.js +0 -170
  673. package/ts_build/tests/manual/ycmd/test_final_validation.js.map +0 -1
  674. package/ts_build/tests/manual/ycmd/test_individual_ycmd_tool.d.ts +0 -2
  675. package/ts_build/tests/manual/ycmd/test_individual_ycmd_tool.js +0 -37
  676. package/ts_build/tests/manual/ycmd/test_individual_ycmd_tool.js.map +0 -1
  677. package/ts_build/tests/manual/ycmd/test_server_manager.d.ts +0 -1
  678. package/ts_build/tests/manual/ycmd/test_server_manager.js +0 -38
  679. package/ts_build/tests/manual/ycmd/test_server_manager.js.map +0 -1
  680. package/ts_build/tests/manual/ycmd/test_simple_debug.d.ts +0 -2
  681. package/ts_build/tests/manual/ycmd/test_simple_debug.js +0 -109
  682. package/ts_build/tests/manual/ycmd/test_simple_debug.js.map +0 -1
  683. package/ts_build/tests/manual/ycmd/test_tsserver_workflow.d.ts +0 -1
  684. package/ts_build/tests/manual/ycmd/test_tsserver_workflow.js +0 -138
  685. package/ts_build/tests/manual/ycmd/test_tsserver_workflow.js.map +0 -1
  686. package/ts_build/tests/manual/ycmd/test_typescript_simple.d.ts +0 -1
  687. package/ts_build/tests/manual/ycmd/test_typescript_simple.js +0 -76
  688. package/ts_build/tests/manual/ycmd/test_typescript_simple.js.map +0 -1
  689. package/ts_build/tests/manual/ycmd/test_typescript_ycmd.d.ts +0 -1
  690. package/ts_build/tests/manual/ycmd/test_typescript_ycmd.js +0 -115
  691. package/ts_build/tests/manual/ycmd/test_typescript_ycmd.js.map +0 -1
  692. package/ts_build/tests/manual/ycmd/test_workspace_config.d.ts +0 -1
  693. package/ts_build/tests/manual/ycmd/test_workspace_config.js +0 -99
  694. package/ts_build/tests/manual/ycmd/test_workspace_config.js.map +0 -1
  695. package/ts_build/tests/manual/ycmd/test_ycmd_auto_start.d.ts +0 -2
  696. package/ts_build/tests/manual/ycmd/test_ycmd_auto_start.js +0 -140
  697. package/ts_build/tests/manual/ycmd/test_ycmd_auto_start.js.map +0 -1
  698. package/ts_build/tests/manual/ycmd/test_ycmd_comprehensive.d.ts +0 -1
  699. package/ts_build/tests/manual/ycmd/test_ycmd_comprehensive.js +0 -93
  700. package/ts_build/tests/manual/ycmd/test_ycmd_comprehensive.js.map +0 -1
  701. package/ts_build/tests/manual/ycmd/test_ycmd_direct.d.ts +0 -2
  702. package/ts_build/tests/manual/ycmd/test_ycmd_direct.js +0 -159
  703. package/ts_build/tests/manual/ycmd/test_ycmd_direct.js.map +0 -1
  704. package/ts_build/tests/manual/ycmd/test_ycmd_experiment.d.ts +0 -15
  705. package/ts_build/tests/manual/ycmd/test_ycmd_experiment.js +0 -68
  706. package/ts_build/tests/manual/ycmd/test_ycmd_experiment.js.map +0 -1
  707. package/ts_build/tests/manual/ycmd/test_ycmd_final.d.ts +0 -2
  708. package/ts_build/tests/manual/ycmd/test_ycmd_final.js +0 -205
  709. package/ts_build/tests/manual/ycmd/test_ycmd_final.js.map +0 -1
  710. package/ts_build/tests/manual/ycmd/test_ycmd_integration.d.ts +0 -3
  711. package/ts_build/tests/manual/ycmd/test_ycmd_integration.js +0 -119
  712. package/ts_build/tests/manual/ycmd/test_ycmd_integration.js.map +0 -1
  713. package/ts_build/tests/manual/ycmd/test_ycmd_simple.d.ts +0 -2
  714. package/ts_build/tests/manual/ycmd/test_ycmd_simple.js +0 -36
  715. package/ts_build/tests/manual/ycmd/test_ycmd_simple.js.map +0 -1
  716. package/ts_build/tests/manual/ycmd/working_simple_test.d.ts +0 -2
  717. package/ts_build/tests/manual/ycmd/working_simple_test.js +0 -144
  718. package/ts_build/tests/manual/ycmd/working_simple_test.js.map +0 -1
  719. package/ts_build/tests/patching/corrupted.test.d.ts +0 -1
  720. package/ts_build/tests/patching/corrupted.test.js +0 -53
  721. package/ts_build/tests/patching/corrupted.test.js.map +0 -1
  722. package/ts_build/tests/patching/imports.test.d.ts +0 -1
  723. package/ts_build/tests/patching/imports.test.js +0 -71
  724. package/ts_build/tests/patching/imports.test.js.map +0 -1
  725. package/ts_build/tests/patching/patchFileOutput.test.d.ts +0 -1
  726. package/ts_build/tests/patching/patchFileOutput.test.js +0 -269
  727. package/ts_build/tests/patching/patchFileOutput.test.js.map +0 -1
  728. package/ts_build/tests/patching/regression-2026.test.d.ts +0 -1
  729. package/ts_build/tests/patching/regression-2026.test.js +0 -528
  730. package/ts_build/tests/patching/regression-2026.test.js.map +0 -1
  731. package/ts_build/tests/patching/transcriptMangleRegression.test.d.ts +0 -1
  732. package/ts_build/tests/patching/transcriptMangleRegression.test.js +0 -104
  733. package/ts_build/tests/patching/transcriptMangleRegression.test.js.map +0 -1
  734. package/ts_build/tests/plugins/language/languagePlugin-content-triggers.test.d.ts +0 -1
  735. package/ts_build/tests/plugins/language/languagePlugin-content-triggers.test.js +0 -294
  736. package/ts_build/tests/plugins/language/languagePlugin-content-triggers.test.js.map +0 -1
  737. package/ts_build/tests/plugins/language/languagePlugin-integration.test.d.ts +0 -1
  738. package/ts_build/tests/plugins/language/languagePlugin-integration.test.js +0 -343
  739. package/ts_build/tests/plugins/language/languagePlugin-integration.test.js.map +0 -1
  740. package/ts_build/tests/plugins/language/languagePlugin.test.d.ts +0 -1
  741. package/ts_build/tests/plugins/language/languagePlugin.test.js +0 -315
  742. package/ts_build/tests/plugins/language/languagePlugin.test.js.map +0 -1
  743. package/ts_build/tests/processes/managedProcessShim.test.d.ts +0 -1
  744. package/ts_build/tests/processes/managedProcessShim.test.js +0 -92
  745. package/ts_build/tests/processes/managedProcessShim.test.js.map +0 -1
  746. package/ts_build/tests/processors/Base64ImageDetector.test.d.ts +0 -1
  747. package/ts_build/tests/processors/Base64ImageDetector.test.js +0 -792
  748. package/ts_build/tests/processors/Base64ImageDetector.test.js.map +0 -1
  749. package/ts_build/tests/processors/CustomVariables.test.d.ts +0 -1
  750. package/ts_build/tests/processors/CustomVariables.test.js +0 -764
  751. package/ts_build/tests/processors/CustomVariables.test.js.map +0 -1
  752. package/ts_build/tests/processors/CustomVariablesBenchmark.test.d.ts +0 -1
  753. package/ts_build/tests/processors/CustomVariablesBenchmark.test.js +0 -179
  754. package/ts_build/tests/processors/CustomVariablesBenchmark.test.js.map +0 -1
  755. package/ts_build/tests/processors/HarmonyToolProcessor.test.d.ts +0 -1
  756. package/ts_build/tests/processors/HarmonyToolProcessor.test.js +0 -382
  757. package/ts_build/tests/processors/HarmonyToolProcessor.test.js.map +0 -1
  758. package/ts_build/tests/processors/TokenCompressor.test.d.ts +0 -1
  759. package/ts_build/tests/processors/TokenCompressor.test.js +0 -473
  760. package/ts_build/tests/processors/TokenCompressor.test.js.map +0 -1
  761. package/ts_build/tests/processors/ToolResponseCache.test.d.ts +0 -1
  762. package/ts_build/tests/processors/ToolResponseCache.test.js +0 -657
  763. package/ts_build/tests/processors/ToolResponseCache.test.js.map +0 -1
  764. package/ts_build/tests/processors/tools/boundedRetrievalTools.test.d.ts +0 -1
  765. package/ts_build/tests/processors/tools/boundedRetrievalTools.test.js +0 -57
  766. package/ts_build/tests/processors/tools/boundedRetrievalTools.test.js.map +0 -1
  767. package/ts_build/tests/processors/tools/grepToolResponse.test.d.ts +0 -1
  768. package/ts_build/tests/processors/tools/grepToolResponse.test.js +0 -77
  769. package/ts_build/tests/processors/tools/grepToolResponse.test.js.map +0 -1
  770. package/ts_build/tests/services/ConversionService.test.d.ts +0 -1
  771. package/ts_build/tests/services/ConversionService.test.js +0 -154
  772. package/ts_build/tests/services/ConversionService.test.js.map +0 -1
  773. package/ts_build/tests/services/DockerService.test.d.ts +0 -1
  774. package/ts_build/tests/services/DockerService.test.js +0 -22
  775. package/ts_build/tests/services/DockerService.test.js.map +0 -1
  776. package/ts_build/tests/services/Tools.test.d.ts +0 -1
  777. package/ts_build/tests/services/Tools.test.js +0 -1365
  778. package/ts_build/tests/services/Tools.test.js.map +0 -1
  779. package/ts_build/tests/services/ToolsService.setFunction.test.d.ts +0 -1
  780. package/ts_build/tests/services/ToolsService.setFunction.test.js +0 -51
  781. package/ts_build/tests/services/ToolsService.setFunction.test.js.map +0 -1
  782. package/ts_build/tests/services/WorkerReloadConfig.test.d.ts +0 -1
  783. package/ts_build/tests/services/WorkerReloadConfig.test.js +0 -86
  784. package/ts_build/tests/services/WorkerReloadConfig.test.js.map +0 -1
  785. package/ts_build/tests/test.spec.d.ts +0 -1
  786. package/ts_build/tests/test.spec.js +0 -139
  787. package/ts_build/tests/test.spec.js.map +0 -1
  788. package/ts_build/tests/unit/InputQueueManager.test.d.ts +0 -1
  789. package/ts_build/tests/unit/InputQueueManager.test.js +0 -104
  790. package/ts_build/tests/unit/InputQueueManager.test.js.map +0 -1
  791. package/ts_build/tests/unit/McpWebsocketTransport.test.d.ts +0 -1
  792. package/ts_build/tests/unit/McpWebsocketTransport.test.js +0 -47
  793. package/ts_build/tests/unit/McpWebsocketTransport.test.js.map +0 -1
  794. package/ts_build/tests/unit/agents/historyRollback.test.d.ts +0 -1
  795. package/ts_build/tests/unit/agents/historyRollback.test.js +0 -42
  796. package/ts_build/tests/unit/agents/historyRollback.test.js.map +0 -1
  797. package/ts_build/tests/unit/agents/tools/loadImageAsBase64.test.d.ts +0 -1
  798. package/ts_build/tests/unit/agents/tools/loadImageAsBase64.test.js +0 -67
  799. package/ts_build/tests/unit/agents/tools/loadImageAsBase64.test.js.map +0 -1
  800. package/ts_build/tests/unit/auth/jwtStore.test.d.ts +0 -1
  801. package/ts_build/tests/unit/auth/jwtStore.test.js +0 -46
  802. package/ts_build/tests/unit/auth/jwtStore.test.js.map +0 -1
  803. package/ts_build/tests/unit/auth/keyAuth.test.d.ts +0 -1
  804. package/ts_build/tests/unit/auth/keyAuth.test.js +0 -118
  805. package/ts_build/tests/unit/auth/keyAuth.test.js.map +0 -1
  806. package/ts_build/tests/unit/auth/keyManager.test.d.ts +0 -1
  807. package/ts_build/tests/unit/auth/keyManager.test.js +0 -96
  808. package/ts_build/tests/unit/auth/keyManager.test.js.map +0 -1
  809. package/ts_build/tests/unit/auth/registerIdentity.test.d.ts +0 -1
  810. package/ts_build/tests/unit/auth/registerIdentity.test.js +0 -92
  811. package/ts_build/tests/unit/auth/registerIdentity.test.js.map +0 -1
  812. package/ts_build/tests/unit/chat/ToolCommandModule.test.d.ts +0 -1
  813. package/ts_build/tests/unit/chat/ToolCommandModule.test.js +0 -61
  814. package/ts_build/tests/unit/chat/ToolCommandModule.test.js.map +0 -1
  815. package/ts_build/tests/unit/chat/historyCommandArgs.test.d.ts +0 -1
  816. package/ts_build/tests/unit/chat/historyCommandArgs.test.js +0 -29
  817. package/ts_build/tests/unit/chat/historyCommandArgs.test.js.map +0 -1
  818. package/ts_build/tests/unit/clients/AIClient.test.d.ts +0 -1
  819. package/ts_build/tests/unit/clients/AIClient.test.js +0 -342
  820. package/ts_build/tests/unit/clients/AIClient.test.js.map +0 -1
  821. package/ts_build/tests/unit/clients/anthropic.responseMetadata.test.d.ts +0 -1
  822. package/ts_build/tests/unit/clients/anthropic.responseMetadata.test.js +0 -77
  823. package/ts_build/tests/unit/clients/anthropic.responseMetadata.test.js.map +0 -1
  824. package/ts_build/tests/unit/clients/attribution.test.d.ts +0 -1
  825. package/ts_build/tests/unit/clients/attribution.test.js +0 -153
  826. package/ts_build/tests/unit/clients/attribution.test.js.map +0 -1
  827. package/ts_build/tests/unit/clients/http.responseMetadata.test.d.ts +0 -1
  828. package/ts_build/tests/unit/clients/http.responseMetadata.test.js +0 -77
  829. package/ts_build/tests/unit/clients/http.responseMetadata.test.js.map +0 -1
  830. package/ts_build/tests/unit/clients/openai.responseMetadata.test.d.ts +0 -1
  831. package/ts_build/tests/unit/clients/openai.responseMetadata.test.js +0 -86
  832. package/ts_build/tests/unit/clients/openai.responseMetadata.test.js.map +0 -1
  833. package/ts_build/tests/unit/clients/responseMetadata.test.d.ts +0 -1
  834. package/ts_build/tests/unit/clients/responseMetadata.test.js +0 -96
  835. package/ts_build/tests/unit/clients/responseMetadata.test.js.map +0 -1
  836. package/ts_build/tests/unit/clients/withRetry.test.d.ts +0 -1
  837. package/ts_build/tests/unit/clients/withRetry.test.js +0 -225
  838. package/ts_build/tests/unit/clients/withRetry.test.js.map +0 -1
  839. package/ts_build/tests/unit/commands/agents.test.d.ts +0 -1
  840. package/ts_build/tests/unit/commands/agents.test.js +0 -119
  841. package/ts_build/tests/unit/commands/agents.test.js.map +0 -1
  842. package/ts_build/tests/unit/commands/github-credentials.test.d.ts +0 -1
  843. package/ts_build/tests/unit/commands/github-credentials.test.js +0 -145
  844. package/ts_build/tests/unit/commands/github-credentials.test.js.map +0 -1
  845. package/ts_build/tests/unit/commands/misc.test.d.ts +0 -1
  846. package/ts_build/tests/unit/commands/misc.test.js +0 -70
  847. package/ts_build/tests/unit/commands/misc.test.js.map +0 -1
  848. package/ts_build/tests/unit/commands/remote.test.d.ts +0 -1
  849. package/ts_build/tests/unit/commands/remote.test.js +0 -70
  850. package/ts_build/tests/unit/commands/remote.test.js.map +0 -1
  851. package/ts_build/tests/unit/commands/sandbox.test.d.ts +0 -1
  852. package/ts_build/tests/unit/commands/sandbox.test.js +0 -258
  853. package/ts_build/tests/unit/commands/sandbox.test.js.map +0 -1
  854. package/ts_build/tests/unit/hashes.test.d.ts +0 -1
  855. package/ts_build/tests/unit/hashes.test.js +0 -25
  856. package/ts_build/tests/unit/hashes.test.js.map +0 -1
  857. package/ts_build/tests/unit/input-queue.test.d.ts +0 -1
  858. package/ts_build/tests/unit/input-queue.test.js +0 -32
  859. package/ts_build/tests/unit/input-queue.test.js.map +0 -1
  860. package/ts_build/tests/unit/login.test.d.ts +0 -1
  861. package/ts_build/tests/unit/login.test.js +0 -166
  862. package/ts_build/tests/unit/login.test.js.map +0 -1
  863. package/ts_build/tests/unit/modules/moduleLoading.test.d.ts +0 -1
  864. package/ts_build/tests/unit/modules/moduleLoading.test.js +0 -272
  865. package/ts_build/tests/unit/modules/moduleLoading.test.js.map +0 -1
  866. package/ts_build/tests/unit/plugins/pluginLoading.test.d.ts +0 -1
  867. package/ts_build/tests/unit/plugins/pluginLoading.test.js +0 -117
  868. package/ts_build/tests/unit/plugins/pluginLoading.test.js.map +0 -1
  869. package/ts_build/tests/unit/services/AgentSyncKnowhowWeb.test.d.ts +0 -1
  870. package/ts_build/tests/unit/services/AgentSyncKnowhowWeb.test.js +0 -32
  871. package/ts_build/tests/unit/services/AgentSyncKnowhowWeb.test.js.map +0 -1
  872. package/ts_build/tests/unit/services/KnowhowClient.test.d.ts +0 -1
  873. package/ts_build/tests/unit/services/KnowhowClient.test.js +0 -69
  874. package/ts_build/tests/unit/services/KnowhowClient.test.js.map +0 -1
  875. package/ts_build/tests/unit/services/LazyToolsService.test.d.ts +0 -1
  876. package/ts_build/tests/unit/services/LazyToolsService.test.js +0 -47
  877. package/ts_build/tests/unit/services/LazyToolsService.test.js.map +0 -1
  878. package/ts_build/tests/unit/services/Mcp.test.d.ts +0 -1
  879. package/ts_build/tests/unit/services/Mcp.test.js +0 -45
  880. package/ts_build/tests/unit/services/Mcp.test.js.map +0 -1
  881. package/ts_build/tests/unit/services/MinimalToolsService.test.d.ts +0 -1
  882. package/ts_build/tests/unit/services/MinimalToolsService.test.js +0 -320
  883. package/ts_build/tests/unit/services/MinimalToolsService.test.js.map +0 -1
  884. package/ts_build/tests/unit/services/RuntimeReloadService.test.d.ts +0 -1
  885. package/ts_build/tests/unit/services/RuntimeReloadService.test.js +0 -26
  886. package/ts_build/tests/unit/services/RuntimeReloadService.test.js.map +0 -1
  887. package/ts_build/tests/unit/services/SessionManager.test.d.ts +0 -1
  888. package/ts_build/tests/unit/services/SessionManager.test.js +0 -72
  889. package/ts_build/tests/unit/services/SessionManager.test.js.map +0 -1
  890. package/ts_build/tests/unit/services/SyncedAgentWatcher.test.d.ts +0 -1
  891. package/ts_build/tests/unit/services/SyncedAgentWatcher.test.js +0 -78
  892. package/ts_build/tests/unit/services/SyncedAgentWatcher.test.js.map +0 -1
  893. package/ts_build/tests/unit/services/SyncerService.test.d.ts +0 -1
  894. package/ts_build/tests/unit/services/SyncerService.test.js +0 -40
  895. package/ts_build/tests/unit/services/SyncerService.test.js.map +0 -1
  896. package/ts_build/tests/unit/tunnel.test.d.ts +0 -1
  897. package/ts_build/tests/unit/tunnel.test.js +0 -47
  898. package/ts_build/tests/unit/tunnel.test.js.map +0 -1
  899. package/ts_build/tests/unit/util/Trace.test.d.ts +0 -1
  900. package/ts_build/tests/unit/util/Trace.test.js +0 -107
  901. package/ts_build/tests/unit/util/Trace.test.js.map +0 -1
  902. package/ts_build/tests/unit/utils/http.test.d.ts +0 -1
  903. package/ts_build/tests/unit/utils/http.test.js +0 -69
  904. package/ts_build/tests/unit/utils/http.test.js.map +0 -1
  905. package/tsconfig.json +0 -34
  906. package/tslint.json +0 -11
@@ -1,752 +0,0 @@
1
- import {
2
- fixPatch,
3
- parseHunks,
4
- hunksToPatch,
5
- Hunk,
6
- patchFile,
7
- } from "../../src/agents/tools/patch";
8
- import { applyPatch } from "diff";
9
- import * as fs from "fs";
10
-
11
- const mockToolService = {
12
- getContext: () => ({ Events: null }),
13
- };
14
- const boundPatch = (patchFile as any).bind(mockToolService);
15
-
16
- describe("Patch Engine - Edge Case Regression Suite", () => {
17
- // --- Test Case 1: Context Block Desynchronization (Ghost Line Bug) ---
18
- describe("Error Type 1: Context Block Desynchronization", () => {
19
- it("should reject context lines polluted by other hunks and find the true fallback anchor", () => {
20
- const originalFileContent = `import React, { useState } from 'react';\n\nexport default function AuthPage() {\n const [email, setEmail] = useState('');\n const [password, setPassword] = useState('');\n const [confirmPassword, setConfirmPassword] = useState('');\n return <div>Welcome to Knowhow</div>;\n}`;
21
-
22
- // This patch contains a "Ghost Line" inside the context block:
23
- // "onChange={handlePasswordChange}" does not exist at this position in the original file
24
- const corruptedPatch = `@@ -5,4 +5,4 @@\n const [password, setPassword] = useState('');\n const [confirmPassword, setConfirmPassword] = useState('');\n- return <div>Welcome to Knowhow</div>;\n+ return <div>Welcome to Knowhow Engine</div>;\n onChange={handlePasswordChange}`;
25
-
26
- const fixedPatchOutput = fixPatch(originalFileContent, corruptedPatch);
27
- expect(fixedPatchOutput).toBeDefined();
28
- expect(fixedPatchOutput).not.toBe("");
29
-
30
- // Verify that the patch can now be parsed and successfully applied via standard diff utilities
31
- const finalApplication = applyPatch(
32
- originalFileContent,
33
- fixedPatchOutput
34
- );
35
- expect(finalApplication).not.toBe(false);
36
- expect(finalApplication).toContain("Welcome to Knowhow Engine");
37
- expect(finalApplication).not.toContain("onChange={handlePasswordChange}");
38
- });
39
- });
40
-
41
- // --- Test Case 2: Greedy Line Collision / Duplicate Suffixes ---
42
- describe("Error Type 2: Greedy Line Collision (Duplicate Suffixes)", () => {
43
- it("should correctly isolate and anchor matching structures in files with repeating method boundaries", () => {
44
- // Common signature parameters that repeat sequentially across multiple distinct blocks
45
- const schemaFileContent = `export const includedTools = [\n {\n name: "astAppendNode",\n required: ["filePath", "astPath", "newContent"]\n },\n {\n name: "astEditNode",\n required: ["filePath", "astPath", "newContent"]\n }\n];`;
46
-
47
- // Corrupted patch trying to update the SECOND method wrapper block ("astEditNode")
48
- // but its context strings match both object items natively.
49
- const ambiguousPatch = `@@ -6,4 +6,4 @@\n {\n- name: "astEditNode",\n+ name: "astEditNodeModified",\n required: ["filePath", "astPath", "newContent"]\n }`;
50
-
51
- const fixedPatchOutput = fixPatch(schemaFileContent, ambiguousPatch);
52
- const hunks = parseHunks(fixedPatchOutput);
53
-
54
- // Verify that the fixing logic anchored correctly to the target block and didn't corrupt the first item
55
- const finalApplication = applyPatch(schemaFileContent, fixedPatchOutput);
56
- expect(finalApplication).not.toBe(false);
57
- expect(finalApplication).toContain('"astAppendNode"');
58
- expect(finalApplication).toContain('"astEditNodeModified"');
59
- });
60
- });
61
-
62
- // --- Test Case 3: Multiline Hunk Structural Manipulation & Range Counts ---
63
- describe("Error Type 3: Multiline Hunk Structural Manipulation", () => {
64
- it("should recalculate valid hunk metadata ranges (+x,y) when code structural look blocks morph sizes", () => {
65
- const originalSource = `function compute(data) {\n const item = data.value;\n if (item) {\n return item;\n }\n return null;\n}`;
66
-
67
- // Patch attempts a structural change (wrapping logic into a comprehensive nested structure)
68
- // but the line counts inside the header definition are severely corrupted.
69
- const brokenRangePatch = `@@ -3,3 +3,200 @@\n if (item) {\n- return item;\n+ try {\n+ return item.process();\n+ } catch (e) {\n+ return null;\n+ }\n }`;
70
-
71
- const fixedPatchOutput = fixPatch(originalSource, brokenRangePatch);
72
- const parsedHunks = parseHunks(fixedPatchOutput);
73
-
74
- expect(parsedHunks.length).toBeGreaterThan(0);
75
- // Ensure the line counts have been normalized to reflect the correct sizing changes
76
- expect(parsedHunks[0].newLineCount).toBe(8); // 2 context before + 5 inside try/catch + 1 context after
77
-
78
- const finalApplication = applyPatch(originalSource, fixedPatchOutput);
79
- expect(finalApplication).not.toBe(false);
80
- expect(finalApplication).toContain("try {");
81
- });
82
- });
83
-
84
- // --- Test Case 4: Duplicate Anchor Blocks / Loop Comment Ambiguity ---
85
- describe("Error Type 4: Shared Comment / Anchor Block Ambiguity", () => {
86
- it("should utilize deeper multi-line context scopes to avoid getting hijacked by identical comments or loops", () => {
87
- const multiLoopSource = `// Process properties loop\nfor (const [key, value] of Object.entries(data)) {\n console.log(key);\n}\n\n// Process properties loop\nfor (const [key, value] of Object.entries(dataToCompress)) {\n this.compress(value);\n}`;
88
-
89
- // Patch intends to target the SECOND loop structure, but relies on a generic loop comment as an anchor
90
- const misplacedPatch = `@@ -6,3 +6,3 @@\n // Process properties loop\n-for (const [key, value] of Object.entries(dataToCompress)) {\n+for (const [key, value] of Object.entries(dataToCompress)).map(([key, value]) => {\n this.compress(value);`;
91
-
92
- const fixedPatchOutput = fixPatch(multiLoopSource, misplacedPatch);
93
- const finalApplication = applyPatch(multiLoopSource, fixedPatchOutput);
94
-
95
- expect(finalApplication).not.toBe(false);
96
- // Ensure the first loop was preserved completely intact
97
- expect(finalApplication).toContain("console.log(key);");
98
- // Ensure the second loop was targeted accurately
99
- expect(finalApplication).toContain("Object.entries(dataToCompress)).map");
100
- });
101
- });
102
-
103
- // --- Test Case 5: Empty File Initialization Support ---
104
- describe("Error Type 5: Empty and Baseline Structural Edge Cases", () => {
105
- it("should successfully generate and validate headers when initializing changes on an empty source baseline file", () => {
106
- const originalFileContent = "";
107
- const creationPatch = `@@ -0,0 +1,3 @@\n+export type Option = {\n+ label: string;\n+ value: string;\n+}`;
108
-
109
- const fixedPatchOutput = fixPatch(originalFileContent, creationPatch);
110
- const finalApplication = applyPatch(
111
- originalFileContent,
112
- fixedPatchOutput
113
- );
114
-
115
- expect(finalApplication).not.toBe(false);
116
- expect(finalApplication).toContain("export type Option");
117
- });
118
-
119
- it("should gracefully handle patches targeting an absolute trailing EOF with no trailing newline characters", () => {
120
- const sourceNoNewline = `const host = process.env.HOST || "localhost";\nconst port = process.env.PORT || 4000;`;
121
- const eofPatch = `@@ -2,2 +2,3 @@\n const port = process.env.PORT || 4000;\n+const httpsPort = Number(port) + 1;`;
122
-
123
- const fixedPatchOutput = fixPatch(sourceNoNewline, eofPatch);
124
- const finalApplication = applyPatch(sourceNoNewline, fixedPatchOutput);
125
-
126
- expect(finalApplication).not.toBe(false);
127
- expect(finalApplication).toContain("const httpsPort = Number(port) + 1;");
128
- });
129
- });
130
-
131
- // --- Test Case 6: The Interrupted Context Splitting (Dangling Context Blocks) ---
132
- describe("Error Type 6: Interrupted Context Splitting", () => {
133
- it("should handle hunks where context chunks are broken by internal function changes without losing line tracking", () => {
134
- const originalFileContent = `import { embeddings } from "@knowhow/knowhow";\nimport type { types } from "@knowhow/knowhow";\n\nexport class OrgEmbeddingService {\n async embedSource(organizationId: string, source: types.EmbeddingSource): Promise<types.EmbeddingData[]> {\n if (source.kind === "knowhow-file") {\n const downloadedFiles = await Promise.all(\n source.data.map(async (fileId) => {\n const filePath = await this.downloadOrgFile(organizationId, fileId);\n return { id: fileId, path: filePath };\n })\n );\n }\n }\n}`;
135
-
136
- // This replicates the failure in OrgEmbedding.ts where context blocks are skipped or compressed mid-stream
137
- const brokenSplitPatch = `@@ -4,11 +4,12 @@\n import { FilterType } from "../util/types";\n-import type { types } from "@knowhow/knowhow";\n+import { embeddings, EmbeddingSource, EmbeddingData } from "@knowhow/knowhow";\n \n async embedSource(\n organizationId: string,\n- source: types.EmbeddingSource\n- ): Promise<types.EmbeddingData[]> {\n+ source: EmbeddingSource\n+ ): Promise<EmbeddingData[]> {\n if (source.kind === "knowhow-file") {`;
138
-
139
- const fixedPatchOutput = fixPatch(originalFileContent, brokenSplitPatch);
140
- expect(fixedPatchOutput).toBeDefined();
141
- expect(fixedPatchOutput).not.toBe("");
142
-
143
- const finalApplication = applyPatch(
144
- originalFileContent,
145
- fixedPatchOutput
146
- );
147
- expect(finalApplication).not.toBe(false);
148
- expect(finalApplication).toContain("source: EmbeddingSource");
149
- });
150
- });
151
-
152
- // --- Test Case 7: Complex Multi-Hunk Re-Ordering Offset Shifts ---
153
- describe("Error Type 7: Multi-Hunk Re-Ordering Offset Shifts", () => {
154
- it("should accurately compute subsequent hunk lines when an earlier hunk has altered the global row layout index", () => {
155
- const componentContent = `import React, { useState } from 'react';\nimport { Button } from "@/components/ui/button";\n\nexport function AccountSwitcher() {\n const [isOpen, setIsOpen] = useState(false);\n const handleCreateOrg = () => {\n const name = prompt("Enter name:");\n };\n return (\n <Button onClick={handleCreateOrg}>Create</Button>\n );\n}`;
156
-
157
- // A single patch with MULTIPLE hunks where Hunk 1 introduces an offset drift
158
- // that shifts the physical line target numbers for Hunk 2 down the file stream.
159
- const multiHunkPatch = `@@ -1,4 +1,5 @@\n import React, { useState } from 'react';\n+import { useToast } from "@/hooks/use-toast";\n import { Button } from "@/components/ui/button";\n@@ -6,4 +7,6 @@\n const handleCreateOrg = () => {\n+ const { toast } = useToast();\n const name = prompt("Enter name:");\n+ toast({ title: "Success" });\n };`;
160
-
161
- const fixedPatchOutput = fixPatch(componentContent, multiHunkPatch);
162
- expect(fixedPatchOutput).toBeDefined();
163
-
164
- const finalApplication = applyPatch(componentContent, fixedPatchOutput);
165
- expect(finalApplication).not.toBe(false);
166
- expect(finalApplication).toContain("const { toast } = useToast();");
167
- });
168
- });
169
-
170
- // --- Test Case 8: Subtraction Block Redundancy Over-Matching ---
171
- describe("Error Type 8: Subtraction Block Redundancy Over-Matching", () => {
172
- it("should isolate the exact segment to modify even when deletions match completely duplicate layout states elsewhere in the file", () => {
173
- // Replicates the problem inside InputQueueManager.ts where identical sync logic definitions
174
- // appear sequentially or closely together inside the class body definition.
175
- const duplicatedLinesSource = `if (key?.name === "tab") {\n setImmediate(() => {\n this.currentLine = (this.rl as any).line ?? "";\n });\n}\nif (!this.rl || this.stack.length === 0) return;\nthis.currentLine = (this.rl as any).line ?? "";`;
176
-
177
- const redundantPatch = `@@ -6,3 +6,5 @@\n if (!this.rl || this.stack.length === 0) return;\n-this.currentLine = (this.rl as any).line ?? "";\n+if (key?.name !== "tab") {\n+ this.currentLine = (this.rl as any).line ?? "";\n+}`;
178
-
179
- const fixedPatchOutput = fixPatch(duplicatedLinesSource, redundantPatch);
180
- const finalApplication = applyPatch(
181
- duplicatedLinesSource,
182
- fixedPatchOutput
183
- );
184
-
185
- expect(finalApplication).not.toBe(false);
186
- // Ensure the first assignment block wasn't touched or stripped out by accident
187
- expect(finalApplication).toContain("setImmediate(() => {");
188
- // Ensure the conditional wrapper applied cleanly on the second loop target block
189
- expect(finalApplication).toContain('if (key?.name !== "tab") {');
190
- });
191
- });
192
-
193
- // --- Test Case 9: Pure Insertion (No Deletions) Count Recalculation ---
194
- describe("Error Type 9: Pure Insertion Hunk Reconstruction", () => {
195
- it("should output a precise target header count when a hunk contains zero subtractions and only insertions", () => {
196
- const baselineContent = `import { services } from "../services";\nimport { patchFile } from "./patch";\n\nexport async function run() {}`;
197
-
198
- // A patch containing an insertion with a line count error in the header metadata
199
- const pureInsertionPatch = `@@ -2,0 +3,50 @@\n import { patchFile } from "./patch";\n+import { lintFile } from "./lint";\n export async function run() {}`;
200
-
201
- const fixedPatchOutput = fixPatch(baselineContent, pureInsertionPatch);
202
- const parsedHunks = parseHunks(fixedPatchOutput);
203
-
204
- expect(parsedHunks.length).toBeGreaterThan(0);
205
-
206
- // Standard unified diff dictates that if original count is 0, the line reference
207
- // should point to the line *before* the insertion point.
208
- // Let's verify our engine didn't carry over the broken ",50" insertion metadata count.
209
- expect(fixedPatchOutput).not.toContain("+3,50");
210
-
211
- const finalApplication = applyPatch(baselineContent, fixedPatchOutput);
212
- expect(finalApplication).not.toBe(false);
213
- expect(finalApplication).toContain('import { lintFile } from "./lint";');
214
- });
215
- });
216
-
217
- // --- Test Case 10: Pure Deletion (No Additions) Header Simplification ---
218
- describe("Error Type 10: Pure Deletion Header Simplification", () => {
219
- it("should simplify or format line counts cleanly when an entry block is stripped completely out of the source", () => {
220
- const sourceWithUnusedImports = `import { services } from "../services";\nimport { unusedUtil } from "./utils";\n\nexport class Worker {}`;
221
-
222
- // A patch that drops an import statement but provides broken target line count offsets
223
- const pureDeletionPatch = `@@ -2,1 +2,0 @@\n-import { unusedUtil } from "./utils";`;
224
-
225
- const fixedPatchOutput = fixPatch(
226
- sourceWithUnusedImports,
227
- pureDeletionPatch
228
- );
229
- const finalApplication = applyPatch(
230
- sourceWithUnusedImports,
231
- fixedPatchOutput
232
- );
233
-
234
- expect(finalApplication).not.toBe(false);
235
- expect(finalApplication).not.toContain("unusedUtil");
236
- expect(finalApplication).toContain("export class Worker");
237
- });
238
- });
239
-
240
- // --- Test Case 11: Indentation Style Divergence ---
241
- describe("Error Type 11: Indentation Style Divergence", () => {
242
- it("should gracefully align and apply patches where the LLM altered leading spaces or tabs in unchanged context lines", () => {
243
- const originalFileContent = `class Server {\n constructor() {\n this.port = 3000;\n }\n}`;
244
-
245
- // Notice the context lines have mixed 2-space indents instead of the original 4/8 space layout
246
- const messyIndentPatch = `@@ -2,3 +2,3 @@\n constructor() {\n- this.port = 3000;\n+ this.port = 8080;\n }`;
247
-
248
- const fixedPatchOutput = fixPatch(originalFileContent, messyIndentPatch);
249
- const finalApplication = applyPatch(
250
- originalFileContent,
251
- fixedPatchOutput
252
- );
253
-
254
- expect(finalApplication).not.toBe(false);
255
- expect(finalApplication).toContain("this.port = 8080;");
256
- });
257
- });
258
-
259
- // --- Test Case 12: Interleaved Twin-Block Collisions ---
260
- describe("Error Type 12: Interleaved Twin-Block Collisions", () => {
261
- it("should maintain perfect boundary tracking when multiple interleaved modifications are separated by single, repeating keywords", () => {
262
- const complexTwinSource = `setup();\n// Section One\ninit();\n// Section Two\ninit();\ncleanup();`;
263
-
264
- // Interleaved changes mutating both identical-looking method assignments across a shared keyword line
265
- const twinHunkPatch = `@@ -2,5 +2,5 @@\n // Section One\n-init();\n+initPrimary();\n // Section Two\n-init();\n+initSecondary();`;
266
-
267
- const fixedPatchOutput = fixPatch(complexTwinSource, twinHunkPatch);
268
- const finalApplication = applyPatch(complexTwinSource, fixedPatchOutput);
269
-
270
- expect(finalApplication).not.toBe(false);
271
- expect(finalApplication).toContain("initPrimary();");
272
- expect(finalApplication).toContain("initSecondary();");
273
- });
274
- });
275
-
276
- // --- Test Case 13: Carriage Return CRLF Normalization ---
277
- describe("Error Type 13: Carriage Return CRLF Normalization", () => {
278
- it("should preserve original line ending styles without crashing when running patches on strict CRLF text files", () => {
279
- const winFile = "const a = 1;\r\nconst b = 2;\r\nconst c = 3;\r\n";
280
- const unixPatch =
281
- "@@ -2,2 +2,2 @@\n const b = 2;\n-const c = 3;\n+const c = 4;\n";
282
-
283
- const fixedPatchOutput = fixPatch(winFile, unixPatch);
284
- const finalApplication = applyPatch(winFile, fixedPatchOutput);
285
-
286
- expect(finalApplication).not.toBe(false);
287
- expect(finalApplication).toContain("const c = 4;");
288
- });
289
- });
290
-
291
- // --- Test Case 14: Insertion-Before-Anchor Reordering (real session bug) ---
292
- // Reproduces a bug observed while editing SnapshotManager.ts: adding new lines
293
- // ABOVE an existing `return snapshot;` (using that return as trailing context)
294
- // anchored on the PRECEDING context line and inserted the new lines AFTER the
295
- // return instead of before it. The added log line became unreachable dead code
296
- // and, in a follow-up edit, the `return` was dropped entirely — a silent
297
- // control-flow / correctness change. Hunk: insert N lines before a kept line.
298
- describe("Error Type 14: Insertion-Before-Anchor Reordering", () => {
299
- it("should insert new lines BEFORE the trailing-context line, not after it", () => {
300
- const originalFileContent = ` if (rootfsStillExists) {
301
- return snapshot;
302
- }
303
- this.logger.info("missing");
304
- `;
305
- // Add a comment + log + KEEP the existing `return snapshot;` as trailing context.
306
- const insertBeforeReturnPatch = `@@ -1,3 +1,6 @@
307
- if (rootfsStillExists) {
308
- + // reusing local overlay
309
- + this.logger.info("reusing");
310
- return snapshot;
311
- }
312
- `;
313
-
314
- const fixedPatchOutput = fixPatch(
315
- originalFileContent,
316
- insertBeforeReturnPatch
317
- );
318
- const finalApplication = applyPatch(
319
- originalFileContent,
320
- fixedPatchOutput
321
- );
322
-
323
- expect(finalApplication).not.toBe(false);
324
- const out = finalApplication as string;
325
- // The kept `return snapshot;` must still be present exactly once.
326
- expect(out).toContain("return snapshot;");
327
- // The new log must appear BEFORE the return (otherwise it is unreachable).
328
- const idxLog = out.indexOf('this.logger.info("reusing")');
329
- const idxReturn = out.indexOf("return snapshot;");
330
- expect(idxLog).toBeGreaterThanOrEqual(0);
331
- expect(idxReturn).toBeGreaterThanOrEqual(0);
332
- expect(idxLog).toBeLessThan(idxReturn);
333
- });
334
- });
335
-
336
- // --- Test Case 15: Append-After-Function Scope Bleed (real session bug) ---
337
- // Reproduces a bug observed while editing test-cross-machine-restore.ts: appending
338
- // a brand-new top-level function right after an existing function's closing brace
339
- // (using the function body + closing `}` as leading context) caused the new
340
- // function to be injected INSIDE the existing function's body, between its
341
- // signature and its `return`, corrupting both functions. The anchor latched onto
342
- // the wrong `}` (a shared/duplicate brace earlier in the file).
343
- describe("Error Type 15: Append-After-Function Scope Bleed", () => {
344
- it("should append a new function AFTER the anchor function's closing brace, leaving it intact", () => {
345
- const originalFileContent = `function getArg(flag) {
346
- return idx;
347
- }
348
- function hasFlag(flag) {
349
- return args.includes(flag);
350
- }
351
- const x = 1;
352
- `;
353
- // Anchor on hasFlag's full body + closing brace, then append a new function.
354
- const appendFunctionPatch = `@@ -4,3 +4,8 @@
355
- function hasFlag(flag) {
356
- return args.includes(flag);
357
- }
358
- +
359
- +function helper(lines) {
360
- + return lines.some((l) => true);
361
- +}
362
- `;
363
-
364
- const fixedPatchOutput = fixPatch(
365
- originalFileContent,
366
- appendFunctionPatch
367
- );
368
- const finalApplication = applyPatch(
369
- originalFileContent,
370
- fixedPatchOutput
371
- );
372
-
373
- expect(finalApplication).not.toBe(false);
374
- const out = finalApplication as string;
375
- // The new function must exist.
376
- expect(out).toContain("function helper(lines)");
377
- // CRITICAL: hasFlag must remain a contiguous, intact function — the new
378
- // function must NOT be injected between its signature and its return.
379
- expect(out).toMatch(
380
- /function hasFlag\(flag\) \{\s*\n\s*return args\.includes\(flag\);\s*\n\}/
381
- );
382
- // helper must come AFTER hasFlag, not before / inside it.
383
- const idxHasFlag = out.indexOf("function hasFlag");
384
- const idxHelper = out.indexOf("function helper");
385
- expect(idxHelper).toBeGreaterThan(idxHasFlag);
386
- });
387
- });
388
-
389
- // --- Test Case 16: Block-Replace-And-Append (try-block placement + new methods) ---
390
- // Reproduces a bug where a patch that:
391
- // (a) removes a large inline body from inside a try{} block and replaces it with
392
- // a single call, AND
393
- // (b) appends brand-new methods after the method's closing brace
394
- // was auto-corrected incorrectly:
395
- // - The replacement call landed inside the `catch (error) {` block instead of
396
- // inside the `try {` block where the removed code lived.
397
- // - The appended new methods were silently dropped entirely.
398
- describe("Error Type 16: Block-Replace-And-Append (try-block placement + append)", () => {
399
- it("should place the replacement call inside the try block (before catch) and preserve appended new methods", () => {
400
- // Source mirrors the original onSessionStop method before refactoring.
401
- const originalFileContent = [
402
- " /**",
403
- " * Finalize billing when a session stops",
404
- " */",
405
- " async onSessionStop(sessionKey: string): Promise<void> {",
406
- " try {",
407
- " const event = await prisma.cloudBillingEvent.findUnique({",
408
- " where: { sessionKey },",
409
- " });",
410
- "",
411
- " if (!event) {",
412
- " this.logger.warn(",
413
- " `[CloudBilling] No billing event found for session: ${sessionKey}`",
414
- " );",
415
- " return;",
416
- " }",
417
- "",
418
- " if (event.status !== \"running\") {",
419
- " this.logger.info(",
420
- " `[CloudBilling] Session ${sessionKey} already billed (status: ${event.status})`",
421
- " );",
422
- " return;",
423
- " }",
424
- "",
425
- " const stoppedAt = new Date();",
426
- " const uptimeMs = stoppedAt.getTime() - event.startedAt.getTime();",
427
- " const uptimeMinutes = uptimeMs / 1000 / 60;",
428
- " const ratePerMinute = parseSandboxSpecRate(event.serverSpec) ?? RATE;",
429
- " const costUsd = uptimeMinutes * ratePerMinute;",
430
- "",
431
- " await prisma.cloudBillingEvent.update({",
432
- " where: { sessionKey },",
433
- " data: {",
434
- " stoppedAt,",
435
- " uptimeMinutes,",
436
- " costUsd,",
437
- " status: \"billed\",",
438
- " billedAt: new Date(),",
439
- " },",
440
- " });",
441
- "",
442
- " const result = await this.usageService.deductCredits(",
443
- " event.orgId,",
444
- " costUsd,",
445
- " \"cloud\",",
446
- " undefined,",
447
- " event.orgUserId ?? undefined",
448
- " );",
449
- "",
450
- " await this.usageService.recordUsage(",
451
- " event.orgId,",
452
- " \"cloud\",",
453
- " event.serverSpec,",
454
- " costUsd,",
455
- " event.orgUserId ?? undefined,",
456
- " \"cloud\",",
457
- " result.fundedFrom",
458
- " );",
459
- "",
460
- " this.logger.info(",
461
- " `[CloudBilling] Session ${sessionKey} billed`",
462
- " );",
463
- " } catch (error) {",
464
- " this.logger.error(",
465
- " `[CloudBilling] Failed to bill session ${sessionKey}:`,",
466
- " error",
467
- " );",
468
- " }",
469
- " }",
470
- ].join("\n");
471
-
472
- // Patch: remove the inline finalize body, replace with single call,
473
- // AND append two new methods after the closing brace.
474
- const refactorPatch = [
475
- "@@ -19,43 +19,7 @@",
476
- "",
477
- " if (event.status !== \"running\") {",
478
- " this.logger.info(",
479
- " `[CloudBilling] Session ${sessionKey} already billed (status: ${event.status})`",
480
- " );",
481
- " return;",
482
- " }",
483
- "",
484
- "- const stoppedAt = new Date();",
485
- "- const uptimeMs = stoppedAt.getTime() - event.startedAt.getTime();",
486
- "- const uptimeMinutes = uptimeMs / 1000 / 60;",
487
- "- const ratePerMinute = parseSandboxSpecRate(event.serverSpec) ?? RATE;",
488
- "- const costUsd = uptimeMinutes * ratePerMinute;",
489
- "-",
490
- "- await prisma.cloudBillingEvent.update({",
491
- "- where: { sessionKey },",
492
- "- data: {",
493
- "- stoppedAt,",
494
- "- uptimeMinutes,",
495
- "- costUsd,",
496
- "- status: \"billed\",",
497
- "- billedAt: new Date(),",
498
- "- },",
499
- "- });",
500
- "-",
501
- "- const result = await this.usageService.deductCredits(",
502
- "- event.orgId,",
503
- "- costUsd,",
504
- "- \"cloud\",",
505
- "- undefined,",
506
- "- event.orgUserId ?? undefined",
507
- "- );",
508
- "-",
509
- "- await this.usageService.recordUsage(",
510
- "- event.orgId,",
511
- "- \"cloud\",",
512
- "- event.serverSpec,",
513
- "- costUsd,",
514
- "- event.orgUserId ?? undefined,",
515
- "- \"cloud\",",
516
- "- result.fundedFrom",
517
- "- );",
518
- "-",
519
- "- this.logger.info(",
520
- "- `[CloudBilling] Session ${sessionKey} billed`",
521
- "- );",
522
- "+ await this._finalizeEvent(event);",
523
- " } catch (error) {",
524
- " this.logger.error(",
525
- " `[CloudBilling] Failed to bill session ${sessionKey}:`,",
526
- "@@ -62,3 +26,19 @@",
527
- " }",
528
- " }",
529
- "+",
530
- "+ async onSessionStopByResource(",
531
- "+ resourceType: string,",
532
- "+ resourceId: string",
533
- "+ ): Promise<void> {",
534
- "+ try {",
535
- "+ this.logger.info(`[CloudBilling] stop by resource ${resourceType}/${resourceId}`);",
536
- "+ } catch (error) {",
537
- "+ this.logger.error(`[CloudBilling] Failed:`, error);",
538
- "+ }",
539
- "+ }",
540
- "+",
541
- "+ private async _finalizeEvent(event: { id: string; sessionKey: string; status: string; startedAt: Date; serverSpec: string; orgId: string; orgUserId: string | null; }): Promise<void> {",
542
- "+ this.logger.info(`[CloudBilling] finalizing ${event.sessionKey}`);",
543
- "+ }",
544
- ].join("\n");
545
-
546
- const fixedPatchOutput = fixPatch(originalFileContent, refactorPatch);
547
- const finalApplication = applyPatch(originalFileContent, fixedPatchOutput);
548
-
549
- expect(finalApplication).not.toBe(false);
550
- const out = finalApplication as string;
551
-
552
- // (1) The replacement call must appear BEFORE the catch block (inside the try block).
553
- const idxFinalizeCall = out.indexOf("await this._finalizeEvent(event);");
554
- const idxCatch = out.indexOf("} catch (error) {");
555
- expect(idxFinalizeCall).toBeGreaterThanOrEqual(0);
556
- expect(idxCatch).toBeGreaterThanOrEqual(0);
557
- expect(idxFinalizeCall).toBeLessThan(idxCatch);
558
-
559
- // (2) The catch block should only contain the logger.error, NOT _finalizeEvent.
560
- const catchBlock = out.slice(idxCatch);
561
- expect(catchBlock).not.toContain("await this._finalizeEvent(event);");
562
-
563
- // (3) The appended new methods must be present in the output.
564
- expect(out).toContain("async onSessionStopByResource(");
565
- expect(out).toContain("private async _finalizeEvent(");
566
- });
567
- });
568
- });
569
-
570
- /**
571
- * Regression for the "wrong location" patch mangling bug observed while patching
572
- * `packages/backend/src/services/SandboxHostManager.ts`.
573
- *
574
- * WHAT HAPPENED:
575
- * A patch targeting `provisionHost()` (line ~563) aimed to replace:
576
- * `const host = await this.createHost({ ..., notes: 'auto-provisioned' })`
577
- * with a direct `prisma.sandboxHost.create({ ..., status: 'provisioning' })` call.
578
- *
579
- * The patch had these context lines in its hunk:
580
- * ` // Register in the DB as stopped (it will self-register as online once booted)`
581
- * ` const host = await this.createHost({`
582
- *
583
- * The file also contained `markHostOffline()` (line ~173) which had a similar
584
- * `prisma.sandboxHost.update({ data: { status: 'stopped', baseUrl: null, ... } })` block,
585
- * and `createHost()` (line ~330) with `status: 'stopped'` inside its create call.
586
- *
587
- * The patch engine anchored on the FIRST occurrence of matching context, which was
588
- * inside `markHostOffline`. The hunk was then applied there, merging `createHost`
589
- * call arguments INTO `markHostOffline`'s update body — producing a file where
590
- * `markHostOffline` contained `instanceId`, `instanceType`, `notes`, etc., and
591
- * `provisionHost` was left with the old code. The output was syntactically broken.
592
- *
593
- * CORRECT BEHAVIOR:
594
- * The patch must be applied only at the location matching the full context
595
- * (including the unique comment line), NOT at the first partial match.
596
- * Earlier methods must remain completely unchanged.
597
- */
598
- describe("patchFile wrong-location regression — ambiguous status lines across methods", () => {
599
- const testFile = "/tmp/patch-wrong-location-sandbox-host.ts";
600
-
601
- // Mirrors the relevant structure of SandboxHostManager.ts
602
- const original = ` /**
603
- * Mark host as offline — called on shutdown.
604
- */
605
- async markHostOffline(instanceId: string): Promise<void> {
606
- const host = await prisma.sandboxHost.findUnique({ where: { instanceId } });
607
- if (!host) return;
608
-
609
- await prisma.sandboxHost.update({
610
- where: { id: host.id },
611
- data: {
612
- status: 'stopped',
613
- baseUrl: null,
614
- stoppedAt: new Date(),
615
- },
616
- });
617
-
618
- this.logger.info(\`Host \${host.id} marked offline\`);
619
- }
620
-
621
- /**
622
- * Create a new sandbox host record (for provisioning).
623
- */
624
- async createHost(data: {
625
- instanceId: string;
626
- instanceType?: string;
627
- notes?: string;
628
- }): Promise<SandboxHost> {
629
- return prisma.sandboxHost.create({
630
- data: {
631
- instanceId: data.instanceId,
632
- instanceType: data.instanceType ?? 'unknown',
633
- notes: data.notes ?? null,
634
- status: 'stopped',
635
- },
636
- });
637
- }
638
-
639
- /**
640
- * Provision a brand-new EC2 instance and register it in the DB.
641
- */
642
- async provisionHost(instanceType?: string): Promise<SandboxHost> {
643
- const instanceId = 'i-0abc123';
644
- const resolvedInstanceType = instanceType ?? 'c8i.xlarge';
645
-
646
- // Register in the DB as stopped (it will self-register as online once booted)
647
- const host = await this.createHost({
648
- instanceId,
649
- instanceType: resolvedInstanceType,
650
- region: 'us-east-1',
651
- maxVms: 14,
652
- notes: 'auto-provisioned',
653
- });
654
-
655
- return host;
656
- }
657
- `;
658
-
659
- beforeEach(() => {
660
- fs.writeFileSync(testFile, original);
661
- });
662
-
663
- it("should replace createHost call in provisionHost only, leaving markHostOffline and createHost intact", async () => {
664
- // This patch reproduces the EXACT real-world mangle from commit 5d572789a.
665
- //
666
- // The patchFile tool received a patch with a correct small hunk but the auto-correction
667
- // anchored the hunk at line 177 (inside markHostOffline's `data: {` block) instead of
668
- // line ~46 (inside provisionHost). The result was the removal lines:
669
- // ` const host = await this.createHost({`
670
- // ` instanceId,` etc.
671
- // got INSERTED into the middle of markHostOffline's prisma update data block, producing:
672
- // data: {
673
- // const host = await this.createHost({ ← INJECTED WRONG LOCATION
674
- // status: 'provisioning',
675
- // ...
676
- // and then 390 lines got deleted because the hunk size was wrong.
677
- //
678
- // The patch the tool generated had @@ -177,390 +177,10 @@ as its header after auto-correction,
679
- // anchoring on ` data: {` inside markHostOffline instead of the comment context
680
- // ` // Register in the DB as stopped` which is unique to provisionHost.
681
- //
682
- // CORRECT behavior: the patch engine must use the unique comment context line to anchor
683
- // the hunk in provisionHost, not the first occurrence of similar lines.
684
- const patch = `@@ -999,11 +999,13 @@
685
- // Register in the DB as stopped (it will self-register as online once booted)
686
- - const host = await this.createHost({
687
- - instanceId,
688
- - instanceType: resolvedInstanceType,
689
- - region: 'us-east-1',
690
- - maxVms: 14,
691
- - notes: 'auto-provisioned',
692
- - });
693
- + // Register as 'provisioning' — distinct from 'stopped' (intentionally shut down).
694
- + const host = await prisma.sandboxHost.create({
695
- + data: {
696
- + instanceId,
697
- + instanceType: resolvedInstanceType,
698
- + status: 'provisioning',
699
- + notes: 'auto-provisioned',
700
- + },
701
- + });
702
-
703
- return host;
704
- }
705
- `;
706
-
707
- const result = await boundPatch(testFile, patch);
708
- console.log("WRONG-LOCATION REGRESSION RESULT:\n", result);
709
- expect(result).not.toContain("❌ Patch failed");
710
-
711
- const updated = fs.readFileSync(testFile, "utf8");
712
- console.log("UPDATED FILE:\n", updated);
713
-
714
- // 1. 'provisioning' must appear in the output (the patch was applied)
715
- expect(updated).toContain("status: 'provisioning'");
716
-
717
- // 2. CRITICAL: markHostOffline must still contain status: 'stopped', baseUrl: null,
718
- // and stoppedAt — these would be wiped out if the patch was applied to the wrong location
719
- const markOfflineIdx = updated.indexOf("markHostOffline");
720
- expect(markOfflineIdx).toBeGreaterThan(-1);
721
-
722
- const baseUrlIdx = updated.indexOf("baseUrl: null");
723
- expect(baseUrlIdx).toBeGreaterThan(-1);
724
- // baseUrl: null must be inside markHostOffline (after it in the file)
725
- expect(baseUrlIdx).toBeGreaterThan(markOfflineIdx);
726
-
727
- const stoppedAtIdx = updated.indexOf("stoppedAt: new Date()");
728
- expect(stoppedAtIdx).toBeGreaterThan(-1);
729
- expect(stoppedAtIdx).toBeGreaterThan(markOfflineIdx);
730
-
731
- expect(updated).toContain("marked offline");
732
-
733
- // 3. 'provisioning' must appear AFTER markHostOffline and createHost (i.e. inside provisionHost)
734
- const createHostMethodIdx = updated.indexOf("async createHost(");
735
- const provisionHostIdx = updated.indexOf("async provisionHost(");
736
- const provisioningIdx = updated.indexOf("status: 'provisioning'");
737
-
738
- expect(createHostMethodIdx).toBeGreaterThan(-1);
739
- expect(provisionHostIdx).toBeGreaterThan(-1);
740
- expect(provisioningIdx).toBeGreaterThan(provisionHostIdx);
741
-
742
- // 4. The comment explaining 'provisioning' must be present (was in the patch additions)
743
- expect(updated).toContain("distinct from 'stopped'");
744
-
745
- // 5. createHost method must still have its original status: 'stopped' body
746
- const createHostBodyStart = updated.indexOf("async createHost(");
747
- const createHostBodyEnd = updated.indexOf("async provisionHost(");
748
- const createHostBody = updated.slice(createHostBodyStart, createHostBodyEnd);
749
- expect(createHostBody).toContain("status: 'stopped'");
750
- expect(createHostBody).toContain("data.instanceType ?? 'unknown'");
751
- });
752
- });