@tyvm/knowhow 0.0.159 โ 0.0.161
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -6
- package/package.json +2 -2
- package/ts_build/package.json +2 -2
- package/ts_build/src/chat/CliChatService.d.ts +2 -1
- package/ts_build/src/chat/CliChatService.js +29 -3
- package/ts_build/src/chat/CliChatService.js.map +1 -1
- package/ts_build/src/chat/modules/AgentModule.js +21 -17
- package/ts_build/src/chat/modules/AgentModule.js.map +1 -1
- package/ts_build/src/chat/renderer/ConsoleRenderer.js +32 -25
- package/ts_build/src/chat/renderer/ConsoleRenderer.js.map +1 -1
- package/ts_build/src/clients/anthropic.js +4 -1
- package/ts_build/src/clients/anthropic.js.map +1 -1
- package/ts_build/src/clients/contextLimits.js +13 -7
- package/ts_build/src/clients/contextLimits.js.map +1 -1
- package/ts_build/src/clients/index.js +3 -1
- package/ts_build/src/clients/index.js.map +1 -1
- package/ts_build/src/clients/openai.js +18 -5
- package/ts_build/src/clients/openai.js.map +1 -1
- package/ts_build/src/clients/pricing/anthropic.d.ts +2 -0
- package/ts_build/src/clients/pricing/anthropic.js +21 -1
- package/ts_build/src/clients/pricing/anthropic.js.map +1 -1
- package/ts_build/src/clients/pricing/openai.d.ts +2 -0
- package/ts_build/src/clients/pricing/openai.js +32 -7
- package/ts_build/src/clients/pricing/openai.js.map +1 -1
- package/ts_build/src/clients/pricing/types.d.ts +4 -0
- package/ts_build/src/clients/pricing/types.js.map +1 -1
- package/ts_build/src/clients/pricing/xai.d.ts +2 -0
- package/ts_build/src/clients/pricing/xai.js +13 -8
- package/ts_build/src/clients/pricing/xai.js.map +1 -1
- package/ts_build/src/clients/xai.js +20 -8
- package/ts_build/src/clients/xai.js.map +1 -1
- package/ts_build/src/commands/misc.js +15 -2
- package/ts_build/src/commands/misc.js.map +1 -1
- package/ts_build/src/logger.d.ts +1 -0
- package/ts_build/src/logger.js +13 -1
- package/ts_build/src/logger.js.map +1 -1
- package/ts_build/src/remotes.d.ts +2 -0
- package/ts_build/src/remotes.js +20 -2
- package/ts_build/src/remotes.js.map +1 -1
- package/ts_build/src/tunnel.js +7 -2
- package/ts_build/src/tunnel.js.map +1 -1
- package/ts_build/src/types.d.ts +12 -1
- package/ts_build/src/types.js.map +1 -1
- package/ts_build/src/utils/InputQueueManager.d.ts +8 -1
- package/ts_build/src/utils/InputQueueManager.js +74 -3
- package/ts_build/src/utils/InputQueueManager.js.map +1 -1
- package/ts_build/src/utils/index.d.ts +3 -1
- package/ts_build/src/utils/index.js +11 -3
- package/ts_build/src/utils/index.js.map +1 -1
- package/ts_build/src/worker.js +4 -1
- package/ts_build/src/worker.js.map +1 -1
- package/ts_build/src/workers/tools/listAllowedPorts.d.ts +2 -1
- package/ts_build/src/workers/tools/listAllowedPorts.js +1 -1
- package/ts_build/src/workers/tools/listAllowedPorts.js.map +1 -1
- package/CONFIG.md +0 -429
- package/PROCESSING.md +0 -450
- package/WORKER.md +0 -260
- package/autodoc/README.md +0 -324
- package/autodoc/chat-guide.md +0 -444
- package/autodoc/cli-reference.md +0 -720
- package/autodoc/config-reference.md +0 -642
- package/autodoc/embeddings-guide.md +0 -467
- package/autodoc/generate-guide.md +0 -437
- package/autodoc/language-plugin-guide.md +0 -417
- package/autodoc/modules-guide.md +0 -379
- package/autodoc/plugins-guide.md +0 -721
- package/autodoc/quickstart-guide.md +0 -126
- package/autodoc/skills-guide.md +0 -584
- package/autodoc/worker-guide.md +0 -519
- package/docs/input-queue-manager.md +0 -142
- package/docs/multi-worker-management.md +0 -142
- package/docs/shell-commands.md +0 -174
- package/jest.config.js +0 -19
- package/jest.manual.config.js +0 -19
- package/scripts/README.md +0 -119
- package/scripts/build-for-node.sh +0 -148
- package/scripts/cache-miss-debug.ts +0 -365
- package/scripts/check-isolated-deps.sh +0 -69
- package/scripts/check-model-pricing.ts +0 -509
- package/scripts/compare-openrouter-coverage.ts +0 -576
- package/scripts/migrate-usage-json.js +0 -147
- package/scripts/publish.sh +0 -86
- package/scripts/restore_keys.sh +0 -59
- package/scripts/test-repetition-hint.ts +0 -302
- package/scripts/unset_keys.sh +0 -60
- package/src/agents/base/base.ts +0 -1963
- package/src/agents/base/prompt.ts +0 -55
- package/src/agents/configurable/ConfigAgent.ts +0 -24
- package/src/agents/developer/developer.ts +0 -76
- package/src/agents/historyRollback.ts +0 -36
- package/src/agents/index.ts +0 -52
- package/src/agents/interface.ts +0 -11
- package/src/agents/patcher/codebase.md +0 -27
- package/src/agents/patcher/patcher.ts +0 -131
- package/src/agents/researcher/researcher.ts +0 -115
- package/src/agents/setup/setup.ts +0 -63
- package/src/agents/tools/addInternalTools.ts +0 -21
- package/src/agents/tools/agentCall.ts +0 -34
- package/src/agents/tools/aiClient.ts +0 -178
- package/src/agents/tools/askHuman.ts +0 -10
- package/src/agents/tools/callPlugin.ts +0 -10
- package/src/agents/tools/connectAgent.ts +0 -355
- package/src/agents/tools/embeddingSearch.ts +0 -6
- package/src/agents/tools/execCommand.ts +0 -162
- package/src/agents/tools/fileSearch.ts +0 -35
- package/src/agents/tools/finalAnswer.ts +0 -4
- package/src/agents/tools/googleSearch.ts +0 -243
- package/src/agents/tools/index.ts +0 -33
- package/src/agents/tools/language/definitions.ts +0 -105
- package/src/agents/tools/language/index.ts +0 -20
- package/src/agents/tools/lazy/definitions.ts +0 -72
- package/src/agents/tools/lazy/disableTools.ts +0 -16
- package/src/agents/tools/lazy/enableTools.ts +0 -16
- package/src/agents/tools/lazy/index.ts +0 -3
- package/src/agents/tools/lazy/listAvailableTools.ts +0 -17
- package/src/agents/tools/lintFile.ts +0 -19
- package/src/agents/tools/list.ts +0 -739
- package/src/agents/tools/loadImageAsBase64.ts +0 -83
- package/src/agents/tools/loadWebpage.ts +0 -19
- package/src/agents/tools/mcp/connectMcpServer.ts +0 -40
- package/src/agents/tools/mcp/definitions.ts +0 -67
- package/src/agents/tools/mcp/disconnectMcpServer.ts +0 -40
- package/src/agents/tools/mcp/index.ts +0 -3
- package/src/agents/tools/mcp/listAvailableMcpServers.ts +0 -28
- package/src/agents/tools/minimal/callTool.ts +0 -45
- package/src/agents/tools/minimal/definitions.ts +0 -50
- package/src/agents/tools/minimal/index.ts +0 -3
- package/src/agents/tools/minimal/inspectTools.ts +0 -27
- package/src/agents/tools/modifyFile.ts +0 -53
- package/src/agents/tools/observe.ts +0 -247
- package/src/agents/tools/patch.ts +0 -1287
- package/src/agents/tools/readBlocks.ts +0 -83
- package/src/agents/tools/readFile.ts +0 -105
- package/src/agents/tools/replyToParent.ts +0 -123
- package/src/agents/tools/runGenerate.ts +0 -210
- package/src/agents/tools/scanFile.ts +0 -16
- package/src/agents/tools/sendAgentMessage.ts +0 -139
- package/src/agents/tools/skills.ts +0 -79
- package/src/agents/tools/startAgentTask.ts +0 -393
- package/src/agents/tools/stringReplace.ts +0 -105
- package/src/agents/tools/textSearch.ts +0 -128
- package/src/agents/tools/types/fileblock.ts +0 -5
- package/src/agents/tools/visionTool.ts +0 -35
- package/src/agents/tools/waitForAgentCompleted.ts +0 -270
- package/src/agents/tools/writeFile.ts +0 -106
- package/src/agents/tools/ycmd/client.ts +0 -608
- package/src/agents/tools/ycmd/definitions.ts +0 -294
- package/src/agents/tools/ycmd/detection.ts +0 -211
- package/src/agents/tools/ycmd/index.ts +0 -11
- package/src/agents/tools/ycmd/installer.ts +0 -251
- package/src/agents/tools/ycmd/server.ts +0 -545
- package/src/agents/tools/ycmd/serverManager.ts +0 -316
- package/src/agents/tools/ycmd/tools/completion.ts +0 -113
- package/src/agents/tools/ycmd/tools/diagnostics.ts +0 -166
- package/src/agents/tools/ycmd/tools/getLocations.ts +0 -173
- package/src/agents/tools/ycmd/tools/goto.ts +0 -169
- package/src/agents/tools/ycmd/tools/refactor.ts +0 -204
- package/src/agents/tools/ycmd/tools/signature.ts +0 -174
- package/src/agents/tools/ycmd/tools/start.ts +0 -95
- package/src/agents/tools/ycmd/utils/pathUtils.ts +0 -59
- package/src/ai.ts +0 -306
- package/src/auth/browserLogin.ts +0 -406
- package/src/auth/environmentAuth.ts +0 -51
- package/src/auth/errors.ts +0 -6
- package/src/auth/jwtStore.ts +0 -70
- package/src/auth/keyAuth.ts +0 -142
- package/src/auth/keyManager.ts +0 -331
- package/src/auth/registerIdentity.ts +0 -67
- package/src/auth/spinner.ts +0 -23
- package/src/chat/CliChatService.ts +0 -438
- package/src/chat/modules/AgentModule.ts +0 -1664
- package/src/chat/modules/AskModule.ts +0 -98
- package/src/chat/modules/BaseChatModule.ts +0 -65
- package/src/chat/modules/ClipboardImageModule.ts +0 -136
- package/src/chat/modules/CustomCommandsModule.ts +0 -80
- package/src/chat/modules/InternalChatModule.ts +0 -216
- package/src/chat/modules/RemoteSyncModule.ts +0 -482
- package/src/chat/modules/RendererModule.ts +0 -139
- package/src/chat/modules/SearchModule.ts +0 -168
- package/src/chat/modules/SessionsModule.ts +0 -969
- package/src/chat/modules/SetupModule.ts +0 -185
- package/src/chat/modules/ShellCommandModule.ts +0 -98
- package/src/chat/modules/SystemModule.ts +0 -161
- package/src/chat/modules/ToolCommandModule.ts +0 -102
- package/src/chat/modules/VoiceModule.ts +0 -70
- package/src/chat/modules/index.ts +0 -8
- package/src/chat/renderer/CompactRenderer.ts +0 -229
- package/src/chat/renderer/ConsoleRenderer.ts +0 -160
- package/src/chat/renderer/FancyRenderer.ts +0 -440
- package/src/chat/renderer/PlainRenderer.ts +0 -218
- package/src/chat/renderer/index.ts +0 -6
- package/src/chat/renderer/loadRenderer.ts +0 -316
- package/src/chat/renderer/messagesToRenderEvents.ts +0 -96
- package/src/chat/renderer/types.ts +0 -99
- package/src/chat/types.ts +0 -146
- package/src/chat.ts +0 -140
- package/src/cli.ts +0 -180
- package/src/clients/anthropic.ts +0 -772
- package/src/clients/attribution.ts +0 -53
- package/src/clients/cerebras.ts +0 -10
- package/src/clients/contextLimits.ts +0 -263
- package/src/clients/copilot.ts +0 -23
- package/src/clients/deepseek.ts +0 -16
- package/src/clients/fireworks.ts +0 -71
- package/src/clients/gemini.ts +0 -1169
- package/src/clients/github.ts +0 -16
- package/src/clients/groq.ts +0 -15
- package/src/clients/http.ts +0 -719
- package/src/clients/index.ts +0 -1153
- package/src/clients/knowhow.ts +0 -130
- package/src/clients/knowhowMcp.ts +0 -118
- package/src/clients/llama.ts +0 -16
- package/src/clients/meta.ts +0 -27
- package/src/clients/mistral.ts +0 -16
- package/src/clients/nvidia.ts +0 -16
- package/src/clients/openai.ts +0 -1186
- package/src/clients/openrouter.ts +0 -24
- package/src/clients/pricing/anthropic.ts +0 -149
- package/src/clients/pricing/cerebras.ts +0 -11
- package/src/clients/pricing/copilot.ts +0 -60
- package/src/clients/pricing/deepseek.ts +0 -15
- package/src/clients/pricing/fireworks.ts +0 -182
- package/src/clients/pricing/github.ts +0 -69
- package/src/clients/pricing/google.ts +0 -385
- package/src/clients/pricing/groq.ts +0 -56
- package/src/clients/pricing/index.ts +0 -44
- package/src/clients/pricing/llama.ts +0 -18
- package/src/clients/pricing/meta.ts +0 -12
- package/src/clients/pricing/mistral.ts +0 -34
- package/src/clients/pricing/models.ts +0 -25
- package/src/clients/pricing/nvidia.ts +0 -102
- package/src/clients/pricing/openai.ts +0 -409
- package/src/clients/pricing/openrouter.ts +0 -36
- package/src/clients/pricing/qwen.ts +0 -80
- package/src/clients/pricing/types.ts +0 -125
- package/src/clients/pricing/xai.ts +0 -137
- package/src/clients/qwen.ts +0 -16
- package/src/clients/responseMetadata.ts +0 -221
- package/src/clients/types.ts +0 -531
- package/src/clients/withRetry.ts +0 -89
- package/src/clients/xai.ts +0 -693
- package/src/cloudWorker.ts +0 -394
- package/src/commands/agent.ts +0 -342
- package/src/commands/agents.ts +0 -1037
- package/src/commands/behaviors.ts +0 -47
- package/src/commands/convert.ts +0 -291
- package/src/commands/hash.ts +0 -179
- package/src/commands/mcp.ts +0 -743
- package/src/commands/misc.ts +0 -373
- package/src/commands/modules.ts +0 -704
- package/src/commands/processes.ts +0 -248
- package/src/commands/remote.ts +0 -77
- package/src/commands/replay.ts +0 -503
- package/src/commands/sandbox.ts +0 -566
- package/src/commands/services.ts +0 -168
- package/src/commands/skills.ts +0 -107
- package/src/commands/workers.ts +0 -168
- package/src/config.ts +0 -468
- package/src/conversion.ts +0 -69
- package/src/dataset/diffs/README.md +0 -12
- package/src/dataset/diffs/debug-errors.ts +0 -29
- package/src/dataset/diffs/debug.ts +0 -64
- package/src/dataset/diffs/generate.ts +0 -71
- package/src/dataset/diffs/jsonl.ts +0 -53
- package/src/dataset/diffs/test.ts +0 -194
- package/src/embeddings.ts +0 -494
- package/src/fileSync.ts +0 -369
- package/src/generate.ts +0 -529
- package/src/hashes.ts +0 -180
- package/src/index.ts +0 -261
- package/src/logger.ts +0 -197
- package/src/login.ts +0 -209
- package/src/microphone.ts +0 -141
- package/src/migrations.ts +0 -151
- package/src/plugins/AgentsMdPlugin.ts +0 -118
- package/src/plugins/GitPlugin.ts +0 -598
- package/src/plugins/LinterPlugin.ts +0 -214
- package/src/plugins/PluginBase.ts +0 -70
- package/src/plugins/SkillsPlugin.ts +0 -37
- package/src/plugins/embedding.ts +0 -82
- package/src/plugins/exec.ts +0 -70
- package/src/plugins/language.ts +0 -290
- package/src/plugins/plugins.ts +0 -175
- package/src/plugins/tmux.ts +0 -132
- package/src/plugins/types.ts +0 -36
- package/src/plugins/url.ts +0 -101
- package/src/plugins/vim.ts +0 -89
- package/src/processes/ProcessManager.ts +0 -96
- package/src/processes/managedProcessShim.ts +0 -138
- package/src/processors/Base64ImageDetector.ts +0 -502
- package/src/processors/CustomVariables.ts +0 -693
- package/src/processors/GemmaToolProcessor.ts +0 -163
- package/src/processors/HarmonyToolProcessor.ts +0 -264
- package/src/processors/JsonCompressor.ts +0 -510
- package/src/processors/MinimalToolsMessageProcessor.ts +0 -113
- package/src/processors/TokenCompressor.ts +0 -620
- package/src/processors/ToolResponseCache.ts +0 -322
- package/src/processors/XmlToolCallProcessor.ts +0 -533
- package/src/processors/index.ts +0 -14
- package/src/processors/tools/boundedToolResponse.ts +0 -49
- package/src/processors/tools/grepToolResponse.ts +0 -230
- package/src/processors/tools/index.ts +0 -23
- package/src/processors/tools/jqToolResponse.ts +0 -159
- package/src/processors/tools/listStoredToolResponses.ts +0 -124
- package/src/processors/tools/tailToolResponse.ts +0 -148
- package/src/prompts/BasicCodeDocumenter.ts +0 -1
- package/src/prompts/BasicProjectDocumenter.ts +0 -1
- package/src/prompts/EmbeddingSeachHelper.ts +0 -1
- package/src/prompts/KnowhowConfigExamples.ts +0 -376
- package/src/prompts/index.ts +0 -9
- package/src/remotes.ts +0 -110
- package/src/server/index.ts +0 -16
- package/src/services/AgentService.ts +0 -134
- package/src/services/AgentSyncFs.ts +0 -775
- package/src/services/AgentSyncKnowhowWeb.ts +0 -389
- package/src/services/BehaviorsService.ts +0 -466
- package/src/services/DockerService.ts +0 -511
- package/src/services/EmbeddingService.ts +0 -427
- package/src/services/EmbeddingsService.ts +0 -73
- package/src/services/EventService.ts +0 -279
- package/src/services/ExtensionsService.ts +0 -25
- package/src/services/KnowhowClient.ts +0 -928
- package/src/services/LazyToolsService.ts +0 -210
- package/src/services/Mcp.ts +0 -727
- package/src/services/McpServer.ts +0 -155
- package/src/services/McpWebsocketTransport.ts +0 -87
- package/src/services/MediaProcessorService.ts +0 -669
- package/src/services/MessageProcessor.ts +0 -114
- package/src/services/MinimalToolsService.ts +0 -177
- package/src/services/RuntimeReloadService.ts +0 -31
- package/src/services/S3.ts +0 -61
- package/src/services/SessionManager.ts +0 -358
- package/src/services/SkillsService.ts +0 -822
- package/src/services/SyncedAgentWatcher.ts +0 -124
- package/src/services/SyncerService.ts +0 -191
- package/src/services/TaskRegistry.ts +0 -110
- package/src/services/Tools.ts +0 -580
- package/src/services/TracingService.ts +0 -116
- package/src/services/conversion/ConversionService.ts +0 -757
- package/src/services/conversion/index.ts +0 -2
- package/src/services/conversion/types.ts +0 -87
- package/src/services/flags.ts +0 -51
- package/src/services/index.ts +0 -117
- package/src/services/modules/computerUse.ts +0 -218
- package/src/services/modules/index.ts +0 -314
- package/src/services/modules/types.ts +0 -109
- package/src/services/types.ts +0 -60
- package/src/services/watchers/FsSyncer.ts +0 -199
- package/src/services/watchers/RemoteSyncer.ts +0 -196
- package/src/services/watchers/index.ts +0 -2
- package/src/tunnel.ts +0 -243
- package/src/types.ts +0 -282
- package/src/util/Trace.ts +0 -236
- package/src/utils/InputQueueManager.ts +0 -493
- package/src/utils/errors.ts +0 -0
- package/src/utils/http.ts +0 -150
- package/src/utils/index.ts +0 -111
- package/src/worker.ts +0 -696
- package/src/workerRegistry.ts +0 -152
- package/src/workers/auth/PasskeySetup.ts +0 -181
- package/src/workers/auth/WorkerPasskeyAuth.ts +0 -190
- package/src/workers/auth/WsMiddleware.ts +0 -99
- package/src/workers/auth/authMiddleware.ts +0 -104
- package/src/workers/auth/types.ts +0 -70
- package/src/workers/tools/getChallenge.ts +0 -33
- package/src/workers/tools/index.ts +0 -20
- package/src/workers/tools/listAllowedPorts.ts +0 -30
- package/src/workers/tools/lock.ts +0 -31
- package/src/workers/tools/reloadConfig.ts +0 -84
- package/src/workers/tools/unlock.ts +0 -116
- package/tests/XmlToolCallProcessor.test.ts +0 -468
- package/tests/agents/interrupt.test.ts +0 -200
- package/tests/agents/observe-base.test.ts +0 -183
- package/tests/agents/tools/connectAgent.test.ts +0 -138
- package/tests/agents/tools/observe.test.ts +0 -179
- package/tests/agents/tools/readFile.test.ts +0 -88
- package/tests/agents/tools/replyToParent.test.ts +0 -125
- package/tests/agents/tools/sendAgentMessage.test.ts +0 -99
- package/tests/agents/tools/waitForAgentCompleted.test.ts +0 -147
- package/tests/chat/detach-attach-rendering.test.ts +0 -315
- package/tests/clients/AIClient.test.ts +0 -668
- package/tests/clients/anthropic.test.ts +0 -202
- package/tests/clients/contextLimits.test.ts +0 -97
- package/tests/clients/fireworks.test.ts +0 -65
- package/tests/clients/openai.images.test.ts +0 -105
- package/tests/clients/pricing.test.ts +0 -206
- package/tests/clients/reasoningEffort.test.ts +0 -140
- package/tests/compressor/bigstring.test.ts +0 -450
- package/tests/compressor/bigstring.txt +0 -1
- package/tests/compressor/githubjson.txt +0 -1
- package/tests/compressor/toolResponseCache.test.ts +0 -304
- package/tests/compressor/usageBase64.json +0 -159
- package/tests/compressor/usageBase64.test.ts +0 -175
- package/tests/fixtures/fake-secret.txt +0 -1
- package/tests/manual/agent-events/run-test.ts +0 -203
- package/tests/manual/browser-login/README.md +0 -189
- package/tests/manual/browser-login/test_browser_login_basic.ts +0 -115
- package/tests/manual/browser-login/test_cli_integration.ts +0 -169
- package/tests/manual/browser-login/test_cross_platform_browser.ts +0 -186
- package/tests/manual/browser-login/test_error_scenarios.ts +0 -223
- package/tests/manual/cli/no-env.sh +0 -274
- package/tests/manual/clients/completions.json +0 -1151
- package/tests/manual/clients/completions.test.ts +0 -198
- package/tests/manual/file-edits/figma.test.ts +0 -3
- package/tests/manual/file-edits/fileblocks/readwrite.test.ts +0 -100
- package/tests/manual/file-edits/patching/input.txt +0 -145
- package/tests/manual/file-edits/patching/output.txt +0 -145
- package/tests/manual/file-edits/patching/patch.txt +0 -15
- package/tests/manual/file-edits/patching/unseen.txt +0 -80
- package/tests/manual/file-edits/patching.test.ts +0 -139
- package/tests/manual/modalities/README.md +0 -157
- package/tests/manual/modalities/google.modalities.test.ts +0 -335
- package/tests/manual/modalities/openai.modalities.test.ts +0 -329
- package/tests/manual/modalities/streaming.test.ts +0 -260
- package/tests/manual/modalities/xai.modalities.test.ts +0 -294
- package/tests/manual/test-concurrent-ask.ts +0 -43
- package/tests/manual/ycmd/debug_diagnostics_test.ts +0 -127
- package/tests/manual/ycmd/fixtures/debug_diagnostics.ts +0 -26
- package/tests/manual/ycmd/fixtures/file_change_test.ts +0 -17
- package/tests/manual/ycmd/minimal_advanced_test.ts +0 -108
- package/tests/manual/ycmd/simple_diagnostics_test.ts +0 -61
- package/tests/manual/ycmd/simple_test.ts +0 -74
- package/tests/manual/ycmd/test-typescript-sample.ts +0 -34
- package/tests/manual/ycmd/test_advanced_features.ts +0 -407
- package/tests/manual/ycmd/test_advanced_with_tools.ts +0 -320
- package/tests/manual/ycmd/test_comprehensive_typescript.ts +0 -179
- package/tests/manual/ycmd/test_diagnostics_file_changes.ts +0 -249
- package/tests/manual/ycmd/test_diagnostics_fix.ts +0 -99
- package/tests/manual/ycmd/test_diagnostics_simple.ts +0 -100
- package/tests/manual/ycmd/test_diagnostics_timing.ts +0 -120
- package/tests/manual/ycmd/test_discover_commands.ts +0 -310
- package/tests/manual/ycmd/test_endpoints.ts +0 -115
- package/tests/manual/ycmd/test_final_comprehensive.ts +0 -218
- package/tests/manual/ycmd/test_final_validation.ts +0 -150
- package/tests/manual/ycmd/test_implementation.js +0 -42
- package/tests/manual/ycmd/test_individual_ycmd_tool.ts +0 -39
- package/tests/manual/ycmd/test_server_manager.ts +0 -52
- package/tests/manual/ycmd/test_simple_debug.ts +0 -86
- package/tests/manual/ycmd/test_tsserver_workflow.js +0 -83
- package/tests/manual/ycmd/test_tsserver_workflow.ts +0 -122
- package/tests/manual/ycmd/test_typescript_simple.ts +0 -48
- package/tests/manual/ycmd/test_typescript_ycmd.ts +0 -105
- package/tests/manual/ycmd/test_workspace_config.ts +0 -90
- package/tests/manual/ycmd/test_ycmd_auto_start.ts +0 -137
- package/tests/manual/ycmd/test_ycmd_comprehensive.ts +0 -73
- package/tests/manual/ycmd/test_ycmd_connection.py +0 -10
- package/tests/manual/ycmd/test_ycmd_direct.ts +0 -142
- package/tests/manual/ycmd/test_ycmd_experiment.ts +0 -48
- package/tests/manual/ycmd/test_ycmd_final.ts +0 -200
- package/tests/manual/ycmd/test_ycmd_fixed.py +0 -18
- package/tests/manual/ycmd/test_ycmd_integration.ts +0 -112
- package/tests/manual/ycmd/test_ycmd_simple.ts +0 -45
- package/tests/manual/ycmd/test_ycmd_usage.py +0 -27
- package/tests/manual/ycmd/working_simple_test.ts +0 -134
- package/tests/patching/corrupted.test.ts +0 -78
- package/tests/patching/fixtures/transcript-mangles/agent-sync-fs-nested-catch.json +0 -9
- package/tests/patching/fixtures/transcript-mangles/automation-functions-crossed.json +0 -9
- package/tests/patching/fixtures/transcript-mangles/fruit-ninja-confirmed-retirement.json +0 -8
- package/tests/patching/imports.patch.txt +0 -11
- package/tests/patching/imports.test.ts +0 -43
- package/tests/patching/imports.txt +0 -11
- package/tests/patching/interface.patch.txt +0 -15
- package/tests/patching/interface.txt +0 -7
- package/tests/patching/patchFileOutput.test.ts +0 -328
- package/tests/patching/regression-2026.test.ts +0 -752
- package/tests/patching/transcriptMangleRegression.test.ts +0 -125
- package/tests/plugins/language/languagePlugin-content-triggers.test.ts +0 -346
- package/tests/plugins/language/languagePlugin-integration.test.ts +0 -471
- package/tests/plugins/language/languagePlugin.test.ts +0 -385
- package/tests/processes/managedProcessShim.test.ts +0 -59
- package/tests/processors/Base64ImageDetector.test.ts +0 -979
- package/tests/processors/CustomVariables.test.ts +0 -981
- package/tests/processors/CustomVariablesBenchmark.test.ts +0 -237
- package/tests/processors/HarmonyToolProcessor.test.ts +0 -490
- package/tests/processors/TokenCompressor.test.ts +0 -674
- package/tests/processors/ToolResponseCache.test.ts +0 -864
- package/tests/processors/tools/boundedRetrievalTools.test.ts +0 -68
- package/tests/processors/tools/grepToolResponse.test.ts +0 -159
- package/tests/services/ConversionService.test.ts +0 -154
- package/tests/services/DockerService.test.ts +0 -24
- package/tests/services/Tools.test.ts +0 -1738
- package/tests/services/ToolsService.setFunction.test.ts +0 -68
- package/tests/services/WorkerReloadConfig.test.ts +0 -141
- package/tests/test.spec.ts +0 -163
- package/tests/unit/InputQueueManager.test.ts +0 -174
- package/tests/unit/McpWebsocketTransport.test.ts +0 -56
- package/tests/unit/agents/historyRollback.test.ts +0 -53
- package/tests/unit/agents/tools/loadImageAsBase64.test.ts +0 -44
- package/tests/unit/auth/jwtStore.test.ts +0 -55
- package/tests/unit/auth/keyAuth.test.ts +0 -152
- package/tests/unit/auth/keyManager.test.ts +0 -130
- package/tests/unit/auth/registerIdentity.test.ts +0 -99
- package/tests/unit/chat/ToolCommandModule.test.ts +0 -71
- package/tests/unit/chat/historyCommandArgs.test.ts +0 -37
- package/tests/unit/clients/AIClient.test.ts +0 -454
- package/tests/unit/clients/anthropic.responseMetadata.test.ts +0 -81
- package/tests/unit/clients/attribution.test.ts +0 -185
- package/tests/unit/clients/http.responseMetadata.test.ts +0 -86
- package/tests/unit/clients/openai.responseMetadata.test.ts +0 -90
- package/tests/unit/clients/responseMetadata.test.ts +0 -123
- package/tests/unit/clients/withRetry.test.ts +0 -319
- package/tests/unit/commands/agents.test.ts +0 -111
- package/tests/unit/commands/github-credentials.test.ts +0 -210
- package/tests/unit/commands/misc.test.ts +0 -85
- package/tests/unit/commands/remote.test.ts +0 -79
- package/tests/unit/commands/sandbox.test.ts +0 -350
- package/tests/unit/hashes.test.ts +0 -23
- package/tests/unit/input-queue.test.ts +0 -80
- package/tests/unit/login.test.ts +0 -218
- package/tests/unit/modules/moduleLoading.test.ts +0 -305
- package/tests/unit/plugins/pluginLoading.test.ts +0 -97
- package/tests/unit/services/AgentSyncKnowhowWeb.test.ts +0 -38
- package/tests/unit/services/KnowhowClient.test.ts +0 -84
- package/tests/unit/services/LazyToolsService.test.ts +0 -53
- package/tests/unit/services/Mcp.test.ts +0 -56
- package/tests/unit/services/MinimalToolsService.test.ts +0 -424
- package/tests/unit/services/RuntimeReloadService.test.ts +0 -29
- package/tests/unit/services/SessionManager.test.ts +0 -43
- package/tests/unit/services/SyncedAgentWatcher.test.ts +0 -89
- package/tests/unit/services/SyncerService.test.ts +0 -45
- package/tests/unit/tunnel.test.ts +0 -51
- package/tests/unit/util/Trace.test.ts +0 -119
- package/tests/unit/utils/http.test.ts +0 -43
- package/ts_build/tests/XmlToolCallProcessor.test.d.ts +0 -1
- package/ts_build/tests/XmlToolCallProcessor.test.js +0 -376
- package/ts_build/tests/XmlToolCallProcessor.test.js.map +0 -1
- package/ts_build/tests/agents/interrupt.test.d.ts +0 -14
- package/ts_build/tests/agents/interrupt.test.js +0 -136
- package/ts_build/tests/agents/interrupt.test.js.map +0 -1
- package/ts_build/tests/agents/observe-base.test.d.ts +0 -1
- package/ts_build/tests/agents/observe-base.test.js +0 -149
- package/ts_build/tests/agents/observe-base.test.js.map +0 -1
- package/ts_build/tests/agents/tools/connectAgent.test.d.ts +0 -1
- package/ts_build/tests/agents/tools/connectAgent.test.js +0 -142
- package/ts_build/tests/agents/tools/connectAgent.test.js.map +0 -1
- package/ts_build/tests/agents/tools/observe.test.d.ts +0 -1
- package/ts_build/tests/agents/tools/observe.test.js +0 -148
- package/ts_build/tests/agents/tools/observe.test.js.map +0 -1
- package/ts_build/tests/agents/tools/readFile.test.d.ts +0 -1
- package/ts_build/tests/agents/tools/readFile.test.js +0 -90
- package/ts_build/tests/agents/tools/readFile.test.js.map +0 -1
- package/ts_build/tests/agents/tools/replyToParent.test.d.ts +0 -1
- package/ts_build/tests/agents/tools/replyToParent.test.js +0 -116
- package/ts_build/tests/agents/tools/replyToParent.test.js.map +0 -1
- package/ts_build/tests/agents/tools/sendAgentMessage.test.d.ts +0 -1
- package/ts_build/tests/agents/tools/sendAgentMessage.test.js +0 -112
- package/ts_build/tests/agents/tools/sendAgentMessage.test.js.map +0 -1
- package/ts_build/tests/agents/tools/waitForAgentCompleted.test.d.ts +0 -1
- package/ts_build/tests/agents/tools/waitForAgentCompleted.test.js +0 -147
- package/ts_build/tests/agents/tools/waitForAgentCompleted.test.js.map +0 -1
- package/ts_build/tests/chat/detach-attach-rendering.test.d.ts +0 -1
- package/ts_build/tests/chat/detach-attach-rendering.test.js +0 -168
- package/ts_build/tests/chat/detach-attach-rendering.test.js.map +0 -1
- package/ts_build/tests/clients/AIClient.test.d.ts +0 -1
- package/ts_build/tests/clients/AIClient.test.js +0 -483
- package/ts_build/tests/clients/AIClient.test.js.map +0 -1
- package/ts_build/tests/clients/anthropic.test.d.ts +0 -1
- package/ts_build/tests/clients/anthropic.test.js +0 -159
- package/ts_build/tests/clients/anthropic.test.js.map +0 -1
- package/ts_build/tests/clients/contextLimits.test.d.ts +0 -1
- package/ts_build/tests/clients/contextLimits.test.js +0 -69
- package/ts_build/tests/clients/contextLimits.test.js.map +0 -1
- package/ts_build/tests/clients/fireworks.test.d.ts +0 -1
- package/ts_build/tests/clients/fireworks.test.js +0 -65
- package/ts_build/tests/clients/fireworks.test.js.map +0 -1
- package/ts_build/tests/clients/openai.images.test.d.ts +0 -1
- package/ts_build/tests/clients/openai.images.test.js +0 -94
- package/ts_build/tests/clients/openai.images.test.js.map +0 -1
- package/ts_build/tests/clients/pricing.test.d.ts +0 -1
- package/ts_build/tests/clients/pricing.test.js +0 -124
- package/ts_build/tests/clients/pricing.test.js.map +0 -1
- package/ts_build/tests/clients/reasoningEffort.test.d.ts +0 -1
- package/ts_build/tests/clients/reasoningEffort.test.js +0 -116
- package/ts_build/tests/clients/reasoningEffort.test.js.map +0 -1
- package/ts_build/tests/compressor/bigstring.test.d.ts +0 -1
- package/ts_build/tests/compressor/bigstring.test.js +0 -275
- package/ts_build/tests/compressor/bigstring.test.js.map +0 -1
- package/ts_build/tests/compressor/toolResponseCache.test.d.ts +0 -1
- package/ts_build/tests/compressor/toolResponseCache.test.js +0 -250
- package/ts_build/tests/compressor/toolResponseCache.test.js.map +0 -1
- package/ts_build/tests/compressor/usageBase64.test.d.ts +0 -1
- package/ts_build/tests/compressor/usageBase64.test.js +0 -109
- package/ts_build/tests/compressor/usageBase64.test.js.map +0 -1
- package/ts_build/tests/manual/agent-events/run-test.d.ts +0 -2
- package/ts_build/tests/manual/agent-events/run-test.js +0 -148
- package/ts_build/tests/manual/agent-events/run-test.js.map +0 -1
- package/ts_build/tests/manual/browser-login/test_browser_login_basic.d.ts +0 -2
- package/ts_build/tests/manual/browser-login/test_browser_login_basic.js +0 -118
- package/ts_build/tests/manual/browser-login/test_browser_login_basic.js.map +0 -1
- package/ts_build/tests/manual/browser-login/test_cli_integration.d.ts +0 -2
- package/ts_build/tests/manual/browser-login/test_cli_integration.js +0 -163
- package/ts_build/tests/manual/browser-login/test_cli_integration.js.map +0 -1
- package/ts_build/tests/manual/browser-login/test_cross_platform_browser.d.ts +0 -2
- package/ts_build/tests/manual/browser-login/test_cross_platform_browser.js +0 -169
- package/ts_build/tests/manual/browser-login/test_cross_platform_browser.js.map +0 -1
- package/ts_build/tests/manual/browser-login/test_error_scenarios.d.ts +0 -2
- package/ts_build/tests/manual/browser-login/test_error_scenarios.js +0 -207
- package/ts_build/tests/manual/browser-login/test_error_scenarios.js.map +0 -1
- package/ts_build/tests/manual/clients/completions.test.d.ts +0 -1
- package/ts_build/tests/manual/clients/completions.test.js +0 -151
- package/ts_build/tests/manual/clients/completions.test.js.map +0 -1
- package/ts_build/tests/manual/file-edits/figma.test.d.ts +0 -0
- package/ts_build/tests/manual/file-edits/figma.test.js +0 -2
- package/ts_build/tests/manual/file-edits/figma.test.js.map +0 -1
- package/ts_build/tests/manual/file-edits/fileblocks/readwrite.test.d.ts +0 -1
- package/ts_build/tests/manual/file-edits/fileblocks/readwrite.test.js +0 -110
- package/ts_build/tests/manual/file-edits/fileblocks/readwrite.test.js.map +0 -1
- package/ts_build/tests/manual/file-edits/patching.test.d.ts +0 -1
- package/ts_build/tests/manual/file-edits/patching.test.js +0 -129
- package/ts_build/tests/manual/file-edits/patching.test.js.map +0 -1
- package/ts_build/tests/manual/modalities/google.modalities.test.d.ts +0 -1
- package/ts_build/tests/manual/modalities/google.modalities.test.js +0 -262
- package/ts_build/tests/manual/modalities/google.modalities.test.js.map +0 -1
- package/ts_build/tests/manual/modalities/openai.modalities.test.d.ts +0 -1
- package/ts_build/tests/manual/modalities/openai.modalities.test.js +0 -262
- package/ts_build/tests/manual/modalities/openai.modalities.test.js.map +0 -1
- package/ts_build/tests/manual/modalities/streaming.test.d.ts +0 -1
- package/ts_build/tests/manual/modalities/streaming.test.js +0 -216
- package/ts_build/tests/manual/modalities/streaming.test.js.map +0 -1
- package/ts_build/tests/manual/modalities/xai.modalities.test.d.ts +0 -1
- package/ts_build/tests/manual/modalities/xai.modalities.test.js +0 -219
- package/ts_build/tests/manual/modalities/xai.modalities.test.js.map +0 -1
- package/ts_build/tests/manual/test-concurrent-ask.d.ts +0 -1
- package/ts_build/tests/manual/test-concurrent-ask.js +0 -22
- package/ts_build/tests/manual/test-concurrent-ask.js.map +0 -1
- package/ts_build/tests/manual/ycmd/debug_diagnostics_test.d.ts +0 -1
- package/ts_build/tests/manual/ycmd/debug_diagnostics_test.js +0 -124
- package/ts_build/tests/manual/ycmd/debug_diagnostics_test.js.map +0 -1
- package/ts_build/tests/manual/ycmd/minimal_advanced_test.d.ts +0 -2
- package/ts_build/tests/manual/ycmd/minimal_advanced_test.js +0 -114
- package/ts_build/tests/manual/ycmd/minimal_advanced_test.js.map +0 -1
- package/ts_build/tests/manual/ycmd/simple_diagnostics_test.d.ts +0 -1
- package/ts_build/tests/manual/ycmd/simple_diagnostics_test.js +0 -84
- package/ts_build/tests/manual/ycmd/simple_diagnostics_test.js.map +0 -1
- package/ts_build/tests/manual/ycmd/simple_test.d.ts +0 -2
- package/ts_build/tests/manual/ycmd/simple_test.js +0 -92
- package/ts_build/tests/manual/ycmd/simple_test.js.map +0 -1
- package/ts_build/tests/manual/ycmd/test-typescript-sample.d.ts +0 -14
- package/ts_build/tests/manual/ycmd/test-typescript-sample.js +0 -20
- package/ts_build/tests/manual/ycmd/test-typescript-sample.js.map +0 -1
- package/ts_build/tests/manual/ycmd/test_advanced_features.d.ts +0 -2
- package/ts_build/tests/manual/ycmd/test_advanced_features.js +0 -306
- package/ts_build/tests/manual/ycmd/test_advanced_features.js.map +0 -1
- package/ts_build/tests/manual/ycmd/test_advanced_with_tools.d.ts +0 -3
- package/ts_build/tests/manual/ycmd/test_advanced_with_tools.js +0 -271
- package/ts_build/tests/manual/ycmd/test_advanced_with_tools.js.map +0 -1
- package/ts_build/tests/manual/ycmd/test_comprehensive_typescript.d.ts +0 -2
- package/ts_build/tests/manual/ycmd/test_comprehensive_typescript.js +0 -196
- package/ts_build/tests/manual/ycmd/test_comprehensive_typescript.js.map +0 -1
- package/ts_build/tests/manual/ycmd/test_diagnostics_file_changes.d.ts +0 -1
- package/ts_build/tests/manual/ycmd/test_diagnostics_file_changes.js +0 -184
- package/ts_build/tests/manual/ycmd/test_diagnostics_file_changes.js.map +0 -1
- package/ts_build/tests/manual/ycmd/test_diagnostics_fix.d.ts +0 -2
- package/ts_build/tests/manual/ycmd/test_diagnostics_fix.js +0 -116
- package/ts_build/tests/manual/ycmd/test_diagnostics_fix.js.map +0 -1
- package/ts_build/tests/manual/ycmd/test_diagnostics_simple.d.ts +0 -1
- package/ts_build/tests/manual/ycmd/test_diagnostics_simple.js +0 -114
- package/ts_build/tests/manual/ycmd/test_diagnostics_simple.js.map +0 -1
- package/ts_build/tests/manual/ycmd/test_diagnostics_timing.d.ts +0 -1
- package/ts_build/tests/manual/ycmd/test_diagnostics_timing.js +0 -129
- package/ts_build/tests/manual/ycmd/test_diagnostics_timing.js.map +0 -1
- package/ts_build/tests/manual/ycmd/test_discover_commands.d.ts +0 -2
- package/ts_build/tests/manual/ycmd/test_discover_commands.js +0 -252
- package/ts_build/tests/manual/ycmd/test_discover_commands.js.map +0 -1
- package/ts_build/tests/manual/ycmd/test_endpoints.d.ts +0 -2
- package/ts_build/tests/manual/ycmd/test_endpoints.js +0 -130
- package/ts_build/tests/manual/ycmd/test_endpoints.js.map +0 -1
- package/ts_build/tests/manual/ycmd/test_final_comprehensive.d.ts +0 -2
- package/ts_build/tests/manual/ycmd/test_final_comprehensive.js +0 -231
- package/ts_build/tests/manual/ycmd/test_final_comprehensive.js.map +0 -1
- package/ts_build/tests/manual/ycmd/test_final_validation.d.ts +0 -2
- package/ts_build/tests/manual/ycmd/test_final_validation.js +0 -170
- package/ts_build/tests/manual/ycmd/test_final_validation.js.map +0 -1
- package/ts_build/tests/manual/ycmd/test_individual_ycmd_tool.d.ts +0 -2
- package/ts_build/tests/manual/ycmd/test_individual_ycmd_tool.js +0 -37
- package/ts_build/tests/manual/ycmd/test_individual_ycmd_tool.js.map +0 -1
- package/ts_build/tests/manual/ycmd/test_server_manager.d.ts +0 -1
- package/ts_build/tests/manual/ycmd/test_server_manager.js +0 -38
- package/ts_build/tests/manual/ycmd/test_server_manager.js.map +0 -1
- package/ts_build/tests/manual/ycmd/test_simple_debug.d.ts +0 -2
- package/ts_build/tests/manual/ycmd/test_simple_debug.js +0 -109
- package/ts_build/tests/manual/ycmd/test_simple_debug.js.map +0 -1
- package/ts_build/tests/manual/ycmd/test_tsserver_workflow.d.ts +0 -1
- package/ts_build/tests/manual/ycmd/test_tsserver_workflow.js +0 -138
- package/ts_build/tests/manual/ycmd/test_tsserver_workflow.js.map +0 -1
- package/ts_build/tests/manual/ycmd/test_typescript_simple.d.ts +0 -1
- package/ts_build/tests/manual/ycmd/test_typescript_simple.js +0 -76
- package/ts_build/tests/manual/ycmd/test_typescript_simple.js.map +0 -1
- package/ts_build/tests/manual/ycmd/test_typescript_ycmd.d.ts +0 -1
- package/ts_build/tests/manual/ycmd/test_typescript_ycmd.js +0 -115
- package/ts_build/tests/manual/ycmd/test_typescript_ycmd.js.map +0 -1
- package/ts_build/tests/manual/ycmd/test_workspace_config.d.ts +0 -1
- package/ts_build/tests/manual/ycmd/test_workspace_config.js +0 -99
- package/ts_build/tests/manual/ycmd/test_workspace_config.js.map +0 -1
- package/ts_build/tests/manual/ycmd/test_ycmd_auto_start.d.ts +0 -2
- package/ts_build/tests/manual/ycmd/test_ycmd_auto_start.js +0 -140
- package/ts_build/tests/manual/ycmd/test_ycmd_auto_start.js.map +0 -1
- package/ts_build/tests/manual/ycmd/test_ycmd_comprehensive.d.ts +0 -1
- package/ts_build/tests/manual/ycmd/test_ycmd_comprehensive.js +0 -93
- package/ts_build/tests/manual/ycmd/test_ycmd_comprehensive.js.map +0 -1
- package/ts_build/tests/manual/ycmd/test_ycmd_direct.d.ts +0 -2
- package/ts_build/tests/manual/ycmd/test_ycmd_direct.js +0 -159
- package/ts_build/tests/manual/ycmd/test_ycmd_direct.js.map +0 -1
- package/ts_build/tests/manual/ycmd/test_ycmd_experiment.d.ts +0 -15
- package/ts_build/tests/manual/ycmd/test_ycmd_experiment.js +0 -68
- package/ts_build/tests/manual/ycmd/test_ycmd_experiment.js.map +0 -1
- package/ts_build/tests/manual/ycmd/test_ycmd_final.d.ts +0 -2
- package/ts_build/tests/manual/ycmd/test_ycmd_final.js +0 -205
- package/ts_build/tests/manual/ycmd/test_ycmd_final.js.map +0 -1
- package/ts_build/tests/manual/ycmd/test_ycmd_integration.d.ts +0 -3
- package/ts_build/tests/manual/ycmd/test_ycmd_integration.js +0 -119
- package/ts_build/tests/manual/ycmd/test_ycmd_integration.js.map +0 -1
- package/ts_build/tests/manual/ycmd/test_ycmd_simple.d.ts +0 -2
- package/ts_build/tests/manual/ycmd/test_ycmd_simple.js +0 -36
- package/ts_build/tests/manual/ycmd/test_ycmd_simple.js.map +0 -1
- package/ts_build/tests/manual/ycmd/working_simple_test.d.ts +0 -2
- package/ts_build/tests/manual/ycmd/working_simple_test.js +0 -144
- package/ts_build/tests/manual/ycmd/working_simple_test.js.map +0 -1
- package/ts_build/tests/patching/corrupted.test.d.ts +0 -1
- package/ts_build/tests/patching/corrupted.test.js +0 -53
- package/ts_build/tests/patching/corrupted.test.js.map +0 -1
- package/ts_build/tests/patching/imports.test.d.ts +0 -1
- package/ts_build/tests/patching/imports.test.js +0 -71
- package/ts_build/tests/patching/imports.test.js.map +0 -1
- package/ts_build/tests/patching/patchFileOutput.test.d.ts +0 -1
- package/ts_build/tests/patching/patchFileOutput.test.js +0 -269
- package/ts_build/tests/patching/patchFileOutput.test.js.map +0 -1
- package/ts_build/tests/patching/regression-2026.test.d.ts +0 -1
- package/ts_build/tests/patching/regression-2026.test.js +0 -528
- package/ts_build/tests/patching/regression-2026.test.js.map +0 -1
- package/ts_build/tests/patching/transcriptMangleRegression.test.d.ts +0 -1
- package/ts_build/tests/patching/transcriptMangleRegression.test.js +0 -104
- package/ts_build/tests/patching/transcriptMangleRegression.test.js.map +0 -1
- package/ts_build/tests/plugins/language/languagePlugin-content-triggers.test.d.ts +0 -1
- package/ts_build/tests/plugins/language/languagePlugin-content-triggers.test.js +0 -294
- package/ts_build/tests/plugins/language/languagePlugin-content-triggers.test.js.map +0 -1
- package/ts_build/tests/plugins/language/languagePlugin-integration.test.d.ts +0 -1
- package/ts_build/tests/plugins/language/languagePlugin-integration.test.js +0 -343
- package/ts_build/tests/plugins/language/languagePlugin-integration.test.js.map +0 -1
- package/ts_build/tests/plugins/language/languagePlugin.test.d.ts +0 -1
- package/ts_build/tests/plugins/language/languagePlugin.test.js +0 -315
- package/ts_build/tests/plugins/language/languagePlugin.test.js.map +0 -1
- package/ts_build/tests/processes/managedProcessShim.test.d.ts +0 -1
- package/ts_build/tests/processes/managedProcessShim.test.js +0 -92
- package/ts_build/tests/processes/managedProcessShim.test.js.map +0 -1
- package/ts_build/tests/processors/Base64ImageDetector.test.d.ts +0 -1
- package/ts_build/tests/processors/Base64ImageDetector.test.js +0 -792
- package/ts_build/tests/processors/Base64ImageDetector.test.js.map +0 -1
- package/ts_build/tests/processors/CustomVariables.test.d.ts +0 -1
- package/ts_build/tests/processors/CustomVariables.test.js +0 -764
- package/ts_build/tests/processors/CustomVariables.test.js.map +0 -1
- package/ts_build/tests/processors/CustomVariablesBenchmark.test.d.ts +0 -1
- package/ts_build/tests/processors/CustomVariablesBenchmark.test.js +0 -179
- package/ts_build/tests/processors/CustomVariablesBenchmark.test.js.map +0 -1
- package/ts_build/tests/processors/HarmonyToolProcessor.test.d.ts +0 -1
- package/ts_build/tests/processors/HarmonyToolProcessor.test.js +0 -382
- package/ts_build/tests/processors/HarmonyToolProcessor.test.js.map +0 -1
- package/ts_build/tests/processors/TokenCompressor.test.d.ts +0 -1
- package/ts_build/tests/processors/TokenCompressor.test.js +0 -473
- package/ts_build/tests/processors/TokenCompressor.test.js.map +0 -1
- package/ts_build/tests/processors/ToolResponseCache.test.d.ts +0 -1
- package/ts_build/tests/processors/ToolResponseCache.test.js +0 -657
- package/ts_build/tests/processors/ToolResponseCache.test.js.map +0 -1
- package/ts_build/tests/processors/tools/boundedRetrievalTools.test.d.ts +0 -1
- package/ts_build/tests/processors/tools/boundedRetrievalTools.test.js +0 -57
- package/ts_build/tests/processors/tools/boundedRetrievalTools.test.js.map +0 -1
- package/ts_build/tests/processors/tools/grepToolResponse.test.d.ts +0 -1
- package/ts_build/tests/processors/tools/grepToolResponse.test.js +0 -77
- package/ts_build/tests/processors/tools/grepToolResponse.test.js.map +0 -1
- package/ts_build/tests/services/ConversionService.test.d.ts +0 -1
- package/ts_build/tests/services/ConversionService.test.js +0 -154
- package/ts_build/tests/services/ConversionService.test.js.map +0 -1
- package/ts_build/tests/services/DockerService.test.d.ts +0 -1
- package/ts_build/tests/services/DockerService.test.js +0 -22
- package/ts_build/tests/services/DockerService.test.js.map +0 -1
- package/ts_build/tests/services/Tools.test.d.ts +0 -1
- package/ts_build/tests/services/Tools.test.js +0 -1365
- package/ts_build/tests/services/Tools.test.js.map +0 -1
- package/ts_build/tests/services/ToolsService.setFunction.test.d.ts +0 -1
- package/ts_build/tests/services/ToolsService.setFunction.test.js +0 -51
- package/ts_build/tests/services/ToolsService.setFunction.test.js.map +0 -1
- package/ts_build/tests/services/WorkerReloadConfig.test.d.ts +0 -1
- package/ts_build/tests/services/WorkerReloadConfig.test.js +0 -86
- package/ts_build/tests/services/WorkerReloadConfig.test.js.map +0 -1
- package/ts_build/tests/test.spec.d.ts +0 -1
- package/ts_build/tests/test.spec.js +0 -139
- package/ts_build/tests/test.spec.js.map +0 -1
- package/ts_build/tests/unit/InputQueueManager.test.d.ts +0 -1
- package/ts_build/tests/unit/InputQueueManager.test.js +0 -104
- package/ts_build/tests/unit/InputQueueManager.test.js.map +0 -1
- package/ts_build/tests/unit/McpWebsocketTransport.test.d.ts +0 -1
- package/ts_build/tests/unit/McpWebsocketTransport.test.js +0 -47
- package/ts_build/tests/unit/McpWebsocketTransport.test.js.map +0 -1
- package/ts_build/tests/unit/agents/historyRollback.test.d.ts +0 -1
- package/ts_build/tests/unit/agents/historyRollback.test.js +0 -42
- package/ts_build/tests/unit/agents/historyRollback.test.js.map +0 -1
- package/ts_build/tests/unit/agents/tools/loadImageAsBase64.test.d.ts +0 -1
- package/ts_build/tests/unit/agents/tools/loadImageAsBase64.test.js +0 -67
- package/ts_build/tests/unit/agents/tools/loadImageAsBase64.test.js.map +0 -1
- package/ts_build/tests/unit/auth/jwtStore.test.d.ts +0 -1
- package/ts_build/tests/unit/auth/jwtStore.test.js +0 -46
- package/ts_build/tests/unit/auth/jwtStore.test.js.map +0 -1
- package/ts_build/tests/unit/auth/keyAuth.test.d.ts +0 -1
- package/ts_build/tests/unit/auth/keyAuth.test.js +0 -118
- package/ts_build/tests/unit/auth/keyAuth.test.js.map +0 -1
- package/ts_build/tests/unit/auth/keyManager.test.d.ts +0 -1
- package/ts_build/tests/unit/auth/keyManager.test.js +0 -96
- package/ts_build/tests/unit/auth/keyManager.test.js.map +0 -1
- package/ts_build/tests/unit/auth/registerIdentity.test.d.ts +0 -1
- package/ts_build/tests/unit/auth/registerIdentity.test.js +0 -92
- package/ts_build/tests/unit/auth/registerIdentity.test.js.map +0 -1
- package/ts_build/tests/unit/chat/ToolCommandModule.test.d.ts +0 -1
- package/ts_build/tests/unit/chat/ToolCommandModule.test.js +0 -61
- package/ts_build/tests/unit/chat/ToolCommandModule.test.js.map +0 -1
- package/ts_build/tests/unit/chat/historyCommandArgs.test.d.ts +0 -1
- package/ts_build/tests/unit/chat/historyCommandArgs.test.js +0 -29
- package/ts_build/tests/unit/chat/historyCommandArgs.test.js.map +0 -1
- package/ts_build/tests/unit/clients/AIClient.test.d.ts +0 -1
- package/ts_build/tests/unit/clients/AIClient.test.js +0 -342
- package/ts_build/tests/unit/clients/AIClient.test.js.map +0 -1
- package/ts_build/tests/unit/clients/anthropic.responseMetadata.test.d.ts +0 -1
- package/ts_build/tests/unit/clients/anthropic.responseMetadata.test.js +0 -77
- package/ts_build/tests/unit/clients/anthropic.responseMetadata.test.js.map +0 -1
- package/ts_build/tests/unit/clients/attribution.test.d.ts +0 -1
- package/ts_build/tests/unit/clients/attribution.test.js +0 -153
- package/ts_build/tests/unit/clients/attribution.test.js.map +0 -1
- package/ts_build/tests/unit/clients/http.responseMetadata.test.d.ts +0 -1
- package/ts_build/tests/unit/clients/http.responseMetadata.test.js +0 -77
- package/ts_build/tests/unit/clients/http.responseMetadata.test.js.map +0 -1
- package/ts_build/tests/unit/clients/openai.responseMetadata.test.d.ts +0 -1
- package/ts_build/tests/unit/clients/openai.responseMetadata.test.js +0 -86
- package/ts_build/tests/unit/clients/openai.responseMetadata.test.js.map +0 -1
- package/ts_build/tests/unit/clients/responseMetadata.test.d.ts +0 -1
- package/ts_build/tests/unit/clients/responseMetadata.test.js +0 -96
- package/ts_build/tests/unit/clients/responseMetadata.test.js.map +0 -1
- package/ts_build/tests/unit/clients/withRetry.test.d.ts +0 -1
- package/ts_build/tests/unit/clients/withRetry.test.js +0 -225
- package/ts_build/tests/unit/clients/withRetry.test.js.map +0 -1
- package/ts_build/tests/unit/commands/agents.test.d.ts +0 -1
- package/ts_build/tests/unit/commands/agents.test.js +0 -119
- package/ts_build/tests/unit/commands/agents.test.js.map +0 -1
- package/ts_build/tests/unit/commands/github-credentials.test.d.ts +0 -1
- package/ts_build/tests/unit/commands/github-credentials.test.js +0 -145
- package/ts_build/tests/unit/commands/github-credentials.test.js.map +0 -1
- package/ts_build/tests/unit/commands/misc.test.d.ts +0 -1
- package/ts_build/tests/unit/commands/misc.test.js +0 -70
- package/ts_build/tests/unit/commands/misc.test.js.map +0 -1
- package/ts_build/tests/unit/commands/remote.test.d.ts +0 -1
- package/ts_build/tests/unit/commands/remote.test.js +0 -70
- package/ts_build/tests/unit/commands/remote.test.js.map +0 -1
- package/ts_build/tests/unit/commands/sandbox.test.d.ts +0 -1
- package/ts_build/tests/unit/commands/sandbox.test.js +0 -258
- package/ts_build/tests/unit/commands/sandbox.test.js.map +0 -1
- package/ts_build/tests/unit/hashes.test.d.ts +0 -1
- package/ts_build/tests/unit/hashes.test.js +0 -25
- package/ts_build/tests/unit/hashes.test.js.map +0 -1
- package/ts_build/tests/unit/input-queue.test.d.ts +0 -1
- package/ts_build/tests/unit/input-queue.test.js +0 -32
- package/ts_build/tests/unit/input-queue.test.js.map +0 -1
- package/ts_build/tests/unit/login.test.d.ts +0 -1
- package/ts_build/tests/unit/login.test.js +0 -166
- package/ts_build/tests/unit/login.test.js.map +0 -1
- package/ts_build/tests/unit/modules/moduleLoading.test.d.ts +0 -1
- package/ts_build/tests/unit/modules/moduleLoading.test.js +0 -272
- package/ts_build/tests/unit/modules/moduleLoading.test.js.map +0 -1
- package/ts_build/tests/unit/plugins/pluginLoading.test.d.ts +0 -1
- package/ts_build/tests/unit/plugins/pluginLoading.test.js +0 -117
- package/ts_build/tests/unit/plugins/pluginLoading.test.js.map +0 -1
- package/ts_build/tests/unit/services/AgentSyncKnowhowWeb.test.d.ts +0 -1
- package/ts_build/tests/unit/services/AgentSyncKnowhowWeb.test.js +0 -32
- package/ts_build/tests/unit/services/AgentSyncKnowhowWeb.test.js.map +0 -1
- package/ts_build/tests/unit/services/KnowhowClient.test.d.ts +0 -1
- package/ts_build/tests/unit/services/KnowhowClient.test.js +0 -69
- package/ts_build/tests/unit/services/KnowhowClient.test.js.map +0 -1
- package/ts_build/tests/unit/services/LazyToolsService.test.d.ts +0 -1
- package/ts_build/tests/unit/services/LazyToolsService.test.js +0 -47
- package/ts_build/tests/unit/services/LazyToolsService.test.js.map +0 -1
- package/ts_build/tests/unit/services/Mcp.test.d.ts +0 -1
- package/ts_build/tests/unit/services/Mcp.test.js +0 -45
- package/ts_build/tests/unit/services/Mcp.test.js.map +0 -1
- package/ts_build/tests/unit/services/MinimalToolsService.test.d.ts +0 -1
- package/ts_build/tests/unit/services/MinimalToolsService.test.js +0 -320
- package/ts_build/tests/unit/services/MinimalToolsService.test.js.map +0 -1
- package/ts_build/tests/unit/services/RuntimeReloadService.test.d.ts +0 -1
- package/ts_build/tests/unit/services/RuntimeReloadService.test.js +0 -26
- package/ts_build/tests/unit/services/RuntimeReloadService.test.js.map +0 -1
- package/ts_build/tests/unit/services/SessionManager.test.d.ts +0 -1
- package/ts_build/tests/unit/services/SessionManager.test.js +0 -72
- package/ts_build/tests/unit/services/SessionManager.test.js.map +0 -1
- package/ts_build/tests/unit/services/SyncedAgentWatcher.test.d.ts +0 -1
- package/ts_build/tests/unit/services/SyncedAgentWatcher.test.js +0 -78
- package/ts_build/tests/unit/services/SyncedAgentWatcher.test.js.map +0 -1
- package/ts_build/tests/unit/services/SyncerService.test.d.ts +0 -1
- package/ts_build/tests/unit/services/SyncerService.test.js +0 -40
- package/ts_build/tests/unit/services/SyncerService.test.js.map +0 -1
- package/ts_build/tests/unit/tunnel.test.d.ts +0 -1
- package/ts_build/tests/unit/tunnel.test.js +0 -47
- package/ts_build/tests/unit/tunnel.test.js.map +0 -1
- package/ts_build/tests/unit/util/Trace.test.d.ts +0 -1
- package/ts_build/tests/unit/util/Trace.test.js +0 -107
- package/ts_build/tests/unit/util/Trace.test.js.map +0 -1
- package/ts_build/tests/unit/utils/http.test.d.ts +0 -1
- package/ts_build/tests/unit/utils/http.test.js +0 -69
- package/ts_build/tests/unit/utils/http.test.js.map +0 -1
- package/tsconfig.json +0 -34
- package/tslint.json +0 -11
|
@@ -1,775 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Agent Synchronization Service - Filesystem-based synchronization
|
|
3
|
-
* Handles synchronization via filesystem files in .knowhow/processes/agents/taskId/
|
|
4
|
-
*/
|
|
5
|
-
import { BaseAgent } from "../agents/base/base";
|
|
6
|
-
import { TraceAll } from "../util/Trace";
|
|
7
|
-
import { promises as fs } from "fs";
|
|
8
|
-
import * as path from "path";
|
|
9
|
-
import { watch } from "fs";
|
|
10
|
-
|
|
11
|
-
export interface FsSyncOptions {
|
|
12
|
-
taskId: string;
|
|
13
|
-
prompt: string;
|
|
14
|
-
agentName?: string;
|
|
15
|
-
/** The taskId of the parent agent that spawned this task, if any. */
|
|
16
|
-
parentTaskId?: string;
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
/**
|
|
20
|
-
* AgentSyncFs handles filesystem-based synchronization for agent tasks
|
|
21
|
-
* Creates files in .knowhow/processes/agents/{taskId}/ for status and input
|
|
22
|
-
*/
|
|
23
|
-
@TraceAll()
|
|
24
|
-
export class AgentSyncFs {
|
|
25
|
-
/** Shared cleanup interval across all instances to avoid duplicate cleanup runs */
|
|
26
|
-
private static sharedCleanupInterval: NodeJS.Timeout | null = null;
|
|
27
|
-
private static sharedBasePath: string = ".knowhow/processes/agents";
|
|
28
|
-
private static cleanupStarted: boolean = false;
|
|
29
|
-
|
|
30
|
-
private taskId: string | undefined;
|
|
31
|
-
private basePath: string = ".knowhow/processes/agents";
|
|
32
|
-
private taskPath: string | undefined;
|
|
33
|
-
private eventHandlersSetup: boolean = false;
|
|
34
|
-
private watcher: ReturnType<typeof watch> | null = null;
|
|
35
|
-
private lastInputContent: string = "";
|
|
36
|
-
private finalizationPromise: Promise<void> | null = null;
|
|
37
|
-
private agent: BaseAgent | undefined;
|
|
38
|
-
private threadUpdateHandler: ((...args: any[]) => void) | undefined;
|
|
39
|
-
private doneHandler: ((...args: any[]) => void) | undefined;
|
|
40
|
-
private tokenUsageHandler: ((...args: any[]) => void) | undefined;
|
|
41
|
-
/**
|
|
42
|
-
* Tracks the most recent in-flight filesystem metadata update.
|
|
43
|
-
* The done handler awaits this before finalizing, preventing a race where
|
|
44
|
-
* the completion call writes before the last thread sync finishes.
|
|
45
|
-
*/
|
|
46
|
-
private pendingThreadUpdatePromise: Promise<void> | null = null;
|
|
47
|
-
|
|
48
|
-
constructor() {
|
|
49
|
-
// Start cleanup process when created
|
|
50
|
-
AgentSyncFs.startSharedCleanupProcess();
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
/**
|
|
54
|
-
* Create filesystem sync for a task
|
|
55
|
-
*/
|
|
56
|
-
async createTask(options: FsSyncOptions): Promise<string> {
|
|
57
|
-
this.taskId = options.taskId;
|
|
58
|
-
this.taskPath = path.join(this.basePath, this.taskId);
|
|
59
|
-
|
|
60
|
-
try {
|
|
61
|
-
// Create directory structure
|
|
62
|
-
await fs.mkdir(this.taskPath, { recursive: true });
|
|
63
|
-
|
|
64
|
-
// Create initial files
|
|
65
|
-
await this.writeStatus("running");
|
|
66
|
-
await this.writeInput("");
|
|
67
|
-
await this.writeMetadata({
|
|
68
|
-
taskId: this.taskId,
|
|
69
|
-
// Record the OS process id of this agent subprocess so orchestrating
|
|
70
|
-
// tools (e.g. waitForAgentCompleted) can detect a crashed-but-not-
|
|
71
|
-
// finalized task via process-liveness. This is the child's own pid,
|
|
72
|
-
// so it needs no coordination with the spawner and never touches
|
|
73
|
-
// execCommand's child processes.
|
|
74
|
-
pid: process.pid,
|
|
75
|
-
prompt: options.prompt,
|
|
76
|
-
agentName: options.agentName || "unknown",
|
|
77
|
-
...(options.parentTaskId ? { parentTaskId: options.parentTaskId } : {}),
|
|
78
|
-
startTime: new Date().toISOString(),
|
|
79
|
-
status: "running",
|
|
80
|
-
});
|
|
81
|
-
|
|
82
|
-
console.log(`โ
Created filesystem sync at: ${this.taskPath}`);
|
|
83
|
-
return this.taskId;
|
|
84
|
-
} catch (error) {
|
|
85
|
-
console.error(`โ Failed to create filesystem sync:`, error);
|
|
86
|
-
throw error;
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
/**
|
|
91
|
-
* Clean up old managed-process directories (.knowhow/processes/<id>/) that
|
|
92
|
-
* were created by spawnManaged / execCommand. These are identified by the
|
|
93
|
-
* presence of a status.json file inside the directory. Only directories
|
|
94
|
-
* older than maxAgeMs are removed.
|
|
95
|
-
*/
|
|
96
|
-
static async cleanupOldManagedProcessDirs(maxAgeMs: number): Promise<void> {
|
|
97
|
-
try {
|
|
98
|
-
const processesPath = path.dirname(AgentSyncFs.sharedBasePath);
|
|
99
|
-
|
|
100
|
-
try {
|
|
101
|
-
await fs.access(processesPath);
|
|
102
|
-
} catch {
|
|
103
|
-
return;
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
const entries = await fs.readdir(processesPath, { withFileTypes: true });
|
|
107
|
-
const now = Date.now();
|
|
108
|
-
|
|
109
|
-
for (const entry of entries) {
|
|
110
|
-
if (!entry.isDirectory()) continue;
|
|
111
|
-
const dirPath = path.join(processesPath, entry.name);
|
|
112
|
-
const statusPath = path.join(dirPath, "status.json");
|
|
113
|
-
|
|
114
|
-
try {
|
|
115
|
-
await fs.access(statusPath);
|
|
116
|
-
const stats = await fs.stat(dirPath);
|
|
117
|
-
const age = now - stats.mtimeMs;
|
|
118
|
-
if (age > maxAgeMs) {
|
|
119
|
-
console.log(`๐งน Cleaning up old process directory: ${entry.name}`);
|
|
120
|
-
await fs.rm(dirPath, { recursive: true, force: true });
|
|
121
|
-
}
|
|
122
|
-
} catch {
|
|
123
|
-
// No status.json or can't stat โ skip (e.g. the agents/ subdir)
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
} catch (error) {
|
|
127
|
-
console.error(`โ Error during managed process dir cleanup:`, error);
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
/**
|
|
132
|
-
* Update task status
|
|
133
|
-
*/
|
|
134
|
-
private async writeStatus(status: string): Promise<void> {
|
|
135
|
-
if (!this.taskPath) return;
|
|
136
|
-
|
|
137
|
-
try {
|
|
138
|
-
const statusPath = path.join(this.taskPath, "status.txt");
|
|
139
|
-
await fs.writeFile(statusPath, status, "utf8");
|
|
140
|
-
} catch (error) {
|
|
141
|
-
console.error(`โ Failed to write status:`, error);
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
/**
|
|
146
|
-
* Write input file (used for initial state)
|
|
147
|
-
*/
|
|
148
|
-
private async writeInput(content: string): Promise<void> {
|
|
149
|
-
if (!this.taskPath) return;
|
|
150
|
-
|
|
151
|
-
try {
|
|
152
|
-
const inputPath = path.join(this.taskPath, "input.txt");
|
|
153
|
-
await fs.writeFile(inputPath, content, "utf8");
|
|
154
|
-
this.lastInputContent = content;
|
|
155
|
-
} catch (error) {
|
|
156
|
-
console.error(`โ Failed to write input:`, error);
|
|
157
|
-
}
|
|
158
|
-
}
|
|
159
|
-
|
|
160
|
-
/**
|
|
161
|
-
* Write metadata file
|
|
162
|
-
*/
|
|
163
|
-
private async writeMetadata(data: any): Promise<void> {
|
|
164
|
-
if (!this.taskPath) return;
|
|
165
|
-
|
|
166
|
-
try {
|
|
167
|
-
const metadataPath = path.join(this.taskPath, "metadata.json");
|
|
168
|
-
// Thread/status updates are partial snapshots. Merge them so stable
|
|
169
|
-
// orchestration identity written by createTask (taskId, pid and parent)
|
|
170
|
-
// is never discarded by a later update.
|
|
171
|
-
let existing: Record<string, unknown> = {};
|
|
172
|
-
try {
|
|
173
|
-
existing = JSON.parse(await fs.readFile(metadataPath, "utf8"));
|
|
174
|
-
} catch { /* first write or an interrupted legacy write */ }
|
|
175
|
-
await fs.writeFile(
|
|
176
|
-
metadataPath,
|
|
177
|
-
JSON.stringify({ ...existing, ...data }, null, 2),
|
|
178
|
-
"utf8"
|
|
179
|
-
);
|
|
180
|
-
} catch (error) {
|
|
181
|
-
console.error(`โ Failed to write metadata:`, error);
|
|
182
|
-
}
|
|
183
|
-
}
|
|
184
|
-
|
|
185
|
-
/**
|
|
186
|
-
* Persist the remote identity alongside the local task. Keeping the local
|
|
187
|
-
* slug and remote UUID as separate fields lets resume reconnect without ever
|
|
188
|
-
* mistaking one for the other.
|
|
189
|
-
*/
|
|
190
|
-
static async persistRemoteIdentity(
|
|
191
|
-
taskId: string,
|
|
192
|
-
remoteTaskId: string,
|
|
193
|
-
remoteMessageId?: string
|
|
194
|
-
): Promise<void> {
|
|
195
|
-
const taskPath = path.join(AgentSyncFs.sharedBasePath, taskId);
|
|
196
|
-
await AgentSyncFs.writeRemoteIdentity(
|
|
197
|
-
taskPath,
|
|
198
|
-
remoteTaskId,
|
|
199
|
-
remoteMessageId
|
|
200
|
-
);
|
|
201
|
-
}
|
|
202
|
-
|
|
203
|
-
async setRemoteIdentity(
|
|
204
|
-
remoteTaskId: string,
|
|
205
|
-
remoteMessageId?: string
|
|
206
|
-
): Promise<void> {
|
|
207
|
-
if (!this.taskPath) return;
|
|
208
|
-
await AgentSyncFs.writeRemoteIdentity(this.taskPath, remoteTaskId, remoteMessageId);
|
|
209
|
-
}
|
|
210
|
-
|
|
211
|
-
private static async writeRemoteIdentity(
|
|
212
|
-
taskPath: string,
|
|
213
|
-
remoteTaskId: string,
|
|
214
|
-
remoteMessageId?: string
|
|
215
|
-
): Promise<void> {
|
|
216
|
-
try {
|
|
217
|
-
const metadataPath = path.join(taskPath, "metadata.json");
|
|
218
|
-
let metadata: any = {};
|
|
219
|
-
try {
|
|
220
|
-
metadata = JSON.parse(await fs.readFile(metadataPath, "utf8"));
|
|
221
|
-
} catch {
|
|
222
|
-
// The normal path already created metadata, but recover if it was
|
|
223
|
-
// removed or malformed while the task was running.
|
|
224
|
-
}
|
|
225
|
-
|
|
226
|
-
metadata.remoteTaskId = remoteTaskId;
|
|
227
|
-
// Preserve the established session field name for compatibility with
|
|
228
|
-
// callers that already read knowhowTaskId.
|
|
229
|
-
metadata.knowhowTaskId = remoteTaskId;
|
|
230
|
-
if (remoteMessageId) {
|
|
231
|
-
metadata.remoteMessageId = remoteMessageId;
|
|
232
|
-
metadata.knowhowMessageId = remoteMessageId;
|
|
233
|
-
}
|
|
234
|
-
|
|
235
|
-
await fs.writeFile(
|
|
236
|
-
metadataPath,
|
|
237
|
-
JSON.stringify(metadata, null, 2),
|
|
238
|
-
"utf8"
|
|
239
|
-
);
|
|
240
|
-
} catch (error) {
|
|
241
|
-
console.error(`โ Failed to persist remote task identity:`, error);
|
|
242
|
-
}
|
|
243
|
-
}
|
|
244
|
-
|
|
245
|
-
/**
|
|
246
|
-
* Append a token usage entry (including the full message chain sent for
|
|
247
|
-
* that call) to usage.json. This is intended for debugging cache-hit
|
|
248
|
-
* issues, where comparing the message chains and usage values between
|
|
249
|
-
* consecutive calls can reveal when a cache prefix was invalidated.
|
|
250
|
-
*
|
|
251
|
-
* To prevent exponential file growth, if the new entry's message thread
|
|
252
|
-
* fully contains the previous entry's thread as a prefix, the previous
|
|
253
|
-
* thread is replaced with { PREV_CACHE_HIT: true } so only the new
|
|
254
|
-
* messages (the delta) are stored alongside the new usage data.
|
|
255
|
-
*/
|
|
256
|
-
private async appendUsageEntry(entry: any): Promise<void> {
|
|
257
|
-
if (!this.taskPath) return;
|
|
258
|
-
|
|
259
|
-
try {
|
|
260
|
-
const usagePath = path.join(this.taskPath, "usage.json");
|
|
261
|
-
let entries: any[] = [];
|
|
262
|
-
|
|
263
|
-
try {
|
|
264
|
-
const existingData = await fs.readFile(usagePath, "utf8");
|
|
265
|
-
entries = JSON.parse(existingData);
|
|
266
|
-
} catch {
|
|
267
|
-
// File doesn't exist or is invalid, start fresh
|
|
268
|
-
}
|
|
269
|
-
|
|
270
|
-
// If the new entry's messages are a superset of the last entry's
|
|
271
|
-
// messages (i.e. the last thread is a prefix of the new thread),
|
|
272
|
-
// collapse the last entry's messages to { PREV_CACHE_HIT: true }
|
|
273
|
-
// and store only the new delta โ preventing exponential growth.
|
|
274
|
-
if (entries.length > 0) {
|
|
275
|
-
const lastEntry = entries[entries.length - 1];
|
|
276
|
-
const prevMessages: any[] = lastEntry?.messages;
|
|
277
|
-
const newMessages: any[] = entry?.messages;
|
|
278
|
-
if (
|
|
279
|
-
Array.isArray(prevMessages) &&
|
|
280
|
-
Array.isArray(newMessages) &&
|
|
281
|
-
prevMessages.length > 0 &&
|
|
282
|
-
newMessages.length >= prevMessages.length &&
|
|
283
|
-
JSON.stringify(newMessages.slice(0, prevMessages.length)) ===
|
|
284
|
-
JSON.stringify(prevMessages)
|
|
285
|
-
) {
|
|
286
|
-
// Replace the previous full thread with a compact sentinel
|
|
287
|
-
lastEntry.messages = [{ PREV_CACHE_HIT: true }];
|
|
288
|
-
}
|
|
289
|
-
}
|
|
290
|
-
|
|
291
|
-
entries.push(entry);
|
|
292
|
-
await fs.writeFile(usagePath, JSON.stringify(entries, null, 2), "utf8");
|
|
293
|
-
} catch (error) {
|
|
294
|
-
console.error(`โ Failed to append usage entry:`, error);
|
|
295
|
-
}
|
|
296
|
-
}
|
|
297
|
-
|
|
298
|
-
/**
|
|
299
|
-
* Update metadata file with current agent state
|
|
300
|
-
*/
|
|
301
|
-
private async updateMetadata(
|
|
302
|
-
agent: BaseAgent,
|
|
303
|
-
inProgress: boolean,
|
|
304
|
-
result?: string
|
|
305
|
-
): Promise<void> {
|
|
306
|
-
if (!this.taskPath) return;
|
|
307
|
-
|
|
308
|
-
try {
|
|
309
|
-
const metadataPath = path.join(this.taskPath, "metadata.json");
|
|
310
|
-
let metadata: any = {};
|
|
311
|
-
|
|
312
|
-
try {
|
|
313
|
-
const existingData = await fs.readFile(metadataPath, "utf8");
|
|
314
|
-
metadata = JSON.parse(existingData);
|
|
315
|
-
} catch {
|
|
316
|
-
// File doesn't exist or is invalid, start fresh
|
|
317
|
-
}
|
|
318
|
-
|
|
319
|
-
metadata.threads = agent.getThreads();
|
|
320
|
-
metadata.totalCostUsd = agent.getTotalCostUsd();
|
|
321
|
-
metadata.tokenUsage = agent.getTokenUsage();
|
|
322
|
-
metadata.agentName = agent.name;
|
|
323
|
-
// Record the model/provider actually in use at this sync so task
|
|
324
|
-
// history reflects the real model (including mid-run fallbacks), not
|
|
325
|
-
// just the named agent.
|
|
326
|
-
metadata.model = agent.getModel();
|
|
327
|
-
metadata.provider = agent.getProvider();
|
|
328
|
-
// Persist reasoning settings so a resume can restore the exact
|
|
329
|
-
// reasoning effort / summarize behavior the run was using. (The
|
|
330
|
-
// encrypted reasoning items + summaries themselves ride along on the
|
|
331
|
-
// thread messages via `_reasoning_details` / `reasoning_summary`.)
|
|
332
|
-
metadata.reasoningEffort = agent.getReasoningEffort?.();
|
|
333
|
-
metadata.summarizeReasoning = agent.getSummarizeReasoning?.();
|
|
334
|
-
// Tool schemas are part of the provider cache prefix. Preserve the exact
|
|
335
|
-
// request-visible list so resume/fork can recreate the same request.
|
|
336
|
-
metadata.enabledTools = agent.getEnabledToolNames();
|
|
337
|
-
metadata.inProgress = inProgress;
|
|
338
|
-
metadata.lastUpdate = new Date().toISOString();
|
|
339
|
-
|
|
340
|
-
if (result !== undefined) {
|
|
341
|
-
metadata.result = result;
|
|
342
|
-
metadata.status = "completed";
|
|
343
|
-
await this.writeStatus("completed");
|
|
344
|
-
}
|
|
345
|
-
|
|
346
|
-
await fs.writeFile(
|
|
347
|
-
metadataPath,
|
|
348
|
-
JSON.stringify(metadata, null, 2),
|
|
349
|
-
"utf8"
|
|
350
|
-
);
|
|
351
|
-
} catch (error) {
|
|
352
|
-
console.error(`โ Failed to update metadata:`, error);
|
|
353
|
-
}
|
|
354
|
-
}
|
|
355
|
-
|
|
356
|
-
/**
|
|
357
|
-
* Read and process status file changes
|
|
358
|
-
*/
|
|
359
|
-
private async readStatus(): Promise<string | null> {
|
|
360
|
-
if (!this.taskPath) return null;
|
|
361
|
-
|
|
362
|
-
try {
|
|
363
|
-
const statusPath = path.join(this.taskPath, "status.txt");
|
|
364
|
-
const content = await fs.readFile(statusPath, "utf8");
|
|
365
|
-
return content.trim();
|
|
366
|
-
} catch (error) {
|
|
367
|
-
// File might not exist or be accessible
|
|
368
|
-
return null;
|
|
369
|
-
}
|
|
370
|
-
}
|
|
371
|
-
|
|
372
|
-
/**
|
|
373
|
-
* Read and process input file changes
|
|
374
|
-
*/
|
|
375
|
-
private async readInput(): Promise<string | null> {
|
|
376
|
-
if (!this.taskPath) return null;
|
|
377
|
-
|
|
378
|
-
try {
|
|
379
|
-
const inputPath = path.join(this.taskPath, "input.txt");
|
|
380
|
-
const content = await fs.readFile(inputPath, "utf8");
|
|
381
|
-
return content;
|
|
382
|
-
} catch (error) {
|
|
383
|
-
// File might not exist or be accessible
|
|
384
|
-
return null;
|
|
385
|
-
}
|
|
386
|
-
}
|
|
387
|
-
|
|
388
|
-
/**
|
|
389
|
-
* Check for file changes and process them
|
|
390
|
-
*/
|
|
391
|
-
private async checkForChanges(agent: BaseAgent): Promise<void> {
|
|
392
|
-
if (!this.taskPath) return;
|
|
393
|
-
|
|
394
|
-
try {
|
|
395
|
-
// Check status changes
|
|
396
|
-
const status = await this.readStatus();
|
|
397
|
-
if (status === "paused") {
|
|
398
|
-
console.log(`โธ๏ธ Agent task ${this.taskId} paused via filesystem`);
|
|
399
|
-
await agent.pause();
|
|
400
|
-
await this.waitForResume(agent);
|
|
401
|
-
} else if (status === "killed") {
|
|
402
|
-
console.log(`๐ Agent task ${this.taskId} killed via filesystem`);
|
|
403
|
-
await agent.kill();
|
|
404
|
-
}
|
|
405
|
-
|
|
406
|
-
// Check for new input/messages
|
|
407
|
-
const input = await this.readInput();
|
|
408
|
-
if (input && input !== this.lastInputContent && input.trim() !== "") {
|
|
409
|
-
console.log(
|
|
410
|
-
`๐ฌ New message received via filesystem for task ${this.taskId}`
|
|
411
|
-
);
|
|
412
|
-
this.lastInputContent = input;
|
|
413
|
-
|
|
414
|
-
// Detect slash commands in the input
|
|
415
|
-
if (input.trim().startsWith("/")) {
|
|
416
|
-
await this.handleInputCommand(agent, input.trim());
|
|
417
|
-
} else {
|
|
418
|
-
agent.addPendingUserMessage({
|
|
419
|
-
role: "user",
|
|
420
|
-
content: input,
|
|
421
|
-
});
|
|
422
|
-
}
|
|
423
|
-
|
|
424
|
-
// Clear the input file after processing
|
|
425
|
-
await this.writeInput("");
|
|
426
|
-
}
|
|
427
|
-
} catch (error) {
|
|
428
|
-
console.error(`โ Error checking for changes:`, error);
|
|
429
|
-
}
|
|
430
|
-
}
|
|
431
|
-
|
|
432
|
-
/**
|
|
433
|
-
* Handle slash commands sent via input.txt
|
|
434
|
-
*/
|
|
435
|
-
private async handleInputCommand(agent: BaseAgent, input: string): Promise<void> {
|
|
436
|
-
const [command, ...rest] = input.split(" ");
|
|
437
|
-
const message = rest.join(" ").trim() || undefined;
|
|
438
|
-
|
|
439
|
-
if (command === "/poke") {
|
|
440
|
-
console.log(`๐ซต Received /poke command for task ${this.taskId}`);
|
|
441
|
-
agent.interrupt(message);
|
|
442
|
-
} else {
|
|
443
|
-
// Unknown command โ treat as a regular message
|
|
444
|
-
console.warn(`โ ๏ธ Unknown command "${command}", treating as message`);
|
|
445
|
-
agent.addPendingUserMessage({ role: "user", content: input });
|
|
446
|
-
}
|
|
447
|
-
}
|
|
448
|
-
|
|
449
|
-
/**
|
|
450
|
-
* Wait for resume by monitoring status file
|
|
451
|
-
*/
|
|
452
|
-
private async waitForResume(agent: BaseAgent): Promise<void> {
|
|
453
|
-
const POLL_INTERVAL_MS = 2000;
|
|
454
|
-
const MAX_WAIT_MS = 60 * 60 * 1000; // 1 hour
|
|
455
|
-
const startTime = Date.now();
|
|
456
|
-
|
|
457
|
-
while (Date.now() - startTime < MAX_WAIT_MS) {
|
|
458
|
-
await new Promise((resolve) => setTimeout(resolve, POLL_INTERVAL_MS));
|
|
459
|
-
|
|
460
|
-
const status = await this.readStatus();
|
|
461
|
-
|
|
462
|
-
if (status === "killed") {
|
|
463
|
-
console.log(`๐ Agent task ${this.taskId} killed while paused`);
|
|
464
|
-
await agent.kill();
|
|
465
|
-
return;
|
|
466
|
-
}
|
|
467
|
-
|
|
468
|
-
if (status === "running") {
|
|
469
|
-
console.log(`โถ๏ธ Agent task ${this.taskId} resumed`);
|
|
470
|
-
await agent.unpause();
|
|
471
|
-
return;
|
|
472
|
-
}
|
|
473
|
-
}
|
|
474
|
-
|
|
475
|
-
console.warn(`โ ๏ธ Timeout waiting for resume on task ${this.taskId}`);
|
|
476
|
-
}
|
|
477
|
-
|
|
478
|
-
/**
|
|
479
|
-
* Setup filesystem watching for the task
|
|
480
|
-
*/
|
|
481
|
-
private setupFileWatcher(agent: BaseAgent): void {
|
|
482
|
-
if (!this.taskPath || this.watcher) return;
|
|
483
|
-
|
|
484
|
-
try {
|
|
485
|
-
this.watcher = watch(this.taskPath, async (eventType, filename) => {
|
|
486
|
-
if (filename === "status.txt" || filename === "input.txt") {
|
|
487
|
-
await this.checkForChanges(agent);
|
|
488
|
-
}
|
|
489
|
-
});
|
|
490
|
-
|
|
491
|
-
console.log(`๐๏ธ Watching filesystem at: ${this.taskPath}`);
|
|
492
|
-
} catch (error) {
|
|
493
|
-
console.error(`โ Failed to setup file watcher:`, error);
|
|
494
|
-
}
|
|
495
|
-
}
|
|
496
|
-
|
|
497
|
-
/**
|
|
498
|
-
* Set up event-based synchronization for an agent task
|
|
499
|
-
*/
|
|
500
|
-
async setupAgentSync(agent: BaseAgent, taskId?: string): Promise<void> {
|
|
501
|
-
if (!taskId) return;
|
|
502
|
-
|
|
503
|
-
this.taskId = taskId;
|
|
504
|
-
this.taskPath = path.join(this.basePath, this.taskId);
|
|
505
|
-
|
|
506
|
-
// Ensure directory exists (might have been created by createTask)
|
|
507
|
-
try {
|
|
508
|
-
await fs.mkdir(this.taskPath, { recursive: true });
|
|
509
|
-
} catch (error) {
|
|
510
|
-
// Directory might already exist
|
|
511
|
-
}
|
|
512
|
-
|
|
513
|
-
if (!this.eventHandlersSetup) {
|
|
514
|
-
this.setupEventHandlers(agent);
|
|
515
|
-
this.setupFileWatcher(agent);
|
|
516
|
-
this.eventHandlersSetup = true;
|
|
517
|
-
}
|
|
518
|
-
}
|
|
519
|
-
|
|
520
|
-
/**
|
|
521
|
-
* Set up event handlers for automatic synchronization
|
|
522
|
-
*/
|
|
523
|
-
private setupEventHandlers(agent: BaseAgent): void {
|
|
524
|
-
this.agent = agent;
|
|
525
|
-
|
|
526
|
-
// Listen to thread updates to sync state (store reference for cleanup)
|
|
527
|
-
this.threadUpdateHandler = async () => {
|
|
528
|
-
if (!this.taskId) return;
|
|
529
|
-
|
|
530
|
-
try {
|
|
531
|
-
// Track the pending update so the done handler can await it.
|
|
532
|
-
this.pendingThreadUpdatePromise = (async () => {
|
|
533
|
-
await this.updateMetadata(agent, true);
|
|
534
|
-
await this.checkForChanges(agent);
|
|
535
|
-
})();
|
|
536
|
-
await this.pendingThreadUpdatePromise;
|
|
537
|
-
} catch (error) {
|
|
538
|
-
console.error(`โ Error during threadUpdate sync:`, error);
|
|
539
|
-
}
|
|
540
|
-
};
|
|
541
|
-
agent.agentEvents.on(
|
|
542
|
-
agent.eventTypes.threadUpdate,
|
|
543
|
-
this.threadUpdateHandler
|
|
544
|
-
);
|
|
545
|
-
|
|
546
|
-
// Listen to token usage events to record per-call usage + message chain
|
|
547
|
-
// (store reference for cleanup). This is written to usage.json so that
|
|
548
|
-
// cache-hit/cache-miss issues can be debugged by comparing the message
|
|
549
|
-
// chain and usage values sent/received on consecutive AI calls.
|
|
550
|
-
this.tokenUsageHandler = (usage: any) => {
|
|
551
|
-
this.appendUsageEntry(usage).catch((error) => {
|
|
552
|
-
console.error(`โ Error recording token usage:`, error);
|
|
553
|
-
});
|
|
554
|
-
};
|
|
555
|
-
agent.agentEvents.on(
|
|
556
|
-
agent.eventTypes.tokenUsage,
|
|
557
|
-
this.tokenUsageHandler
|
|
558
|
-
);
|
|
559
|
-
|
|
560
|
-
// Listen to completion event to finalize task (store reference for cleanup)
|
|
561
|
-
this.doneHandler = (result: string) => {
|
|
562
|
-
if (!this.taskId) {
|
|
563
|
-
console.warn(`โ ๏ธ [AgentSyncFs] Cannot finalize: taskId=${this.taskId}`);
|
|
564
|
-
return;
|
|
565
|
-
}
|
|
566
|
-
|
|
567
|
-
console.log(
|
|
568
|
-
`๐ฏ [AgentSyncFs] Done event received for task: ${this.taskId}`
|
|
569
|
-
);
|
|
570
|
-
|
|
571
|
-
// Store finalization promise so callers can await it (same pattern as AgentSyncKnowhowWeb)
|
|
572
|
-
this.finalizationPromise = (async () => {
|
|
573
|
-
try {
|
|
574
|
-
// Flush any in-flight thread update before finalizing.
|
|
575
|
-
// This prevents the race where a pending "inProgress: true" metadata write
|
|
576
|
-
// overwrites the finalization write.
|
|
577
|
-
if (this.pendingThreadUpdatePromise) {
|
|
578
|
-
console.log(
|
|
579
|
-
`โณ [AgentSyncFs] Awaiting pending thread update before finalizing...`
|
|
580
|
-
);
|
|
581
|
-
await this.pendingThreadUpdatePromise.catch(() => {
|
|
582
|
-
// Ignore errors in pending update โ we still want to finalize
|
|
583
|
-
});
|
|
584
|
-
this.pendingThreadUpdatePromise = null;
|
|
585
|
-
}
|
|
586
|
-
|
|
587
|
-
await this.updateMetadata(agent, false, result);
|
|
588
|
-
console.log(`โ
Completed filesystem sync for task: ${this.taskId}`);
|
|
589
|
-
await this.cleanup();
|
|
590
|
-
} catch (error) {
|
|
591
|
-
console.error(`โ Error finalizing task:`, error);
|
|
592
|
-
throw error;
|
|
593
|
-
}
|
|
594
|
-
})();
|
|
595
|
-
};
|
|
596
|
-
agent.agentEvents.on(agent.eventTypes.done, this.doneHandler);
|
|
597
|
-
}
|
|
598
|
-
|
|
599
|
-
/**
|
|
600
|
-
* Wait for finalization to complete (for CLI usage)
|
|
601
|
-
*/
|
|
602
|
-
async waitForFinalization(): Promise<void> {
|
|
603
|
-
if (this.finalizationPromise) {
|
|
604
|
-
await this.finalizationPromise;
|
|
605
|
-
}
|
|
606
|
-
}
|
|
607
|
-
|
|
608
|
-
/**
|
|
609
|
-
* Cleanup task directory and watcher
|
|
610
|
-
*/
|
|
611
|
-
async cleanup(): Promise<void> {
|
|
612
|
-
if (this.watcher) {
|
|
613
|
-
this.watcher.close();
|
|
614
|
-
this.watcher = null;
|
|
615
|
-
}
|
|
616
|
-
|
|
617
|
-
// Note: We don't delete the directory here to preserve task history
|
|
618
|
-
// The cleanup process will handle old directories
|
|
619
|
-
}
|
|
620
|
-
|
|
621
|
-
/**
|
|
622
|
-
* Clean up old task directories (older than 3 days)
|
|
623
|
-
*/
|
|
624
|
-
private static async cleanupOldTasks(): Promise<void> {
|
|
625
|
-
try {
|
|
626
|
-
const agentsPath = AgentSyncFs.sharedBasePath;
|
|
627
|
-
|
|
628
|
-
// Check if directory exists
|
|
629
|
-
try {
|
|
630
|
-
await fs.access(agentsPath);
|
|
631
|
-
} catch {
|
|
632
|
-
// Directory doesn't exist, nothing to clean
|
|
633
|
-
return;
|
|
634
|
-
}
|
|
635
|
-
|
|
636
|
-
const entries = await fs.readdir(agentsPath, { withFileTypes: true });
|
|
637
|
-
const now = Date.now();
|
|
638
|
-
const threeDaysMs = 3 * 24 * 60 * 60 * 1000;
|
|
639
|
-
|
|
640
|
-
for (const entry of entries) {
|
|
641
|
-
if (!entry.isDirectory()) continue;
|
|
642
|
-
|
|
643
|
-
const taskPath = path.join(agentsPath, entry.name);
|
|
644
|
-
|
|
645
|
-
try {
|
|
646
|
-
const stats = await fs.stat(taskPath);
|
|
647
|
-
const age = now - stats.mtimeMs;
|
|
648
|
-
|
|
649
|
-
if (age > threeDaysMs) {
|
|
650
|
-
console.log(`๐งน Cleaning up old task directory: ${entry.name}`);
|
|
651
|
-
await fs.rm(taskPath, { recursive: true, force: true });
|
|
652
|
-
}
|
|
653
|
-
} catch (error) {
|
|
654
|
-
// Skip if we can't stat or delete
|
|
655
|
-
console.error(`โ Error cleaning up ${entry.name}:`, error);
|
|
656
|
-
}
|
|
657
|
-
}
|
|
658
|
-
|
|
659
|
-
// Also clean up old execCommand background log files in .knowhow/processes/*.txt
|
|
660
|
-
await AgentSyncFs.cleanupOldProcessLogs(threeDaysMs);
|
|
661
|
-
await AgentSyncFs.cleanupOldManagedProcessDirs(threeDaysMs);
|
|
662
|
-
} catch (error) {
|
|
663
|
-
console.error(`โ Error during cleanup:`, error);
|
|
664
|
-
}
|
|
665
|
-
}
|
|
666
|
-
|
|
667
|
-
/**
|
|
668
|
-
* Clean up old execCommand background log files (.knowhow/processes/*.txt).
|
|
669
|
-
* These are created by the execCommand tool when running background/long-lived
|
|
670
|
-
* commands, and are never cleaned up otherwise.
|
|
671
|
-
*/
|
|
672
|
-
private static async cleanupOldProcessLogs(maxAgeMs: number): Promise<void> {
|
|
673
|
-
try {
|
|
674
|
-
// execCommand writes logs to the parent of the agents dir: .knowhow/processes
|
|
675
|
-
const processesPath = path.dirname(AgentSyncFs.sharedBasePath);
|
|
676
|
-
|
|
677
|
-
try {
|
|
678
|
-
await fs.access(processesPath);
|
|
679
|
-
} catch {
|
|
680
|
-
return;
|
|
681
|
-
}
|
|
682
|
-
|
|
683
|
-
const entries = await fs.readdir(processesPath, { withFileTypes: true });
|
|
684
|
-
const now = Date.now();
|
|
685
|
-
|
|
686
|
-
for (const entry of entries) {
|
|
687
|
-
// Only target the .txt log files that execCommand creates; leave the
|
|
688
|
-
// agents/ directory (and any other subdirectories) alone.
|
|
689
|
-
if (!entry.isFile() || !entry.name.endsWith(".txt")) continue;
|
|
690
|
-
|
|
691
|
-
const logPath = path.join(processesPath, entry.name);
|
|
692
|
-
|
|
693
|
-
try {
|
|
694
|
-
const stats = await fs.stat(logPath);
|
|
695
|
-
const age = now - stats.mtimeMs;
|
|
696
|
-
|
|
697
|
-
if (age > maxAgeMs) {
|
|
698
|
-
console.log(`๐งน Cleaning up old process log file: ${entry.name}`);
|
|
699
|
-
await fs.rm(logPath, { force: true });
|
|
700
|
-
}
|
|
701
|
-
} catch (error) {
|
|
702
|
-
// Skip if we can't stat or delete
|
|
703
|
-
console.error(`โ Error cleaning up log ${entry.name}:`, error);
|
|
704
|
-
}
|
|
705
|
-
}
|
|
706
|
-
} catch (error) {
|
|
707
|
-
console.error(`โ Error during process log cleanup:`, error);
|
|
708
|
-
}
|
|
709
|
-
}
|
|
710
|
-
|
|
711
|
-
/**
|
|
712
|
-
* Start periodic cleanup process
|
|
713
|
-
*/
|
|
714
|
-
private static startSharedCleanupProcess(): void {
|
|
715
|
-
if (AgentSyncFs.cleanupStarted) return;
|
|
716
|
-
AgentSyncFs.cleanupStarted = true;
|
|
717
|
-
|
|
718
|
-
// Run cleanup every hour (shared across all instances)
|
|
719
|
-
AgentSyncFs.sharedCleanupInterval = setInterval(() => {
|
|
720
|
-
AgentSyncFs.cleanupOldTasks();
|
|
721
|
-
}, 60 * 60 * 1000);
|
|
722
|
-
|
|
723
|
-
// Also run once on startup
|
|
724
|
-
AgentSyncFs.cleanupOldTasks();
|
|
725
|
-
}
|
|
726
|
-
|
|
727
|
-
/**
|
|
728
|
-
* Stop cleanup process
|
|
729
|
-
*/
|
|
730
|
-
stopCleanup(): void {
|
|
731
|
-
if (AgentSyncFs.sharedCleanupInterval) {
|
|
732
|
-
clearInterval(AgentSyncFs.sharedCleanupInterval);
|
|
733
|
-
AgentSyncFs.sharedCleanupInterval = null;
|
|
734
|
-
AgentSyncFs.cleanupStarted = false;
|
|
735
|
-
}
|
|
736
|
-
}
|
|
737
|
-
|
|
738
|
-
/**
|
|
739
|
-
* Reset synchronization state
|
|
740
|
-
*/
|
|
741
|
-
reset(): void {
|
|
742
|
-
// Remove old event listeners from the agent before resetting
|
|
743
|
-
if (this.agent) {
|
|
744
|
-
if (this.threadUpdateHandler) {
|
|
745
|
-
this.agent.agentEvents.removeListener(
|
|
746
|
-
this.agent.eventTypes.threadUpdate,
|
|
747
|
-
this.threadUpdateHandler
|
|
748
|
-
);
|
|
749
|
-
this.threadUpdateHandler = undefined;
|
|
750
|
-
}
|
|
751
|
-
if (this.tokenUsageHandler) {
|
|
752
|
-
this.agent.agentEvents.removeListener(
|
|
753
|
-
this.agent.eventTypes.tokenUsage,
|
|
754
|
-
this.tokenUsageHandler
|
|
755
|
-
);
|
|
756
|
-
this.tokenUsageHandler = undefined;
|
|
757
|
-
}
|
|
758
|
-
if (this.doneHandler) {
|
|
759
|
-
this.agent.agentEvents.removeListener(
|
|
760
|
-
this.agent.eventTypes.done,
|
|
761
|
-
this.doneHandler
|
|
762
|
-
);
|
|
763
|
-
this.doneHandler = undefined;
|
|
764
|
-
}
|
|
765
|
-
this.agent = undefined;
|
|
766
|
-
}
|
|
767
|
-
this.cleanup();
|
|
768
|
-
this.taskId = undefined;
|
|
769
|
-
this.taskPath = undefined;
|
|
770
|
-
this.eventHandlersSetup = false;
|
|
771
|
-
this.lastInputContent = "";
|
|
772
|
-
this.finalizationPromise = null;
|
|
773
|
-
this.pendingThreadUpdatePromise = null;
|
|
774
|
-
}
|
|
775
|
-
}
|