@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
package/src/worker.ts
DELETED
|
@@ -1,696 +0,0 @@
|
|
|
1
|
-
import os from "os";
|
|
2
|
-
import { WebSocket } from "ws";
|
|
3
|
-
import { TunnelHandler } from "@tyvm/knowhow-tunnel";
|
|
4
|
-
import { includedTools } from "./agents/tools/list";
|
|
5
|
-
import { loadJwt } from "./login";
|
|
6
|
-
import { services } from "./services";
|
|
7
|
-
import { PasskeySetupService } from "./workers/auth/PasskeySetup";
|
|
8
|
-
import { WorkerPasskeyAuthService } from "./workers/auth/WorkerPasskeyAuth";
|
|
9
|
-
import { authenticateWithKey, hasKeyPair } from "./auth/keyAuth";
|
|
10
|
-
import {
|
|
11
|
-
makeUnlockTool,
|
|
12
|
-
makeLockTool,
|
|
13
|
-
makeReloadConfigTool,
|
|
14
|
-
} from "./workers/tools";
|
|
15
|
-
import { McpServerService } from "./services/Mcp";
|
|
16
|
-
import * as allTools from "./agents/tools";
|
|
17
|
-
import workerTools from "./workers/tools";
|
|
18
|
-
import { wait } from "./utils";
|
|
19
|
-
import { getConfig, updateConfig } from "./config";
|
|
20
|
-
import { KNOWHOW_API_URL } from "./services/KnowhowClient";
|
|
21
|
-
import { registerWorkerPath } from "./workerRegistry";
|
|
22
|
-
import {
|
|
23
|
-
extractTunnelDomain,
|
|
24
|
-
resolveTunnelConfig,
|
|
25
|
-
connectTunnelWebSocket,
|
|
26
|
-
} from "./tunnel";
|
|
27
|
-
|
|
28
|
-
const API_URL = KNOWHOW_API_URL;
|
|
29
|
-
|
|
30
|
-
/**
|
|
31
|
-
* Run the worker in a Docker sandbox
|
|
32
|
-
*/
|
|
33
|
-
async function runWorkerInSandbox(
|
|
34
|
-
options: { share?: boolean; unshare?: boolean; sandbox?: boolean },
|
|
35
|
-
config: any
|
|
36
|
-
) {
|
|
37
|
-
const { Docker } = services();
|
|
38
|
-
|
|
39
|
-
console.log("🐳 Starting knowhow worker in Docker sandbox mode...\n");
|
|
40
|
-
|
|
41
|
-
// Check if Docker is available
|
|
42
|
-
const dockerAvailable = await Docker.checkDockerAvailable();
|
|
43
|
-
|
|
44
|
-
if (!dockerAvailable) {
|
|
45
|
-
console.error("❌ Docker is not installed or not running.");
|
|
46
|
-
console.error("\nTo use --sandbox mode, you need to:");
|
|
47
|
-
console.error(" 1. Install Docker: https://docs.docker.com/get-docker/");
|
|
48
|
-
console.error(" 2. Start the Docker daemon");
|
|
49
|
-
console.error(" 3. Run this command again with --sandbox\n");
|
|
50
|
-
process.exit(1);
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
console.log("✓ Docker is available");
|
|
54
|
-
|
|
55
|
-
// Always rebuild the image to ensure it's up to date with any Dockerfile changes
|
|
56
|
-
console.log("🔄 Building Docker image (ensuring latest version)...");
|
|
57
|
-
try {
|
|
58
|
-
await Docker.buildWorkerImage();
|
|
59
|
-
} catch (error) {
|
|
60
|
-
console.error("❌ Failed to build Docker image:", error.message);
|
|
61
|
-
console.error("\nPlease check the .knowhow/Dockerfile.worker for errors");
|
|
62
|
-
console.error(" You can edit this file to customize the worker image\n");
|
|
63
|
-
process.exit(1);
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
// Get JWT token
|
|
67
|
-
const jwt = await loadJwt();
|
|
68
|
-
|
|
69
|
-
// Run the container
|
|
70
|
-
let containerId: string;
|
|
71
|
-
|
|
72
|
-
console.log("🚀 Starting Docker container...");
|
|
73
|
-
try {
|
|
74
|
-
containerId = await Docker.runWorkerContainer({
|
|
75
|
-
workspaceDir: process.cwd(),
|
|
76
|
-
jwt,
|
|
77
|
-
apiUrl: API_URL,
|
|
78
|
-
config,
|
|
79
|
-
share: options?.share,
|
|
80
|
-
unshare: options?.unshare,
|
|
81
|
-
});
|
|
82
|
-
} catch (error) {
|
|
83
|
-
console.error("❌ Failed to start Docker container:", error.message);
|
|
84
|
-
process.exit(1);
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
// Follow logs and handle cleanup
|
|
88
|
-
try {
|
|
89
|
-
await Docker.followContainerLogs(containerId);
|
|
90
|
-
} finally {
|
|
91
|
-
await Docker.stopContainer(containerId);
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
export async function worker(options?: {
|
|
96
|
-
register?: boolean;
|
|
97
|
-
share?: boolean;
|
|
98
|
-
unshare?: boolean;
|
|
99
|
-
sandbox?: boolean;
|
|
100
|
-
noSandbox?: boolean;
|
|
101
|
-
passkey?: boolean;
|
|
102
|
-
passkeyReset?: boolean;
|
|
103
|
-
allowedTools?: string[];
|
|
104
|
-
}) {
|
|
105
|
-
const config = await getConfig();
|
|
106
|
-
|
|
107
|
-
// Handle --passkey-reset: remove passkey from config
|
|
108
|
-
if (options?.passkeyReset) {
|
|
109
|
-
const passkeySetup = new PasskeySetupService();
|
|
110
|
-
await passkeySetup.reset();
|
|
111
|
-
return;
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
// Handle --passkey: run browser-based passkey registration flow
|
|
115
|
-
if (options?.passkey) {
|
|
116
|
-
let jwt: string;
|
|
117
|
-
try {
|
|
118
|
-
jwt = await loadJwt();
|
|
119
|
-
} catch {
|
|
120
|
-
console.error("❌ You must be logged in to set up a passkey.");
|
|
121
|
-
console.error(" Run 'knowhow login' first.");
|
|
122
|
-
process.exit(1);
|
|
123
|
-
}
|
|
124
|
-
const passkeySetup = new PasskeySetupService();
|
|
125
|
-
await passkeySetup.setup(jwt);
|
|
126
|
-
return;
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
// Check if we're already running inside a Docker container
|
|
130
|
-
const isInsideDocker = process.env.KNOWHOW_DOCKER === "true";
|
|
131
|
-
|
|
132
|
-
if (isInsideDocker) {
|
|
133
|
-
console.log(
|
|
134
|
-
"🐳 Already running inside Docker container, skipping sandbox mode"
|
|
135
|
-
);
|
|
136
|
-
// Force sandbox mode off when inside Docker to prevent nested containers
|
|
137
|
-
if (options) {
|
|
138
|
-
options.sandbox = false;
|
|
139
|
-
options.noSandbox = true;
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
// Determine sandbox mode with priority: command line flags > config > default (false)
|
|
144
|
-
let shouldUseSandbox = false;
|
|
145
|
-
let sandboxSource = "";
|
|
146
|
-
|
|
147
|
-
if (options?.sandbox) {
|
|
148
|
-
shouldUseSandbox = true;
|
|
149
|
-
sandboxSource = "command line (--sandbox)";
|
|
150
|
-
|
|
151
|
-
// Save sandbox preference to config
|
|
152
|
-
const updatedConfig = {
|
|
153
|
-
...config,
|
|
154
|
-
worker: {
|
|
155
|
-
...config.worker,
|
|
156
|
-
sandbox: true,
|
|
157
|
-
},
|
|
158
|
-
};
|
|
159
|
-
await updateConfig(updatedConfig);
|
|
160
|
-
console.log("💾 Sandbox mode preference saved to config");
|
|
161
|
-
} else if (options?.noSandbox) {
|
|
162
|
-
shouldUseSandbox = false;
|
|
163
|
-
sandboxSource = "command line (--no-sandbox)";
|
|
164
|
-
|
|
165
|
-
// Save no-sandbox preference to config
|
|
166
|
-
const updatedConfig = {
|
|
167
|
-
...config,
|
|
168
|
-
worker: {
|
|
169
|
-
...config.worker,
|
|
170
|
-
sandbox: false,
|
|
171
|
-
},
|
|
172
|
-
};
|
|
173
|
-
await updateConfig(updatedConfig);
|
|
174
|
-
console.log("💾 No-sandbox mode preference saved to config");
|
|
175
|
-
} else {
|
|
176
|
-
// Use config preference or default to false
|
|
177
|
-
shouldUseSandbox = config.worker?.sandbox ?? false;
|
|
178
|
-
sandboxSource =
|
|
179
|
-
config.worker?.sandbox !== undefined
|
|
180
|
-
? `config (${shouldUseSandbox ? "sandbox" : "no-sandbox"})`
|
|
181
|
-
: "default (no-sandbox)";
|
|
182
|
-
}
|
|
183
|
-
|
|
184
|
-
if (shouldUseSandbox) {
|
|
185
|
-
console.log(`🐳 Using sandbox mode (${sandboxSource})`);
|
|
186
|
-
return runWorkerInSandbox(options, config);
|
|
187
|
-
}
|
|
188
|
-
|
|
189
|
-
const { Tools, Mcp } = services();
|
|
190
|
-
// Combine agent tools and worker-specific tools
|
|
191
|
-
const combinedTools = { ...allTools, ...workerTools.tools };
|
|
192
|
-
Tools.defineTools(includedTools, combinedTools);
|
|
193
|
-
Tools.defineTools(workerTools.definitions, workerTools.tools);
|
|
194
|
-
|
|
195
|
-
await Mcp.addTools(Tools);
|
|
196
|
-
|
|
197
|
-
const mcpServer = new McpServerService(Tools);
|
|
198
|
-
const clientName = "knowhow-worker";
|
|
199
|
-
const clientVersion = "1.1.1";
|
|
200
|
-
|
|
201
|
-
// ---------------------------------------------------------------------------
|
|
202
|
-
// Passkey auth gating
|
|
203
|
-
// ---------------------------------------------------------------------------
|
|
204
|
-
let authService: WorkerPasskeyAuthService | null = null;
|
|
205
|
-
const passkeyConfig = config.worker?.auth?.passkey;
|
|
206
|
-
|
|
207
|
-
if (passkeyConfig?.publicKey && passkeyConfig?.credentialId) {
|
|
208
|
-
authService = new WorkerPasskeyAuthService(
|
|
209
|
-
{
|
|
210
|
-
publicKey: passkeyConfig.publicKey,
|
|
211
|
-
credentialId: passkeyConfig.credentialId,
|
|
212
|
-
algorithm: -7, // ES256
|
|
213
|
-
},
|
|
214
|
-
config.worker?.auth?.sessionDurationHours ?? 3
|
|
215
|
-
);
|
|
216
|
-
console.log("🔒 Passkey auth enabled — worker starts locked");
|
|
217
|
-
}
|
|
218
|
-
|
|
219
|
-
if (!shouldUseSandbox) {
|
|
220
|
-
console.log(`🖥️ Using host mode (${sandboxSource})`);
|
|
221
|
-
}
|
|
222
|
-
|
|
223
|
-
// If a tool list override was passed (e.g. from tunnel mode), skip the
|
|
224
|
-
// first-run config write and use it directly.
|
|
225
|
-
if (!options?.allowedTools && (!config.worker || !config.worker.allowedTools)) {
|
|
226
|
-
console.log(
|
|
227
|
-
"Worker tools configured! Update knowhow.json to adjust which tools are allowed by the worker."
|
|
228
|
-
);
|
|
229
|
-
console.log(
|
|
230
|
-
"Tunnel is disabled by default. Set worker.tunnel.enabled = true in knowhow.json to enable it."
|
|
231
|
-
);
|
|
232
|
-
config.worker = {
|
|
233
|
-
...config.worker,
|
|
234
|
-
allowedTools: Tools.getToolNames(),
|
|
235
|
-
tunnel: {
|
|
236
|
-
enabled: false,
|
|
237
|
-
...config.worker?.tunnel,
|
|
238
|
-
},
|
|
239
|
-
};
|
|
240
|
-
await updateConfig(config);
|
|
241
|
-
return;
|
|
242
|
-
}
|
|
243
|
-
|
|
244
|
-
// Handle registration flag
|
|
245
|
-
if (options?.register) {
|
|
246
|
-
await registerWorkerPath(process.cwd());
|
|
247
|
-
return;
|
|
248
|
-
}
|
|
249
|
-
|
|
250
|
-
const resolvedToolNames = options?.allowedTools ?? config.worker!.allowedTools;
|
|
251
|
-
let toolsToUse = Tools.getToolsByNames(resolvedToolNames);
|
|
252
|
-
|
|
253
|
-
// If passkey auth is enabled, wrap all tool functions to check locked state
|
|
254
|
-
// and register the unlock/lock auth tools
|
|
255
|
-
if (authService) {
|
|
256
|
-
const _authService = authService;
|
|
257
|
-
|
|
258
|
-
// Wrap every configured tool to gate on locked state
|
|
259
|
-
for (const tool of toolsToUse) {
|
|
260
|
-
const toolName = tool.function.name;
|
|
261
|
-
const originalFn = Tools.getFunction(toolName);
|
|
262
|
-
Tools.addFunctions({
|
|
263
|
-
[toolName]: async (...args: any[]) => {
|
|
264
|
-
if (_authService.isLocked()) {
|
|
265
|
-
return {
|
|
266
|
-
error: "WORKER_LOCKED",
|
|
267
|
-
message:
|
|
268
|
-
"Worker is locked. Call the `unlock` tool with your passkey assertion to unlock it first.",
|
|
269
|
-
};
|
|
270
|
-
}
|
|
271
|
-
return originalFn(...args);
|
|
272
|
-
},
|
|
273
|
-
});
|
|
274
|
-
}
|
|
275
|
-
|
|
276
|
-
// Build and register the auth tools
|
|
277
|
-
const { unlock, unlockDefinition } = makeUnlockTool(_authService);
|
|
278
|
-
const { lock, lockDefinition } = makeLockTool(_authService);
|
|
279
|
-
|
|
280
|
-
Tools.addFunctions({ unlock, lock });
|
|
281
|
-
toolsToUse = [unlockDefinition, lockDefinition, ...toolsToUse];
|
|
282
|
-
|
|
283
|
-
console.log("🔑 Auth tools registered: unlock, lock");
|
|
284
|
-
}
|
|
285
|
-
|
|
286
|
-
// Register the reloadConfig tool so agents can hot-reload MCPs/config
|
|
287
|
-
// without restarting the worker process.
|
|
288
|
-
// Uses a closure over `toolsToUse` so the tool can update it in-place.
|
|
289
|
-
const { reloadConfig, reloadConfigDefinition } = makeReloadConfigTool(
|
|
290
|
-
Mcp,
|
|
291
|
-
Tools,
|
|
292
|
-
mcpServer,
|
|
293
|
-
(newTools) => {
|
|
294
|
-
toolsToUse = newTools;
|
|
295
|
-
}
|
|
296
|
-
);
|
|
297
|
-
Tools.addFunctions({ reloadConfig });
|
|
298
|
-
toolsToUse = [...toolsToUse, reloadConfigDefinition];
|
|
299
|
-
|
|
300
|
-
console.log("🔄 reloadConfig tool registered");
|
|
301
|
-
|
|
302
|
-
mcpServer.createServer(clientName, clientVersion).withTools(toolsToUse);
|
|
303
|
-
|
|
304
|
-
let connected = false;
|
|
305
|
-
let tunnelHandler: TunnelHandler | null = null;
|
|
306
|
-
let tunnelWs: WebSocket | null = null;
|
|
307
|
-
let unauthorizedJwt: string | null = null;
|
|
308
|
-
let refreshAttemptedJwt: string | null = null;
|
|
309
|
-
|
|
310
|
-
// ---------------------------------------------------------------------------
|
|
311
|
-
// Liveness watchdog state
|
|
312
|
-
// ---------------------------------------------------------------------------
|
|
313
|
-
// After a full snapshot (mem + disk) the VM is paused and later resumed,
|
|
314
|
-
// potentially on a different host. The guest kernel resumes believing its
|
|
315
|
-
// TCP socket to the backend is still ESTABLISHED, but the server tore that
|
|
316
|
-
// connection down long ago. This produces a "zombie" half-open socket:
|
|
317
|
-
// - ws.on("close") never fires (guest never saw a FIN/RST)
|
|
318
|
-
// - ws.ping() does NOT throw (kernel still thinks the socket is open)
|
|
319
|
-
// so `connected` would stay true forever and we'd never reconnect.
|
|
320
|
-
//
|
|
321
|
-
// The fix is an active heartbeat with a pong DEADLINE: we send a ping every
|
|
322
|
-
// loop tick and require a pong before the next tick. If the pong never
|
|
323
|
-
// arrives, we treat the socket as dead, terminate() it (frees the zombie
|
|
324
|
-
// immediately and fires "close"), and let the reconnect loop take over.
|
|
325
|
-
const PONG_TIMEOUT_MS = 15000;
|
|
326
|
-
let awaitingPong = false;
|
|
327
|
-
let lastPongAt = Date.now();
|
|
328
|
-
let tunnelAwaitingPong = false;
|
|
329
|
-
let tunnelLastPongAt = Date.now();
|
|
330
|
-
// Check if tunnel is enabled.
|
|
331
|
-
// When allowedTools is passed as an override (e.g. from `knowhow tunnel`),
|
|
332
|
-
// the tunnel is always forced on — that's the whole point of tunnel mode.
|
|
333
|
-
const tunnelEnabled = options?.allowedTools
|
|
334
|
-
? true
|
|
335
|
-
: (config.worker?.tunnel?.enabled ?? false);
|
|
336
|
-
|
|
337
|
-
const { tunnelLocalHost, portMapping } = resolveTunnelConfig(config, isInsideDocker);
|
|
338
|
-
|
|
339
|
-
if (tunnelEnabled) {
|
|
340
|
-
const tunnelPorts = config.worker?.tunnel?.allowedPorts || [];
|
|
341
|
-
if (tunnelPorts.length === 0) {
|
|
342
|
-
console.warn(
|
|
343
|
-
"⚠️ Tunnel enabled but no allowedPorts configured. Add tunnel.allowedPorts to knowhow.json"
|
|
344
|
-
);
|
|
345
|
-
} else {
|
|
346
|
-
console.log(`🌐 Tunnel enabled for ports: ${tunnelPorts.join(", ")}`);
|
|
347
|
-
}
|
|
348
|
-
} else {
|
|
349
|
-
console.log(
|
|
350
|
-
"🚫 Tunnel disabled (enable in knowhow.json: worker.tunnel.enabled = true)"
|
|
351
|
-
);
|
|
352
|
-
}
|
|
353
|
-
|
|
354
|
-
async function connectWebSocket() {
|
|
355
|
-
const jwt = await loadJwt();
|
|
356
|
-
console.log(`Connecting to ${API_URL}`);
|
|
357
|
-
|
|
358
|
-
// Reset the MCP server to avoid "Already connected to a transport" error on reconnects
|
|
359
|
-
await mcpServer.reset();
|
|
360
|
-
// Re-register tools after reset (registeredTools set was cleared)
|
|
361
|
-
mcpServer.withTools(toolsToUse);
|
|
362
|
-
|
|
363
|
-
const dir = process.cwd();
|
|
364
|
-
const homedir = os.homedir();
|
|
365
|
-
|
|
366
|
-
// Use environment variables if available (set by Docker), otherwise compute defaults
|
|
367
|
-
const hostname = process.env.WORKER_HOSTNAME || os.hostname();
|
|
368
|
-
const root =
|
|
369
|
-
process.env.WORKER_ROOT ||
|
|
370
|
-
(dir === homedir ? "~" : dir.replace(homedir, "~"));
|
|
371
|
-
|
|
372
|
-
const headers: Record<string, string> = {
|
|
373
|
-
Authorization: `Bearer ${jwt}`,
|
|
374
|
-
"User-Agent": `${clientName}/${clientVersion}/${hostname}`,
|
|
375
|
-
Root: root,
|
|
376
|
-
};
|
|
377
|
-
|
|
378
|
-
// Add shared header based on flags
|
|
379
|
-
if (options?.share) {
|
|
380
|
-
headers.Shared = "true";
|
|
381
|
-
console.log("🔓 Worker shared with organization");
|
|
382
|
-
} else if (options?.unshare) {
|
|
383
|
-
headers.Shared = "false";
|
|
384
|
-
console.log("🔒 Worker is now private (unshared)");
|
|
385
|
-
} else {
|
|
386
|
-
console.log("🔒 Worker is private (only you can use it)");
|
|
387
|
-
}
|
|
388
|
-
|
|
389
|
-
const { domain: tunnelDomain, useHttps: tunnelUseHttps } =
|
|
390
|
-
extractTunnelDomain(API_URL);
|
|
391
|
-
|
|
392
|
-
const ws = new WebSocket(`${API_URL}/ws/worker`, {
|
|
393
|
-
headers,
|
|
394
|
-
});
|
|
395
|
-
|
|
396
|
-
// Listen for workerRegistered message from the backend before MCP transport takes over.
|
|
397
|
-
// The MCP transport will swallow non-JSONRPC messages silently, but we attach a raw
|
|
398
|
-
// listener here first to capture the workerId sent back by the backend after upsert.
|
|
399
|
-
const workerRegisteredHandler = async (data: any) => {
|
|
400
|
-
try {
|
|
401
|
-
const parsed = JSON.parse(
|
|
402
|
-
typeof data === "string" ? data : data.toString()
|
|
403
|
-
);
|
|
404
|
-
if (parsed?.type === "workerRegistered" && parsed?.workerId) {
|
|
405
|
-
const currentConfig = await getConfig();
|
|
406
|
-
const currentWorkerId = currentConfig.worker?.workerId;
|
|
407
|
-
if (currentWorkerId !== parsed.workerId) {
|
|
408
|
-
await updateConfig({
|
|
409
|
-
...currentConfig,
|
|
410
|
-
worker: {
|
|
411
|
-
...currentConfig.worker,
|
|
412
|
-
workerId: parsed.workerId,
|
|
413
|
-
},
|
|
414
|
-
});
|
|
415
|
-
console.log(`✅ Worker ID recorded: ${parsed.workerId}`);
|
|
416
|
-
}
|
|
417
|
-
}
|
|
418
|
-
|
|
419
|
-
// Hot-reload: re-read config, reconnect MCPs, and rebuild the tool list
|
|
420
|
-
// without restarting the worker process.
|
|
421
|
-
if (parsed?.type === "reloadConfig") {
|
|
422
|
-
console.log(
|
|
423
|
-
"🔄 Received reloadConfig — reloading MCPs, modules and tools..."
|
|
424
|
-
);
|
|
425
|
-
try {
|
|
426
|
-
// Re-read fresh config from disk
|
|
427
|
-
const freshConfig = await getConfig();
|
|
428
|
-
|
|
429
|
-
// Close all existing MCP connections
|
|
430
|
-
await Mcp.closeAll();
|
|
431
|
-
|
|
432
|
-
// Reconnect from fresh config and re-register tools
|
|
433
|
-
await Mcp.connectToConfigured(Tools);
|
|
434
|
-
|
|
435
|
-
// Rebuild the allowed tools list from fresh config
|
|
436
|
-
const allowedToolNames =
|
|
437
|
-
freshConfig.worker?.allowedTools ?? Tools.getToolNames();
|
|
438
|
-
toolsToUse = Tools.getToolsByNames(allowedToolNames);
|
|
439
|
-
|
|
440
|
-
// Update the MCP server with new tool list
|
|
441
|
-
mcpServer.withTools(toolsToUse);
|
|
442
|
-
|
|
443
|
-
console.log(
|
|
444
|
-
`✅ Config reloaded: ${toolsToUse.length} tools active`
|
|
445
|
-
);
|
|
446
|
-
} catch (err) {
|
|
447
|
-
console.error("❌ Failed to reload config:", err);
|
|
448
|
-
}
|
|
449
|
-
}
|
|
450
|
-
} catch {
|
|
451
|
-
// Not our message — ignore parse errors
|
|
452
|
-
}
|
|
453
|
-
};
|
|
454
|
-
ws.on("message", workerRegisteredHandler);
|
|
455
|
-
|
|
456
|
-
// Create separate WebSocket connection for tunnel if enabled
|
|
457
|
-
let tunnelConnection: WebSocket | null = null;
|
|
458
|
-
if (tunnelEnabled) {
|
|
459
|
-
tunnelConnection = connectTunnelWebSocket({
|
|
460
|
-
tunnelDomain,
|
|
461
|
-
tunnelUseHttps,
|
|
462
|
-
tunnelLocalHost,
|
|
463
|
-
portMapping,
|
|
464
|
-
config,
|
|
465
|
-
headers,
|
|
466
|
-
authService,
|
|
467
|
-
onOpen: (handler) => {
|
|
468
|
-
tunnelHandler = handler;
|
|
469
|
-
// Reset tunnel heartbeat state for the fresh connection
|
|
470
|
-
tunnelAwaitingPong = false;
|
|
471
|
-
tunnelLastPongAt = Date.now();
|
|
472
|
-
},
|
|
473
|
-
onPong: () => {
|
|
474
|
-
tunnelAwaitingPong = false;
|
|
475
|
-
tunnelLastPongAt = Date.now();
|
|
476
|
-
},
|
|
477
|
-
onClose: (code, _reason) => {
|
|
478
|
-
if (code === 1008) {
|
|
479
|
-
unauthorizedJwt = jwt;
|
|
480
|
-
// The worker and tunnel sockets share a JWT and must be renewed as
|
|
481
|
-
// one connection cycle. Ensure a later worker "open" event cannot
|
|
482
|
-
// leave us connected with a permanently closed tunnel.
|
|
483
|
-
if (ws.readyState !== WebSocket.CLOSED) {
|
|
484
|
-
ws.terminate();
|
|
485
|
-
}
|
|
486
|
-
console.error(
|
|
487
|
-
"❌ Tunnel received Unauthorized (1008). The JWT may be expired."
|
|
488
|
-
);
|
|
489
|
-
console.error(" Attempting to refresh the JWT with the CLI identity...");
|
|
490
|
-
} else {
|
|
491
|
-
console.log(
|
|
492
|
-
"Tunnel connection will reconnect on next connection cycle..."
|
|
493
|
-
);
|
|
494
|
-
}
|
|
495
|
-
if (tunnelHandler) {
|
|
496
|
-
tunnelHandler.cleanup();
|
|
497
|
-
tunnelHandler = null;
|
|
498
|
-
}
|
|
499
|
-
tunnelWs = null;
|
|
500
|
-
// The tunnel websocket is separate but we should reconnect both
|
|
501
|
-
connected = false;
|
|
502
|
-
},
|
|
503
|
-
onError: (_error) => {
|
|
504
|
-
connected = false;
|
|
505
|
-
},
|
|
506
|
-
});
|
|
507
|
-
|
|
508
|
-
tunnelWs = tunnelConnection;
|
|
509
|
-
}
|
|
510
|
-
|
|
511
|
-
ws.on("open", () => {
|
|
512
|
-
console.log("Worker WebSocket connected");
|
|
513
|
-
connected = true;
|
|
514
|
-
// Reset heartbeat state for the fresh connection
|
|
515
|
-
awaitingPong = false;
|
|
516
|
-
lastPongAt = Date.now();
|
|
517
|
-
});
|
|
518
|
-
|
|
519
|
-
// Pong watchdog: the server responds to our ws.ping() with a pong frame.
|
|
520
|
-
// Receiving it proves the socket is genuinely alive (not a snapshot zombie).
|
|
521
|
-
ws.on("pong", () => {
|
|
522
|
-
awaitingPong = false;
|
|
523
|
-
lastPongAt = Date.now();
|
|
524
|
-
});
|
|
525
|
-
|
|
526
|
-
ws.on("close", async (code, reason) => {
|
|
527
|
-
console.log(
|
|
528
|
-
`WebSocket closed. Code: ${code}, Reason: ${reason.toString()}`
|
|
529
|
-
);
|
|
530
|
-
|
|
531
|
-
// Cleanup tunnel handler
|
|
532
|
-
if (tunnelHandler) {
|
|
533
|
-
tunnelHandler = null;
|
|
534
|
-
}
|
|
535
|
-
|
|
536
|
-
connected = false;
|
|
537
|
-
|
|
538
|
-
// If we got an Unauthorized (1008) close, record the JWT that failed
|
|
539
|
-
// so we don't keep hammering the server with the same expired token
|
|
540
|
-
if (code === 1008) {
|
|
541
|
-
unauthorizedJwt = jwt;
|
|
542
|
-
if (tunnelConnection?.readyState !== WebSocket.CLOSED) {
|
|
543
|
-
tunnelConnection?.terminate();
|
|
544
|
-
}
|
|
545
|
-
console.error(
|
|
546
|
-
"❌ Worker received Unauthorized (1008). The JWT may be expired."
|
|
547
|
-
);
|
|
548
|
-
console.error(
|
|
549
|
-
" Attempting to refresh the JWT with the CLI identity..."
|
|
550
|
-
);
|
|
551
|
-
} else {
|
|
552
|
-
console.log("Attempting to reconnect...");
|
|
553
|
-
}
|
|
554
|
-
});
|
|
555
|
-
|
|
556
|
-
ws.on("error", (error) => {
|
|
557
|
-
console.error("WebSocket error:", error);
|
|
558
|
-
});
|
|
559
|
-
|
|
560
|
-
mcpServer.runWsServer(ws);
|
|
561
|
-
|
|
562
|
-
return { ws, mcpServer, tunnelWs };
|
|
563
|
-
}
|
|
564
|
-
|
|
565
|
-
// Keep the active connection reference OUTSIDE the loop so it persists across
|
|
566
|
-
// heartbeat ticks. (Previously this was declared inside the loop and reset to
|
|
567
|
-
// null every iteration, so the heartbeat only ever ran on the tick right after
|
|
568
|
-
// a (re)connect — meaning a live connection was never actively pinged.)
|
|
569
|
-
let connection: {
|
|
570
|
-
ws: WebSocket;
|
|
571
|
-
mcpServer: McpServerService;
|
|
572
|
-
tunnelWs: WebSocket | null;
|
|
573
|
-
} | null = null;
|
|
574
|
-
|
|
575
|
-
while (true) {
|
|
576
|
-
if (!connected) {
|
|
577
|
-
// A registered CLI identity can renew an expired JWT without requiring an
|
|
578
|
-
// interactive login. Attempt this once per rejected token; if it fails,
|
|
579
|
-
// continue watching the JWT file so `knowhow login` in another shell works.
|
|
580
|
-
if (unauthorizedJwt !== null) {
|
|
581
|
-
let currentJwt = await loadJwt().catch(() => null);
|
|
582
|
-
if (currentJwt === unauthorizedJwt) {
|
|
583
|
-
let attemptedRefreshNow = false;
|
|
584
|
-
if (refreshAttemptedJwt !== currentJwt) {
|
|
585
|
-
refreshAttemptedJwt = currentJwt;
|
|
586
|
-
attemptedRefreshNow = true;
|
|
587
|
-
const freshConfig = await getConfig();
|
|
588
|
-
const identityPath = freshConfig.cliIdentityPath;
|
|
589
|
-
if (freshConfig.orgId && hasKeyPair(identityPath)) {
|
|
590
|
-
try {
|
|
591
|
-
const refreshed = await authenticateWithKey(
|
|
592
|
-
freshConfig.orgId,
|
|
593
|
-
API_URL,
|
|
594
|
-
identityPath
|
|
595
|
-
);
|
|
596
|
-
if (refreshed) {
|
|
597
|
-
currentJwt = await loadJwt();
|
|
598
|
-
console.log("✅ JWT refreshed automatically; reconnecting...");
|
|
599
|
-
} else {
|
|
600
|
-
console.error(
|
|
601
|
-
"❌ CLI identity was rejected and could not refresh the JWT."
|
|
602
|
-
);
|
|
603
|
-
}
|
|
604
|
-
} catch (error) {
|
|
605
|
-
const message =
|
|
606
|
-
error instanceof Error ? error.message : String(error);
|
|
607
|
-
console.error(`❌ Automatic JWT refresh failed: ${message}`);
|
|
608
|
-
}
|
|
609
|
-
} else {
|
|
610
|
-
console.error(
|
|
611
|
-
"❌ No registered CLI identity is available for automatic JWT refresh."
|
|
612
|
-
);
|
|
613
|
-
}
|
|
614
|
-
}
|
|
615
|
-
|
|
616
|
-
if (currentJwt === unauthorizedJwt) {
|
|
617
|
-
if (attemptedRefreshNow) {
|
|
618
|
-
console.error(
|
|
619
|
-
" Run 'knowhow login' in another shell; reconnection will resume when the JWT changes."
|
|
620
|
-
);
|
|
621
|
-
}
|
|
622
|
-
await wait(5000);
|
|
623
|
-
continue;
|
|
624
|
-
}
|
|
625
|
-
}
|
|
626
|
-
// JWT changed - clear the unauthorized state and reconnect
|
|
627
|
-
console.log("🔄 JWT has changed, attempting to reconnect...");
|
|
628
|
-
unauthorizedJwt = null;
|
|
629
|
-
refreshAttemptedJwt = null;
|
|
630
|
-
}
|
|
631
|
-
|
|
632
|
-
console.log("Attempting to connect...");
|
|
633
|
-
connection = await connectWebSocket();
|
|
634
|
-
}
|
|
635
|
-
|
|
636
|
-
if (connection && connected) {
|
|
637
|
-
// -----------------------------------------------------------------------
|
|
638
|
-
// Worker socket liveness: active ping + pong DEADLINE.
|
|
639
|
-
//
|
|
640
|
-
// On the previous tick we sent a ping and set awaitingPong=true. If the
|
|
641
|
-
// "pong" handler fired, it cleared awaitingPong. If it's still set here
|
|
642
|
-
// AND the deadline has elapsed, the socket is a zombie (e.g. after a full
|
|
643
|
-
// snapshot resume where the guest's TCP connection is dead but the kernel
|
|
644
|
-
// still thinks it's open, so ws.ping() won't throw and "close" won't fire).
|
|
645
|
-
// Terminate it to free the socket immediately and drive a reconnect.
|
|
646
|
-
// -----------------------------------------------------------------------
|
|
647
|
-
if (awaitingPong && Date.now() - lastPongAt > PONG_TIMEOUT_MS) {
|
|
648
|
-
console.error(
|
|
649
|
-
`WebSocket pong timeout (${PONG_TIMEOUT_MS}ms) — connection is dead (likely a snapshot-resume zombie). Forcing reconnect...`
|
|
650
|
-
);
|
|
651
|
-
try {
|
|
652
|
-
connection.ws.terminate();
|
|
653
|
-
} catch {
|
|
654
|
-
// ignore
|
|
655
|
-
}
|
|
656
|
-
connected = false;
|
|
657
|
-
} else {
|
|
658
|
-
try {
|
|
659
|
-
awaitingPong = true;
|
|
660
|
-
connection.ws.ping();
|
|
661
|
-
} catch (error) {
|
|
662
|
-
console.error("WebSocket ping failed:", error);
|
|
663
|
-
connected = false;
|
|
664
|
-
}
|
|
665
|
-
}
|
|
666
|
-
|
|
667
|
-
// -----------------------------------------------------------------------
|
|
668
|
-
// Tunnel socket liveness: same pong-deadline watchdog on the separate
|
|
669
|
-
// tunnel WebSocket, which has the identical zombie problem after resume.
|
|
670
|
-
// -----------------------------------------------------------------------
|
|
671
|
-
if (connected && tunnelWs && tunnelWs.readyState === WebSocket.OPEN) {
|
|
672
|
-
if (tunnelAwaitingPong && Date.now() - tunnelLastPongAt > PONG_TIMEOUT_MS) {
|
|
673
|
-
console.error(
|
|
674
|
-
`Tunnel WebSocket pong timeout (${PONG_TIMEOUT_MS}ms) — tunnel connection is dead. Forcing reconnect...`
|
|
675
|
-
);
|
|
676
|
-
try {
|
|
677
|
-
tunnelWs.terminate();
|
|
678
|
-
} catch {
|
|
679
|
-
// ignore
|
|
680
|
-
}
|
|
681
|
-
// Dropping the tunnel forces the whole connection cycle to re-establish.
|
|
682
|
-
connected = false;
|
|
683
|
-
} else {
|
|
684
|
-
try {
|
|
685
|
-
tunnelAwaitingPong = true;
|
|
686
|
-
tunnelWs.ping();
|
|
687
|
-
} catch (error) {
|
|
688
|
-
console.error("Tunnel WebSocket ping failed:", error);
|
|
689
|
-
connected = false;
|
|
690
|
-
}
|
|
691
|
-
}
|
|
692
|
-
}
|
|
693
|
-
}
|
|
694
|
-
await wait(5000);
|
|
695
|
-
}
|
|
696
|
-
}
|