@tyvm/knowhow 0.0.159 → 0.0.161
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -6
- package/package.json +2 -2
- package/ts_build/package.json +2 -2
- 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/clients/anthropic.js +4 -1
- package/ts_build/src/clients/anthropic.js.map +1 -1
- package/ts_build/src/clients/contextLimits.js +13 -7
- package/ts_build/src/clients/contextLimits.js.map +1 -1
- package/ts_build/src/clients/index.js +3 -1
- package/ts_build/src/clients/index.js.map +1 -1
- package/ts_build/src/clients/openai.js +18 -5
- package/ts_build/src/clients/openai.js.map +1 -1
- package/ts_build/src/clients/pricing/anthropic.d.ts +2 -0
- package/ts_build/src/clients/pricing/anthropic.js +21 -1
- package/ts_build/src/clients/pricing/anthropic.js.map +1 -1
- package/ts_build/src/clients/pricing/openai.d.ts +2 -0
- package/ts_build/src/clients/pricing/openai.js +32 -7
- package/ts_build/src/clients/pricing/openai.js.map +1 -1
- package/ts_build/src/clients/pricing/types.d.ts +4 -0
- package/ts_build/src/clients/pricing/types.js.map +1 -1
- package/ts_build/src/clients/pricing/xai.d.ts +2 -0
- package/ts_build/src/clients/pricing/xai.js +13 -8
- package/ts_build/src/clients/pricing/xai.js.map +1 -1
- package/ts_build/src/clients/xai.js +20 -8
- package/ts_build/src/clients/xai.js.map +1 -1
- package/ts_build/src/commands/misc.js +15 -2
- package/ts_build/src/commands/misc.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/remotes.d.ts +2 -0
- package/ts_build/src/remotes.js +20 -2
- package/ts_build/src/remotes.js.map +1 -1
- package/ts_build/src/tunnel.js +7 -2
- package/ts_build/src/tunnel.js.map +1 -1
- package/ts_build/src/types.d.ts +12 -1
- package/ts_build/src/types.js.map +1 -1
- package/ts_build/src/utils/InputQueueManager.d.ts +8 -1
- package/ts_build/src/utils/InputQueueManager.js +74 -3
- 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/ts_build/src/worker.js +4 -1
- package/ts_build/src/worker.js.map +1 -1
- package/ts_build/src/workers/tools/listAllowedPorts.d.ts +2 -1
- package/ts_build/src/workers/tools/listAllowedPorts.js +1 -1
- package/ts_build/src/workers/tools/listAllowedPorts.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,468 +0,0 @@
|
|
|
1
|
-
import { XmlToolCallProcessor } from "../src/processors/XmlToolCallProcessor";
|
|
2
|
-
import { Message } from "../src/clients/types";
|
|
3
|
-
import { restoreEscapedNewLines } from "../src/utils";
|
|
4
|
-
import { escapeNewLines } from "../src/utils";
|
|
5
|
-
|
|
6
|
-
describe("XmlToolCallProcessor", () => {
|
|
7
|
-
let processor: XmlToolCallProcessor;
|
|
8
|
-
|
|
9
|
-
beforeEach(() => {
|
|
10
|
-
processor = new XmlToolCallProcessor();
|
|
11
|
-
});
|
|
12
|
-
|
|
13
|
-
describe("JSON-based XML tool calls", () => {
|
|
14
|
-
it("should correctly parse JSON tool calls with string arguments (no double wrapping)", () => {
|
|
15
|
-
const message: Message = {
|
|
16
|
-
role: "assistant",
|
|
17
|
-
content: `I'll help you with that task.
|
|
18
|
-
|
|
19
|
-
<tool_call>
|
|
20
|
-
{"name": "writeFileChunk", "arguments": "{\"filePath\": \"test.js\", \"content\": \"console.log('hello')\", \"isContinuing\": false, \"isDone\": true}"}
|
|
21
|
-
</tool_call>
|
|
22
|
-
|
|
23
|
-
This should create the file.`,
|
|
24
|
-
};
|
|
25
|
-
|
|
26
|
-
const processorFn = processor.createProcessor();
|
|
27
|
-
processorFn([], [message]);
|
|
28
|
-
|
|
29
|
-
expect(message.tool_calls).toBeDefined();
|
|
30
|
-
expect(message.tool_calls!.length).toBe(1);
|
|
31
|
-
|
|
32
|
-
const toolCall = message.tool_calls![0];
|
|
33
|
-
expect(toolCall.function.name).toBe("writeFileChunk");
|
|
34
|
-
|
|
35
|
-
// Parse the arguments to ensure they're not double-wrapped
|
|
36
|
-
const args = JSON.parse(toolCall.function.arguments);
|
|
37
|
-
expect(args.filePath).toBe("test.js");
|
|
38
|
-
expect(args.content).toBe("console.log('hello')");
|
|
39
|
-
expect(args.isContinuing).toBe(false);
|
|
40
|
-
expect(args.isDone).toBe(true);
|
|
41
|
-
|
|
42
|
-
// Ensure arguments is not a nested JSON string
|
|
43
|
-
expect(typeof args).toBe("object");
|
|
44
|
-
expect(typeof args.filePath).toBe("string");
|
|
45
|
-
});
|
|
46
|
-
|
|
47
|
-
it("should handle arguments as an object as well", () => {
|
|
48
|
-
const message: Message = {
|
|
49
|
-
role: "assistant",
|
|
50
|
-
content: `
|
|
51
|
-
Sure thing!
|
|
52
|
-
|
|
53
|
-
<tool_call>
|
|
54
|
-
{"name": "writeFileChunk", "arguments": {"filePath": "accumulate.spec.js", "content": "import { describe, expect, test } from '@jest/globals';\nimport { accumulate } from './accumulate';\n\ndescribe('accumulate()', () => {\n test('accumulation empty', () => {\n const accumulator = (e) => e * e;\n expect(accumulate([], accumulator)).toEqual([]);\n });\n\n test('accumulate squares', () => {\n const accumulator = (number) => number * number;\n const result = accumulate([1, 2, 3], accumulator);\n expect(result).toEqual([1, 4, 9]);\n });\n\n test('accumulate upcases', () => {\n const accumulator = (word) => word.toUpperCase();\n const result = accumulate('hello world'.split(/\s/), accumulator);\n expect(result).toEqual(['HELLO', 'WORLD']);\n });\n\n test('accumulate reversed strings', () => {\n const accumulator = (word) => word.split('').reverse().join('');\n const result = accumulate(\n 'the quick brown fox etc'.split(/\s/),\n accumulator,\n );\n expect(result).toEqual(['eht', 'kciuq', 'nworb', 'xof', 'cte']);\n });\n\n test('accumulate recursively', () => {\n const result = accumulate('a b c'.split(/\s/), (char) =>\n accumulate('1 2 3'.split(/\s/), (digit) => char + digit),\n );\n\n expect(result).toEqual([\n ['a1', 'a2', 'a3'],\n ['b1', 'b2', 'b3'],\n ['c1', 'c2', 'c3'],\n ]);\n });\n});", "isContinuing": false, "isDone": true}}
|
|
55
|
-
</tool_call>`,
|
|
56
|
-
};
|
|
57
|
-
const processorFn = processor.createProcessor();
|
|
58
|
-
processorFn([], [message]);
|
|
59
|
-
expect(message.tool_calls).toBeDefined();
|
|
60
|
-
expect(message.tool_calls!.length).toBe(1);
|
|
61
|
-
const toolCall = message.tool_calls![0];
|
|
62
|
-
expect(toolCall.function.name).toBe("writeFileChunk");
|
|
63
|
-
const args = JSON.parse(toolCall.function.arguments);
|
|
64
|
-
expect(args.filePath).toBe("accumulate.spec.js");
|
|
65
|
-
expect(args.content).toContain(
|
|
66
|
-
`import { describe, expect, test } from '@jest/globals'`
|
|
67
|
-
);
|
|
68
|
-
});
|
|
69
|
-
|
|
70
|
-
it("should handle complex patches", () => {
|
|
71
|
-
const message: Message = {
|
|
72
|
-
role: "assistant",
|
|
73
|
-
content: `
|
|
74
|
-
Great! The tests are running, and the first test "accumulation empty" is passing. The other tests are still skipped, so I need to unskip them.
|
|
75
|
-
|
|
76
|
-
Let me modify the test file to unskip the tests:
|
|
77
|
-
|
|
78
|
-
<tool_call>
|
|
79
|
-
{"name": "patchFile", "arguments": {"filePath": "accumulate.spec.js", "patch": "Index: ./accumulate.spec.js\n===================================================================\n--- ./accumulate.spec.js\n+++ ./accumulate.spec.js\n@@ -11,7 +11,7 @@\n test('accumulation empty', () => {\n const accumulator = (e) => e * e;\n expect(accumulate([], accumulator)).toEqual([]);\n });\n-\n+ \n xtest('accumulate squares', () => {\n const accumulator = (number) => number * number;\n const result = accumulate([1, 2, 3], accumulator);\n expect(result).toEqual([1, 4, 9]);\n });\n-\n+ \n xtest('accumulate upcases', () => {\n const accumulator = (word) => word.toUpperCase();\n const result = accumulate('hello world'.split(/\s/), accumulator);\n expect(result).toEqual(['HELLO', 'WORLD']);\n });\n-\n+ \n xtest('accumulate reversed strings', () => {\n const accumulator = (word) => word.split('').reverse().join('');\n const result = accumulate(\n 'the quick brown fox etc'.split(/\s/),\n accumulator,\n );\n expect(result).toEqual(['eht', 'kciuq', 'nworb', 'xof', 'cte']);\n });\n-\n+ \n xtest('accumulate recursively', () => {\n const result = accumulate('a b c'.split(/\s/), (char) =>\n accumulate('1 2 3'.split(/\s/), (digit) => char + digit),\n );\n\n expect(result).toEqual([\n ['a1', 'a2', 'a3'],\n ['b1', 'b2', 'b3'],\n ['c1', 'c2', 'c3'],\n ]);\n });\n "}}
|
|
80
|
-
</tool_call>
|
|
81
|
-
`,
|
|
82
|
-
};
|
|
83
|
-
const processorFn = processor.createProcessor();
|
|
84
|
-
processorFn([], [message]);
|
|
85
|
-
expect(message.tool_calls).toBeDefined();
|
|
86
|
-
expect(message.tool_calls!.length).toBe(1);
|
|
87
|
-
const toolCall = message.tool_calls![0];
|
|
88
|
-
expect(toolCall.function.name).toBe("patchFile");
|
|
89
|
-
const args = JSON.parse(toolCall.function.arguments);
|
|
90
|
-
expect(args.filePath).toBe("accumulate.spec.js");
|
|
91
|
-
expect(args.patch).toContain(`Index: ./accumulate.spec.js`);
|
|
92
|
-
});
|
|
93
|
-
|
|
94
|
-
it("should handle complex patches 2", () => {
|
|
95
|
-
const message: Message = {
|
|
96
|
-
role: "assistant",
|
|
97
|
-
content: `
|
|
98
|
-
I need to implement the \`accumulate\` function that takes a collection and an operation to apply to each element. Let me implement this from scratch.
|
|
99
|
-
|
|
100
|
-
The function should:
|
|
101
|
-
1. Take an array (or any iterable) and a function to apply
|
|
102
|
-
2. Apply the function to each element
|
|
103
|
-
3. Return a new array with the results
|
|
104
|
-
4. Not use built-in map functions
|
|
105
|
-
|
|
106
|
-
Here's my implementation:
|
|
107
|
-
|
|
108
|
-
<tool_call>
|
|
109
|
-
{"name": "patchFile", "arguments": {"filePath": "accumulate.js", "patch": "Index: ./accumulate.js\n===================================================================\n--- ./accumulate.js\n+++ ./accumulate.js\n@@ -1,8 +1,10 @@\n //\n // This is only a SKELETON file for the 'Accumulate' exercise. It's been provided as a\n // convenience to get you started writing code faster.\n //\n+\n export const accumulate = (collection, operation) => {\n- throw new Error('Remove this line and implement the function');\n+ const result = [];\n+ for (let i = 0; i < collection.length; i++) {\n+ result.push(operation(collection[i]));\n+ }\n+ return result;\n };\n\n //\n // This is only a SKELETON file for the 'Accumulate' exercise. It's been provided as a\n // convenience to get you started writing code faster.\n //\n"}}
|
|
110
|
-
</tool_call>
|
|
111
|
-
`,
|
|
112
|
-
};
|
|
113
|
-
const processorFn = processor.createProcessor();
|
|
114
|
-
processorFn([], [message]);
|
|
115
|
-
expect(message.tool_calls).toBeDefined();
|
|
116
|
-
expect(message.tool_calls!.length).toBe(1);
|
|
117
|
-
const toolCall = message.tool_calls![0];
|
|
118
|
-
expect(toolCall.function.name).toBe("patchFile");
|
|
119
|
-
const args = JSON.parse(toolCall.function.arguments);
|
|
120
|
-
expect(args.filePath).toBe("accumulate.js");
|
|
121
|
-
expect(args.patch).toContain(`Index: ./accumulate.js`);
|
|
122
|
-
});
|
|
123
|
-
|
|
124
|
-
it("should handle complex patches 3", () => {
|
|
125
|
-
const message: Message = {
|
|
126
|
-
role: "assistant",
|
|
127
|
-
content:
|
|
128
|
-
"Great! The tests are now passing, but the test for \"accumulate squares\" is still skipped. Let me update the test file to unskip it:\n\n<tool_call>\n{\"name\": \"patchFile\", \"arguments\": {\"filePath\": \"accumulate.spec.js\", \"patch\": \"Index: ./accumulate.spec.js\\n===================================================================\\n--- ./accumulate.spec.js\\n+++ ./accumulate.spec.js\\n@@ -1,42 +1,42 @@\\n import { describe, expect, test, xtest } from '@jest/globals';\\n import { accumulate } from './accumulate';\\n\\n describe('accumulate()', () => {\\n test('accumulation empty', () => {\\n const accumulator = (e) => e * e;\\n expect(accumulate([], accumulator)).toEqual([]);\\n });\\n-\\n- xtest('accumulate squares', () => {\\n- const accumulator = (number) => number * number;\\n- const result = accumulate([1, 2, 3], accumulator);\\n- expect(result).toEqual([1, 4, 9]);\\n- });\\n+\\n+ test('accumulate squares', () => {\\n+ const accumulator = (number) => number * number;\\n+ const result = accumulate([1, 2, 3], accumulator);\\n+ expect(result).toEqual([1, 4, 9]);\\n+ });\\n\\n xtest('accumulate upcases', () => {\\n const accumulator = (word) => word.toUpperCase();\\n const result = accumulate('hello world'.split(/\\s/), accumulator);\\n expect(result).toEqual(['HELLO', 'WORLD']);\\n });\\n\\n xtest('accumulate reversed strings', () => {\\n const accumulator = (word) => word.split('').reverse().join('');\\n const result = accumulate(\\n 'the quick brown fox etc'.split(/\\s/),\\n accumulator,\\n );\\n expect(result).toEqual(['eht', 'kciuq', 'nworb', 'xof', 'cte']);\\n });\\n\\n xtest('accumulate recursively', () => {\\n const result = accumulate('a b c'.split(/\\s/), (char) =>\\n accumulate('1 2 3'.split(/\\s/), (digit) => char + digit),\\n );\\n\\n expect(result).toEqual([\\n ['a1', 'a2', 'a3'],\\n ['b1', 'b2', 'b3'],\\n ['c1', 'c2', 'c3'],\\n ]);\\n });\\n });\\n\"}}\n</tool_call>",
|
|
129
|
-
};
|
|
130
|
-
const processorFn = processor.createProcessor();
|
|
131
|
-
processorFn([], [message]);
|
|
132
|
-
expect(message.tool_calls).toBeDefined();
|
|
133
|
-
expect(message.tool_calls!.length).toBe(1);
|
|
134
|
-
const toolCall = message.tool_calls![0];
|
|
135
|
-
expect(toolCall.function.name).toBe("patchFile");
|
|
136
|
-
const args = JSON.parse(toolCall.function.arguments);
|
|
137
|
-
expect(args.filePath).toBe("accumulate.spec.js");
|
|
138
|
-
expect(args.patch).toContain(`Index: ./accumulate.spec.js`);
|
|
139
|
-
});
|
|
140
|
-
|
|
141
|
-
it("should produce arguments compatible with ToolsService.callTool logic", () => {
|
|
142
|
-
const message: Message = {
|
|
143
|
-
role: "assistant",
|
|
144
|
-
content: `
|
|
145
|
-
I need to implement the \`accumulate\` function that takes a collection and an operation to apply to each element. Let me implement this from scratch.
|
|
146
|
-
|
|
147
|
-
The function should:
|
|
148
|
-
1. Take an array (or any iterable) and a function to apply
|
|
149
|
-
2. Apply the function to each element
|
|
150
|
-
3. Return a new array with the results
|
|
151
|
-
4. Not use built-in map functions
|
|
152
|
-
|
|
153
|
-
Here's my implementation:
|
|
154
|
-
|
|
155
|
-
<tool_call>
|
|
156
|
-
{"name": "patchFile", "arguments": {"filePath": "accumulate.js", "patch": "Index: ./accumulate.js\\n===================================================================\\n--- ./accumulate.js\\n+++ ./accumulate.js\\n@@ -1,8 +1,10 @@\\n //\\n // This is only a SKELETON file for the 'Accumulate' exercise. It's been provided as a\\n // convenience to get you started writing code faster.\\n //\\n+\\n export const accumulate = (collection, operation) => {\\n- throw new Error('Remove this line and implement the function');\\n+ const result = [];\\n+ for (let i = 0; i < collection.length; i++) {\\n+ result.push(operation(collection[i]));\\n+ }\\n+ return result;\\n };\\n\\n //\\n // This is only a SKELETON file for the 'Accumulate' exercise. It's been provided as a\\n // convenience to get you started writing code faster.\\n //\\n"}}
|
|
157
|
-
</tool_call>
|
|
158
|
-
`,
|
|
159
|
-
};
|
|
160
|
-
|
|
161
|
-
const processorFn = processor.createProcessor();
|
|
162
|
-
processorFn([], [message]);
|
|
163
|
-
|
|
164
|
-
expect(message.tool_calls).toBeDefined();
|
|
165
|
-
expect(message.tool_calls!.length).toBe(1);
|
|
166
|
-
|
|
167
|
-
const toolCall = message.tool_calls![0];
|
|
168
|
-
expect(toolCall.function.name).toBe("patchFile");
|
|
169
|
-
|
|
170
|
-
// Now simulate the exact logic from ToolsService.callTool
|
|
171
|
-
const functionName = toolCall.function.name;
|
|
172
|
-
let functionArgs;
|
|
173
|
-
let parseError: Error | null = null;
|
|
174
|
-
|
|
175
|
-
try {
|
|
176
|
-
// This is the exact logic from ToolsService.callTool line 167-170
|
|
177
|
-
functionArgs =
|
|
178
|
-
typeof toolCall.function.arguments === "string"
|
|
179
|
-
? JSON.parse(restoreEscapedNewLines(toolCall.function.arguments))
|
|
180
|
-
: toolCall.function.arguments;
|
|
181
|
-
} catch (error) {
|
|
182
|
-
parseError = error as Error;
|
|
183
|
-
}
|
|
184
|
-
|
|
185
|
-
// Should not have any parsing errors
|
|
186
|
-
expect(parseError).toBeNull();
|
|
187
|
-
expect(functionArgs).toBeDefined();
|
|
188
|
-
expect(typeof functionArgs).toBe("object");
|
|
189
|
-
|
|
190
|
-
// Should have the correct structure
|
|
191
|
-
expect(functionArgs.filePath).toBe("accumulate.js");
|
|
192
|
-
expect(functionArgs.patch).toBeDefined();
|
|
193
|
-
expect(typeof functionArgs.patch).toBe("string");
|
|
194
|
-
expect(functionArgs.patch).toContain("Index: ./accumulate.js");
|
|
195
|
-
|
|
196
|
-
// Additional validation: ensure arguments is a valid JSON string
|
|
197
|
-
expect(typeof toolCall.function.arguments).toBe("string");
|
|
198
|
-
|
|
199
|
-
// Test that the arguments can be JSON.parsed without errors
|
|
200
|
-
let parsedArgs;
|
|
201
|
-
expect(() => {
|
|
202
|
-
parsedArgs = JSON.parse(toolCall.function.arguments);
|
|
203
|
-
}).not.toThrow();
|
|
204
|
-
|
|
205
|
-
// Verify the parsed structure matches what we expect
|
|
206
|
-
expect(parsedArgs).toEqual(functionArgs);
|
|
207
|
-
|
|
208
|
-
// Ensure no double-wrapping (arguments should not be a stringified JSON string)
|
|
209
|
-
expect(typeof parsedArgs.filePath).toBe("string");
|
|
210
|
-
expect(typeof parsedArgs.patch).toBe("string");
|
|
211
|
-
// The patch should NOT be a JSON string, but actual string content
|
|
212
|
-
expect(() => JSON.parse(parsedArgs.patch)).toThrow(); // Should throw because patch is actual diff content, not JSON
|
|
213
|
-
|
|
214
|
-
console.log("✅ Tool call arguments format validation passed");
|
|
215
|
-
console.log("Function name:", functionName);
|
|
216
|
-
console.log("Arguments type:", typeof toolCall.function.arguments);
|
|
217
|
-
console.log("Parsed args keys:", Object.keys(functionArgs));
|
|
218
|
-
});
|
|
219
|
-
|
|
220
|
-
it("should correctly parse JSON tool calls with object arguments", () => {
|
|
221
|
-
const message: Message = {
|
|
222
|
-
role: "assistant",
|
|
223
|
-
content: `<tool_call>
|
|
224
|
-
{"name": "readFile", "arguments": {"filePath": "example.txt"}}
|
|
225
|
-
</tool_call>`,
|
|
226
|
-
};
|
|
227
|
-
|
|
228
|
-
const processorFn = processor.createProcessor();
|
|
229
|
-
processorFn([], [message]);
|
|
230
|
-
|
|
231
|
-
expect(message.tool_calls).toBeDefined();
|
|
232
|
-
expect(message.tool_calls!.length).toBe(1);
|
|
233
|
-
|
|
234
|
-
const toolCall = message.tool_calls![0];
|
|
235
|
-
expect(toolCall.function.name).toBe("readFile");
|
|
236
|
-
|
|
237
|
-
const args = JSON.parse(toolCall.function.arguments);
|
|
238
|
-
expect(args.filePath).toBe("example.txt");
|
|
239
|
-
});
|
|
240
|
-
});
|
|
241
|
-
|
|
242
|
-
describe("Attribute-based XML tool calls", () => {
|
|
243
|
-
it("should correctly parse attribute-based tool calls", () => {
|
|
244
|
-
const message: Message = {
|
|
245
|
-
role: "assistant",
|
|
246
|
-
content: `<tool_call name="readFile">{"filePath": "test.txt"}</tool_call>`,
|
|
247
|
-
};
|
|
248
|
-
|
|
249
|
-
const processorFn = processor.createProcessor();
|
|
250
|
-
processorFn([], [message]);
|
|
251
|
-
|
|
252
|
-
expect(message.tool_calls).toBeDefined();
|
|
253
|
-
expect(message.tool_calls!.length).toBe(1);
|
|
254
|
-
|
|
255
|
-
const toolCall = message.tool_calls![0];
|
|
256
|
-
expect(toolCall.function.name).toBe("readFile");
|
|
257
|
-
|
|
258
|
-
const args = JSON.parse(toolCall.function.arguments);
|
|
259
|
-
expect(args.filePath).toBe("test.txt");
|
|
260
|
-
});
|
|
261
|
-
|
|
262
|
-
it("should correctly parse attribute-based tool calls with arguments attribute", () => {
|
|
263
|
-
const message: Message = {
|
|
264
|
-
role: "assistant",
|
|
265
|
-
content: `<tool_call name="execCommand" arguments='{"command": "ls -la"}'/>`,
|
|
266
|
-
};
|
|
267
|
-
|
|
268
|
-
const processorFn = processor.createProcessor();
|
|
269
|
-
processorFn([], [message]);
|
|
270
|
-
|
|
271
|
-
expect(message.tool_calls).toBeDefined();
|
|
272
|
-
expect(message.tool_calls!.length).toBe(1);
|
|
273
|
-
|
|
274
|
-
const toolCall = message.tool_calls![0];
|
|
275
|
-
expect(toolCall.function.name).toBe("execCommand");
|
|
276
|
-
|
|
277
|
-
const args = JSON.parse(toolCall.function.arguments);
|
|
278
|
-
expect(args.command).toBe("ls -la");
|
|
279
|
-
});
|
|
280
|
-
});
|
|
281
|
-
|
|
282
|
-
describe("Nested XML tool calls", () => {
|
|
283
|
-
it("should correctly parse nested XML parameter format", () => {
|
|
284
|
-
const message: Message = {
|
|
285
|
-
role: "assistant",
|
|
286
|
-
content: `<tool_call>
|
|
287
|
-
<invoke name="readFile">
|
|
288
|
-
<parameter name="filePath">example.txt</parameter>
|
|
289
|
-
</invoke>
|
|
290
|
-
</tool_call>`,
|
|
291
|
-
};
|
|
292
|
-
|
|
293
|
-
const processorFn = processor.createProcessor();
|
|
294
|
-
processorFn([], [message]);
|
|
295
|
-
|
|
296
|
-
expect(message.tool_calls).toBeDefined();
|
|
297
|
-
expect(message.tool_calls!.length).toBe(1);
|
|
298
|
-
|
|
299
|
-
const toolCall = message.tool_calls![0];
|
|
300
|
-
expect(toolCall.function.name).toBe("readFile");
|
|
301
|
-
|
|
302
|
-
const args = JSON.parse(toolCall.function.arguments);
|
|
303
|
-
expect(args.filePath).toBe("example.txt");
|
|
304
|
-
});
|
|
305
|
-
});
|
|
306
|
-
|
|
307
|
-
describe("Content cleaning", () => {
|
|
308
|
-
it("should preserve non-XML content in the message", () => {
|
|
309
|
-
const message: Message = {
|
|
310
|
-
role: "assistant",
|
|
311
|
-
content: `I need to read the file first.
|
|
312
|
-
|
|
313
|
-
<tool_call>
|
|
314
|
-
{"name": "readFile", "arguments": "{\"filePath\": \"test.js\"}"}
|
|
315
|
-
</tool_call>
|
|
316
|
-
|
|
317
|
-
This will help me understand the content.`,
|
|
318
|
-
};
|
|
319
|
-
|
|
320
|
-
const processorFn = processor.createProcessor();
|
|
321
|
-
processorFn([], [message]);
|
|
322
|
-
|
|
323
|
-
// Content should still contain the non-XML parts
|
|
324
|
-
expect(message.content).toContain("I need to read the file first.");
|
|
325
|
-
expect(message.content).toContain(
|
|
326
|
-
"This will help me understand the content."
|
|
327
|
-
);
|
|
328
|
-
|
|
329
|
-
// Tool calls should be extracted
|
|
330
|
-
expect(message.tool_calls).toBeDefined();
|
|
331
|
-
expect(message.tool_calls!.length).toBe(1);
|
|
332
|
-
});
|
|
333
|
-
});
|
|
334
|
-
|
|
335
|
-
describe("Multiple tool calls", () => {
|
|
336
|
-
it("should handle multiple tool calls in one message", () => {
|
|
337
|
-
const message: Message = {
|
|
338
|
-
role: "assistant",
|
|
339
|
-
content: `I'll read the file and then write to another one.
|
|
340
|
-
|
|
341
|
-
<tool_call>
|
|
342
|
-
{"name": "readFile", "arguments": "{\"filePath\": \"input.txt\"}"}
|
|
343
|
-
</tool_call>
|
|
344
|
-
|
|
345
|
-
<tool_call>
|
|
346
|
-
{"name": "writeFileChunk", "arguments": "{\"filePath\": \"output.txt\", \"content\": \"processed data\", \"isContinuing\": false, \"isDone\": true}"}
|
|
347
|
-
</tool_call>`,
|
|
348
|
-
};
|
|
349
|
-
|
|
350
|
-
const processorFn = processor.createProcessor();
|
|
351
|
-
processorFn([], [message]);
|
|
352
|
-
|
|
353
|
-
expect(message.tool_calls).toBeDefined();
|
|
354
|
-
expect(message.tool_calls!.length).toBe(2);
|
|
355
|
-
|
|
356
|
-
// First tool call
|
|
357
|
-
const firstCall = message.tool_calls![0];
|
|
358
|
-
expect(firstCall.function.name).toBe("readFile");
|
|
359
|
-
const firstArgs = JSON.parse(firstCall.function.arguments);
|
|
360
|
-
expect(firstArgs.filePath).toBe("input.txt");
|
|
361
|
-
|
|
362
|
-
// Second tool call
|
|
363
|
-
const secondCall = message.tool_calls![1];
|
|
364
|
-
expect(secondCall.function.name).toBe("writeFileChunk");
|
|
365
|
-
const secondArgs = JSON.parse(secondCall.function.arguments);
|
|
366
|
-
expect(secondArgs.filePath).toBe("output.txt");
|
|
367
|
-
expect(secondArgs.content).toBe("processed data");
|
|
368
|
-
expect(secondArgs.isContinuing).toBe(false);
|
|
369
|
-
expect(secondArgs.isDone).toBe(true);
|
|
370
|
-
});
|
|
371
|
-
});
|
|
372
|
-
|
|
373
|
-
describe("Edge cases", () => {
|
|
374
|
-
it("should not process non-assistant messages", () => {
|
|
375
|
-
const message: Message = {
|
|
376
|
-
role: "user",
|
|
377
|
-
content: `<tool_call>
|
|
378
|
-
{"name": "readFile", "arguments": "{\"filePath\": \"test.txt\"}"}
|
|
379
|
-
</tool_call>`,
|
|
380
|
-
};
|
|
381
|
-
|
|
382
|
-
const processorFn = processor.createProcessor();
|
|
383
|
-
processorFn([], [message]);
|
|
384
|
-
|
|
385
|
-
expect(message.tool_calls).toBeUndefined();
|
|
386
|
-
});
|
|
387
|
-
|
|
388
|
-
it("should not process messages that already have tool_calls", () => {
|
|
389
|
-
const message: Message = {
|
|
390
|
-
role: "assistant",
|
|
391
|
-
content: `<tool_call>
|
|
392
|
-
{"name": "readFile", "arguments": "{\"filePath\": \"test.txt\"}"}
|
|
393
|
-
</tool_call>`,
|
|
394
|
-
tool_calls: [
|
|
395
|
-
{
|
|
396
|
-
id: "existing_call",
|
|
397
|
-
type: "function",
|
|
398
|
-
function: {
|
|
399
|
-
name: "existingTool",
|
|
400
|
-
arguments: "{}",
|
|
401
|
-
},
|
|
402
|
-
},
|
|
403
|
-
],
|
|
404
|
-
};
|
|
405
|
-
|
|
406
|
-
const processorFn = processor.createProcessor();
|
|
407
|
-
processorFn([], [message]);
|
|
408
|
-
|
|
409
|
-
// Should still have only the original tool call
|
|
410
|
-
expect(message.tool_calls!.length).toBe(1);
|
|
411
|
-
expect(message.tool_calls![0].id).toBe("existing_call");
|
|
412
|
-
});
|
|
413
|
-
|
|
414
|
-
it("should handle malformed JSON gracefully", () => {
|
|
415
|
-
const message: Message = {
|
|
416
|
-
role: "assistant",
|
|
417
|
-
content: `<tool_call>
|
|
418
|
-
{"name": "readFile", "arguments": "invalid json here"}
|
|
419
|
-
</tool_call>`,
|
|
420
|
-
};
|
|
421
|
-
|
|
422
|
-
const processorFn = processor.createProcessor();
|
|
423
|
-
processorFn([], [message]);
|
|
424
|
-
|
|
425
|
-
expect(message.tool_calls).toBeDefined();
|
|
426
|
-
expect(message.tool_calls!.length).toBe(1);
|
|
427
|
-
|
|
428
|
-
const toolCall = message.tool_calls![0];
|
|
429
|
-
expect(toolCall.function.name).toBe("readFile");
|
|
430
|
-
// Should fallback to wrapping in input object
|
|
431
|
-
const args = JSON.parse(toolCall.function.arguments);
|
|
432
|
-
expect(args.input).toBe("invalid json here");
|
|
433
|
-
});
|
|
434
|
-
});
|
|
435
|
-
|
|
436
|
-
describe("Incomplete XML tool calls", () => {
|
|
437
|
-
it("should handle incomplete tool calls with missing closing tags", () => {
|
|
438
|
-
const message: Message = {
|
|
439
|
-
role: "assistant",
|
|
440
|
-
content: `I see the issue. Let me make a clean patch with all the changes:
|
|
441
|
-
|
|
442
|
-
<tool_call>
|
|
443
|
-
{"name": "patchFile", "arguments": {"filePath": "bank-account.js", "patch": "//=============================================================================\\n// This is the complete implementation for the Bank Account exercise\\n//=============================================================================\\n\\nexport class BankAccount {\\n constructor() {\\n this._balance = 0;\\n this._isOpen = false;\\n }\\n\\n open() {\\n if (this._isOpen) {\\n throw new ValueError();\\n }\\n this._isOpen = true;\\n this._balance = 0;\\n }\\n\\n close() {\\n if (!this._isOpen) {\\n throw new ValueError();\\n }\\n this._isOpen = false;\\n }\\n\\n deposit(amount) {\\n if (!this._isOpen || amount <= 0) {\\n throw new ValueError();\\n }\\n this._balance += amount;\\n }\\n\\n withdraw(amount) {\\n if (!this._isOpen || amount <= 0 || amount > this._balance) {\\n throw new ValueError();\\n }\\n this._balance -= amount;\\n }\\n\\n get balance() {\\n if (!this._isOpen) {\\n throw new ValueError();\\n }\\n return this._balance;\\n }\\n}\\n\\nexport class ValueError extends Error {\\n constructor() {\\n super('Bank account error');\\n }\\n}"}}`,
|
|
444
|
-
};
|
|
445
|
-
|
|
446
|
-
const processorFn = processor.createProcessor();
|
|
447
|
-
processorFn([], [message]);
|
|
448
|
-
|
|
449
|
-
expect(message.tool_calls).toBeDefined();
|
|
450
|
-
expect(message.tool_calls!.length).toBe(1);
|
|
451
|
-
|
|
452
|
-
const toolCall = message.tool_calls![0];
|
|
453
|
-
expect(toolCall.function.name).toBe("patchFile");
|
|
454
|
-
|
|
455
|
-
// Parse the arguments to ensure they're correctly extracted despite missing closing tag
|
|
456
|
-
const args = JSON.parse(toolCall.function.arguments);
|
|
457
|
-
expect(args.filePath).toBe("bank-account.js");
|
|
458
|
-
expect(args.patch).toBeDefined();
|
|
459
|
-
expect(typeof args.patch).toBe("string");
|
|
460
|
-
expect(args.patch).toContain("export class BankAccount");
|
|
461
|
-
expect(args.patch).toContain("export class ValueError");
|
|
462
|
-
|
|
463
|
-
// Verify the processor correctly handled the incomplete XML (missing </tool_call>)
|
|
464
|
-
expect(toolCall.id).toBeDefined();
|
|
465
|
-
expect(toolCall.type).toBe("function");
|
|
466
|
-
});
|
|
467
|
-
});
|
|
468
|
-
});
|
|
@@ -1,200 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Tests for the BaseAgent interrupt / makeInterruptible mechanism.
|
|
3
|
-
*
|
|
4
|
-
* These verify the fix for the "agent gets stuck after /poke" bug:
|
|
5
|
-
* 1. A stale (slow) operation that finishes AFTER its window was interrupted
|
|
6
|
-
* must NOT clobber a newer interruptible window's resolver.
|
|
7
|
-
* 2. An interrupt() arriving with no active window is a no-op — there is
|
|
8
|
-
* nothing to interrupt, so it must NOT be queued (a queued interrupt would
|
|
9
|
-
* pre-empt the next tool call and drop its result). Any message supplied
|
|
10
|
-
* with the poke is still added as a pending user message.
|
|
11
|
-
* 3. Normal (non-interrupted) resolution still works.
|
|
12
|
-
* 4. Errors propagate when not interrupted, and are swallowed when interrupted.
|
|
13
|
-
*/
|
|
14
|
-
|
|
15
|
-
// Minimal harness exposing the protected members of BaseAgent's interrupt logic.
|
|
16
|
-
// We replicate the class shape just enough to exercise makeInterruptible/interrupt
|
|
17
|
-
// by importing the real implementation would require constructing a full agent
|
|
18
|
-
// (abstract, many deps). Instead we test the exact algorithm via a tiny stand-in
|
|
19
|
-
// that mirrors src/agents/base/base.ts. If the base implementation changes, these
|
|
20
|
-
// tests document the intended contract.
|
|
21
|
-
|
|
22
|
-
class InterruptHarness {
|
|
23
|
-
private _interruptResolve: (() => void) | null = null;
|
|
24
|
-
private _interruptToken = 0;
|
|
25
|
-
public pendingUserMessages: any[] = [];
|
|
26
|
-
|
|
27
|
-
addPendingUserMessage(m: any) {
|
|
28
|
-
this.pendingUserMessages.push(m);
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
makeInterruptible<T>(promise: Promise<T>, interruptValue: T): Promise<T> {
|
|
32
|
-
return new Promise<T>((resolve, reject) => {
|
|
33
|
-
const myToken = ++this._interruptToken;
|
|
34
|
-
let settled = false;
|
|
35
|
-
|
|
36
|
-
const finish = (fn: () => void) => {
|
|
37
|
-
if (settled) return;
|
|
38
|
-
settled = true;
|
|
39
|
-
if (this._interruptToken === myToken) {
|
|
40
|
-
this._interruptResolve = null;
|
|
41
|
-
}
|
|
42
|
-
fn();
|
|
43
|
-
};
|
|
44
|
-
|
|
45
|
-
this._interruptResolve = () => finish(() => resolve(interruptValue));
|
|
46
|
-
|
|
47
|
-
promise
|
|
48
|
-
.then((result) => {
|
|
49
|
-
finish(() => resolve(result));
|
|
50
|
-
})
|
|
51
|
-
.catch((err) => {
|
|
52
|
-
if (settled) return;
|
|
53
|
-
finish(() => reject(err));
|
|
54
|
-
});
|
|
55
|
-
});
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
interrupt(message = "User interrupted this action you were waiting on") {
|
|
59
|
-
if (
|
|
60
|
-
message &&
|
|
61
|
-
message !== "User interrupted this action you were waiting on"
|
|
62
|
-
) {
|
|
63
|
-
this.addPendingUserMessage({ role: "user", content: message });
|
|
64
|
-
}
|
|
65
|
-
if (this._interruptResolve) {
|
|
66
|
-
this._interruptResolve();
|
|
67
|
-
}
|
|
68
|
-
// No active window -> nothing to interrupt. Do NOT queue it.
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
get hasActiveResolver() {
|
|
72
|
-
return this._interruptResolve !== null;
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
const deferred = <T,>() => {
|
|
77
|
-
let resolve!: (v: T) => void;
|
|
78
|
-
let reject!: (e: any) => void;
|
|
79
|
-
const promise = new Promise<T>((res, rej) => {
|
|
80
|
-
resolve = res;
|
|
81
|
-
reject = rej;
|
|
82
|
-
});
|
|
83
|
-
return { promise, resolve, reject };
|
|
84
|
-
};
|
|
85
|
-
|
|
86
|
-
describe("BaseAgent interrupt / makeInterruptible", () => {
|
|
87
|
-
test("normal resolution passes through the real result", async () => {
|
|
88
|
-
const h = new InterruptHarness();
|
|
89
|
-
const wrapped = h.makeInterruptible(Promise.resolve("real"), "INT");
|
|
90
|
-
await expect(wrapped).resolves.toBe("real");
|
|
91
|
-
});
|
|
92
|
-
|
|
93
|
-
test("interrupt() resolves the active window with the interrupt value", async () => {
|
|
94
|
-
const h = new InterruptHarness();
|
|
95
|
-
const slow = deferred<string>();
|
|
96
|
-
const wrapped = h.makeInterruptible(slow.promise, "INT");
|
|
97
|
-
h.interrupt();
|
|
98
|
-
await expect(wrapped).resolves.toBe("INT");
|
|
99
|
-
// The slow op finishing later must not throw or affect anything.
|
|
100
|
-
slow.resolve("late");
|
|
101
|
-
await slow.promise;
|
|
102
|
-
});
|
|
103
|
-
|
|
104
|
-
test("STALE completion does NOT clobber a newer window (the stuck bug)", async () => {
|
|
105
|
-
const h = new InterruptHarness();
|
|
106
|
-
|
|
107
|
-
// Window 1: a slow tool call (like sleep 360).
|
|
108
|
-
const slowTool = deferred<string>();
|
|
109
|
-
const w1 = h.makeInterruptible(slowTool.promise, "INT1");
|
|
110
|
-
|
|
111
|
-
// User pokes -> window 1 resolves with the interrupt value.
|
|
112
|
-
h.interrupt();
|
|
113
|
-
await expect(w1).resolves.toBe("INT1");
|
|
114
|
-
|
|
115
|
-
// Agent moves on to window 2 (the next AI completion).
|
|
116
|
-
const nextOp = deferred<string>();
|
|
117
|
-
const w2 = h.makeInterruptible(nextOp.promise, "INT2");
|
|
118
|
-
|
|
119
|
-
// Now the OLD slow tool finally finishes in the background.
|
|
120
|
-
// Before the fix, this stale .then() would null out window 2's resolver.
|
|
121
|
-
slowTool.resolve("stale-tool-result");
|
|
122
|
-
// Give microtasks a chance to run.
|
|
123
|
-
await Promise.resolve();
|
|
124
|
-
await Promise.resolve();
|
|
125
|
-
|
|
126
|
-
// Window 2 must still be interruptible — resolver intact.
|
|
127
|
-
expect(h.hasActiveResolver).toBe(true);
|
|
128
|
-
|
|
129
|
-
// And interrupting window 2 must still work.
|
|
130
|
-
h.interrupt();
|
|
131
|
-
await expect(w2).resolves.toBe("INT2");
|
|
132
|
-
});
|
|
133
|
-
|
|
134
|
-
test("stale completion does not resolve the newer window with old result", async () => {
|
|
135
|
-
const h = new InterruptHarness();
|
|
136
|
-
const slowTool = deferred<string>();
|
|
137
|
-
const w1 = h.makeInterruptible(slowTool.promise, "INT1");
|
|
138
|
-
h.interrupt();
|
|
139
|
-
await expect(w1).resolves.toBe("INT1");
|
|
140
|
-
|
|
141
|
-
const nextOp = deferred<string>();
|
|
142
|
-
const w2 = h.makeInterruptible(nextOp.promise, "INT2");
|
|
143
|
-
|
|
144
|
-
// Old tool completes late with its (now irrelevant) result.
|
|
145
|
-
slowTool.resolve("stale-tool-result");
|
|
146
|
-
await Promise.resolve();
|
|
147
|
-
await Promise.resolve();
|
|
148
|
-
|
|
149
|
-
// Window 2 resolves with ITS OWN op result, not the stale one.
|
|
150
|
-
nextOp.resolve("fresh-result");
|
|
151
|
-
await expect(w2).resolves.toBe("fresh-result");
|
|
152
|
-
});
|
|
153
|
-
|
|
154
|
-
test("interrupt() with no active window is a no-op (NOT queued)", async () => {
|
|
155
|
-
const h = new InterruptHarness();
|
|
156
|
-
// No active window yet.
|
|
157
|
-
expect(h.hasActiveResolver).toBe(false);
|
|
158
|
-
h.interrupt(); // nothing to interrupt -> no-op
|
|
159
|
-
|
|
160
|
-
// The next window must NOT be pre-empted — it should run its real op and
|
|
161
|
-
// resolve with the real result, not the interrupt value.
|
|
162
|
-
const op = deferred<string>();
|
|
163
|
-
const w = h.makeInterruptible(op.promise, "INT");
|
|
164
|
-
op.resolve("real-result");
|
|
165
|
-
await expect(w).resolves.toBe("real-result");
|
|
166
|
-
});
|
|
167
|
-
|
|
168
|
-
test("errors propagate when not interrupted", async () => {
|
|
169
|
-
const h = new InterruptHarness();
|
|
170
|
-
const failing = Promise.reject(new Error("boom"));
|
|
171
|
-
const wrapped = h.makeInterruptible(failing, "INT");
|
|
172
|
-
await expect(wrapped).rejects.toThrow("boom");
|
|
173
|
-
});
|
|
174
|
-
|
|
175
|
-
test("errors are swallowed if the window was already interrupted", async () => {
|
|
176
|
-
const h = new InterruptHarness();
|
|
177
|
-
const failing = deferred<string>();
|
|
178
|
-
const wrapped = h.makeInterruptible(failing.promise, "INT");
|
|
179
|
-
h.interrupt();
|
|
180
|
-
await expect(wrapped).resolves.toBe("INT");
|
|
181
|
-
// The underlying op rejects late — must not cause an unhandled rejection
|
|
182
|
-
// or re-settle the already-resolved window.
|
|
183
|
-
failing.reject(new Error("late-boom"));
|
|
184
|
-
await failing.promise.catch(() => {});
|
|
185
|
-
});
|
|
186
|
-
|
|
187
|
-
test("/poke with a message queues it as a pending user message", () => {
|
|
188
|
-
const h = new InterruptHarness();
|
|
189
|
-
h.interrupt("please check the logs");
|
|
190
|
-
expect(h.pendingUserMessages).toEqual([
|
|
191
|
-
{ role: "user", content: "please check the logs" },
|
|
192
|
-
]);
|
|
193
|
-
});
|
|
194
|
-
|
|
195
|
-
test("/poke with the default reason does NOT add a pending user message", () => {
|
|
196
|
-
const h = new InterruptHarness();
|
|
197
|
-
h.interrupt();
|
|
198
|
-
expect(h.pendingUserMessages).toEqual([]);
|
|
199
|
-
});
|
|
200
|
-
});
|