@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,674 +0,0 @@
|
|
|
1
|
-
import { Message } from "../../src/clients/types";
|
|
2
|
-
import { TokenCompressor } from "../../src/processors/TokenCompressor";
|
|
3
|
-
import { ToolsService } from "../../src/services";
|
|
4
|
-
|
|
5
|
-
describe("TokenCompressor", () => {
|
|
6
|
-
let tokenCompressor: TokenCompressor;
|
|
7
|
-
let mockToolsService: jest.Mocked<ToolsService>;
|
|
8
|
-
|
|
9
|
-
beforeEach(() => {
|
|
10
|
-
mockToolsService = {
|
|
11
|
-
addTools: jest.fn(),
|
|
12
|
-
addFunctions: jest.fn(),
|
|
13
|
-
getTool: jest.fn(),
|
|
14
|
-
} as any;
|
|
15
|
-
|
|
16
|
-
tokenCompressor = new TokenCompressor(mockToolsService);
|
|
17
|
-
});
|
|
18
|
-
|
|
19
|
-
afterEach(() => {
|
|
20
|
-
tokenCompressor.clearStorage();
|
|
21
|
-
});
|
|
22
|
-
|
|
23
|
-
describe("constructor", () => {
|
|
24
|
-
it("should register expandTokens tool with ToolsService", () => {
|
|
25
|
-
expect(mockToolsService.addTools).toHaveBeenCalled();
|
|
26
|
-
expect(mockToolsService.addFunctions).toHaveBeenCalled();
|
|
27
|
-
});
|
|
28
|
-
|
|
29
|
-
it("should overwrite tool if already exists", () => {
|
|
30
|
-
mockToolsService.getTool.mockReturnValue({ type: "function", function: { name: "expandTokens" } } as any);
|
|
31
|
-
const newCompressor = new TokenCompressor(mockToolsService);
|
|
32
|
-
|
|
33
|
-
// Should only be called once from the first instance
|
|
34
|
-
expect(mockToolsService.addTools).toHaveBeenCalledTimes(2);
|
|
35
|
-
});
|
|
36
|
-
|
|
37
|
-
it("should work without ToolsService", () => {
|
|
38
|
-
expect(() => new TokenCompressor()).not.toThrow();
|
|
39
|
-
});
|
|
40
|
-
});
|
|
41
|
-
|
|
42
|
-
describe("compressContent", () => {
|
|
43
|
-
it("should return original content if below threshold", () => {
|
|
44
|
-
const shortContent = "This is short content";
|
|
45
|
-
const result = tokenCompressor.compressContent(shortContent);
|
|
46
|
-
expect(result).toBe(shortContent);
|
|
47
|
-
});
|
|
48
|
-
|
|
49
|
-
it("should compress long strings using chunking", () => {
|
|
50
|
-
const longContent = "x".repeat(40000); // Well above threshold (40k chars = 10k tokens > 8k maxTokens)
|
|
51
|
-
const result = tokenCompressor.compressContent(longContent);
|
|
52
|
-
|
|
53
|
-
expect(result).toContain("[COMPRESSED_STRING");
|
|
54
|
-
expect(result).toContain("Key:");
|
|
55
|
-
expect(result).toContain("expandTokens");
|
|
56
|
-
expect(result).toContain("Preview:");
|
|
57
|
-
});
|
|
58
|
-
|
|
59
|
-
it("should compress JSON objects by properties", () => {
|
|
60
|
-
const largeJson = {
|
|
61
|
-
data: "x".repeat(40000), // 40k chars = 10k tokens, above threshold
|
|
62
|
-
metadata: { id: 1, name: "test" }
|
|
63
|
-
};
|
|
64
|
-
const content = JSON.stringify(largeJson);
|
|
65
|
-
const result = tokenCompressor.compressContent(content);
|
|
66
|
-
|
|
67
|
-
// Should be parsed and compressed as JSON
|
|
68
|
-
const parsed = JSON.parse(result);
|
|
69
|
-
expect(typeof parsed.data).toBe("string");
|
|
70
|
-
expect(parsed.data).toContain("[COMPRESSED_JSON_PROPERTY");
|
|
71
|
-
});
|
|
72
|
-
|
|
73
|
-
it("should handle mixed JSON compression strategies", () => {
|
|
74
|
-
const complexJson = {
|
|
75
|
-
smallProp: "small",
|
|
76
|
-
largeProp: "x".repeat(40000), // 40k chars = 10k tokens, above threshold
|
|
77
|
-
array: new Array(2000).fill({ item: "data".repeat(50) }) // Larger array to trigger compression
|
|
78
|
-
};
|
|
79
|
-
const content = JSON.stringify(complexJson);
|
|
80
|
-
const result = tokenCompressor.compressContent(content);
|
|
81
|
-
|
|
82
|
-
const parsed = JSON.parse(result);
|
|
83
|
-
expect(parsed.smallProp).toBe("small"); // Should remain unchanged
|
|
84
|
-
expect(parsed.largeProp).toContain("[COMPRESSED_JSON_PROPERTY"); // Should be compressed
|
|
85
|
-
});
|
|
86
|
-
|
|
87
|
-
it("should compress large content that merely CONTAINS a compression marker deep inside (regression)", () => {
|
|
88
|
-
// Regression for the false-positive in isAlreadyCompressed(): a large
|
|
89
|
-
// payload (e.g. a usage.json / message-history dump) whose body contains
|
|
90
|
-
// the substring "[COMPRESSED_STRING" deep inside its nested data was
|
|
91
|
-
// incorrectly treated as already-compressed and returned uncompressed,
|
|
92
|
-
// letting 1MB+ raw tool responses flow into createCompletion untouched.
|
|
93
|
-
const nestedMarker =
|
|
94
|
-
'[COMPRESSED_STRING - 10155 tokens in 3 chunks]\\nKey: compressed_abc123';
|
|
95
|
-
// Build a big JSON array whose entries embed the marker far from the start.
|
|
96
|
-
const entry = JSON.stringify({
|
|
97
|
-
role: "tool",
|
|
98
|
-
name: "readFile",
|
|
99
|
-
content: nestedMarker,
|
|
100
|
-
filler: "z".repeat(500),
|
|
101
|
-
});
|
|
102
|
-
const bigContent = "[" + new Array(200).fill(entry).join(",") + "]";
|
|
103
|
-
|
|
104
|
-
// Sanity: the raw content contains the marker but is NOT at the start.
|
|
105
|
-
expect(bigContent.includes("[COMPRESSED_STRING")).toBe(true);
|
|
106
|
-
expect(bigContent.trimStart().startsWith("[COMPRESSED_STRING")).toBe(false);
|
|
107
|
-
|
|
108
|
-
const result = tokenCompressor.compressContent(bigContent);
|
|
109
|
-
|
|
110
|
-
// It MUST actually get compressed, not returned untouched.
|
|
111
|
-
expect(result.length).toBeLessThan(bigContent.length);
|
|
112
|
-
});
|
|
113
|
-
|
|
114
|
-
it("should NOT recompress content that genuinely starts with a compression marker", () => {
|
|
115
|
-
// Idempotency: real compressor output begins with "[COMPRESSED_STRING".
|
|
116
|
-
const alreadyCompressed =
|
|
117
|
-
"[COMPRESSED_STRING - 999 tokens in 2 chunks]\nKey: compressed_xyz\nPath: \nPreview: ...";
|
|
118
|
-
const result = tokenCompressor.compressContent(alreadyCompressed);
|
|
119
|
-
expect(result).toBe(alreadyCompressed);
|
|
120
|
-
});
|
|
121
|
-
|
|
122
|
-
it("should NOT recompress JSON whose top-level _schema_key marks it compressed", () => {
|
|
123
|
-
// Idempotency: JSON-compressed output carries a top-level _schema_key.
|
|
124
|
-
const compressedJson = JSON.stringify({
|
|
125
|
-
_schema_key: "compressed_schema_1",
|
|
126
|
-
data: "x".repeat(40000),
|
|
127
|
-
});
|
|
128
|
-
const result = tokenCompressor.compressContent(compressedJson);
|
|
129
|
-
expect(result).toBe(compressedJson);
|
|
130
|
-
});
|
|
131
|
-
});
|
|
132
|
-
|
|
133
|
-
describe("compressStringInChunks", () => {
|
|
134
|
-
it("should return original string if below limit", () => {
|
|
135
|
-
const content = "short string";
|
|
136
|
-
const result = tokenCompressor.compressStringInChunks(content);
|
|
137
|
-
expect(result).toBe(content);
|
|
138
|
-
});
|
|
139
|
-
|
|
140
|
-
it("should create chunked compression for large strings", () => {
|
|
141
|
-
const content = "x".repeat(20000);
|
|
142
|
-
const result = tokenCompressor.compressStringInChunks(content);
|
|
143
|
-
|
|
144
|
-
expect(result).toContain("[COMPRESSED_STRING");
|
|
145
|
-
expect(result).toContain("chunks");
|
|
146
|
-
expect(result).toContain("Key:");
|
|
147
|
-
|
|
148
|
-
// Should have stored chunks in storage
|
|
149
|
-
expect(tokenCompressor.getStorageSize()).toBeGreaterThan(0);
|
|
150
|
-
});
|
|
151
|
-
|
|
152
|
-
it("should create chain of NEXT_CHUNK_KEY references", () => {
|
|
153
|
-
// Large enough to require multiple full-size chunks even after the
|
|
154
|
-
// minimum-chunk-size merge (characterLimit is 16000, minChunk is 8000).
|
|
155
|
-
const content = "a".repeat(40000);
|
|
156
|
-
tokenCompressor.compressStringInChunks(content);
|
|
157
|
-
|
|
158
|
-
const keys = tokenCompressor.getStorageKeys();
|
|
159
|
-
expect(keys.length).toBeGreaterThan(1);
|
|
160
|
-
|
|
161
|
-
// Check that chunks are linked
|
|
162
|
-
const firstChunk = tokenCompressor.retrieveString(keys[0]);
|
|
163
|
-
expect(firstChunk).toContain("NEXT_CHUNK_KEY");
|
|
164
|
-
});
|
|
165
|
-
|
|
166
|
-
it("should merge a small leftover chunk so no tiny chunks are emitted", () => {
|
|
167
|
-
// characterLimit is 16000; a 20000-char input would naively split into a
|
|
168
|
-
// 16000-char chunk and a tiny 4000-char leading chunk. The leftover is
|
|
169
|
-
// below the minimum chunk size, so it should be merged into a single chunk.
|
|
170
|
-
const content = "a".repeat(20000);
|
|
171
|
-
tokenCompressor.compressStringInChunks(content);
|
|
172
|
-
|
|
173
|
-
const keys = tokenCompressor.getStorageKeys();
|
|
174
|
-
expect(keys.length).toBe(1);
|
|
175
|
-
|
|
176
|
-
const onlyChunk = tokenCompressor.retrieveString(keys[0]);
|
|
177
|
-
expect(onlyChunk).not.toContain("NEXT_CHUNK_KEY");
|
|
178
|
-
// The full content should be retrievable from the single chunk.
|
|
179
|
-
expect(tokenCompressor.retrieveFullString(keys[0])).toBe(content);
|
|
180
|
-
});
|
|
181
|
-
});
|
|
182
|
-
|
|
183
|
-
describe("compressJsonProperties", () => {
|
|
184
|
-
it("should compress large array elements", () => {
|
|
185
|
-
// Create array that will definitely create chunks > 4000 chars (50 elements × 200 chars = 10k+ chars per potential chunk)
|
|
186
|
-
const largeArray = new Array(15).fill("x".repeat(2200));
|
|
187
|
-
const result = tokenCompressor.compressJsonProperties(largeArray);
|
|
188
|
-
|
|
189
|
-
// Should contain compression markers
|
|
190
|
-
expect(JSON.stringify(result)).toContain("[COMPRESSED_JSON_ARRAY_CHUNK");
|
|
191
|
-
});
|
|
192
|
-
|
|
193
|
-
it("should compress nested JSON objects", () => {
|
|
194
|
-
const nestedObj = {
|
|
195
|
-
level1: {
|
|
196
|
-
level2: {
|
|
197
|
-
data: "x".repeat(40000) // 40k chars = ~10k tokens, above 8k threshold
|
|
198
|
-
}
|
|
199
|
-
}
|
|
200
|
-
};
|
|
201
|
-
|
|
202
|
-
const result = tokenCompressor.compressJsonProperties(nestedObj);
|
|
203
|
-
expect(JSON.stringify(result)).toContain("[COMPRESSED_JSON");
|
|
204
|
-
});
|
|
205
|
-
|
|
206
|
-
it("should handle arrays with mixed content sizes", () => {
|
|
207
|
-
const mixedArray = [
|
|
208
|
-
"small",
|
|
209
|
-
"x".repeat(5000), // Large item
|
|
210
|
-
{ data: "y".repeat(5000) }, // Large object
|
|
211
|
-
"another small item"
|
|
212
|
-
];
|
|
213
|
-
|
|
214
|
-
const result = tokenCompressor.compressJsonProperties(mixedArray);
|
|
215
|
-
expect(Array.isArray(result)).toBe(true);
|
|
216
|
-
});
|
|
217
|
-
|
|
218
|
-
it("should preserve small objects unchanged", () => {
|
|
219
|
-
const smallObj = { id: 1, name: "test", active: true };
|
|
220
|
-
const result = tokenCompressor.compressJsonProperties(smallObj);
|
|
221
|
-
expect(result).toEqual(smallObj);
|
|
222
|
-
});
|
|
223
|
-
});
|
|
224
|
-
|
|
225
|
-
describe("compressMessage", () => {
|
|
226
|
-
it("should compress string content in messages", async () => {
|
|
227
|
-
const message: Message = {
|
|
228
|
-
role: "user",
|
|
229
|
-
content: "x".repeat(20000)
|
|
230
|
-
};
|
|
231
|
-
|
|
232
|
-
await tokenCompressor.compressMessage(message);
|
|
233
|
-
|
|
234
|
-
expect(message.content).toContain("[COMPRESSED_STRING");
|
|
235
|
-
});
|
|
236
|
-
|
|
237
|
-
it("should compress text in multimodal content", async () => {
|
|
238
|
-
const message: Message = {
|
|
239
|
-
role: "user",
|
|
240
|
-
content: [
|
|
241
|
-
{ type: "text", text: "x".repeat(20000) },
|
|
242
|
-
{ type: "image_url", image_url: { url: "http://example.com/img.jpg" } }
|
|
243
|
-
]
|
|
244
|
-
};
|
|
245
|
-
|
|
246
|
-
await tokenCompressor.compressMessage(message);
|
|
247
|
-
|
|
248
|
-
const textContent = message.content[0] as { type: string; text: string };
|
|
249
|
-
expect(textContent.text).toContain("[COMPRESSED_STRING");
|
|
250
|
-
|
|
251
|
-
// Non-text content should remain unchanged
|
|
252
|
-
const imageContent = message.content[1] as { type: string; image_url: { url: string } };
|
|
253
|
-
expect(imageContent.image_url.url).toBe("http://example.com/img.jpg");
|
|
254
|
-
});
|
|
255
|
-
|
|
256
|
-
it("should handle messages with no content", async () => {
|
|
257
|
-
const message: Message = { role: "user" } as any;
|
|
258
|
-
await expect(tokenCompressor.compressMessage(message)).resolves.not.toThrow();
|
|
259
|
-
});
|
|
260
|
-
});
|
|
261
|
-
|
|
262
|
-
describe("createProcessor", () => {
|
|
263
|
-
it("should create processor that compresses all messages", async () => {
|
|
264
|
-
const processor = tokenCompressor.createProcessor();
|
|
265
|
-
const messages: Message[] = [
|
|
266
|
-
{ role: "user", content: "x".repeat(20000) },
|
|
267
|
-
{ role: "assistant", content: "short response" }
|
|
268
|
-
];
|
|
269
|
-
|
|
270
|
-
await processor([], messages);
|
|
271
|
-
|
|
272
|
-
expect(messages[0].content).toContain("[COMPRESSED_STRING");
|
|
273
|
-
expect(messages[1].content).toBe("short response"); // Should remain short
|
|
274
|
-
});
|
|
275
|
-
|
|
276
|
-
it("should create processor with filter function", async () => {
|
|
277
|
-
const processor = tokenCompressor.createProcessor(
|
|
278
|
-
(msg) => msg.role === "user"
|
|
279
|
-
);
|
|
280
|
-
const messages: Message[] = [
|
|
281
|
-
{ role: "user", content: "x".repeat(20000) },
|
|
282
|
-
{ role: "assistant", content: "x".repeat(20000) }
|
|
283
|
-
];
|
|
284
|
-
|
|
285
|
-
await processor([], messages);
|
|
286
|
-
|
|
287
|
-
expect(messages[0].content).toContain("[COMPRESSED_STRING");
|
|
288
|
-
expect(messages[1].content).not.toContain("[COMPRESSED_STRING");
|
|
289
|
-
});
|
|
290
|
-
|
|
291
|
-
it("should skip compression for responses from compression-related tools", async () => {
|
|
292
|
-
const processor = tokenCompressor.createProcessor();
|
|
293
|
-
const largeContent = "x".repeat(20000);
|
|
294
|
-
const messages: Message[] = [
|
|
295
|
-
{ role: "assistant", content: "calling tools", tool_calls: [] },
|
|
296
|
-
{ role: "tool", name: "expandTokens", content: largeContent, tool_call_id: "call_1" } as any,
|
|
297
|
-
{ role: "tool", name: "grepToolResponse", content: largeContent, tool_call_id: "call_2" } as any,
|
|
298
|
-
{ role: "tool", name: "jqToolResponse", content: largeContent, tool_call_id: "call_3" } as any,
|
|
299
|
-
{ role: "tool", name: "tailToolResponse", content: largeContent, tool_call_id: "call_4" } as any,
|
|
300
|
-
{ role: "tool", name: "listStoredToolResponses", content: largeContent, tool_call_id: "call_5" } as any,
|
|
301
|
-
{ role: "tool", name: "someOtherTool", content: largeContent, tool_call_id: "call_6" } as any,
|
|
302
|
-
];
|
|
303
|
-
|
|
304
|
-
await processor([], messages);
|
|
305
|
-
|
|
306
|
-
// Compression-related tools should NOT be compressed
|
|
307
|
-
expect(messages[1].content).toBe(largeContent);
|
|
308
|
-
expect(messages[2].content).toBe(largeContent);
|
|
309
|
-
expect(messages[3].content).toBe(largeContent);
|
|
310
|
-
expect(messages[4].content).toBe(largeContent);
|
|
311
|
-
expect(messages[5].content).toBe(largeContent);
|
|
312
|
-
|
|
313
|
-
// A regular tool SHOULD be compressed
|
|
314
|
-
expect(messages[6].content).toContain("[COMPRESSED_STRING");
|
|
315
|
-
});
|
|
316
|
-
|
|
317
|
-
it("should only compress tool messages from the last batch (after last assistant message)", async () => {
|
|
318
|
-
const processor = tokenCompressor.createProcessor();
|
|
319
|
-
const largeContent = "x".repeat(20000);
|
|
320
|
-
|
|
321
|
-
// Historical tool message (before last assistant message) should NOT be compressed
|
|
322
|
-
// Current tool message (after last assistant message) SHOULD be compressed
|
|
323
|
-
const messages: Message[] = [
|
|
324
|
-
{ role: "user", content: "first user message" },
|
|
325
|
-
{ role: "assistant", content: "first assistant response", tool_calls: [] },
|
|
326
|
-
{ role: "tool", name: "someTool", content: largeContent, tool_call_id: "call_historical" } as any,
|
|
327
|
-
{ role: "assistant", content: "second assistant response", tool_calls: [] },
|
|
328
|
-
{ role: "tool", name: "someTool", content: largeContent, tool_call_id: "call_current" } as any,
|
|
329
|
-
];
|
|
330
|
-
|
|
331
|
-
await processor([], messages);
|
|
332
|
-
|
|
333
|
-
// Historical tool message (index 2, before last assistant at index 3) should NOT be compressed
|
|
334
|
-
expect(messages[2].content).toBe(largeContent);
|
|
335
|
-
|
|
336
|
-
// Current tool message (index 4, after last assistant at index 3) SHOULD be compressed
|
|
337
|
-
expect(messages[4].content).toContain("[COMPRESSED_STRING");
|
|
338
|
-
});
|
|
339
|
-
|
|
340
|
-
it("should compress all tool messages when there is no assistant message", async () => {
|
|
341
|
-
const processor = tokenCompressor.createProcessor();
|
|
342
|
-
const largeContent = "x".repeat(20000);
|
|
343
|
-
|
|
344
|
-
const messages: Message[] = [
|
|
345
|
-
{ role: "user", content: "user message" },
|
|
346
|
-
{ role: "tool", name: "someTool", content: largeContent, tool_call_id: "call_1" } as any,
|
|
347
|
-
{ role: "tool", name: "anotherTool", content: largeContent, tool_call_id: "call_2" } as any,
|
|
348
|
-
];
|
|
349
|
-
|
|
350
|
-
await processor([], messages);
|
|
351
|
-
|
|
352
|
-
// With no assistant message (lastAssistantIndex = -1), all tool messages at index >= 0 should be compressed
|
|
353
|
-
expect(messages[1].content).toContain("[COMPRESSED_STRING");
|
|
354
|
-
expect(messages[2].content).toContain("[COMPRESSED_STRING");
|
|
355
|
-
});
|
|
356
|
-
});
|
|
357
|
-
|
|
358
|
-
describe("storage operations", () => {
|
|
359
|
-
it("should store and retrieve strings", () => {
|
|
360
|
-
const key = "test_key";
|
|
361
|
-
const value = "test_value";
|
|
362
|
-
|
|
363
|
-
tokenCompressor.storeString(key, value);
|
|
364
|
-
const retrieved = tokenCompressor.retrieveString(key);
|
|
365
|
-
|
|
366
|
-
expect(retrieved).toBe(value);
|
|
367
|
-
});
|
|
368
|
-
|
|
369
|
-
it("should return null for non-existent keys", () => {
|
|
370
|
-
const result = tokenCompressor.retrieveString("non_existent");
|
|
371
|
-
expect(result).toBeNull();
|
|
372
|
-
});
|
|
373
|
-
|
|
374
|
-
it("should clear all storage", () => {
|
|
375
|
-
tokenCompressor.storeString("key1", "value1");
|
|
376
|
-
tokenCompressor.storeString("key2", "value2");
|
|
377
|
-
|
|
378
|
-
expect(tokenCompressor.getStorageSize()).toBe(2);
|
|
379
|
-
|
|
380
|
-
tokenCompressor.clearStorage();
|
|
381
|
-
expect(tokenCompressor.getStorageSize()).toBe(0);
|
|
382
|
-
});
|
|
383
|
-
|
|
384
|
-
it("should return storage keys", () => {
|
|
385
|
-
tokenCompressor.storeString("key1", "value1");
|
|
386
|
-
tokenCompressor.storeString("key2", "value2");
|
|
387
|
-
|
|
388
|
-
const keys = tokenCompressor.getStorageKeys();
|
|
389
|
-
expect(keys).toContain("key1");
|
|
390
|
-
expect(keys).toContain("key2");
|
|
391
|
-
});
|
|
392
|
-
});
|
|
393
|
-
|
|
394
|
-
describe("configuration", () => {
|
|
395
|
-
it("should allow setting compression threshold", () => {
|
|
396
|
-
tokenCompressor.setCompressionThreshold(1000);
|
|
397
|
-
|
|
398
|
-
const content = "x".repeat(5000); // Above new threshold (5000 chars = 1250 tokens > 1000)
|
|
399
|
-
const result = tokenCompressor.compressContent(content);
|
|
400
|
-
|
|
401
|
-
expect(result).toContain("[COMPRESSED_STRING");
|
|
402
|
-
});
|
|
403
|
-
|
|
404
|
-
it("should adjust character limit with threshold", () => {
|
|
405
|
-
const originalThreshold = 4000;
|
|
406
|
-
const newThreshold = 2000;
|
|
407
|
-
|
|
408
|
-
tokenCompressor.setCompressionThreshold(newThreshold);
|
|
409
|
-
|
|
410
|
-
// Should compress at lower threshold
|
|
411
|
-
const content = "x".repeat(9000); // Above new threshold (9000 chars = 2250 tokens > 2000)
|
|
412
|
-
const result = tokenCompressor.compressContent(content);
|
|
413
|
-
|
|
414
|
-
expect(result).toContain("[COMPRESSED_STRING");
|
|
415
|
-
});
|
|
416
|
-
});
|
|
417
|
-
|
|
418
|
-
describe("image content compression", () => {
|
|
419
|
-
it("keeps image URLs intact when expanded", () => {
|
|
420
|
-
const imageUrl = `data:image/png;base64,${"A".repeat(20_000)}`;
|
|
421
|
-
const content = JSON.stringify({
|
|
422
|
-
type: "image_url",
|
|
423
|
-
image_url: { url: imageUrl, detail: "high" },
|
|
424
|
-
});
|
|
425
|
-
|
|
426
|
-
const compressed = tokenCompressor.compressContent(content);
|
|
427
|
-
const key = compressed.match(/Key:\s*(\S+)/)?.[1];
|
|
428
|
-
|
|
429
|
-
expect(key).toBeDefined();
|
|
430
|
-
const expanded = tokenCompressor.retrieveFullString(key!);
|
|
431
|
-
expect(expanded).toBe(content);
|
|
432
|
-
expect(expanded).not.toContain("[COMPRESSED_JSON_PROPERTY");
|
|
433
|
-
});
|
|
434
|
-
});
|
|
435
|
-
|
|
436
|
-
describe("tool function integration", () => {
|
|
437
|
-
it("should register expandTokens function correctly", () => {
|
|
438
|
-
const toolsServiceCalls = mockToolsService.addFunctions.mock.calls;
|
|
439
|
-
expect(toolsServiceCalls.length).toBe(1);
|
|
440
|
-
|
|
441
|
-
const functions = toolsServiceCalls[0][0];
|
|
442
|
-
expect(functions.expandTokens).toBeDefined();
|
|
443
|
-
expect(typeof functions.expandTokens).toBe("function");
|
|
444
|
-
});
|
|
445
|
-
|
|
446
|
-
it("should return stored data when expandTokens is called", () => {
|
|
447
|
-
const key = "test_key";
|
|
448
|
-
const value = "test_value";
|
|
449
|
-
tokenCompressor.storeString(key, value);
|
|
450
|
-
|
|
451
|
-
const toolsServiceCalls = mockToolsService.addFunctions.mock.calls;
|
|
452
|
-
const functions = toolsServiceCalls[0][0];
|
|
453
|
-
const result = functions.expandTokens(key);
|
|
454
|
-
|
|
455
|
-
expect(result).toBe(value);
|
|
456
|
-
});
|
|
457
|
-
|
|
458
|
-
it("should return error message for non-existent keys", () => {
|
|
459
|
-
const toolsServiceCalls = mockToolsService.addFunctions.mock.calls;
|
|
460
|
-
const functions = toolsServiceCalls[0][0];
|
|
461
|
-
const result = functions.expandTokens("non_existent");
|
|
462
|
-
|
|
463
|
-
expect(result).toContain("Error: No data found for key");
|
|
464
|
-
expect(result).toContain("Available keys:");
|
|
465
|
-
});
|
|
466
|
-
|
|
467
|
-
it("should auto-stitch and paginate a multi-chunk chain", () => {
|
|
468
|
-
// Force a multi-chunk compression then expand the first key.
|
|
469
|
-
const content = "a".repeat(40000);
|
|
470
|
-
const placeholder = tokenCompressor.compressStringInChunks(content);
|
|
471
|
-
const firstKey = placeholder.match(/Key:\s*(\S+)/)[1];
|
|
472
|
-
|
|
473
|
-
const toolsServiceCalls = mockToolsService.addFunctions.mock.calls;
|
|
474
|
-
const functions = toolsServiceCalls[0][0];
|
|
475
|
-
const result = functions.expandTokens(firstKey);
|
|
476
|
-
|
|
477
|
-
expect(result.length).toBeLessThanOrEqual(20_000);
|
|
478
|
-
expect(result).toContain("Repeat with characterOffset=");
|
|
479
|
-
expect(result).not.toContain("NEXT_CHUNK_KEY");
|
|
480
|
-
|
|
481
|
-
const pages = [result];
|
|
482
|
-
let offsetMatch = result.match(/characterOffset=(\d+)/);
|
|
483
|
-
while (offsetMatch) {
|
|
484
|
-
const page = functions.expandTokens(
|
|
485
|
-
firstKey,
|
|
486
|
-
undefined,
|
|
487
|
-
undefined,
|
|
488
|
-
Number(offsetMatch[1])
|
|
489
|
-
);
|
|
490
|
-
pages.push(page);
|
|
491
|
-
offsetMatch = page.match(/Repeat with characterOffset=(\d+)/);
|
|
492
|
-
}
|
|
493
|
-
expect(pages.reduce((sum, page) => sum + (page.match(/^a+/)?.[0].length || 0), 0)).toBe(content.length);
|
|
494
|
-
});
|
|
495
|
-
|
|
496
|
-
it("should support a ranged read with real line numbers", () => {
|
|
497
|
-
const key = "ranged_key";
|
|
498
|
-
const value = ["line one", "line two", "line three", "line four"].join(
|
|
499
|
-
"\n"
|
|
500
|
-
);
|
|
501
|
-
tokenCompressor.storeString(key, value);
|
|
502
|
-
|
|
503
|
-
const toolsServiceCalls = mockToolsService.addFunctions.mock.calls;
|
|
504
|
-
const functions = toolsServiceCalls[0][0];
|
|
505
|
-
const result = functions.expandTokens(key, 2, 3);
|
|
506
|
-
|
|
507
|
-
expect(result).toBe("2: line two\n3: line three");
|
|
508
|
-
});
|
|
509
|
-
|
|
510
|
-
it("should error on an invalid line range", () => {
|
|
511
|
-
const key = "bad_range_key";
|
|
512
|
-
tokenCompressor.storeString(key, "a\nb\nc");
|
|
513
|
-
|
|
514
|
-
const toolsServiceCalls = mockToolsService.addFunctions.mock.calls;
|
|
515
|
-
const functions = toolsServiceCalls[0][0];
|
|
516
|
-
const result = functions.expandTokens(key, 5, 2);
|
|
517
|
-
|
|
518
|
-
expect(result).toContain("Error: Invalid line range");
|
|
519
|
-
});
|
|
520
|
-
});
|
|
521
|
-
|
|
522
|
-
describe("edge cases", () => {
|
|
523
|
-
it("should handle empty strings", () => {
|
|
524
|
-
const result = tokenCompressor.compressContent("");
|
|
525
|
-
expect(result).toBe("");
|
|
526
|
-
});
|
|
527
|
-
|
|
528
|
-
it("should handle malformed JSON gracefully", () => {
|
|
529
|
-
const malformedJson = '{"incomplete": "json"'; // Missing closing brace
|
|
530
|
-
const result = tokenCompressor.compressContent(malformedJson);
|
|
531
|
-
|
|
532
|
-
// Should treat as string, not JSON
|
|
533
|
-
if (result.length > malformedJson.length) {
|
|
534
|
-
expect(result).toContain("[COMPRESSED_STRING");
|
|
535
|
-
} else {
|
|
536
|
-
expect(result).toBe(malformedJson);
|
|
537
|
-
}
|
|
538
|
-
});
|
|
539
|
-
|
|
540
|
-
it("should handle very large objects without stack overflow", () => {
|
|
541
|
-
const deepObject = { level: 0 } as any;
|
|
542
|
-
let current = deepObject;
|
|
543
|
-
|
|
544
|
-
// Create deeply nested object
|
|
545
|
-
for (let i = 1; i < 100; i++) {
|
|
546
|
-
current.next = { level: i, data: "x".repeat(100) };
|
|
547
|
-
current = current.next;
|
|
548
|
-
}
|
|
549
|
-
|
|
550
|
-
expect(() => {
|
|
551
|
-
tokenCompressor.compressJsonProperties(deepObject);
|
|
552
|
-
}).not.toThrow();
|
|
553
|
-
});
|
|
554
|
-
|
|
555
|
-
it("should handle circular references in JSON", () => {
|
|
556
|
-
const obj: any = { name: "test" };
|
|
557
|
-
obj.self = obj; // Create circular reference
|
|
558
|
-
|
|
559
|
-
expect(() => {
|
|
560
|
-
JSON.stringify(obj); // This should throw
|
|
561
|
-
}).toThrow();
|
|
562
|
-
|
|
563
|
-
// Our compressor should handle this gracefully by not receiving circular JSON
|
|
564
|
-
const safeObj = { name: "test", data: "x".repeat(10000) };
|
|
565
|
-
expect(() => {
|
|
566
|
-
tokenCompressor.compressJsonProperties(safeObj);
|
|
567
|
-
}).not.toThrow();
|
|
568
|
-
});
|
|
569
|
-
});
|
|
570
|
-
|
|
571
|
-
describe("performance characteristics", () => {
|
|
572
|
-
it("should handle large arrays efficiently", () => {
|
|
573
|
-
const largeArray = new Array(1000).fill("x".repeat(100));
|
|
574
|
-
const startTime = Date.now();
|
|
575
|
-
|
|
576
|
-
tokenCompressor.compressJsonProperties(largeArray);
|
|
577
|
-
|
|
578
|
-
const duration = Date.now() - startTime;
|
|
579
|
-
expect(duration).toBeLessThan(5000); // Should complete within 5 seconds
|
|
580
|
-
});
|
|
581
|
-
|
|
582
|
-
it("should not compress already small content multiple times", () => {
|
|
583
|
-
const content = "small content";
|
|
584
|
-
const result1 = tokenCompressor.compressContent(content);
|
|
585
|
-
const result2 = tokenCompressor.compressContent(result1);
|
|
586
|
-
|
|
587
|
-
expect(result1).toBe(content);
|
|
588
|
-
expect(result2).toBe(content);
|
|
589
|
-
});
|
|
590
|
-
});
|
|
591
|
-
|
|
592
|
-
describe("multi-task storage isolation", () => {
|
|
593
|
-
it("should not leak storage between tasks when reusing agent with new TokenCompressor instances", async () => {
|
|
594
|
-
// This test simulates the AgentModule scenario where:
|
|
595
|
-
// 1. Same agent instance is reused for multiple tasks
|
|
596
|
-
// 2. But a NEW TokenCompressor is created for each task
|
|
597
|
-
// 3. Old compressed keys from previous task should not cause errors
|
|
598
|
-
|
|
599
|
-
const consoleLogSpy = jest.spyOn(console, 'log');
|
|
600
|
-
|
|
601
|
-
// === FIRST TASK ===
|
|
602
|
-
// Create first TokenCompressor instance for first task
|
|
603
|
-
const firstCompressor = new TokenCompressor(mockToolsService);
|
|
604
|
-
const firstProcessor = firstCompressor.createProcessor((msg) =>
|
|
605
|
-
Boolean(msg.role === "tool" && msg.tool_call_id)
|
|
606
|
-
);
|
|
607
|
-
|
|
608
|
-
const firstTaskMessages: Message[] = [
|
|
609
|
-
{
|
|
610
|
-
role: "tool",
|
|
611
|
-
content: "x".repeat(20000),
|
|
612
|
-
tool_call_id: "call_1"
|
|
613
|
-
}
|
|
614
|
-
];
|
|
615
|
-
|
|
616
|
-
await firstProcessor([], firstTaskMessages);
|
|
617
|
-
|
|
618
|
-
// Verify compression happened
|
|
619
|
-
expect(firstTaskMessages[0].content).toContain("[COMPRESSED_STRING");
|
|
620
|
-
|
|
621
|
-
// Extract the key that was used
|
|
622
|
-
const firstContent = firstTaskMessages[0].content as string;
|
|
623
|
-
const keyMatch = firstContent.match(/Key: (compressed_[^\s]+)/);
|
|
624
|
-
expect(keyMatch).not.toBeNull();
|
|
625
|
-
const firstTaskKey = keyMatch![1];
|
|
626
|
-
|
|
627
|
-
// Verify the key exists in first compressor's storage
|
|
628
|
-
expect(firstCompressor.retrieveString(firstTaskKey)).not.toBeNull();
|
|
629
|
-
|
|
630
|
-
// === SECOND TASK ===
|
|
631
|
-
// Simulate agent.newTask() being called, which clears agent state
|
|
632
|
-
// But in AgentModule, a NEW TokenCompressor is created (line 711)
|
|
633
|
-
// This new compressor doesn't have the old keys from first task
|
|
634
|
-
const secondCompressor = new TokenCompressor(mockToolsService);
|
|
635
|
-
const secondProcessor = secondCompressor.createProcessor((msg) =>
|
|
636
|
-
Boolean(msg.role === "tool" && msg.tool_call_id)
|
|
637
|
-
);
|
|
638
|
-
|
|
639
|
-
// Now simulate the second task receiving messages that might reference old keys
|
|
640
|
-
// The agent's message history was cleared by newTask(), so this shouldn't happen
|
|
641
|
-
// But if it does, the new compressor won't have the old keys
|
|
642
|
-
const secondTaskMessages: Message[] = [
|
|
643
|
-
{
|
|
644
|
-
role: "tool",
|
|
645
|
-
content: "y".repeat(20000),
|
|
646
|
-
tool_call_id: "call_2"
|
|
647
|
-
}
|
|
648
|
-
];
|
|
649
|
-
|
|
650
|
-
await secondProcessor([], secondTaskMessages);
|
|
651
|
-
|
|
652
|
-
// Verify compression happened for second task
|
|
653
|
-
expect(secondTaskMessages[0].content).toContain("[COMPRESSED_STRING");
|
|
654
|
-
|
|
655
|
-
// The old key from first task should NOT exist in second compressor
|
|
656
|
-
expect(secondCompressor.retrieveString(firstTaskKey)).toBeNull();
|
|
657
|
-
|
|
658
|
-
// Extract the key from second task
|
|
659
|
-
const secondContent = secondTaskMessages[0].content as string;
|
|
660
|
-
const secondKeyMatch = secondContent.match(/Key: (compressed_[^\s]+)/);
|
|
661
|
-
expect(secondKeyMatch).not.toBeNull();
|
|
662
|
-
const secondTaskKey = secondKeyMatch![1];
|
|
663
|
-
|
|
664
|
-
// The second key should exist in second compressor
|
|
665
|
-
expect(secondCompressor.retrieveString(secondTaskKey)).not.toBeNull();
|
|
666
|
-
|
|
667
|
-
// Clean up both compressors
|
|
668
|
-
firstCompressor.clearStorage();
|
|
669
|
-
secondCompressor.clearStorage();
|
|
670
|
-
|
|
671
|
-
consoleLogSpy.mockRestore();
|
|
672
|
-
});
|
|
673
|
-
});
|
|
674
|
-
});
|