@tyvm/knowhow 0.0.159 → 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.
- package/package.json +1 -1
- package/ts_build/package.json +1 -1
- package/ts_build/src/chat/CliChatService.d.ts +2 -1
- package/ts_build/src/chat/CliChatService.js +29 -3
- package/ts_build/src/chat/CliChatService.js.map +1 -1
- package/ts_build/src/chat/modules/AgentModule.js +21 -17
- package/ts_build/src/chat/modules/AgentModule.js.map +1 -1
- package/ts_build/src/chat/renderer/ConsoleRenderer.js +32 -25
- package/ts_build/src/chat/renderer/ConsoleRenderer.js.map +1 -1
- package/ts_build/src/logger.d.ts +1 -0
- package/ts_build/src/logger.js +13 -1
- package/ts_build/src/logger.js.map +1 -1
- package/ts_build/src/utils/InputQueueManager.d.ts +8 -1
- package/ts_build/src/utils/InputQueueManager.js +72 -2
- package/ts_build/src/utils/InputQueueManager.js.map +1 -1
- package/ts_build/src/utils/index.d.ts +3 -1
- package/ts_build/src/utils/index.js +11 -3
- package/ts_build/src/utils/index.js.map +1 -1
- package/CONFIG.md +0 -429
- package/PROCESSING.md +0 -450
- package/WORKER.md +0 -260
- package/autodoc/README.md +0 -324
- package/autodoc/chat-guide.md +0 -444
- package/autodoc/cli-reference.md +0 -720
- package/autodoc/config-reference.md +0 -642
- package/autodoc/embeddings-guide.md +0 -467
- package/autodoc/generate-guide.md +0 -437
- package/autodoc/language-plugin-guide.md +0 -417
- package/autodoc/modules-guide.md +0 -379
- package/autodoc/plugins-guide.md +0 -721
- package/autodoc/quickstart-guide.md +0 -126
- package/autodoc/skills-guide.md +0 -584
- package/autodoc/worker-guide.md +0 -519
- package/docs/input-queue-manager.md +0 -142
- package/docs/multi-worker-management.md +0 -142
- package/docs/shell-commands.md +0 -174
- package/jest.config.js +0 -19
- package/jest.manual.config.js +0 -19
- package/scripts/README.md +0 -119
- package/scripts/build-for-node.sh +0 -148
- package/scripts/cache-miss-debug.ts +0 -365
- package/scripts/check-isolated-deps.sh +0 -69
- package/scripts/check-model-pricing.ts +0 -509
- package/scripts/compare-openrouter-coverage.ts +0 -576
- package/scripts/migrate-usage-json.js +0 -147
- package/scripts/publish.sh +0 -86
- package/scripts/restore_keys.sh +0 -59
- package/scripts/test-repetition-hint.ts +0 -302
- package/scripts/unset_keys.sh +0 -60
- package/src/agents/base/base.ts +0 -1963
- package/src/agents/base/prompt.ts +0 -55
- package/src/agents/configurable/ConfigAgent.ts +0 -24
- package/src/agents/developer/developer.ts +0 -76
- package/src/agents/historyRollback.ts +0 -36
- package/src/agents/index.ts +0 -52
- package/src/agents/interface.ts +0 -11
- package/src/agents/patcher/codebase.md +0 -27
- package/src/agents/patcher/patcher.ts +0 -131
- package/src/agents/researcher/researcher.ts +0 -115
- package/src/agents/setup/setup.ts +0 -63
- package/src/agents/tools/addInternalTools.ts +0 -21
- package/src/agents/tools/agentCall.ts +0 -34
- package/src/agents/tools/aiClient.ts +0 -178
- package/src/agents/tools/askHuman.ts +0 -10
- package/src/agents/tools/callPlugin.ts +0 -10
- package/src/agents/tools/connectAgent.ts +0 -355
- package/src/agents/tools/embeddingSearch.ts +0 -6
- package/src/agents/tools/execCommand.ts +0 -162
- package/src/agents/tools/fileSearch.ts +0 -35
- package/src/agents/tools/finalAnswer.ts +0 -4
- package/src/agents/tools/googleSearch.ts +0 -243
- package/src/agents/tools/index.ts +0 -33
- package/src/agents/tools/language/definitions.ts +0 -105
- package/src/agents/tools/language/index.ts +0 -20
- package/src/agents/tools/lazy/definitions.ts +0 -72
- package/src/agents/tools/lazy/disableTools.ts +0 -16
- package/src/agents/tools/lazy/enableTools.ts +0 -16
- package/src/agents/tools/lazy/index.ts +0 -3
- package/src/agents/tools/lazy/listAvailableTools.ts +0 -17
- package/src/agents/tools/lintFile.ts +0 -19
- package/src/agents/tools/list.ts +0 -739
- package/src/agents/tools/loadImageAsBase64.ts +0 -83
- package/src/agents/tools/loadWebpage.ts +0 -19
- package/src/agents/tools/mcp/connectMcpServer.ts +0 -40
- package/src/agents/tools/mcp/definitions.ts +0 -67
- package/src/agents/tools/mcp/disconnectMcpServer.ts +0 -40
- package/src/agents/tools/mcp/index.ts +0 -3
- package/src/agents/tools/mcp/listAvailableMcpServers.ts +0 -28
- package/src/agents/tools/minimal/callTool.ts +0 -45
- package/src/agents/tools/minimal/definitions.ts +0 -50
- package/src/agents/tools/minimal/index.ts +0 -3
- package/src/agents/tools/minimal/inspectTools.ts +0 -27
- package/src/agents/tools/modifyFile.ts +0 -53
- package/src/agents/tools/observe.ts +0 -247
- package/src/agents/tools/patch.ts +0 -1287
- package/src/agents/tools/readBlocks.ts +0 -83
- package/src/agents/tools/readFile.ts +0 -105
- package/src/agents/tools/replyToParent.ts +0 -123
- package/src/agents/tools/runGenerate.ts +0 -210
- package/src/agents/tools/scanFile.ts +0 -16
- package/src/agents/tools/sendAgentMessage.ts +0 -139
- package/src/agents/tools/skills.ts +0 -79
- package/src/agents/tools/startAgentTask.ts +0 -393
- package/src/agents/tools/stringReplace.ts +0 -105
- package/src/agents/tools/textSearch.ts +0 -128
- package/src/agents/tools/types/fileblock.ts +0 -5
- package/src/agents/tools/visionTool.ts +0 -35
- package/src/agents/tools/waitForAgentCompleted.ts +0 -270
- package/src/agents/tools/writeFile.ts +0 -106
- package/src/agents/tools/ycmd/client.ts +0 -608
- package/src/agents/tools/ycmd/definitions.ts +0 -294
- package/src/agents/tools/ycmd/detection.ts +0 -211
- package/src/agents/tools/ycmd/index.ts +0 -11
- package/src/agents/tools/ycmd/installer.ts +0 -251
- package/src/agents/tools/ycmd/server.ts +0 -545
- package/src/agents/tools/ycmd/serverManager.ts +0 -316
- package/src/agents/tools/ycmd/tools/completion.ts +0 -113
- package/src/agents/tools/ycmd/tools/diagnostics.ts +0 -166
- package/src/agents/tools/ycmd/tools/getLocations.ts +0 -173
- package/src/agents/tools/ycmd/tools/goto.ts +0 -169
- package/src/agents/tools/ycmd/tools/refactor.ts +0 -204
- package/src/agents/tools/ycmd/tools/signature.ts +0 -174
- package/src/agents/tools/ycmd/tools/start.ts +0 -95
- package/src/agents/tools/ycmd/utils/pathUtils.ts +0 -59
- package/src/ai.ts +0 -306
- package/src/auth/browserLogin.ts +0 -406
- package/src/auth/environmentAuth.ts +0 -51
- package/src/auth/errors.ts +0 -6
- package/src/auth/jwtStore.ts +0 -70
- package/src/auth/keyAuth.ts +0 -142
- package/src/auth/keyManager.ts +0 -331
- package/src/auth/registerIdentity.ts +0 -67
- package/src/auth/spinner.ts +0 -23
- package/src/chat/CliChatService.ts +0 -438
- package/src/chat/modules/AgentModule.ts +0 -1664
- package/src/chat/modules/AskModule.ts +0 -98
- package/src/chat/modules/BaseChatModule.ts +0 -65
- package/src/chat/modules/ClipboardImageModule.ts +0 -136
- package/src/chat/modules/CustomCommandsModule.ts +0 -80
- package/src/chat/modules/InternalChatModule.ts +0 -216
- package/src/chat/modules/RemoteSyncModule.ts +0 -482
- package/src/chat/modules/RendererModule.ts +0 -139
- package/src/chat/modules/SearchModule.ts +0 -168
- package/src/chat/modules/SessionsModule.ts +0 -969
- package/src/chat/modules/SetupModule.ts +0 -185
- package/src/chat/modules/ShellCommandModule.ts +0 -98
- package/src/chat/modules/SystemModule.ts +0 -161
- package/src/chat/modules/ToolCommandModule.ts +0 -102
- package/src/chat/modules/VoiceModule.ts +0 -70
- package/src/chat/modules/index.ts +0 -8
- package/src/chat/renderer/CompactRenderer.ts +0 -229
- package/src/chat/renderer/ConsoleRenderer.ts +0 -160
- package/src/chat/renderer/FancyRenderer.ts +0 -440
- package/src/chat/renderer/PlainRenderer.ts +0 -218
- package/src/chat/renderer/index.ts +0 -6
- package/src/chat/renderer/loadRenderer.ts +0 -316
- package/src/chat/renderer/messagesToRenderEvents.ts +0 -96
- package/src/chat/renderer/types.ts +0 -99
- package/src/chat/types.ts +0 -146
- package/src/chat.ts +0 -140
- package/src/cli.ts +0 -180
- package/src/clients/anthropic.ts +0 -772
- package/src/clients/attribution.ts +0 -53
- package/src/clients/cerebras.ts +0 -10
- package/src/clients/contextLimits.ts +0 -263
- package/src/clients/copilot.ts +0 -23
- package/src/clients/deepseek.ts +0 -16
- package/src/clients/fireworks.ts +0 -71
- package/src/clients/gemini.ts +0 -1169
- package/src/clients/github.ts +0 -16
- package/src/clients/groq.ts +0 -15
- package/src/clients/http.ts +0 -719
- package/src/clients/index.ts +0 -1153
- package/src/clients/knowhow.ts +0 -130
- package/src/clients/knowhowMcp.ts +0 -118
- package/src/clients/llama.ts +0 -16
- package/src/clients/meta.ts +0 -27
- package/src/clients/mistral.ts +0 -16
- package/src/clients/nvidia.ts +0 -16
- package/src/clients/openai.ts +0 -1186
- package/src/clients/openrouter.ts +0 -24
- package/src/clients/pricing/anthropic.ts +0 -149
- package/src/clients/pricing/cerebras.ts +0 -11
- package/src/clients/pricing/copilot.ts +0 -60
- package/src/clients/pricing/deepseek.ts +0 -15
- package/src/clients/pricing/fireworks.ts +0 -182
- package/src/clients/pricing/github.ts +0 -69
- package/src/clients/pricing/google.ts +0 -385
- package/src/clients/pricing/groq.ts +0 -56
- package/src/clients/pricing/index.ts +0 -44
- package/src/clients/pricing/llama.ts +0 -18
- package/src/clients/pricing/meta.ts +0 -12
- package/src/clients/pricing/mistral.ts +0 -34
- package/src/clients/pricing/models.ts +0 -25
- package/src/clients/pricing/nvidia.ts +0 -102
- package/src/clients/pricing/openai.ts +0 -409
- package/src/clients/pricing/openrouter.ts +0 -36
- package/src/clients/pricing/qwen.ts +0 -80
- package/src/clients/pricing/types.ts +0 -125
- package/src/clients/pricing/xai.ts +0 -137
- package/src/clients/qwen.ts +0 -16
- package/src/clients/responseMetadata.ts +0 -221
- package/src/clients/types.ts +0 -531
- package/src/clients/withRetry.ts +0 -89
- package/src/clients/xai.ts +0 -693
- package/src/cloudWorker.ts +0 -394
- package/src/commands/agent.ts +0 -342
- package/src/commands/agents.ts +0 -1037
- package/src/commands/behaviors.ts +0 -47
- package/src/commands/convert.ts +0 -291
- package/src/commands/hash.ts +0 -179
- package/src/commands/mcp.ts +0 -743
- package/src/commands/misc.ts +0 -373
- package/src/commands/modules.ts +0 -704
- package/src/commands/processes.ts +0 -248
- package/src/commands/remote.ts +0 -77
- package/src/commands/replay.ts +0 -503
- package/src/commands/sandbox.ts +0 -566
- package/src/commands/services.ts +0 -168
- package/src/commands/skills.ts +0 -107
- package/src/commands/workers.ts +0 -168
- package/src/config.ts +0 -468
- package/src/conversion.ts +0 -69
- package/src/dataset/diffs/README.md +0 -12
- package/src/dataset/diffs/debug-errors.ts +0 -29
- package/src/dataset/diffs/debug.ts +0 -64
- package/src/dataset/diffs/generate.ts +0 -71
- package/src/dataset/diffs/jsonl.ts +0 -53
- package/src/dataset/diffs/test.ts +0 -194
- package/src/embeddings.ts +0 -494
- package/src/fileSync.ts +0 -369
- package/src/generate.ts +0 -529
- package/src/hashes.ts +0 -180
- package/src/index.ts +0 -261
- package/src/logger.ts +0 -197
- package/src/login.ts +0 -209
- package/src/microphone.ts +0 -141
- package/src/migrations.ts +0 -151
- package/src/plugins/AgentsMdPlugin.ts +0 -118
- package/src/plugins/GitPlugin.ts +0 -598
- package/src/plugins/LinterPlugin.ts +0 -214
- package/src/plugins/PluginBase.ts +0 -70
- package/src/plugins/SkillsPlugin.ts +0 -37
- package/src/plugins/embedding.ts +0 -82
- package/src/plugins/exec.ts +0 -70
- package/src/plugins/language.ts +0 -290
- package/src/plugins/plugins.ts +0 -175
- package/src/plugins/tmux.ts +0 -132
- package/src/plugins/types.ts +0 -36
- package/src/plugins/url.ts +0 -101
- package/src/plugins/vim.ts +0 -89
- package/src/processes/ProcessManager.ts +0 -96
- package/src/processes/managedProcessShim.ts +0 -138
- package/src/processors/Base64ImageDetector.ts +0 -502
- package/src/processors/CustomVariables.ts +0 -693
- package/src/processors/GemmaToolProcessor.ts +0 -163
- package/src/processors/HarmonyToolProcessor.ts +0 -264
- package/src/processors/JsonCompressor.ts +0 -510
- package/src/processors/MinimalToolsMessageProcessor.ts +0 -113
- package/src/processors/TokenCompressor.ts +0 -620
- package/src/processors/ToolResponseCache.ts +0 -322
- package/src/processors/XmlToolCallProcessor.ts +0 -533
- package/src/processors/index.ts +0 -14
- package/src/processors/tools/boundedToolResponse.ts +0 -49
- package/src/processors/tools/grepToolResponse.ts +0 -230
- package/src/processors/tools/index.ts +0 -23
- package/src/processors/tools/jqToolResponse.ts +0 -159
- package/src/processors/tools/listStoredToolResponses.ts +0 -124
- package/src/processors/tools/tailToolResponse.ts +0 -148
- package/src/prompts/BasicCodeDocumenter.ts +0 -1
- package/src/prompts/BasicProjectDocumenter.ts +0 -1
- package/src/prompts/EmbeddingSeachHelper.ts +0 -1
- package/src/prompts/KnowhowConfigExamples.ts +0 -376
- package/src/prompts/index.ts +0 -9
- package/src/remotes.ts +0 -110
- package/src/server/index.ts +0 -16
- package/src/services/AgentService.ts +0 -134
- package/src/services/AgentSyncFs.ts +0 -775
- package/src/services/AgentSyncKnowhowWeb.ts +0 -389
- package/src/services/BehaviorsService.ts +0 -466
- package/src/services/DockerService.ts +0 -511
- package/src/services/EmbeddingService.ts +0 -427
- package/src/services/EmbeddingsService.ts +0 -73
- package/src/services/EventService.ts +0 -279
- package/src/services/ExtensionsService.ts +0 -25
- package/src/services/KnowhowClient.ts +0 -928
- package/src/services/LazyToolsService.ts +0 -210
- package/src/services/Mcp.ts +0 -727
- package/src/services/McpServer.ts +0 -155
- package/src/services/McpWebsocketTransport.ts +0 -87
- package/src/services/MediaProcessorService.ts +0 -669
- package/src/services/MessageProcessor.ts +0 -114
- package/src/services/MinimalToolsService.ts +0 -177
- package/src/services/RuntimeReloadService.ts +0 -31
- package/src/services/S3.ts +0 -61
- package/src/services/SessionManager.ts +0 -358
- package/src/services/SkillsService.ts +0 -822
- package/src/services/SyncedAgentWatcher.ts +0 -124
- package/src/services/SyncerService.ts +0 -191
- package/src/services/TaskRegistry.ts +0 -110
- package/src/services/Tools.ts +0 -580
- package/src/services/TracingService.ts +0 -116
- package/src/services/conversion/ConversionService.ts +0 -757
- package/src/services/conversion/index.ts +0 -2
- package/src/services/conversion/types.ts +0 -87
- package/src/services/flags.ts +0 -51
- package/src/services/index.ts +0 -117
- package/src/services/modules/computerUse.ts +0 -218
- package/src/services/modules/index.ts +0 -314
- package/src/services/modules/types.ts +0 -109
- package/src/services/types.ts +0 -60
- package/src/services/watchers/FsSyncer.ts +0 -199
- package/src/services/watchers/RemoteSyncer.ts +0 -196
- package/src/services/watchers/index.ts +0 -2
- package/src/tunnel.ts +0 -243
- package/src/types.ts +0 -282
- package/src/util/Trace.ts +0 -236
- package/src/utils/InputQueueManager.ts +0 -493
- package/src/utils/errors.ts +0 -0
- package/src/utils/http.ts +0 -150
- package/src/utils/index.ts +0 -111
- package/src/worker.ts +0 -696
- package/src/workerRegistry.ts +0 -152
- package/src/workers/auth/PasskeySetup.ts +0 -181
- package/src/workers/auth/WorkerPasskeyAuth.ts +0 -190
- package/src/workers/auth/WsMiddleware.ts +0 -99
- package/src/workers/auth/authMiddleware.ts +0 -104
- package/src/workers/auth/types.ts +0 -70
- package/src/workers/tools/getChallenge.ts +0 -33
- package/src/workers/tools/index.ts +0 -20
- package/src/workers/tools/listAllowedPorts.ts +0 -30
- package/src/workers/tools/lock.ts +0 -31
- package/src/workers/tools/reloadConfig.ts +0 -84
- package/src/workers/tools/unlock.ts +0 -116
- package/tests/XmlToolCallProcessor.test.ts +0 -468
- package/tests/agents/interrupt.test.ts +0 -200
- package/tests/agents/observe-base.test.ts +0 -183
- package/tests/agents/tools/connectAgent.test.ts +0 -138
- package/tests/agents/tools/observe.test.ts +0 -179
- package/tests/agents/tools/readFile.test.ts +0 -88
- package/tests/agents/tools/replyToParent.test.ts +0 -125
- package/tests/agents/tools/sendAgentMessage.test.ts +0 -99
- package/tests/agents/tools/waitForAgentCompleted.test.ts +0 -147
- package/tests/chat/detach-attach-rendering.test.ts +0 -315
- package/tests/clients/AIClient.test.ts +0 -668
- package/tests/clients/anthropic.test.ts +0 -202
- package/tests/clients/contextLimits.test.ts +0 -97
- package/tests/clients/fireworks.test.ts +0 -65
- package/tests/clients/openai.images.test.ts +0 -105
- package/tests/clients/pricing.test.ts +0 -206
- package/tests/clients/reasoningEffort.test.ts +0 -140
- package/tests/compressor/bigstring.test.ts +0 -450
- package/tests/compressor/bigstring.txt +0 -1
- package/tests/compressor/githubjson.txt +0 -1
- package/tests/compressor/toolResponseCache.test.ts +0 -304
- package/tests/compressor/usageBase64.json +0 -159
- package/tests/compressor/usageBase64.test.ts +0 -175
- package/tests/fixtures/fake-secret.txt +0 -1
- package/tests/manual/agent-events/run-test.ts +0 -203
- package/tests/manual/browser-login/README.md +0 -189
- package/tests/manual/browser-login/test_browser_login_basic.ts +0 -115
- package/tests/manual/browser-login/test_cli_integration.ts +0 -169
- package/tests/manual/browser-login/test_cross_platform_browser.ts +0 -186
- package/tests/manual/browser-login/test_error_scenarios.ts +0 -223
- package/tests/manual/cli/no-env.sh +0 -274
- package/tests/manual/clients/completions.json +0 -1151
- package/tests/manual/clients/completions.test.ts +0 -198
- package/tests/manual/file-edits/figma.test.ts +0 -3
- package/tests/manual/file-edits/fileblocks/readwrite.test.ts +0 -100
- package/tests/manual/file-edits/patching/input.txt +0 -145
- package/tests/manual/file-edits/patching/output.txt +0 -145
- package/tests/manual/file-edits/patching/patch.txt +0 -15
- package/tests/manual/file-edits/patching/unseen.txt +0 -80
- package/tests/manual/file-edits/patching.test.ts +0 -139
- package/tests/manual/modalities/README.md +0 -157
- package/tests/manual/modalities/google.modalities.test.ts +0 -335
- package/tests/manual/modalities/openai.modalities.test.ts +0 -329
- package/tests/manual/modalities/streaming.test.ts +0 -260
- package/tests/manual/modalities/xai.modalities.test.ts +0 -294
- package/tests/manual/test-concurrent-ask.ts +0 -43
- package/tests/manual/ycmd/debug_diagnostics_test.ts +0 -127
- package/tests/manual/ycmd/fixtures/debug_diagnostics.ts +0 -26
- package/tests/manual/ycmd/fixtures/file_change_test.ts +0 -17
- package/tests/manual/ycmd/minimal_advanced_test.ts +0 -108
- package/tests/manual/ycmd/simple_diagnostics_test.ts +0 -61
- package/tests/manual/ycmd/simple_test.ts +0 -74
- package/tests/manual/ycmd/test-typescript-sample.ts +0 -34
- package/tests/manual/ycmd/test_advanced_features.ts +0 -407
- package/tests/manual/ycmd/test_advanced_with_tools.ts +0 -320
- package/tests/manual/ycmd/test_comprehensive_typescript.ts +0 -179
- package/tests/manual/ycmd/test_diagnostics_file_changes.ts +0 -249
- package/tests/manual/ycmd/test_diagnostics_fix.ts +0 -99
- package/tests/manual/ycmd/test_diagnostics_simple.ts +0 -100
- package/tests/manual/ycmd/test_diagnostics_timing.ts +0 -120
- package/tests/manual/ycmd/test_discover_commands.ts +0 -310
- package/tests/manual/ycmd/test_endpoints.ts +0 -115
- package/tests/manual/ycmd/test_final_comprehensive.ts +0 -218
- package/tests/manual/ycmd/test_final_validation.ts +0 -150
- package/tests/manual/ycmd/test_implementation.js +0 -42
- package/tests/manual/ycmd/test_individual_ycmd_tool.ts +0 -39
- package/tests/manual/ycmd/test_server_manager.ts +0 -52
- package/tests/manual/ycmd/test_simple_debug.ts +0 -86
- package/tests/manual/ycmd/test_tsserver_workflow.js +0 -83
- package/tests/manual/ycmd/test_tsserver_workflow.ts +0 -122
- package/tests/manual/ycmd/test_typescript_simple.ts +0 -48
- package/tests/manual/ycmd/test_typescript_ycmd.ts +0 -105
- package/tests/manual/ycmd/test_workspace_config.ts +0 -90
- package/tests/manual/ycmd/test_ycmd_auto_start.ts +0 -137
- package/tests/manual/ycmd/test_ycmd_comprehensive.ts +0 -73
- package/tests/manual/ycmd/test_ycmd_connection.py +0 -10
- package/tests/manual/ycmd/test_ycmd_direct.ts +0 -142
- package/tests/manual/ycmd/test_ycmd_experiment.ts +0 -48
- package/tests/manual/ycmd/test_ycmd_final.ts +0 -200
- package/tests/manual/ycmd/test_ycmd_fixed.py +0 -18
- package/tests/manual/ycmd/test_ycmd_integration.ts +0 -112
- package/tests/manual/ycmd/test_ycmd_simple.ts +0 -45
- package/tests/manual/ycmd/test_ycmd_usage.py +0 -27
- package/tests/manual/ycmd/working_simple_test.ts +0 -134
- package/tests/patching/corrupted.test.ts +0 -78
- package/tests/patching/fixtures/transcript-mangles/agent-sync-fs-nested-catch.json +0 -9
- package/tests/patching/fixtures/transcript-mangles/automation-functions-crossed.json +0 -9
- package/tests/patching/fixtures/transcript-mangles/fruit-ninja-confirmed-retirement.json +0 -8
- package/tests/patching/imports.patch.txt +0 -11
- package/tests/patching/imports.test.ts +0 -43
- package/tests/patching/imports.txt +0 -11
- package/tests/patching/interface.patch.txt +0 -15
- package/tests/patching/interface.txt +0 -7
- package/tests/patching/patchFileOutput.test.ts +0 -328
- package/tests/patching/regression-2026.test.ts +0 -752
- package/tests/patching/transcriptMangleRegression.test.ts +0 -125
- package/tests/plugins/language/languagePlugin-content-triggers.test.ts +0 -346
- package/tests/plugins/language/languagePlugin-integration.test.ts +0 -471
- package/tests/plugins/language/languagePlugin.test.ts +0 -385
- package/tests/processes/managedProcessShim.test.ts +0 -59
- package/tests/processors/Base64ImageDetector.test.ts +0 -979
- package/tests/processors/CustomVariables.test.ts +0 -981
- package/tests/processors/CustomVariablesBenchmark.test.ts +0 -237
- package/tests/processors/HarmonyToolProcessor.test.ts +0 -490
- package/tests/processors/TokenCompressor.test.ts +0 -674
- package/tests/processors/ToolResponseCache.test.ts +0 -864
- package/tests/processors/tools/boundedRetrievalTools.test.ts +0 -68
- package/tests/processors/tools/grepToolResponse.test.ts +0 -159
- package/tests/services/ConversionService.test.ts +0 -154
- package/tests/services/DockerService.test.ts +0 -24
- package/tests/services/Tools.test.ts +0 -1738
- package/tests/services/ToolsService.setFunction.test.ts +0 -68
- package/tests/services/WorkerReloadConfig.test.ts +0 -141
- package/tests/test.spec.ts +0 -163
- package/tests/unit/InputQueueManager.test.ts +0 -174
- package/tests/unit/McpWebsocketTransport.test.ts +0 -56
- package/tests/unit/agents/historyRollback.test.ts +0 -53
- package/tests/unit/agents/tools/loadImageAsBase64.test.ts +0 -44
- package/tests/unit/auth/jwtStore.test.ts +0 -55
- package/tests/unit/auth/keyAuth.test.ts +0 -152
- package/tests/unit/auth/keyManager.test.ts +0 -130
- package/tests/unit/auth/registerIdentity.test.ts +0 -99
- package/tests/unit/chat/ToolCommandModule.test.ts +0 -71
- package/tests/unit/chat/historyCommandArgs.test.ts +0 -37
- package/tests/unit/clients/AIClient.test.ts +0 -454
- package/tests/unit/clients/anthropic.responseMetadata.test.ts +0 -81
- package/tests/unit/clients/attribution.test.ts +0 -185
- package/tests/unit/clients/http.responseMetadata.test.ts +0 -86
- package/tests/unit/clients/openai.responseMetadata.test.ts +0 -90
- package/tests/unit/clients/responseMetadata.test.ts +0 -123
- package/tests/unit/clients/withRetry.test.ts +0 -319
- package/tests/unit/commands/agents.test.ts +0 -111
- package/tests/unit/commands/github-credentials.test.ts +0 -210
- package/tests/unit/commands/misc.test.ts +0 -85
- package/tests/unit/commands/remote.test.ts +0 -79
- package/tests/unit/commands/sandbox.test.ts +0 -350
- package/tests/unit/hashes.test.ts +0 -23
- package/tests/unit/input-queue.test.ts +0 -80
- package/tests/unit/login.test.ts +0 -218
- package/tests/unit/modules/moduleLoading.test.ts +0 -305
- package/tests/unit/plugins/pluginLoading.test.ts +0 -97
- package/tests/unit/services/AgentSyncKnowhowWeb.test.ts +0 -38
- package/tests/unit/services/KnowhowClient.test.ts +0 -84
- package/tests/unit/services/LazyToolsService.test.ts +0 -53
- package/tests/unit/services/Mcp.test.ts +0 -56
- package/tests/unit/services/MinimalToolsService.test.ts +0 -424
- package/tests/unit/services/RuntimeReloadService.test.ts +0 -29
- package/tests/unit/services/SessionManager.test.ts +0 -43
- package/tests/unit/services/SyncedAgentWatcher.test.ts +0 -89
- package/tests/unit/services/SyncerService.test.ts +0 -45
- package/tests/unit/tunnel.test.ts +0 -51
- package/tests/unit/util/Trace.test.ts +0 -119
- package/tests/unit/utils/http.test.ts +0 -43
- package/ts_build/tests/XmlToolCallProcessor.test.d.ts +0 -1
- package/ts_build/tests/XmlToolCallProcessor.test.js +0 -376
- package/ts_build/tests/XmlToolCallProcessor.test.js.map +0 -1
- package/ts_build/tests/agents/interrupt.test.d.ts +0 -14
- package/ts_build/tests/agents/interrupt.test.js +0 -136
- package/ts_build/tests/agents/interrupt.test.js.map +0 -1
- package/ts_build/tests/agents/observe-base.test.d.ts +0 -1
- package/ts_build/tests/agents/observe-base.test.js +0 -149
- package/ts_build/tests/agents/observe-base.test.js.map +0 -1
- package/ts_build/tests/agents/tools/connectAgent.test.d.ts +0 -1
- package/ts_build/tests/agents/tools/connectAgent.test.js +0 -142
- package/ts_build/tests/agents/tools/connectAgent.test.js.map +0 -1
- package/ts_build/tests/agents/tools/observe.test.d.ts +0 -1
- package/ts_build/tests/agents/tools/observe.test.js +0 -148
- package/ts_build/tests/agents/tools/observe.test.js.map +0 -1
- package/ts_build/tests/agents/tools/readFile.test.d.ts +0 -1
- package/ts_build/tests/agents/tools/readFile.test.js +0 -90
- package/ts_build/tests/agents/tools/readFile.test.js.map +0 -1
- package/ts_build/tests/agents/tools/replyToParent.test.d.ts +0 -1
- package/ts_build/tests/agents/tools/replyToParent.test.js +0 -116
- package/ts_build/tests/agents/tools/replyToParent.test.js.map +0 -1
- package/ts_build/tests/agents/tools/sendAgentMessage.test.d.ts +0 -1
- package/ts_build/tests/agents/tools/sendAgentMessage.test.js +0 -112
- package/ts_build/tests/agents/tools/sendAgentMessage.test.js.map +0 -1
- package/ts_build/tests/agents/tools/waitForAgentCompleted.test.d.ts +0 -1
- package/ts_build/tests/agents/tools/waitForAgentCompleted.test.js +0 -147
- package/ts_build/tests/agents/tools/waitForAgentCompleted.test.js.map +0 -1
- package/ts_build/tests/chat/detach-attach-rendering.test.d.ts +0 -1
- package/ts_build/tests/chat/detach-attach-rendering.test.js +0 -168
- package/ts_build/tests/chat/detach-attach-rendering.test.js.map +0 -1
- package/ts_build/tests/clients/AIClient.test.d.ts +0 -1
- package/ts_build/tests/clients/AIClient.test.js +0 -483
- package/ts_build/tests/clients/AIClient.test.js.map +0 -1
- package/ts_build/tests/clients/anthropic.test.d.ts +0 -1
- package/ts_build/tests/clients/anthropic.test.js +0 -159
- package/ts_build/tests/clients/anthropic.test.js.map +0 -1
- package/ts_build/tests/clients/contextLimits.test.d.ts +0 -1
- package/ts_build/tests/clients/contextLimits.test.js +0 -69
- package/ts_build/tests/clients/contextLimits.test.js.map +0 -1
- package/ts_build/tests/clients/fireworks.test.d.ts +0 -1
- package/ts_build/tests/clients/fireworks.test.js +0 -65
- package/ts_build/tests/clients/fireworks.test.js.map +0 -1
- package/ts_build/tests/clients/openai.images.test.d.ts +0 -1
- package/ts_build/tests/clients/openai.images.test.js +0 -94
- package/ts_build/tests/clients/openai.images.test.js.map +0 -1
- package/ts_build/tests/clients/pricing.test.d.ts +0 -1
- package/ts_build/tests/clients/pricing.test.js +0 -124
- package/ts_build/tests/clients/pricing.test.js.map +0 -1
- package/ts_build/tests/clients/reasoningEffort.test.d.ts +0 -1
- package/ts_build/tests/clients/reasoningEffort.test.js +0 -116
- package/ts_build/tests/clients/reasoningEffort.test.js.map +0 -1
- package/ts_build/tests/compressor/bigstring.test.d.ts +0 -1
- package/ts_build/tests/compressor/bigstring.test.js +0 -275
- package/ts_build/tests/compressor/bigstring.test.js.map +0 -1
- package/ts_build/tests/compressor/toolResponseCache.test.d.ts +0 -1
- package/ts_build/tests/compressor/toolResponseCache.test.js +0 -250
- package/ts_build/tests/compressor/toolResponseCache.test.js.map +0 -1
- package/ts_build/tests/compressor/usageBase64.test.d.ts +0 -1
- package/ts_build/tests/compressor/usageBase64.test.js +0 -109
- package/ts_build/tests/compressor/usageBase64.test.js.map +0 -1
- package/ts_build/tests/manual/agent-events/run-test.d.ts +0 -2
- package/ts_build/tests/manual/agent-events/run-test.js +0 -148
- package/ts_build/tests/manual/agent-events/run-test.js.map +0 -1
- package/ts_build/tests/manual/browser-login/test_browser_login_basic.d.ts +0 -2
- package/ts_build/tests/manual/browser-login/test_browser_login_basic.js +0 -118
- package/ts_build/tests/manual/browser-login/test_browser_login_basic.js.map +0 -1
- package/ts_build/tests/manual/browser-login/test_cli_integration.d.ts +0 -2
- package/ts_build/tests/manual/browser-login/test_cli_integration.js +0 -163
- package/ts_build/tests/manual/browser-login/test_cli_integration.js.map +0 -1
- package/ts_build/tests/manual/browser-login/test_cross_platform_browser.d.ts +0 -2
- package/ts_build/tests/manual/browser-login/test_cross_platform_browser.js +0 -169
- package/ts_build/tests/manual/browser-login/test_cross_platform_browser.js.map +0 -1
- package/ts_build/tests/manual/browser-login/test_error_scenarios.d.ts +0 -2
- package/ts_build/tests/manual/browser-login/test_error_scenarios.js +0 -207
- package/ts_build/tests/manual/browser-login/test_error_scenarios.js.map +0 -1
- package/ts_build/tests/manual/clients/completions.test.d.ts +0 -1
- package/ts_build/tests/manual/clients/completions.test.js +0 -151
- package/ts_build/tests/manual/clients/completions.test.js.map +0 -1
- package/ts_build/tests/manual/file-edits/figma.test.d.ts +0 -0
- package/ts_build/tests/manual/file-edits/figma.test.js +0 -2
- package/ts_build/tests/manual/file-edits/figma.test.js.map +0 -1
- package/ts_build/tests/manual/file-edits/fileblocks/readwrite.test.d.ts +0 -1
- package/ts_build/tests/manual/file-edits/fileblocks/readwrite.test.js +0 -110
- package/ts_build/tests/manual/file-edits/fileblocks/readwrite.test.js.map +0 -1
- package/ts_build/tests/manual/file-edits/patching.test.d.ts +0 -1
- package/ts_build/tests/manual/file-edits/patching.test.js +0 -129
- package/ts_build/tests/manual/file-edits/patching.test.js.map +0 -1
- package/ts_build/tests/manual/modalities/google.modalities.test.d.ts +0 -1
- package/ts_build/tests/manual/modalities/google.modalities.test.js +0 -262
- package/ts_build/tests/manual/modalities/google.modalities.test.js.map +0 -1
- package/ts_build/tests/manual/modalities/openai.modalities.test.d.ts +0 -1
- package/ts_build/tests/manual/modalities/openai.modalities.test.js +0 -262
- package/ts_build/tests/manual/modalities/openai.modalities.test.js.map +0 -1
- package/ts_build/tests/manual/modalities/streaming.test.d.ts +0 -1
- package/ts_build/tests/manual/modalities/streaming.test.js +0 -216
- package/ts_build/tests/manual/modalities/streaming.test.js.map +0 -1
- package/ts_build/tests/manual/modalities/xai.modalities.test.d.ts +0 -1
- package/ts_build/tests/manual/modalities/xai.modalities.test.js +0 -219
- package/ts_build/tests/manual/modalities/xai.modalities.test.js.map +0 -1
- package/ts_build/tests/manual/test-concurrent-ask.d.ts +0 -1
- package/ts_build/tests/manual/test-concurrent-ask.js +0 -22
- package/ts_build/tests/manual/test-concurrent-ask.js.map +0 -1
- package/ts_build/tests/manual/ycmd/debug_diagnostics_test.d.ts +0 -1
- package/ts_build/tests/manual/ycmd/debug_diagnostics_test.js +0 -124
- package/ts_build/tests/manual/ycmd/debug_diagnostics_test.js.map +0 -1
- package/ts_build/tests/manual/ycmd/minimal_advanced_test.d.ts +0 -2
- package/ts_build/tests/manual/ycmd/minimal_advanced_test.js +0 -114
- package/ts_build/tests/manual/ycmd/minimal_advanced_test.js.map +0 -1
- package/ts_build/tests/manual/ycmd/simple_diagnostics_test.d.ts +0 -1
- package/ts_build/tests/manual/ycmd/simple_diagnostics_test.js +0 -84
- package/ts_build/tests/manual/ycmd/simple_diagnostics_test.js.map +0 -1
- package/ts_build/tests/manual/ycmd/simple_test.d.ts +0 -2
- package/ts_build/tests/manual/ycmd/simple_test.js +0 -92
- package/ts_build/tests/manual/ycmd/simple_test.js.map +0 -1
- package/ts_build/tests/manual/ycmd/test-typescript-sample.d.ts +0 -14
- package/ts_build/tests/manual/ycmd/test-typescript-sample.js +0 -20
- package/ts_build/tests/manual/ycmd/test-typescript-sample.js.map +0 -1
- package/ts_build/tests/manual/ycmd/test_advanced_features.d.ts +0 -2
- package/ts_build/tests/manual/ycmd/test_advanced_features.js +0 -306
- package/ts_build/tests/manual/ycmd/test_advanced_features.js.map +0 -1
- package/ts_build/tests/manual/ycmd/test_advanced_with_tools.d.ts +0 -3
- package/ts_build/tests/manual/ycmd/test_advanced_with_tools.js +0 -271
- package/ts_build/tests/manual/ycmd/test_advanced_with_tools.js.map +0 -1
- package/ts_build/tests/manual/ycmd/test_comprehensive_typescript.d.ts +0 -2
- package/ts_build/tests/manual/ycmd/test_comprehensive_typescript.js +0 -196
- package/ts_build/tests/manual/ycmd/test_comprehensive_typescript.js.map +0 -1
- package/ts_build/tests/manual/ycmd/test_diagnostics_file_changes.d.ts +0 -1
- package/ts_build/tests/manual/ycmd/test_diagnostics_file_changes.js +0 -184
- package/ts_build/tests/manual/ycmd/test_diagnostics_file_changes.js.map +0 -1
- package/ts_build/tests/manual/ycmd/test_diagnostics_fix.d.ts +0 -2
- package/ts_build/tests/manual/ycmd/test_diagnostics_fix.js +0 -116
- package/ts_build/tests/manual/ycmd/test_diagnostics_fix.js.map +0 -1
- package/ts_build/tests/manual/ycmd/test_diagnostics_simple.d.ts +0 -1
- package/ts_build/tests/manual/ycmd/test_diagnostics_simple.js +0 -114
- package/ts_build/tests/manual/ycmd/test_diagnostics_simple.js.map +0 -1
- package/ts_build/tests/manual/ycmd/test_diagnostics_timing.d.ts +0 -1
- package/ts_build/tests/manual/ycmd/test_diagnostics_timing.js +0 -129
- package/ts_build/tests/manual/ycmd/test_diagnostics_timing.js.map +0 -1
- package/ts_build/tests/manual/ycmd/test_discover_commands.d.ts +0 -2
- package/ts_build/tests/manual/ycmd/test_discover_commands.js +0 -252
- package/ts_build/tests/manual/ycmd/test_discover_commands.js.map +0 -1
- package/ts_build/tests/manual/ycmd/test_endpoints.d.ts +0 -2
- package/ts_build/tests/manual/ycmd/test_endpoints.js +0 -130
- package/ts_build/tests/manual/ycmd/test_endpoints.js.map +0 -1
- package/ts_build/tests/manual/ycmd/test_final_comprehensive.d.ts +0 -2
- package/ts_build/tests/manual/ycmd/test_final_comprehensive.js +0 -231
- package/ts_build/tests/manual/ycmd/test_final_comprehensive.js.map +0 -1
- package/ts_build/tests/manual/ycmd/test_final_validation.d.ts +0 -2
- package/ts_build/tests/manual/ycmd/test_final_validation.js +0 -170
- package/ts_build/tests/manual/ycmd/test_final_validation.js.map +0 -1
- package/ts_build/tests/manual/ycmd/test_individual_ycmd_tool.d.ts +0 -2
- package/ts_build/tests/manual/ycmd/test_individual_ycmd_tool.js +0 -37
- package/ts_build/tests/manual/ycmd/test_individual_ycmd_tool.js.map +0 -1
- package/ts_build/tests/manual/ycmd/test_server_manager.d.ts +0 -1
- package/ts_build/tests/manual/ycmd/test_server_manager.js +0 -38
- package/ts_build/tests/manual/ycmd/test_server_manager.js.map +0 -1
- package/ts_build/tests/manual/ycmd/test_simple_debug.d.ts +0 -2
- package/ts_build/tests/manual/ycmd/test_simple_debug.js +0 -109
- package/ts_build/tests/manual/ycmd/test_simple_debug.js.map +0 -1
- package/ts_build/tests/manual/ycmd/test_tsserver_workflow.d.ts +0 -1
- package/ts_build/tests/manual/ycmd/test_tsserver_workflow.js +0 -138
- package/ts_build/tests/manual/ycmd/test_tsserver_workflow.js.map +0 -1
- package/ts_build/tests/manual/ycmd/test_typescript_simple.d.ts +0 -1
- package/ts_build/tests/manual/ycmd/test_typescript_simple.js +0 -76
- package/ts_build/tests/manual/ycmd/test_typescript_simple.js.map +0 -1
- package/ts_build/tests/manual/ycmd/test_typescript_ycmd.d.ts +0 -1
- package/ts_build/tests/manual/ycmd/test_typescript_ycmd.js +0 -115
- package/ts_build/tests/manual/ycmd/test_typescript_ycmd.js.map +0 -1
- package/ts_build/tests/manual/ycmd/test_workspace_config.d.ts +0 -1
- package/ts_build/tests/manual/ycmd/test_workspace_config.js +0 -99
- package/ts_build/tests/manual/ycmd/test_workspace_config.js.map +0 -1
- package/ts_build/tests/manual/ycmd/test_ycmd_auto_start.d.ts +0 -2
- package/ts_build/tests/manual/ycmd/test_ycmd_auto_start.js +0 -140
- package/ts_build/tests/manual/ycmd/test_ycmd_auto_start.js.map +0 -1
- package/ts_build/tests/manual/ycmd/test_ycmd_comprehensive.d.ts +0 -1
- package/ts_build/tests/manual/ycmd/test_ycmd_comprehensive.js +0 -93
- package/ts_build/tests/manual/ycmd/test_ycmd_comprehensive.js.map +0 -1
- package/ts_build/tests/manual/ycmd/test_ycmd_direct.d.ts +0 -2
- package/ts_build/tests/manual/ycmd/test_ycmd_direct.js +0 -159
- package/ts_build/tests/manual/ycmd/test_ycmd_direct.js.map +0 -1
- package/ts_build/tests/manual/ycmd/test_ycmd_experiment.d.ts +0 -15
- package/ts_build/tests/manual/ycmd/test_ycmd_experiment.js +0 -68
- package/ts_build/tests/manual/ycmd/test_ycmd_experiment.js.map +0 -1
- package/ts_build/tests/manual/ycmd/test_ycmd_final.d.ts +0 -2
- package/ts_build/tests/manual/ycmd/test_ycmd_final.js +0 -205
- package/ts_build/tests/manual/ycmd/test_ycmd_final.js.map +0 -1
- package/ts_build/tests/manual/ycmd/test_ycmd_integration.d.ts +0 -3
- package/ts_build/tests/manual/ycmd/test_ycmd_integration.js +0 -119
- package/ts_build/tests/manual/ycmd/test_ycmd_integration.js.map +0 -1
- package/ts_build/tests/manual/ycmd/test_ycmd_simple.d.ts +0 -2
- package/ts_build/tests/manual/ycmd/test_ycmd_simple.js +0 -36
- package/ts_build/tests/manual/ycmd/test_ycmd_simple.js.map +0 -1
- package/ts_build/tests/manual/ycmd/working_simple_test.d.ts +0 -2
- package/ts_build/tests/manual/ycmd/working_simple_test.js +0 -144
- package/ts_build/tests/manual/ycmd/working_simple_test.js.map +0 -1
- package/ts_build/tests/patching/corrupted.test.d.ts +0 -1
- package/ts_build/tests/patching/corrupted.test.js +0 -53
- package/ts_build/tests/patching/corrupted.test.js.map +0 -1
- package/ts_build/tests/patching/imports.test.d.ts +0 -1
- package/ts_build/tests/patching/imports.test.js +0 -71
- package/ts_build/tests/patching/imports.test.js.map +0 -1
- package/ts_build/tests/patching/patchFileOutput.test.d.ts +0 -1
- package/ts_build/tests/patching/patchFileOutput.test.js +0 -269
- package/ts_build/tests/patching/patchFileOutput.test.js.map +0 -1
- package/ts_build/tests/patching/regression-2026.test.d.ts +0 -1
- package/ts_build/tests/patching/regression-2026.test.js +0 -528
- package/ts_build/tests/patching/regression-2026.test.js.map +0 -1
- package/ts_build/tests/patching/transcriptMangleRegression.test.d.ts +0 -1
- package/ts_build/tests/patching/transcriptMangleRegression.test.js +0 -104
- package/ts_build/tests/patching/transcriptMangleRegression.test.js.map +0 -1
- package/ts_build/tests/plugins/language/languagePlugin-content-triggers.test.d.ts +0 -1
- package/ts_build/tests/plugins/language/languagePlugin-content-triggers.test.js +0 -294
- package/ts_build/tests/plugins/language/languagePlugin-content-triggers.test.js.map +0 -1
- package/ts_build/tests/plugins/language/languagePlugin-integration.test.d.ts +0 -1
- package/ts_build/tests/plugins/language/languagePlugin-integration.test.js +0 -343
- package/ts_build/tests/plugins/language/languagePlugin-integration.test.js.map +0 -1
- package/ts_build/tests/plugins/language/languagePlugin.test.d.ts +0 -1
- package/ts_build/tests/plugins/language/languagePlugin.test.js +0 -315
- package/ts_build/tests/plugins/language/languagePlugin.test.js.map +0 -1
- package/ts_build/tests/processes/managedProcessShim.test.d.ts +0 -1
- package/ts_build/tests/processes/managedProcessShim.test.js +0 -92
- package/ts_build/tests/processes/managedProcessShim.test.js.map +0 -1
- package/ts_build/tests/processors/Base64ImageDetector.test.d.ts +0 -1
- package/ts_build/tests/processors/Base64ImageDetector.test.js +0 -792
- package/ts_build/tests/processors/Base64ImageDetector.test.js.map +0 -1
- package/ts_build/tests/processors/CustomVariables.test.d.ts +0 -1
- package/ts_build/tests/processors/CustomVariables.test.js +0 -764
- package/ts_build/tests/processors/CustomVariables.test.js.map +0 -1
- package/ts_build/tests/processors/CustomVariablesBenchmark.test.d.ts +0 -1
- package/ts_build/tests/processors/CustomVariablesBenchmark.test.js +0 -179
- package/ts_build/tests/processors/CustomVariablesBenchmark.test.js.map +0 -1
- package/ts_build/tests/processors/HarmonyToolProcessor.test.d.ts +0 -1
- package/ts_build/tests/processors/HarmonyToolProcessor.test.js +0 -382
- package/ts_build/tests/processors/HarmonyToolProcessor.test.js.map +0 -1
- package/ts_build/tests/processors/TokenCompressor.test.d.ts +0 -1
- package/ts_build/tests/processors/TokenCompressor.test.js +0 -473
- package/ts_build/tests/processors/TokenCompressor.test.js.map +0 -1
- package/ts_build/tests/processors/ToolResponseCache.test.d.ts +0 -1
- package/ts_build/tests/processors/ToolResponseCache.test.js +0 -657
- package/ts_build/tests/processors/ToolResponseCache.test.js.map +0 -1
- package/ts_build/tests/processors/tools/boundedRetrievalTools.test.d.ts +0 -1
- package/ts_build/tests/processors/tools/boundedRetrievalTools.test.js +0 -57
- package/ts_build/tests/processors/tools/boundedRetrievalTools.test.js.map +0 -1
- package/ts_build/tests/processors/tools/grepToolResponse.test.d.ts +0 -1
- package/ts_build/tests/processors/tools/grepToolResponse.test.js +0 -77
- package/ts_build/tests/processors/tools/grepToolResponse.test.js.map +0 -1
- package/ts_build/tests/services/ConversionService.test.d.ts +0 -1
- package/ts_build/tests/services/ConversionService.test.js +0 -154
- package/ts_build/tests/services/ConversionService.test.js.map +0 -1
- package/ts_build/tests/services/DockerService.test.d.ts +0 -1
- package/ts_build/tests/services/DockerService.test.js +0 -22
- package/ts_build/tests/services/DockerService.test.js.map +0 -1
- package/ts_build/tests/services/Tools.test.d.ts +0 -1
- package/ts_build/tests/services/Tools.test.js +0 -1365
- package/ts_build/tests/services/Tools.test.js.map +0 -1
- package/ts_build/tests/services/ToolsService.setFunction.test.d.ts +0 -1
- package/ts_build/tests/services/ToolsService.setFunction.test.js +0 -51
- package/ts_build/tests/services/ToolsService.setFunction.test.js.map +0 -1
- package/ts_build/tests/services/WorkerReloadConfig.test.d.ts +0 -1
- package/ts_build/tests/services/WorkerReloadConfig.test.js +0 -86
- package/ts_build/tests/services/WorkerReloadConfig.test.js.map +0 -1
- package/ts_build/tests/test.spec.d.ts +0 -1
- package/ts_build/tests/test.spec.js +0 -139
- package/ts_build/tests/test.spec.js.map +0 -1
- package/ts_build/tests/unit/InputQueueManager.test.d.ts +0 -1
- package/ts_build/tests/unit/InputQueueManager.test.js +0 -104
- package/ts_build/tests/unit/InputQueueManager.test.js.map +0 -1
- package/ts_build/tests/unit/McpWebsocketTransport.test.d.ts +0 -1
- package/ts_build/tests/unit/McpWebsocketTransport.test.js +0 -47
- package/ts_build/tests/unit/McpWebsocketTransport.test.js.map +0 -1
- package/ts_build/tests/unit/agents/historyRollback.test.d.ts +0 -1
- package/ts_build/tests/unit/agents/historyRollback.test.js +0 -42
- package/ts_build/tests/unit/agents/historyRollback.test.js.map +0 -1
- package/ts_build/tests/unit/agents/tools/loadImageAsBase64.test.d.ts +0 -1
- package/ts_build/tests/unit/agents/tools/loadImageAsBase64.test.js +0 -67
- package/ts_build/tests/unit/agents/tools/loadImageAsBase64.test.js.map +0 -1
- package/ts_build/tests/unit/auth/jwtStore.test.d.ts +0 -1
- package/ts_build/tests/unit/auth/jwtStore.test.js +0 -46
- package/ts_build/tests/unit/auth/jwtStore.test.js.map +0 -1
- package/ts_build/tests/unit/auth/keyAuth.test.d.ts +0 -1
- package/ts_build/tests/unit/auth/keyAuth.test.js +0 -118
- package/ts_build/tests/unit/auth/keyAuth.test.js.map +0 -1
- package/ts_build/tests/unit/auth/keyManager.test.d.ts +0 -1
- package/ts_build/tests/unit/auth/keyManager.test.js +0 -96
- package/ts_build/tests/unit/auth/keyManager.test.js.map +0 -1
- package/ts_build/tests/unit/auth/registerIdentity.test.d.ts +0 -1
- package/ts_build/tests/unit/auth/registerIdentity.test.js +0 -92
- package/ts_build/tests/unit/auth/registerIdentity.test.js.map +0 -1
- package/ts_build/tests/unit/chat/ToolCommandModule.test.d.ts +0 -1
- package/ts_build/tests/unit/chat/ToolCommandModule.test.js +0 -61
- package/ts_build/tests/unit/chat/ToolCommandModule.test.js.map +0 -1
- package/ts_build/tests/unit/chat/historyCommandArgs.test.d.ts +0 -1
- package/ts_build/tests/unit/chat/historyCommandArgs.test.js +0 -29
- package/ts_build/tests/unit/chat/historyCommandArgs.test.js.map +0 -1
- package/ts_build/tests/unit/clients/AIClient.test.d.ts +0 -1
- package/ts_build/tests/unit/clients/AIClient.test.js +0 -342
- package/ts_build/tests/unit/clients/AIClient.test.js.map +0 -1
- package/ts_build/tests/unit/clients/anthropic.responseMetadata.test.d.ts +0 -1
- package/ts_build/tests/unit/clients/anthropic.responseMetadata.test.js +0 -77
- package/ts_build/tests/unit/clients/anthropic.responseMetadata.test.js.map +0 -1
- package/ts_build/tests/unit/clients/attribution.test.d.ts +0 -1
- package/ts_build/tests/unit/clients/attribution.test.js +0 -153
- package/ts_build/tests/unit/clients/attribution.test.js.map +0 -1
- package/ts_build/tests/unit/clients/http.responseMetadata.test.d.ts +0 -1
- package/ts_build/tests/unit/clients/http.responseMetadata.test.js +0 -77
- package/ts_build/tests/unit/clients/http.responseMetadata.test.js.map +0 -1
- package/ts_build/tests/unit/clients/openai.responseMetadata.test.d.ts +0 -1
- package/ts_build/tests/unit/clients/openai.responseMetadata.test.js +0 -86
- package/ts_build/tests/unit/clients/openai.responseMetadata.test.js.map +0 -1
- package/ts_build/tests/unit/clients/responseMetadata.test.d.ts +0 -1
- package/ts_build/tests/unit/clients/responseMetadata.test.js +0 -96
- package/ts_build/tests/unit/clients/responseMetadata.test.js.map +0 -1
- package/ts_build/tests/unit/clients/withRetry.test.d.ts +0 -1
- package/ts_build/tests/unit/clients/withRetry.test.js +0 -225
- package/ts_build/tests/unit/clients/withRetry.test.js.map +0 -1
- package/ts_build/tests/unit/commands/agents.test.d.ts +0 -1
- package/ts_build/tests/unit/commands/agents.test.js +0 -119
- package/ts_build/tests/unit/commands/agents.test.js.map +0 -1
- package/ts_build/tests/unit/commands/github-credentials.test.d.ts +0 -1
- package/ts_build/tests/unit/commands/github-credentials.test.js +0 -145
- package/ts_build/tests/unit/commands/github-credentials.test.js.map +0 -1
- package/ts_build/tests/unit/commands/misc.test.d.ts +0 -1
- package/ts_build/tests/unit/commands/misc.test.js +0 -70
- package/ts_build/tests/unit/commands/misc.test.js.map +0 -1
- package/ts_build/tests/unit/commands/remote.test.d.ts +0 -1
- package/ts_build/tests/unit/commands/remote.test.js +0 -70
- package/ts_build/tests/unit/commands/remote.test.js.map +0 -1
- package/ts_build/tests/unit/commands/sandbox.test.d.ts +0 -1
- package/ts_build/tests/unit/commands/sandbox.test.js +0 -258
- package/ts_build/tests/unit/commands/sandbox.test.js.map +0 -1
- package/ts_build/tests/unit/hashes.test.d.ts +0 -1
- package/ts_build/tests/unit/hashes.test.js +0 -25
- package/ts_build/tests/unit/hashes.test.js.map +0 -1
- package/ts_build/tests/unit/input-queue.test.d.ts +0 -1
- package/ts_build/tests/unit/input-queue.test.js +0 -32
- package/ts_build/tests/unit/input-queue.test.js.map +0 -1
- package/ts_build/tests/unit/login.test.d.ts +0 -1
- package/ts_build/tests/unit/login.test.js +0 -166
- package/ts_build/tests/unit/login.test.js.map +0 -1
- package/ts_build/tests/unit/modules/moduleLoading.test.d.ts +0 -1
- package/ts_build/tests/unit/modules/moduleLoading.test.js +0 -272
- package/ts_build/tests/unit/modules/moduleLoading.test.js.map +0 -1
- package/ts_build/tests/unit/plugins/pluginLoading.test.d.ts +0 -1
- package/ts_build/tests/unit/plugins/pluginLoading.test.js +0 -117
- package/ts_build/tests/unit/plugins/pluginLoading.test.js.map +0 -1
- package/ts_build/tests/unit/services/AgentSyncKnowhowWeb.test.d.ts +0 -1
- package/ts_build/tests/unit/services/AgentSyncKnowhowWeb.test.js +0 -32
- package/ts_build/tests/unit/services/AgentSyncKnowhowWeb.test.js.map +0 -1
- package/ts_build/tests/unit/services/KnowhowClient.test.d.ts +0 -1
- package/ts_build/tests/unit/services/KnowhowClient.test.js +0 -69
- package/ts_build/tests/unit/services/KnowhowClient.test.js.map +0 -1
- package/ts_build/tests/unit/services/LazyToolsService.test.d.ts +0 -1
- package/ts_build/tests/unit/services/LazyToolsService.test.js +0 -47
- package/ts_build/tests/unit/services/LazyToolsService.test.js.map +0 -1
- package/ts_build/tests/unit/services/Mcp.test.d.ts +0 -1
- package/ts_build/tests/unit/services/Mcp.test.js +0 -45
- package/ts_build/tests/unit/services/Mcp.test.js.map +0 -1
- package/ts_build/tests/unit/services/MinimalToolsService.test.d.ts +0 -1
- package/ts_build/tests/unit/services/MinimalToolsService.test.js +0 -320
- package/ts_build/tests/unit/services/MinimalToolsService.test.js.map +0 -1
- package/ts_build/tests/unit/services/RuntimeReloadService.test.d.ts +0 -1
- package/ts_build/tests/unit/services/RuntimeReloadService.test.js +0 -26
- package/ts_build/tests/unit/services/RuntimeReloadService.test.js.map +0 -1
- package/ts_build/tests/unit/services/SessionManager.test.d.ts +0 -1
- package/ts_build/tests/unit/services/SessionManager.test.js +0 -72
- package/ts_build/tests/unit/services/SessionManager.test.js.map +0 -1
- package/ts_build/tests/unit/services/SyncedAgentWatcher.test.d.ts +0 -1
- package/ts_build/tests/unit/services/SyncedAgentWatcher.test.js +0 -78
- package/ts_build/tests/unit/services/SyncedAgentWatcher.test.js.map +0 -1
- package/ts_build/tests/unit/services/SyncerService.test.d.ts +0 -1
- package/ts_build/tests/unit/services/SyncerService.test.js +0 -40
- package/ts_build/tests/unit/services/SyncerService.test.js.map +0 -1
- package/ts_build/tests/unit/tunnel.test.d.ts +0 -1
- package/ts_build/tests/unit/tunnel.test.js +0 -47
- package/ts_build/tests/unit/tunnel.test.js.map +0 -1
- package/ts_build/tests/unit/util/Trace.test.d.ts +0 -1
- package/ts_build/tests/unit/util/Trace.test.js +0 -107
- package/ts_build/tests/unit/util/Trace.test.js.map +0 -1
- package/ts_build/tests/unit/utils/http.test.d.ts +0 -1
- package/ts_build/tests/unit/utils/http.test.js +0 -69
- package/ts_build/tests/unit/utils/http.test.js.map +0 -1
- package/tsconfig.json +0 -34
- 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
|
-
});
|