@tyvm/knowhow 0.0.158 → 0.0.160

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 (870) hide show
  1. package/package.json +2 -2
  2. package/ts_build/package.json +2 -2
  3. package/ts_build/src/chat/CliChatService.d.ts +2 -1
  4. package/ts_build/src/chat/CliChatService.js +29 -3
  5. package/ts_build/src/chat/CliChatService.js.map +1 -1
  6. package/ts_build/src/chat/modules/AgentModule.js +21 -17
  7. package/ts_build/src/chat/modules/AgentModule.js.map +1 -1
  8. package/ts_build/src/chat/renderer/ConsoleRenderer.js +32 -25
  9. package/ts_build/src/chat/renderer/ConsoleRenderer.js.map +1 -1
  10. package/ts_build/src/logger.d.ts +1 -0
  11. package/ts_build/src/logger.js +13 -1
  12. package/ts_build/src/logger.js.map +1 -1
  13. package/ts_build/src/utils/InputQueueManager.d.ts +8 -1
  14. package/ts_build/src/utils/InputQueueManager.js +72 -2
  15. package/ts_build/src/utils/InputQueueManager.js.map +1 -1
  16. package/ts_build/src/utils/index.d.ts +3 -1
  17. package/ts_build/src/utils/index.js +11 -3
  18. package/ts_build/src/utils/index.js.map +1 -1
  19. package/CONFIG.md +0 -429
  20. package/PROCESSING.md +0 -450
  21. package/WORKER.md +0 -260
  22. package/autodoc/README.md +0 -324
  23. package/autodoc/chat-guide.md +0 -444
  24. package/autodoc/cli-reference.md +0 -720
  25. package/autodoc/config-reference.md +0 -642
  26. package/autodoc/embeddings-guide.md +0 -467
  27. package/autodoc/generate-guide.md +0 -437
  28. package/autodoc/language-plugin-guide.md +0 -417
  29. package/autodoc/modules-guide.md +0 -379
  30. package/autodoc/plugins-guide.md +0 -721
  31. package/autodoc/quickstart-guide.md +0 -126
  32. package/autodoc/skills-guide.md +0 -584
  33. package/autodoc/worker-guide.md +0 -519
  34. package/docs/input-queue-manager.md +0 -142
  35. package/docs/multi-worker-management.md +0 -142
  36. package/docs/shell-commands.md +0 -174
  37. package/jest.config.js +0 -19
  38. package/jest.manual.config.js +0 -19
  39. package/scripts/README.md +0 -119
  40. package/scripts/build-for-node.sh +0 -148
  41. package/scripts/cache-miss-debug.ts +0 -365
  42. package/scripts/check-isolated-deps.sh +0 -69
  43. package/scripts/check-model-pricing.ts +0 -509
  44. package/scripts/compare-openrouter-coverage.ts +0 -576
  45. package/scripts/migrate-usage-json.js +0 -147
  46. package/scripts/publish.sh +0 -86
  47. package/scripts/restore_keys.sh +0 -59
  48. package/scripts/test-repetition-hint.ts +0 -302
  49. package/scripts/unset_keys.sh +0 -60
  50. package/src/agents/base/base.ts +0 -1963
  51. package/src/agents/base/prompt.ts +0 -55
  52. package/src/agents/configurable/ConfigAgent.ts +0 -24
  53. package/src/agents/developer/developer.ts +0 -76
  54. package/src/agents/historyRollback.ts +0 -36
  55. package/src/agents/index.ts +0 -52
  56. package/src/agents/interface.ts +0 -11
  57. package/src/agents/patcher/codebase.md +0 -27
  58. package/src/agents/patcher/patcher.ts +0 -131
  59. package/src/agents/researcher/researcher.ts +0 -115
  60. package/src/agents/setup/setup.ts +0 -63
  61. package/src/agents/tools/addInternalTools.ts +0 -21
  62. package/src/agents/tools/agentCall.ts +0 -34
  63. package/src/agents/tools/aiClient.ts +0 -178
  64. package/src/agents/tools/askHuman.ts +0 -10
  65. package/src/agents/tools/callPlugin.ts +0 -10
  66. package/src/agents/tools/connectAgent.ts +0 -355
  67. package/src/agents/tools/embeddingSearch.ts +0 -6
  68. package/src/agents/tools/execCommand.ts +0 -162
  69. package/src/agents/tools/fileSearch.ts +0 -35
  70. package/src/agents/tools/finalAnswer.ts +0 -4
  71. package/src/agents/tools/googleSearch.ts +0 -243
  72. package/src/agents/tools/index.ts +0 -33
  73. package/src/agents/tools/language/definitions.ts +0 -105
  74. package/src/agents/tools/language/index.ts +0 -20
  75. package/src/agents/tools/lazy/definitions.ts +0 -72
  76. package/src/agents/tools/lazy/disableTools.ts +0 -16
  77. package/src/agents/tools/lazy/enableTools.ts +0 -16
  78. package/src/agents/tools/lazy/index.ts +0 -3
  79. package/src/agents/tools/lazy/listAvailableTools.ts +0 -17
  80. package/src/agents/tools/lintFile.ts +0 -19
  81. package/src/agents/tools/list.ts +0 -739
  82. package/src/agents/tools/loadImageAsBase64.ts +0 -83
  83. package/src/agents/tools/loadWebpage.ts +0 -19
  84. package/src/agents/tools/mcp/connectMcpServer.ts +0 -40
  85. package/src/agents/tools/mcp/definitions.ts +0 -67
  86. package/src/agents/tools/mcp/disconnectMcpServer.ts +0 -40
  87. package/src/agents/tools/mcp/index.ts +0 -3
  88. package/src/agents/tools/mcp/listAvailableMcpServers.ts +0 -28
  89. package/src/agents/tools/minimal/callTool.ts +0 -45
  90. package/src/agents/tools/minimal/definitions.ts +0 -50
  91. package/src/agents/tools/minimal/index.ts +0 -3
  92. package/src/agents/tools/minimal/inspectTools.ts +0 -27
  93. package/src/agents/tools/modifyFile.ts +0 -53
  94. package/src/agents/tools/observe.ts +0 -247
  95. package/src/agents/tools/patch.ts +0 -1287
  96. package/src/agents/tools/readBlocks.ts +0 -83
  97. package/src/agents/tools/readFile.ts +0 -105
  98. package/src/agents/tools/replyToParent.ts +0 -123
  99. package/src/agents/tools/runGenerate.ts +0 -210
  100. package/src/agents/tools/scanFile.ts +0 -16
  101. package/src/agents/tools/sendAgentMessage.ts +0 -139
  102. package/src/agents/tools/skills.ts +0 -79
  103. package/src/agents/tools/startAgentTask.ts +0 -393
  104. package/src/agents/tools/stringReplace.ts +0 -105
  105. package/src/agents/tools/textSearch.ts +0 -128
  106. package/src/agents/tools/types/fileblock.ts +0 -5
  107. package/src/agents/tools/visionTool.ts +0 -35
  108. package/src/agents/tools/waitForAgentCompleted.ts +0 -270
  109. package/src/agents/tools/writeFile.ts +0 -106
  110. package/src/agents/tools/ycmd/client.ts +0 -608
  111. package/src/agents/tools/ycmd/definitions.ts +0 -294
  112. package/src/agents/tools/ycmd/detection.ts +0 -211
  113. package/src/agents/tools/ycmd/index.ts +0 -11
  114. package/src/agents/tools/ycmd/installer.ts +0 -251
  115. package/src/agents/tools/ycmd/server.ts +0 -545
  116. package/src/agents/tools/ycmd/serverManager.ts +0 -316
  117. package/src/agents/tools/ycmd/tools/completion.ts +0 -113
  118. package/src/agents/tools/ycmd/tools/diagnostics.ts +0 -166
  119. package/src/agents/tools/ycmd/tools/getLocations.ts +0 -173
  120. package/src/agents/tools/ycmd/tools/goto.ts +0 -169
  121. package/src/agents/tools/ycmd/tools/refactor.ts +0 -204
  122. package/src/agents/tools/ycmd/tools/signature.ts +0 -174
  123. package/src/agents/tools/ycmd/tools/start.ts +0 -95
  124. package/src/agents/tools/ycmd/utils/pathUtils.ts +0 -59
  125. package/src/ai.ts +0 -306
  126. package/src/auth/browserLogin.ts +0 -406
  127. package/src/auth/environmentAuth.ts +0 -51
  128. package/src/auth/errors.ts +0 -6
  129. package/src/auth/jwtStore.ts +0 -70
  130. package/src/auth/keyAuth.ts +0 -142
  131. package/src/auth/keyManager.ts +0 -331
  132. package/src/auth/registerIdentity.ts +0 -67
  133. package/src/auth/spinner.ts +0 -23
  134. package/src/chat/CliChatService.ts +0 -438
  135. package/src/chat/modules/AgentModule.ts +0 -1664
  136. package/src/chat/modules/AskModule.ts +0 -98
  137. package/src/chat/modules/BaseChatModule.ts +0 -65
  138. package/src/chat/modules/ClipboardImageModule.ts +0 -136
  139. package/src/chat/modules/CustomCommandsModule.ts +0 -80
  140. package/src/chat/modules/InternalChatModule.ts +0 -216
  141. package/src/chat/modules/RemoteSyncModule.ts +0 -482
  142. package/src/chat/modules/RendererModule.ts +0 -139
  143. package/src/chat/modules/SearchModule.ts +0 -168
  144. package/src/chat/modules/SessionsModule.ts +0 -969
  145. package/src/chat/modules/SetupModule.ts +0 -185
  146. package/src/chat/modules/ShellCommandModule.ts +0 -98
  147. package/src/chat/modules/SystemModule.ts +0 -161
  148. package/src/chat/modules/ToolCommandModule.ts +0 -102
  149. package/src/chat/modules/VoiceModule.ts +0 -70
  150. package/src/chat/modules/index.ts +0 -8
  151. package/src/chat/renderer/CompactRenderer.ts +0 -229
  152. package/src/chat/renderer/ConsoleRenderer.ts +0 -160
  153. package/src/chat/renderer/FancyRenderer.ts +0 -440
  154. package/src/chat/renderer/PlainRenderer.ts +0 -218
  155. package/src/chat/renderer/index.ts +0 -6
  156. package/src/chat/renderer/loadRenderer.ts +0 -316
  157. package/src/chat/renderer/messagesToRenderEvents.ts +0 -96
  158. package/src/chat/renderer/types.ts +0 -99
  159. package/src/chat/types.ts +0 -146
  160. package/src/chat.ts +0 -140
  161. package/src/cli.ts +0 -180
  162. package/src/clients/anthropic.ts +0 -772
  163. package/src/clients/attribution.ts +0 -53
  164. package/src/clients/cerebras.ts +0 -10
  165. package/src/clients/contextLimits.ts +0 -263
  166. package/src/clients/copilot.ts +0 -23
  167. package/src/clients/deepseek.ts +0 -16
  168. package/src/clients/fireworks.ts +0 -71
  169. package/src/clients/gemini.ts +0 -1169
  170. package/src/clients/github.ts +0 -16
  171. package/src/clients/groq.ts +0 -15
  172. package/src/clients/http.ts +0 -719
  173. package/src/clients/index.ts +0 -1153
  174. package/src/clients/knowhow.ts +0 -130
  175. package/src/clients/knowhowMcp.ts +0 -118
  176. package/src/clients/llama.ts +0 -16
  177. package/src/clients/meta.ts +0 -27
  178. package/src/clients/mistral.ts +0 -16
  179. package/src/clients/nvidia.ts +0 -16
  180. package/src/clients/openai.ts +0 -1186
  181. package/src/clients/openrouter.ts +0 -24
  182. package/src/clients/pricing/anthropic.ts +0 -149
  183. package/src/clients/pricing/cerebras.ts +0 -11
  184. package/src/clients/pricing/copilot.ts +0 -60
  185. package/src/clients/pricing/deepseek.ts +0 -15
  186. package/src/clients/pricing/fireworks.ts +0 -182
  187. package/src/clients/pricing/github.ts +0 -69
  188. package/src/clients/pricing/google.ts +0 -385
  189. package/src/clients/pricing/groq.ts +0 -56
  190. package/src/clients/pricing/index.ts +0 -44
  191. package/src/clients/pricing/llama.ts +0 -18
  192. package/src/clients/pricing/meta.ts +0 -12
  193. package/src/clients/pricing/mistral.ts +0 -34
  194. package/src/clients/pricing/models.ts +0 -25
  195. package/src/clients/pricing/nvidia.ts +0 -102
  196. package/src/clients/pricing/openai.ts +0 -409
  197. package/src/clients/pricing/openrouter.ts +0 -36
  198. package/src/clients/pricing/qwen.ts +0 -80
  199. package/src/clients/pricing/types.ts +0 -125
  200. package/src/clients/pricing/xai.ts +0 -137
  201. package/src/clients/qwen.ts +0 -16
  202. package/src/clients/responseMetadata.ts +0 -221
  203. package/src/clients/types.ts +0 -531
  204. package/src/clients/withRetry.ts +0 -89
  205. package/src/clients/xai.ts +0 -693
  206. package/src/cloudWorker.ts +0 -394
  207. package/src/commands/agent.ts +0 -342
  208. package/src/commands/agents.ts +0 -1037
  209. package/src/commands/behaviors.ts +0 -47
  210. package/src/commands/convert.ts +0 -291
  211. package/src/commands/hash.ts +0 -179
  212. package/src/commands/mcp.ts +0 -743
  213. package/src/commands/misc.ts +0 -373
  214. package/src/commands/modules.ts +0 -704
  215. package/src/commands/processes.ts +0 -248
  216. package/src/commands/remote.ts +0 -77
  217. package/src/commands/replay.ts +0 -503
  218. package/src/commands/sandbox.ts +0 -566
  219. package/src/commands/services.ts +0 -168
  220. package/src/commands/skills.ts +0 -107
  221. package/src/commands/workers.ts +0 -168
  222. package/src/config.ts +0 -468
  223. package/src/conversion.ts +0 -69
  224. package/src/dataset/diffs/README.md +0 -12
  225. package/src/dataset/diffs/debug-errors.ts +0 -29
  226. package/src/dataset/diffs/debug.ts +0 -64
  227. package/src/dataset/diffs/generate.ts +0 -71
  228. package/src/dataset/diffs/jsonl.ts +0 -53
  229. package/src/dataset/diffs/test.ts +0 -194
  230. package/src/embeddings.ts +0 -494
  231. package/src/fileSync.ts +0 -369
  232. package/src/generate.ts +0 -529
  233. package/src/hashes.ts +0 -180
  234. package/src/index.ts +0 -261
  235. package/src/logger.ts +0 -197
  236. package/src/login.ts +0 -209
  237. package/src/microphone.ts +0 -141
  238. package/src/migrations.ts +0 -151
  239. package/src/plugins/AgentsMdPlugin.ts +0 -118
  240. package/src/plugins/GitPlugin.ts +0 -598
  241. package/src/plugins/LinterPlugin.ts +0 -214
  242. package/src/plugins/PluginBase.ts +0 -70
  243. package/src/plugins/SkillsPlugin.ts +0 -37
  244. package/src/plugins/embedding.ts +0 -82
  245. package/src/plugins/exec.ts +0 -70
  246. package/src/plugins/language.ts +0 -290
  247. package/src/plugins/plugins.ts +0 -175
  248. package/src/plugins/tmux.ts +0 -132
  249. package/src/plugins/types.ts +0 -36
  250. package/src/plugins/url.ts +0 -101
  251. package/src/plugins/vim.ts +0 -89
  252. package/src/processes/ProcessManager.ts +0 -96
  253. package/src/processes/managedProcessShim.ts +0 -138
  254. package/src/processors/Base64ImageDetector.ts +0 -502
  255. package/src/processors/CustomVariables.ts +0 -693
  256. package/src/processors/GemmaToolProcessor.ts +0 -163
  257. package/src/processors/HarmonyToolProcessor.ts +0 -264
  258. package/src/processors/JsonCompressor.ts +0 -510
  259. package/src/processors/MinimalToolsMessageProcessor.ts +0 -113
  260. package/src/processors/TokenCompressor.ts +0 -620
  261. package/src/processors/ToolResponseCache.ts +0 -322
  262. package/src/processors/XmlToolCallProcessor.ts +0 -533
  263. package/src/processors/index.ts +0 -14
  264. package/src/processors/tools/boundedToolResponse.ts +0 -49
  265. package/src/processors/tools/grepToolResponse.ts +0 -230
  266. package/src/processors/tools/index.ts +0 -23
  267. package/src/processors/tools/jqToolResponse.ts +0 -159
  268. package/src/processors/tools/listStoredToolResponses.ts +0 -124
  269. package/src/processors/tools/tailToolResponse.ts +0 -148
  270. package/src/prompts/BasicCodeDocumenter.ts +0 -1
  271. package/src/prompts/BasicProjectDocumenter.ts +0 -1
  272. package/src/prompts/EmbeddingSeachHelper.ts +0 -1
  273. package/src/prompts/KnowhowConfigExamples.ts +0 -376
  274. package/src/prompts/index.ts +0 -9
  275. package/src/remotes.ts +0 -110
  276. package/src/server/index.ts +0 -16
  277. package/src/services/AgentService.ts +0 -134
  278. package/src/services/AgentSyncFs.ts +0 -775
  279. package/src/services/AgentSyncKnowhowWeb.ts +0 -389
  280. package/src/services/BehaviorsService.ts +0 -466
  281. package/src/services/DockerService.ts +0 -511
  282. package/src/services/EmbeddingService.ts +0 -427
  283. package/src/services/EmbeddingsService.ts +0 -73
  284. package/src/services/EventService.ts +0 -279
  285. package/src/services/ExtensionsService.ts +0 -25
  286. package/src/services/KnowhowClient.ts +0 -928
  287. package/src/services/LazyToolsService.ts +0 -210
  288. package/src/services/Mcp.ts +0 -727
  289. package/src/services/McpServer.ts +0 -155
  290. package/src/services/McpWebsocketTransport.ts +0 -87
  291. package/src/services/MediaProcessorService.ts +0 -669
  292. package/src/services/MessageProcessor.ts +0 -114
  293. package/src/services/MinimalToolsService.ts +0 -177
  294. package/src/services/RuntimeReloadService.ts +0 -31
  295. package/src/services/S3.ts +0 -61
  296. package/src/services/SessionManager.ts +0 -358
  297. package/src/services/SkillsService.ts +0 -822
  298. package/src/services/SyncedAgentWatcher.ts +0 -124
  299. package/src/services/SyncerService.ts +0 -191
  300. package/src/services/TaskRegistry.ts +0 -110
  301. package/src/services/Tools.ts +0 -580
  302. package/src/services/TracingService.ts +0 -116
  303. package/src/services/conversion/ConversionService.ts +0 -757
  304. package/src/services/conversion/index.ts +0 -2
  305. package/src/services/conversion/types.ts +0 -87
  306. package/src/services/flags.ts +0 -51
  307. package/src/services/index.ts +0 -117
  308. package/src/services/modules/computerUse.ts +0 -218
  309. package/src/services/modules/index.ts +0 -314
  310. package/src/services/modules/types.ts +0 -109
  311. package/src/services/types.ts +0 -60
  312. package/src/services/watchers/FsSyncer.ts +0 -199
  313. package/src/services/watchers/RemoteSyncer.ts +0 -196
  314. package/src/services/watchers/index.ts +0 -2
  315. package/src/tunnel.ts +0 -243
  316. package/src/types.ts +0 -282
  317. package/src/util/Trace.ts +0 -236
  318. package/src/utils/InputQueueManager.ts +0 -493
  319. package/src/utils/errors.ts +0 -0
  320. package/src/utils/http.ts +0 -150
  321. package/src/utils/index.ts +0 -111
  322. package/src/worker.ts +0 -696
  323. package/src/workerRegistry.ts +0 -152
  324. package/src/workers/auth/PasskeySetup.ts +0 -181
  325. package/src/workers/auth/WorkerPasskeyAuth.ts +0 -190
  326. package/src/workers/auth/WsMiddleware.ts +0 -99
  327. package/src/workers/auth/authMiddleware.ts +0 -104
  328. package/src/workers/auth/types.ts +0 -70
  329. package/src/workers/tools/getChallenge.ts +0 -33
  330. package/src/workers/tools/index.ts +0 -20
  331. package/src/workers/tools/listAllowedPorts.ts +0 -30
  332. package/src/workers/tools/lock.ts +0 -31
  333. package/src/workers/tools/reloadConfig.ts +0 -84
  334. package/src/workers/tools/unlock.ts +0 -116
  335. package/tests/XmlToolCallProcessor.test.ts +0 -468
  336. package/tests/agents/interrupt.test.ts +0 -200
  337. package/tests/agents/observe-base.test.ts +0 -183
  338. package/tests/agents/tools/connectAgent.test.ts +0 -138
  339. package/tests/agents/tools/observe.test.ts +0 -179
  340. package/tests/agents/tools/readFile.test.ts +0 -88
  341. package/tests/agents/tools/replyToParent.test.ts +0 -125
  342. package/tests/agents/tools/sendAgentMessage.test.ts +0 -99
  343. package/tests/agents/tools/waitForAgentCompleted.test.ts +0 -147
  344. package/tests/chat/detach-attach-rendering.test.ts +0 -315
  345. package/tests/clients/AIClient.test.ts +0 -668
  346. package/tests/clients/anthropic.test.ts +0 -202
  347. package/tests/clients/contextLimits.test.ts +0 -97
  348. package/tests/clients/fireworks.test.ts +0 -65
  349. package/tests/clients/openai.images.test.ts +0 -105
  350. package/tests/clients/pricing.test.ts +0 -206
  351. package/tests/clients/reasoningEffort.test.ts +0 -140
  352. package/tests/compressor/bigstring.test.ts +0 -450
  353. package/tests/compressor/bigstring.txt +0 -1
  354. package/tests/compressor/githubjson.txt +0 -1
  355. package/tests/compressor/toolResponseCache.test.ts +0 -304
  356. package/tests/compressor/usageBase64.json +0 -159
  357. package/tests/compressor/usageBase64.test.ts +0 -175
  358. package/tests/fixtures/fake-secret.txt +0 -1
  359. package/tests/manual/agent-events/run-test.ts +0 -203
  360. package/tests/manual/browser-login/README.md +0 -189
  361. package/tests/manual/browser-login/test_browser_login_basic.ts +0 -115
  362. package/tests/manual/browser-login/test_cli_integration.ts +0 -169
  363. package/tests/manual/browser-login/test_cross_platform_browser.ts +0 -186
  364. package/tests/manual/browser-login/test_error_scenarios.ts +0 -223
  365. package/tests/manual/cli/no-env.sh +0 -274
  366. package/tests/manual/clients/completions.json +0 -1151
  367. package/tests/manual/clients/completions.test.ts +0 -198
  368. package/tests/manual/file-edits/figma.test.ts +0 -3
  369. package/tests/manual/file-edits/fileblocks/readwrite.test.ts +0 -100
  370. package/tests/manual/file-edits/patching/input.txt +0 -145
  371. package/tests/manual/file-edits/patching/output.txt +0 -145
  372. package/tests/manual/file-edits/patching/patch.txt +0 -15
  373. package/tests/manual/file-edits/patching/unseen.txt +0 -80
  374. package/tests/manual/file-edits/patching.test.ts +0 -139
  375. package/tests/manual/modalities/README.md +0 -157
  376. package/tests/manual/modalities/google.modalities.test.ts +0 -335
  377. package/tests/manual/modalities/openai.modalities.test.ts +0 -329
  378. package/tests/manual/modalities/streaming.test.ts +0 -260
  379. package/tests/manual/modalities/xai.modalities.test.ts +0 -294
  380. package/tests/manual/test-concurrent-ask.ts +0 -43
  381. package/tests/manual/ycmd/debug_diagnostics_test.ts +0 -127
  382. package/tests/manual/ycmd/fixtures/debug_diagnostics.ts +0 -26
  383. package/tests/manual/ycmd/fixtures/file_change_test.ts +0 -17
  384. package/tests/manual/ycmd/minimal_advanced_test.ts +0 -108
  385. package/tests/manual/ycmd/simple_diagnostics_test.ts +0 -61
  386. package/tests/manual/ycmd/simple_test.ts +0 -74
  387. package/tests/manual/ycmd/test-typescript-sample.ts +0 -34
  388. package/tests/manual/ycmd/test_advanced_features.ts +0 -407
  389. package/tests/manual/ycmd/test_advanced_with_tools.ts +0 -320
  390. package/tests/manual/ycmd/test_comprehensive_typescript.ts +0 -179
  391. package/tests/manual/ycmd/test_diagnostics_file_changes.ts +0 -249
  392. package/tests/manual/ycmd/test_diagnostics_fix.ts +0 -99
  393. package/tests/manual/ycmd/test_diagnostics_simple.ts +0 -100
  394. package/tests/manual/ycmd/test_diagnostics_timing.ts +0 -120
  395. package/tests/manual/ycmd/test_discover_commands.ts +0 -310
  396. package/tests/manual/ycmd/test_endpoints.ts +0 -115
  397. package/tests/manual/ycmd/test_final_comprehensive.ts +0 -218
  398. package/tests/manual/ycmd/test_final_validation.ts +0 -150
  399. package/tests/manual/ycmd/test_implementation.js +0 -42
  400. package/tests/manual/ycmd/test_individual_ycmd_tool.ts +0 -39
  401. package/tests/manual/ycmd/test_server_manager.ts +0 -52
  402. package/tests/manual/ycmd/test_simple_debug.ts +0 -86
  403. package/tests/manual/ycmd/test_tsserver_workflow.js +0 -83
  404. package/tests/manual/ycmd/test_tsserver_workflow.ts +0 -122
  405. package/tests/manual/ycmd/test_typescript_simple.ts +0 -48
  406. package/tests/manual/ycmd/test_typescript_ycmd.ts +0 -105
  407. package/tests/manual/ycmd/test_workspace_config.ts +0 -90
  408. package/tests/manual/ycmd/test_ycmd_auto_start.ts +0 -137
  409. package/tests/manual/ycmd/test_ycmd_comprehensive.ts +0 -73
  410. package/tests/manual/ycmd/test_ycmd_connection.py +0 -10
  411. package/tests/manual/ycmd/test_ycmd_direct.ts +0 -142
  412. package/tests/manual/ycmd/test_ycmd_experiment.ts +0 -48
  413. package/tests/manual/ycmd/test_ycmd_final.ts +0 -200
  414. package/tests/manual/ycmd/test_ycmd_fixed.py +0 -18
  415. package/tests/manual/ycmd/test_ycmd_integration.ts +0 -112
  416. package/tests/manual/ycmd/test_ycmd_simple.ts +0 -45
  417. package/tests/manual/ycmd/test_ycmd_usage.py +0 -27
  418. package/tests/manual/ycmd/working_simple_test.ts +0 -134
  419. package/tests/patching/corrupted.test.ts +0 -78
  420. package/tests/patching/fixtures/transcript-mangles/agent-sync-fs-nested-catch.json +0 -9
  421. package/tests/patching/fixtures/transcript-mangles/automation-functions-crossed.json +0 -9
  422. package/tests/patching/fixtures/transcript-mangles/fruit-ninja-confirmed-retirement.json +0 -8
  423. package/tests/patching/imports.patch.txt +0 -11
  424. package/tests/patching/imports.test.ts +0 -43
  425. package/tests/patching/imports.txt +0 -11
  426. package/tests/patching/interface.patch.txt +0 -15
  427. package/tests/patching/interface.txt +0 -7
  428. package/tests/patching/patchFileOutput.test.ts +0 -328
  429. package/tests/patching/regression-2026.test.ts +0 -752
  430. package/tests/patching/transcriptMangleRegression.test.ts +0 -125
  431. package/tests/plugins/language/languagePlugin-content-triggers.test.ts +0 -346
  432. package/tests/plugins/language/languagePlugin-integration.test.ts +0 -471
  433. package/tests/plugins/language/languagePlugin.test.ts +0 -385
  434. package/tests/processes/managedProcessShim.test.ts +0 -59
  435. package/tests/processors/Base64ImageDetector.test.ts +0 -979
  436. package/tests/processors/CustomVariables.test.ts +0 -981
  437. package/tests/processors/CustomVariablesBenchmark.test.ts +0 -237
  438. package/tests/processors/HarmonyToolProcessor.test.ts +0 -490
  439. package/tests/processors/TokenCompressor.test.ts +0 -674
  440. package/tests/processors/ToolResponseCache.test.ts +0 -864
  441. package/tests/processors/tools/boundedRetrievalTools.test.ts +0 -68
  442. package/tests/processors/tools/grepToolResponse.test.ts +0 -159
  443. package/tests/services/ConversionService.test.ts +0 -154
  444. package/tests/services/DockerService.test.ts +0 -24
  445. package/tests/services/Tools.test.ts +0 -1738
  446. package/tests/services/ToolsService.setFunction.test.ts +0 -68
  447. package/tests/services/WorkerReloadConfig.test.ts +0 -141
  448. package/tests/test.spec.ts +0 -163
  449. package/tests/unit/InputQueueManager.test.ts +0 -174
  450. package/tests/unit/McpWebsocketTransport.test.ts +0 -56
  451. package/tests/unit/agents/historyRollback.test.ts +0 -53
  452. package/tests/unit/agents/tools/loadImageAsBase64.test.ts +0 -44
  453. package/tests/unit/auth/jwtStore.test.ts +0 -55
  454. package/tests/unit/auth/keyAuth.test.ts +0 -152
  455. package/tests/unit/auth/keyManager.test.ts +0 -130
  456. package/tests/unit/auth/registerIdentity.test.ts +0 -99
  457. package/tests/unit/chat/ToolCommandModule.test.ts +0 -71
  458. package/tests/unit/chat/historyCommandArgs.test.ts +0 -37
  459. package/tests/unit/clients/AIClient.test.ts +0 -454
  460. package/tests/unit/clients/anthropic.responseMetadata.test.ts +0 -81
  461. package/tests/unit/clients/attribution.test.ts +0 -185
  462. package/tests/unit/clients/http.responseMetadata.test.ts +0 -86
  463. package/tests/unit/clients/openai.responseMetadata.test.ts +0 -90
  464. package/tests/unit/clients/responseMetadata.test.ts +0 -123
  465. package/tests/unit/clients/withRetry.test.ts +0 -319
  466. package/tests/unit/commands/agents.test.ts +0 -111
  467. package/tests/unit/commands/github-credentials.test.ts +0 -210
  468. package/tests/unit/commands/misc.test.ts +0 -85
  469. package/tests/unit/commands/remote.test.ts +0 -79
  470. package/tests/unit/commands/sandbox.test.ts +0 -350
  471. package/tests/unit/hashes.test.ts +0 -23
  472. package/tests/unit/input-queue.test.ts +0 -80
  473. package/tests/unit/login.test.ts +0 -218
  474. package/tests/unit/modules/moduleLoading.test.ts +0 -305
  475. package/tests/unit/plugins/pluginLoading.test.ts +0 -97
  476. package/tests/unit/services/AgentSyncKnowhowWeb.test.ts +0 -38
  477. package/tests/unit/services/KnowhowClient.test.ts +0 -84
  478. package/tests/unit/services/LazyToolsService.test.ts +0 -53
  479. package/tests/unit/services/Mcp.test.ts +0 -56
  480. package/tests/unit/services/MinimalToolsService.test.ts +0 -424
  481. package/tests/unit/services/RuntimeReloadService.test.ts +0 -29
  482. package/tests/unit/services/SessionManager.test.ts +0 -43
  483. package/tests/unit/services/SyncedAgentWatcher.test.ts +0 -89
  484. package/tests/unit/services/SyncerService.test.ts +0 -45
  485. package/tests/unit/tunnel.test.ts +0 -51
  486. package/tests/unit/util/Trace.test.ts +0 -119
  487. package/tests/unit/utils/http.test.ts +0 -43
  488. package/ts_build/tests/XmlToolCallProcessor.test.d.ts +0 -1
  489. package/ts_build/tests/XmlToolCallProcessor.test.js +0 -376
  490. package/ts_build/tests/XmlToolCallProcessor.test.js.map +0 -1
  491. package/ts_build/tests/agents/interrupt.test.d.ts +0 -14
  492. package/ts_build/tests/agents/interrupt.test.js +0 -136
  493. package/ts_build/tests/agents/interrupt.test.js.map +0 -1
  494. package/ts_build/tests/agents/observe-base.test.d.ts +0 -1
  495. package/ts_build/tests/agents/observe-base.test.js +0 -149
  496. package/ts_build/tests/agents/observe-base.test.js.map +0 -1
  497. package/ts_build/tests/agents/tools/connectAgent.test.d.ts +0 -1
  498. package/ts_build/tests/agents/tools/connectAgent.test.js +0 -142
  499. package/ts_build/tests/agents/tools/connectAgent.test.js.map +0 -1
  500. package/ts_build/tests/agents/tools/observe.test.d.ts +0 -1
  501. package/ts_build/tests/agents/tools/observe.test.js +0 -148
  502. package/ts_build/tests/agents/tools/observe.test.js.map +0 -1
  503. package/ts_build/tests/agents/tools/readFile.test.d.ts +0 -1
  504. package/ts_build/tests/agents/tools/readFile.test.js +0 -90
  505. package/ts_build/tests/agents/tools/readFile.test.js.map +0 -1
  506. package/ts_build/tests/agents/tools/replyToParent.test.d.ts +0 -1
  507. package/ts_build/tests/agents/tools/replyToParent.test.js +0 -116
  508. package/ts_build/tests/agents/tools/replyToParent.test.js.map +0 -1
  509. package/ts_build/tests/agents/tools/sendAgentMessage.test.d.ts +0 -1
  510. package/ts_build/tests/agents/tools/sendAgentMessage.test.js +0 -112
  511. package/ts_build/tests/agents/tools/sendAgentMessage.test.js.map +0 -1
  512. package/ts_build/tests/agents/tools/waitForAgentCompleted.test.d.ts +0 -1
  513. package/ts_build/tests/agents/tools/waitForAgentCompleted.test.js +0 -147
  514. package/ts_build/tests/agents/tools/waitForAgentCompleted.test.js.map +0 -1
  515. package/ts_build/tests/chat/detach-attach-rendering.test.d.ts +0 -1
  516. package/ts_build/tests/chat/detach-attach-rendering.test.js +0 -168
  517. package/ts_build/tests/chat/detach-attach-rendering.test.js.map +0 -1
  518. package/ts_build/tests/clients/AIClient.test.d.ts +0 -1
  519. package/ts_build/tests/clients/AIClient.test.js +0 -483
  520. package/ts_build/tests/clients/AIClient.test.js.map +0 -1
  521. package/ts_build/tests/clients/anthropic.test.d.ts +0 -1
  522. package/ts_build/tests/clients/anthropic.test.js +0 -159
  523. package/ts_build/tests/clients/anthropic.test.js.map +0 -1
  524. package/ts_build/tests/clients/contextLimits.test.d.ts +0 -1
  525. package/ts_build/tests/clients/contextLimits.test.js +0 -69
  526. package/ts_build/tests/clients/contextLimits.test.js.map +0 -1
  527. package/ts_build/tests/clients/fireworks.test.d.ts +0 -1
  528. package/ts_build/tests/clients/fireworks.test.js +0 -65
  529. package/ts_build/tests/clients/fireworks.test.js.map +0 -1
  530. package/ts_build/tests/clients/openai.images.test.d.ts +0 -1
  531. package/ts_build/tests/clients/openai.images.test.js +0 -94
  532. package/ts_build/tests/clients/openai.images.test.js.map +0 -1
  533. package/ts_build/tests/clients/pricing.test.d.ts +0 -1
  534. package/ts_build/tests/clients/pricing.test.js +0 -124
  535. package/ts_build/tests/clients/pricing.test.js.map +0 -1
  536. package/ts_build/tests/clients/reasoningEffort.test.d.ts +0 -1
  537. package/ts_build/tests/clients/reasoningEffort.test.js +0 -116
  538. package/ts_build/tests/clients/reasoningEffort.test.js.map +0 -1
  539. package/ts_build/tests/compressor/bigstring.test.d.ts +0 -1
  540. package/ts_build/tests/compressor/bigstring.test.js +0 -275
  541. package/ts_build/tests/compressor/bigstring.test.js.map +0 -1
  542. package/ts_build/tests/compressor/toolResponseCache.test.d.ts +0 -1
  543. package/ts_build/tests/compressor/toolResponseCache.test.js +0 -250
  544. package/ts_build/tests/compressor/toolResponseCache.test.js.map +0 -1
  545. package/ts_build/tests/compressor/usageBase64.test.d.ts +0 -1
  546. package/ts_build/tests/compressor/usageBase64.test.js +0 -109
  547. package/ts_build/tests/compressor/usageBase64.test.js.map +0 -1
  548. package/ts_build/tests/manual/agent-events/run-test.d.ts +0 -2
  549. package/ts_build/tests/manual/agent-events/run-test.js +0 -148
  550. package/ts_build/tests/manual/agent-events/run-test.js.map +0 -1
  551. package/ts_build/tests/manual/browser-login/test_browser_login_basic.d.ts +0 -2
  552. package/ts_build/tests/manual/browser-login/test_browser_login_basic.js +0 -118
  553. package/ts_build/tests/manual/browser-login/test_browser_login_basic.js.map +0 -1
  554. package/ts_build/tests/manual/browser-login/test_cli_integration.d.ts +0 -2
  555. package/ts_build/tests/manual/browser-login/test_cli_integration.js +0 -163
  556. package/ts_build/tests/manual/browser-login/test_cli_integration.js.map +0 -1
  557. package/ts_build/tests/manual/browser-login/test_cross_platform_browser.d.ts +0 -2
  558. package/ts_build/tests/manual/browser-login/test_cross_platform_browser.js +0 -169
  559. package/ts_build/tests/manual/browser-login/test_cross_platform_browser.js.map +0 -1
  560. package/ts_build/tests/manual/browser-login/test_error_scenarios.d.ts +0 -2
  561. package/ts_build/tests/manual/browser-login/test_error_scenarios.js +0 -207
  562. package/ts_build/tests/manual/browser-login/test_error_scenarios.js.map +0 -1
  563. package/ts_build/tests/manual/clients/completions.test.d.ts +0 -1
  564. package/ts_build/tests/manual/clients/completions.test.js +0 -151
  565. package/ts_build/tests/manual/clients/completions.test.js.map +0 -1
  566. package/ts_build/tests/manual/file-edits/figma.test.d.ts +0 -0
  567. package/ts_build/tests/manual/file-edits/figma.test.js +0 -2
  568. package/ts_build/tests/manual/file-edits/figma.test.js.map +0 -1
  569. package/ts_build/tests/manual/file-edits/fileblocks/readwrite.test.d.ts +0 -1
  570. package/ts_build/tests/manual/file-edits/fileblocks/readwrite.test.js +0 -110
  571. package/ts_build/tests/manual/file-edits/fileblocks/readwrite.test.js.map +0 -1
  572. package/ts_build/tests/manual/file-edits/patching.test.d.ts +0 -1
  573. package/ts_build/tests/manual/file-edits/patching.test.js +0 -129
  574. package/ts_build/tests/manual/file-edits/patching.test.js.map +0 -1
  575. package/ts_build/tests/manual/modalities/google.modalities.test.d.ts +0 -1
  576. package/ts_build/tests/manual/modalities/google.modalities.test.js +0 -262
  577. package/ts_build/tests/manual/modalities/google.modalities.test.js.map +0 -1
  578. package/ts_build/tests/manual/modalities/openai.modalities.test.d.ts +0 -1
  579. package/ts_build/tests/manual/modalities/openai.modalities.test.js +0 -262
  580. package/ts_build/tests/manual/modalities/openai.modalities.test.js.map +0 -1
  581. package/ts_build/tests/manual/modalities/streaming.test.d.ts +0 -1
  582. package/ts_build/tests/manual/modalities/streaming.test.js +0 -216
  583. package/ts_build/tests/manual/modalities/streaming.test.js.map +0 -1
  584. package/ts_build/tests/manual/modalities/xai.modalities.test.d.ts +0 -1
  585. package/ts_build/tests/manual/modalities/xai.modalities.test.js +0 -219
  586. package/ts_build/tests/manual/modalities/xai.modalities.test.js.map +0 -1
  587. package/ts_build/tests/manual/test-concurrent-ask.d.ts +0 -1
  588. package/ts_build/tests/manual/test-concurrent-ask.js +0 -22
  589. package/ts_build/tests/manual/test-concurrent-ask.js.map +0 -1
  590. package/ts_build/tests/manual/ycmd/debug_diagnostics_test.d.ts +0 -1
  591. package/ts_build/tests/manual/ycmd/debug_diagnostics_test.js +0 -124
  592. package/ts_build/tests/manual/ycmd/debug_diagnostics_test.js.map +0 -1
  593. package/ts_build/tests/manual/ycmd/minimal_advanced_test.d.ts +0 -2
  594. package/ts_build/tests/manual/ycmd/minimal_advanced_test.js +0 -114
  595. package/ts_build/tests/manual/ycmd/minimal_advanced_test.js.map +0 -1
  596. package/ts_build/tests/manual/ycmd/simple_diagnostics_test.d.ts +0 -1
  597. package/ts_build/tests/manual/ycmd/simple_diagnostics_test.js +0 -84
  598. package/ts_build/tests/manual/ycmd/simple_diagnostics_test.js.map +0 -1
  599. package/ts_build/tests/manual/ycmd/simple_test.d.ts +0 -2
  600. package/ts_build/tests/manual/ycmd/simple_test.js +0 -92
  601. package/ts_build/tests/manual/ycmd/simple_test.js.map +0 -1
  602. package/ts_build/tests/manual/ycmd/test-typescript-sample.d.ts +0 -14
  603. package/ts_build/tests/manual/ycmd/test-typescript-sample.js +0 -20
  604. package/ts_build/tests/manual/ycmd/test-typescript-sample.js.map +0 -1
  605. package/ts_build/tests/manual/ycmd/test_advanced_features.d.ts +0 -2
  606. package/ts_build/tests/manual/ycmd/test_advanced_features.js +0 -306
  607. package/ts_build/tests/manual/ycmd/test_advanced_features.js.map +0 -1
  608. package/ts_build/tests/manual/ycmd/test_advanced_with_tools.d.ts +0 -3
  609. package/ts_build/tests/manual/ycmd/test_advanced_with_tools.js +0 -271
  610. package/ts_build/tests/manual/ycmd/test_advanced_with_tools.js.map +0 -1
  611. package/ts_build/tests/manual/ycmd/test_comprehensive_typescript.d.ts +0 -2
  612. package/ts_build/tests/manual/ycmd/test_comprehensive_typescript.js +0 -196
  613. package/ts_build/tests/manual/ycmd/test_comprehensive_typescript.js.map +0 -1
  614. package/ts_build/tests/manual/ycmd/test_diagnostics_file_changes.d.ts +0 -1
  615. package/ts_build/tests/manual/ycmd/test_diagnostics_file_changes.js +0 -184
  616. package/ts_build/tests/manual/ycmd/test_diagnostics_file_changes.js.map +0 -1
  617. package/ts_build/tests/manual/ycmd/test_diagnostics_fix.d.ts +0 -2
  618. package/ts_build/tests/manual/ycmd/test_diagnostics_fix.js +0 -116
  619. package/ts_build/tests/manual/ycmd/test_diagnostics_fix.js.map +0 -1
  620. package/ts_build/tests/manual/ycmd/test_diagnostics_simple.d.ts +0 -1
  621. package/ts_build/tests/manual/ycmd/test_diagnostics_simple.js +0 -114
  622. package/ts_build/tests/manual/ycmd/test_diagnostics_simple.js.map +0 -1
  623. package/ts_build/tests/manual/ycmd/test_diagnostics_timing.d.ts +0 -1
  624. package/ts_build/tests/manual/ycmd/test_diagnostics_timing.js +0 -129
  625. package/ts_build/tests/manual/ycmd/test_diagnostics_timing.js.map +0 -1
  626. package/ts_build/tests/manual/ycmd/test_discover_commands.d.ts +0 -2
  627. package/ts_build/tests/manual/ycmd/test_discover_commands.js +0 -252
  628. package/ts_build/tests/manual/ycmd/test_discover_commands.js.map +0 -1
  629. package/ts_build/tests/manual/ycmd/test_endpoints.d.ts +0 -2
  630. package/ts_build/tests/manual/ycmd/test_endpoints.js +0 -130
  631. package/ts_build/tests/manual/ycmd/test_endpoints.js.map +0 -1
  632. package/ts_build/tests/manual/ycmd/test_final_comprehensive.d.ts +0 -2
  633. package/ts_build/tests/manual/ycmd/test_final_comprehensive.js +0 -231
  634. package/ts_build/tests/manual/ycmd/test_final_comprehensive.js.map +0 -1
  635. package/ts_build/tests/manual/ycmd/test_final_validation.d.ts +0 -2
  636. package/ts_build/tests/manual/ycmd/test_final_validation.js +0 -170
  637. package/ts_build/tests/manual/ycmd/test_final_validation.js.map +0 -1
  638. package/ts_build/tests/manual/ycmd/test_individual_ycmd_tool.d.ts +0 -2
  639. package/ts_build/tests/manual/ycmd/test_individual_ycmd_tool.js +0 -37
  640. package/ts_build/tests/manual/ycmd/test_individual_ycmd_tool.js.map +0 -1
  641. package/ts_build/tests/manual/ycmd/test_server_manager.d.ts +0 -1
  642. package/ts_build/tests/manual/ycmd/test_server_manager.js +0 -38
  643. package/ts_build/tests/manual/ycmd/test_server_manager.js.map +0 -1
  644. package/ts_build/tests/manual/ycmd/test_simple_debug.d.ts +0 -2
  645. package/ts_build/tests/manual/ycmd/test_simple_debug.js +0 -109
  646. package/ts_build/tests/manual/ycmd/test_simple_debug.js.map +0 -1
  647. package/ts_build/tests/manual/ycmd/test_tsserver_workflow.d.ts +0 -1
  648. package/ts_build/tests/manual/ycmd/test_tsserver_workflow.js +0 -138
  649. package/ts_build/tests/manual/ycmd/test_tsserver_workflow.js.map +0 -1
  650. package/ts_build/tests/manual/ycmd/test_typescript_simple.d.ts +0 -1
  651. package/ts_build/tests/manual/ycmd/test_typescript_simple.js +0 -76
  652. package/ts_build/tests/manual/ycmd/test_typescript_simple.js.map +0 -1
  653. package/ts_build/tests/manual/ycmd/test_typescript_ycmd.d.ts +0 -1
  654. package/ts_build/tests/manual/ycmd/test_typescript_ycmd.js +0 -115
  655. package/ts_build/tests/manual/ycmd/test_typescript_ycmd.js.map +0 -1
  656. package/ts_build/tests/manual/ycmd/test_workspace_config.d.ts +0 -1
  657. package/ts_build/tests/manual/ycmd/test_workspace_config.js +0 -99
  658. package/ts_build/tests/manual/ycmd/test_workspace_config.js.map +0 -1
  659. package/ts_build/tests/manual/ycmd/test_ycmd_auto_start.d.ts +0 -2
  660. package/ts_build/tests/manual/ycmd/test_ycmd_auto_start.js +0 -140
  661. package/ts_build/tests/manual/ycmd/test_ycmd_auto_start.js.map +0 -1
  662. package/ts_build/tests/manual/ycmd/test_ycmd_comprehensive.d.ts +0 -1
  663. package/ts_build/tests/manual/ycmd/test_ycmd_comprehensive.js +0 -93
  664. package/ts_build/tests/manual/ycmd/test_ycmd_comprehensive.js.map +0 -1
  665. package/ts_build/tests/manual/ycmd/test_ycmd_direct.d.ts +0 -2
  666. package/ts_build/tests/manual/ycmd/test_ycmd_direct.js +0 -159
  667. package/ts_build/tests/manual/ycmd/test_ycmd_direct.js.map +0 -1
  668. package/ts_build/tests/manual/ycmd/test_ycmd_experiment.d.ts +0 -15
  669. package/ts_build/tests/manual/ycmd/test_ycmd_experiment.js +0 -68
  670. package/ts_build/tests/manual/ycmd/test_ycmd_experiment.js.map +0 -1
  671. package/ts_build/tests/manual/ycmd/test_ycmd_final.d.ts +0 -2
  672. package/ts_build/tests/manual/ycmd/test_ycmd_final.js +0 -205
  673. package/ts_build/tests/manual/ycmd/test_ycmd_final.js.map +0 -1
  674. package/ts_build/tests/manual/ycmd/test_ycmd_integration.d.ts +0 -3
  675. package/ts_build/tests/manual/ycmd/test_ycmd_integration.js +0 -119
  676. package/ts_build/tests/manual/ycmd/test_ycmd_integration.js.map +0 -1
  677. package/ts_build/tests/manual/ycmd/test_ycmd_simple.d.ts +0 -2
  678. package/ts_build/tests/manual/ycmd/test_ycmd_simple.js +0 -36
  679. package/ts_build/tests/manual/ycmd/test_ycmd_simple.js.map +0 -1
  680. package/ts_build/tests/manual/ycmd/working_simple_test.d.ts +0 -2
  681. package/ts_build/tests/manual/ycmd/working_simple_test.js +0 -144
  682. package/ts_build/tests/manual/ycmd/working_simple_test.js.map +0 -1
  683. package/ts_build/tests/patching/corrupted.test.d.ts +0 -1
  684. package/ts_build/tests/patching/corrupted.test.js +0 -53
  685. package/ts_build/tests/patching/corrupted.test.js.map +0 -1
  686. package/ts_build/tests/patching/imports.test.d.ts +0 -1
  687. package/ts_build/tests/patching/imports.test.js +0 -71
  688. package/ts_build/tests/patching/imports.test.js.map +0 -1
  689. package/ts_build/tests/patching/patchFileOutput.test.d.ts +0 -1
  690. package/ts_build/tests/patching/patchFileOutput.test.js +0 -269
  691. package/ts_build/tests/patching/patchFileOutput.test.js.map +0 -1
  692. package/ts_build/tests/patching/regression-2026.test.d.ts +0 -1
  693. package/ts_build/tests/patching/regression-2026.test.js +0 -528
  694. package/ts_build/tests/patching/regression-2026.test.js.map +0 -1
  695. package/ts_build/tests/patching/transcriptMangleRegression.test.d.ts +0 -1
  696. package/ts_build/tests/patching/transcriptMangleRegression.test.js +0 -104
  697. package/ts_build/tests/patching/transcriptMangleRegression.test.js.map +0 -1
  698. package/ts_build/tests/plugins/language/languagePlugin-content-triggers.test.d.ts +0 -1
  699. package/ts_build/tests/plugins/language/languagePlugin-content-triggers.test.js +0 -294
  700. package/ts_build/tests/plugins/language/languagePlugin-content-triggers.test.js.map +0 -1
  701. package/ts_build/tests/plugins/language/languagePlugin-integration.test.d.ts +0 -1
  702. package/ts_build/tests/plugins/language/languagePlugin-integration.test.js +0 -343
  703. package/ts_build/tests/plugins/language/languagePlugin-integration.test.js.map +0 -1
  704. package/ts_build/tests/plugins/language/languagePlugin.test.d.ts +0 -1
  705. package/ts_build/tests/plugins/language/languagePlugin.test.js +0 -315
  706. package/ts_build/tests/plugins/language/languagePlugin.test.js.map +0 -1
  707. package/ts_build/tests/processes/managedProcessShim.test.d.ts +0 -1
  708. package/ts_build/tests/processes/managedProcessShim.test.js +0 -92
  709. package/ts_build/tests/processes/managedProcessShim.test.js.map +0 -1
  710. package/ts_build/tests/processors/Base64ImageDetector.test.d.ts +0 -1
  711. package/ts_build/tests/processors/Base64ImageDetector.test.js +0 -792
  712. package/ts_build/tests/processors/Base64ImageDetector.test.js.map +0 -1
  713. package/ts_build/tests/processors/CustomVariables.test.d.ts +0 -1
  714. package/ts_build/tests/processors/CustomVariables.test.js +0 -764
  715. package/ts_build/tests/processors/CustomVariables.test.js.map +0 -1
  716. package/ts_build/tests/processors/CustomVariablesBenchmark.test.d.ts +0 -1
  717. package/ts_build/tests/processors/CustomVariablesBenchmark.test.js +0 -179
  718. package/ts_build/tests/processors/CustomVariablesBenchmark.test.js.map +0 -1
  719. package/ts_build/tests/processors/HarmonyToolProcessor.test.d.ts +0 -1
  720. package/ts_build/tests/processors/HarmonyToolProcessor.test.js +0 -382
  721. package/ts_build/tests/processors/HarmonyToolProcessor.test.js.map +0 -1
  722. package/ts_build/tests/processors/TokenCompressor.test.d.ts +0 -1
  723. package/ts_build/tests/processors/TokenCompressor.test.js +0 -473
  724. package/ts_build/tests/processors/TokenCompressor.test.js.map +0 -1
  725. package/ts_build/tests/processors/ToolResponseCache.test.d.ts +0 -1
  726. package/ts_build/tests/processors/ToolResponseCache.test.js +0 -657
  727. package/ts_build/tests/processors/ToolResponseCache.test.js.map +0 -1
  728. package/ts_build/tests/processors/tools/boundedRetrievalTools.test.d.ts +0 -1
  729. package/ts_build/tests/processors/tools/boundedRetrievalTools.test.js +0 -57
  730. package/ts_build/tests/processors/tools/boundedRetrievalTools.test.js.map +0 -1
  731. package/ts_build/tests/processors/tools/grepToolResponse.test.d.ts +0 -1
  732. package/ts_build/tests/processors/tools/grepToolResponse.test.js +0 -77
  733. package/ts_build/tests/processors/tools/grepToolResponse.test.js.map +0 -1
  734. package/ts_build/tests/services/ConversionService.test.d.ts +0 -1
  735. package/ts_build/tests/services/ConversionService.test.js +0 -154
  736. package/ts_build/tests/services/ConversionService.test.js.map +0 -1
  737. package/ts_build/tests/services/DockerService.test.d.ts +0 -1
  738. package/ts_build/tests/services/DockerService.test.js +0 -22
  739. package/ts_build/tests/services/DockerService.test.js.map +0 -1
  740. package/ts_build/tests/services/Tools.test.d.ts +0 -1
  741. package/ts_build/tests/services/Tools.test.js +0 -1365
  742. package/ts_build/tests/services/Tools.test.js.map +0 -1
  743. package/ts_build/tests/services/ToolsService.setFunction.test.d.ts +0 -1
  744. package/ts_build/tests/services/ToolsService.setFunction.test.js +0 -51
  745. package/ts_build/tests/services/ToolsService.setFunction.test.js.map +0 -1
  746. package/ts_build/tests/services/WorkerReloadConfig.test.d.ts +0 -1
  747. package/ts_build/tests/services/WorkerReloadConfig.test.js +0 -86
  748. package/ts_build/tests/services/WorkerReloadConfig.test.js.map +0 -1
  749. package/ts_build/tests/test.spec.d.ts +0 -1
  750. package/ts_build/tests/test.spec.js +0 -139
  751. package/ts_build/tests/test.spec.js.map +0 -1
  752. package/ts_build/tests/unit/InputQueueManager.test.d.ts +0 -1
  753. package/ts_build/tests/unit/InputQueueManager.test.js +0 -104
  754. package/ts_build/tests/unit/InputQueueManager.test.js.map +0 -1
  755. package/ts_build/tests/unit/McpWebsocketTransport.test.d.ts +0 -1
  756. package/ts_build/tests/unit/McpWebsocketTransport.test.js +0 -47
  757. package/ts_build/tests/unit/McpWebsocketTransport.test.js.map +0 -1
  758. package/ts_build/tests/unit/agents/historyRollback.test.d.ts +0 -1
  759. package/ts_build/tests/unit/agents/historyRollback.test.js +0 -42
  760. package/ts_build/tests/unit/agents/historyRollback.test.js.map +0 -1
  761. package/ts_build/tests/unit/agents/tools/loadImageAsBase64.test.d.ts +0 -1
  762. package/ts_build/tests/unit/agents/tools/loadImageAsBase64.test.js +0 -67
  763. package/ts_build/tests/unit/agents/tools/loadImageAsBase64.test.js.map +0 -1
  764. package/ts_build/tests/unit/auth/jwtStore.test.d.ts +0 -1
  765. package/ts_build/tests/unit/auth/jwtStore.test.js +0 -46
  766. package/ts_build/tests/unit/auth/jwtStore.test.js.map +0 -1
  767. package/ts_build/tests/unit/auth/keyAuth.test.d.ts +0 -1
  768. package/ts_build/tests/unit/auth/keyAuth.test.js +0 -118
  769. package/ts_build/tests/unit/auth/keyAuth.test.js.map +0 -1
  770. package/ts_build/tests/unit/auth/keyManager.test.d.ts +0 -1
  771. package/ts_build/tests/unit/auth/keyManager.test.js +0 -96
  772. package/ts_build/tests/unit/auth/keyManager.test.js.map +0 -1
  773. package/ts_build/tests/unit/auth/registerIdentity.test.d.ts +0 -1
  774. package/ts_build/tests/unit/auth/registerIdentity.test.js +0 -92
  775. package/ts_build/tests/unit/auth/registerIdentity.test.js.map +0 -1
  776. package/ts_build/tests/unit/chat/ToolCommandModule.test.d.ts +0 -1
  777. package/ts_build/tests/unit/chat/ToolCommandModule.test.js +0 -61
  778. package/ts_build/tests/unit/chat/ToolCommandModule.test.js.map +0 -1
  779. package/ts_build/tests/unit/chat/historyCommandArgs.test.d.ts +0 -1
  780. package/ts_build/tests/unit/chat/historyCommandArgs.test.js +0 -29
  781. package/ts_build/tests/unit/chat/historyCommandArgs.test.js.map +0 -1
  782. package/ts_build/tests/unit/clients/AIClient.test.d.ts +0 -1
  783. package/ts_build/tests/unit/clients/AIClient.test.js +0 -342
  784. package/ts_build/tests/unit/clients/AIClient.test.js.map +0 -1
  785. package/ts_build/tests/unit/clients/anthropic.responseMetadata.test.d.ts +0 -1
  786. package/ts_build/tests/unit/clients/anthropic.responseMetadata.test.js +0 -77
  787. package/ts_build/tests/unit/clients/anthropic.responseMetadata.test.js.map +0 -1
  788. package/ts_build/tests/unit/clients/attribution.test.d.ts +0 -1
  789. package/ts_build/tests/unit/clients/attribution.test.js +0 -153
  790. package/ts_build/tests/unit/clients/attribution.test.js.map +0 -1
  791. package/ts_build/tests/unit/clients/http.responseMetadata.test.d.ts +0 -1
  792. package/ts_build/tests/unit/clients/http.responseMetadata.test.js +0 -77
  793. package/ts_build/tests/unit/clients/http.responseMetadata.test.js.map +0 -1
  794. package/ts_build/tests/unit/clients/openai.responseMetadata.test.d.ts +0 -1
  795. package/ts_build/tests/unit/clients/openai.responseMetadata.test.js +0 -86
  796. package/ts_build/tests/unit/clients/openai.responseMetadata.test.js.map +0 -1
  797. package/ts_build/tests/unit/clients/responseMetadata.test.d.ts +0 -1
  798. package/ts_build/tests/unit/clients/responseMetadata.test.js +0 -96
  799. package/ts_build/tests/unit/clients/responseMetadata.test.js.map +0 -1
  800. package/ts_build/tests/unit/clients/withRetry.test.d.ts +0 -1
  801. package/ts_build/tests/unit/clients/withRetry.test.js +0 -225
  802. package/ts_build/tests/unit/clients/withRetry.test.js.map +0 -1
  803. package/ts_build/tests/unit/commands/agents.test.d.ts +0 -1
  804. package/ts_build/tests/unit/commands/agents.test.js +0 -119
  805. package/ts_build/tests/unit/commands/agents.test.js.map +0 -1
  806. package/ts_build/tests/unit/commands/github-credentials.test.d.ts +0 -1
  807. package/ts_build/tests/unit/commands/github-credentials.test.js +0 -145
  808. package/ts_build/tests/unit/commands/github-credentials.test.js.map +0 -1
  809. package/ts_build/tests/unit/commands/misc.test.d.ts +0 -1
  810. package/ts_build/tests/unit/commands/misc.test.js +0 -70
  811. package/ts_build/tests/unit/commands/misc.test.js.map +0 -1
  812. package/ts_build/tests/unit/commands/remote.test.d.ts +0 -1
  813. package/ts_build/tests/unit/commands/remote.test.js +0 -70
  814. package/ts_build/tests/unit/commands/remote.test.js.map +0 -1
  815. package/ts_build/tests/unit/commands/sandbox.test.d.ts +0 -1
  816. package/ts_build/tests/unit/commands/sandbox.test.js +0 -258
  817. package/ts_build/tests/unit/commands/sandbox.test.js.map +0 -1
  818. package/ts_build/tests/unit/hashes.test.d.ts +0 -1
  819. package/ts_build/tests/unit/hashes.test.js +0 -25
  820. package/ts_build/tests/unit/hashes.test.js.map +0 -1
  821. package/ts_build/tests/unit/input-queue.test.d.ts +0 -1
  822. package/ts_build/tests/unit/input-queue.test.js +0 -32
  823. package/ts_build/tests/unit/input-queue.test.js.map +0 -1
  824. package/ts_build/tests/unit/login.test.d.ts +0 -1
  825. package/ts_build/tests/unit/login.test.js +0 -166
  826. package/ts_build/tests/unit/login.test.js.map +0 -1
  827. package/ts_build/tests/unit/modules/moduleLoading.test.d.ts +0 -1
  828. package/ts_build/tests/unit/modules/moduleLoading.test.js +0 -272
  829. package/ts_build/tests/unit/modules/moduleLoading.test.js.map +0 -1
  830. package/ts_build/tests/unit/plugins/pluginLoading.test.d.ts +0 -1
  831. package/ts_build/tests/unit/plugins/pluginLoading.test.js +0 -117
  832. package/ts_build/tests/unit/plugins/pluginLoading.test.js.map +0 -1
  833. package/ts_build/tests/unit/services/AgentSyncKnowhowWeb.test.d.ts +0 -1
  834. package/ts_build/tests/unit/services/AgentSyncKnowhowWeb.test.js +0 -32
  835. package/ts_build/tests/unit/services/AgentSyncKnowhowWeb.test.js.map +0 -1
  836. package/ts_build/tests/unit/services/KnowhowClient.test.d.ts +0 -1
  837. package/ts_build/tests/unit/services/KnowhowClient.test.js +0 -69
  838. package/ts_build/tests/unit/services/KnowhowClient.test.js.map +0 -1
  839. package/ts_build/tests/unit/services/LazyToolsService.test.d.ts +0 -1
  840. package/ts_build/tests/unit/services/LazyToolsService.test.js +0 -47
  841. package/ts_build/tests/unit/services/LazyToolsService.test.js.map +0 -1
  842. package/ts_build/tests/unit/services/Mcp.test.d.ts +0 -1
  843. package/ts_build/tests/unit/services/Mcp.test.js +0 -45
  844. package/ts_build/tests/unit/services/Mcp.test.js.map +0 -1
  845. package/ts_build/tests/unit/services/MinimalToolsService.test.d.ts +0 -1
  846. package/ts_build/tests/unit/services/MinimalToolsService.test.js +0 -320
  847. package/ts_build/tests/unit/services/MinimalToolsService.test.js.map +0 -1
  848. package/ts_build/tests/unit/services/RuntimeReloadService.test.d.ts +0 -1
  849. package/ts_build/tests/unit/services/RuntimeReloadService.test.js +0 -26
  850. package/ts_build/tests/unit/services/RuntimeReloadService.test.js.map +0 -1
  851. package/ts_build/tests/unit/services/SessionManager.test.d.ts +0 -1
  852. package/ts_build/tests/unit/services/SessionManager.test.js +0 -72
  853. package/ts_build/tests/unit/services/SessionManager.test.js.map +0 -1
  854. package/ts_build/tests/unit/services/SyncedAgentWatcher.test.d.ts +0 -1
  855. package/ts_build/tests/unit/services/SyncedAgentWatcher.test.js +0 -78
  856. package/ts_build/tests/unit/services/SyncedAgentWatcher.test.js.map +0 -1
  857. package/ts_build/tests/unit/services/SyncerService.test.d.ts +0 -1
  858. package/ts_build/tests/unit/services/SyncerService.test.js +0 -40
  859. package/ts_build/tests/unit/services/SyncerService.test.js.map +0 -1
  860. package/ts_build/tests/unit/tunnel.test.d.ts +0 -1
  861. package/ts_build/tests/unit/tunnel.test.js +0 -47
  862. package/ts_build/tests/unit/tunnel.test.js.map +0 -1
  863. package/ts_build/tests/unit/util/Trace.test.d.ts +0 -1
  864. package/ts_build/tests/unit/util/Trace.test.js +0 -107
  865. package/ts_build/tests/unit/util/Trace.test.js.map +0 -1
  866. package/ts_build/tests/unit/utils/http.test.d.ts +0 -1
  867. package/ts_build/tests/unit/utils/http.test.js +0 -69
  868. package/ts_build/tests/unit/utils/http.test.js.map +0 -1
  869. package/tsconfig.json +0 -34
  870. 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
- });