@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
package/src/commands/modules.ts
DELETED
|
@@ -1,704 +0,0 @@
|
|
|
1
|
-
import { Command } from "commander";
|
|
2
|
-
import { execSync } from "child_process";
|
|
3
|
-
import * as fs from "fs";
|
|
4
|
-
import * as path from "path";
|
|
5
|
-
import * as os from "os";
|
|
6
|
-
import { getConfig, getGlobalConfig, updateConfig, updateGlobalConfig } from "../config";
|
|
7
|
-
import * as readline from "readline";
|
|
8
|
-
|
|
9
|
-
// Default built-in modules that `knowhow modules setup` adds to the config.
|
|
10
|
-
export const BUILTIN_MODULES = [
|
|
11
|
-
"@tyvm/knowhow-module-script",
|
|
12
|
-
"@tyvm/knowhow-module-terminal",
|
|
13
|
-
];
|
|
14
|
-
|
|
15
|
-
/**
|
|
16
|
-
* Returns the path to the .knowhow directory (used as npm install prefix).
|
|
17
|
-
* For global: ~/.knowhow
|
|
18
|
-
* For local: <cwd>/.knowhow
|
|
19
|
-
*/
|
|
20
|
-
function getKnowhowDir(isGlobal: boolean): string {
|
|
21
|
-
if (isGlobal) {
|
|
22
|
-
return path.join(os.homedir(), ".knowhow");
|
|
23
|
-
}
|
|
24
|
-
return path.join(process.cwd(), ".knowhow");
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
/**
|
|
28
|
-
* Ensures the .knowhow directory has a minimal package.json so
|
|
29
|
-
* `npm install --prefix` works cleanly without polluting the project root.
|
|
30
|
-
*/
|
|
31
|
-
function ensureKnowhowPackageJson(knowhowDir: string): void {
|
|
32
|
-
const pkgPath = path.join(knowhowDir, "package.json");
|
|
33
|
-
if (!fs.existsSync(pkgPath)) {
|
|
34
|
-
fs.mkdirSync(knowhowDir, { recursive: true });
|
|
35
|
-
fs.writeFileSync(
|
|
36
|
-
pkgPath,
|
|
37
|
-
JSON.stringify({ name: "knowhow-modules", private: true, version: "1.0.0" }, null, 2)
|
|
38
|
-
);
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
/**
|
|
43
|
-
* Options that control how a module is installed via npm.
|
|
44
|
-
*/
|
|
45
|
-
interface InstallOptions {
|
|
46
|
-
/**
|
|
47
|
-
* When true, force npm to run the module's install/build lifecycle scripts
|
|
48
|
-
* (preinstall/install/postinstall) in the foreground.
|
|
49
|
-
*
|
|
50
|
-
* This matters for native modules like `isolated-vm`, whose `install` script
|
|
51
|
-
* (`node-gyp-build || node-gyp rebuild`) selects/copies the correct prebuilt
|
|
52
|
-
* binary (or compiles from source). npm 11 and some org/CI policies block
|
|
53
|
-
* install scripts by default, which leaves native deps in a broken/mismatched
|
|
54
|
-
* state that later aborts the process at require-time (e.g. the
|
|
55
|
-
* `IsolateSpecificSize` assertion). Passing this flag ensures those scripts
|
|
56
|
-
* actually run so the right binary is in place.
|
|
57
|
-
*/
|
|
58
|
-
allowScripts?: boolean;
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
/**
|
|
62
|
-
* Run `npm install --prefix <knowhowDir> <mod>` so that modules land in
|
|
63
|
-
* .knowhow/node_modules rather than the project's node_modules.
|
|
64
|
-
*
|
|
65
|
-
* When `allowScripts` is set, we explicitly force install lifecycle scripts to
|
|
66
|
-
* run (`--foreground-scripts --ignore-scripts=false`) so native modules build
|
|
67
|
-
* correctly even under npm 11 / restrictive org policies that skip scripts by
|
|
68
|
-
* default.
|
|
69
|
-
*/
|
|
70
|
-
function npmInstallToKnowhow(
|
|
71
|
-
mod: string,
|
|
72
|
-
knowhowDir: string,
|
|
73
|
-
options: InstallOptions = {}
|
|
74
|
-
): void {
|
|
75
|
-
const scriptFlags = options.allowScripts
|
|
76
|
-
? " --foreground-scripts --ignore-scripts=false"
|
|
77
|
-
: "";
|
|
78
|
-
execSync(`npm install --prefix "${knowhowDir}" ${mod}${scriptFlags}`, {
|
|
79
|
-
stdio: "inherit",
|
|
80
|
-
encoding: "utf-8",
|
|
81
|
-
});
|
|
82
|
-
|
|
83
|
-
// When scripts weren't explicitly allowed, npm 11+ (and restrictive org/CI
|
|
84
|
-
// policies) silently *skip* package install/build scripts. For native addons
|
|
85
|
-
// like isolated-vm this leaves the package present but its native binary
|
|
86
|
-
// unbuilt ā which later aborts at runtime with a cryptic error. Detect that
|
|
87
|
-
// situation now and tell the user exactly how to fix it (re-run with
|
|
88
|
-
// --allow-scripts) rather than letting them hit the runtime crash.
|
|
89
|
-
if (!options.allowScripts) {
|
|
90
|
-
warnIfInstallScriptsSkipped(knowhowDir);
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
/**
|
|
95
|
-
* Names of lifecycle scripts that run during `npm install` and typically build
|
|
96
|
-
* native code. If a freshly-installed package declares any of these AND we
|
|
97
|
-
* installed without allowing scripts, they were skipped.
|
|
98
|
-
*/
|
|
99
|
-
const INSTALL_LIFECYCLE_SCRIPTS = ["preinstall", "install", "postinstall"];
|
|
100
|
-
|
|
101
|
-
/**
|
|
102
|
-
* Walk the installed dependency tree under <knowhowDir>/node_modules and return
|
|
103
|
-
* the names of packages that declare native/build install-lifecycle scripts.
|
|
104
|
-
*
|
|
105
|
-
* This reads the *actually installed* package.json files (rather than querying
|
|
106
|
-
* the registry) so it works offline, reflects the real resolved tree, and
|
|
107
|
-
* catches transitive dependencies (e.g. isolated-vm pulled in by a module).
|
|
108
|
-
*/
|
|
109
|
-
function findPackagesWithInstallScripts(knowhowDir: string): string[] {
|
|
110
|
-
const nodeModules = path.join(knowhowDir, "node_modules");
|
|
111
|
-
const found = new Set<string>();
|
|
112
|
-
|
|
113
|
-
const readPkgScripts = (pkgDir: string): void => {
|
|
114
|
-
const pkgJsonPath = path.join(pkgDir, "package.json");
|
|
115
|
-
if (!fs.existsSync(pkgJsonPath)) return;
|
|
116
|
-
try {
|
|
117
|
-
const pkg = JSON.parse(fs.readFileSync(pkgJsonPath, "utf-8"));
|
|
118
|
-
const scripts = pkg.scripts ?? {};
|
|
119
|
-
const hasInstallScript = INSTALL_LIFECYCLE_SCRIPTS.some(
|
|
120
|
-
(s) => typeof scripts[s] === "string" && scripts[s].trim().length > 0
|
|
121
|
-
);
|
|
122
|
-
if (hasInstallScript && pkg.name) {
|
|
123
|
-
found.add(pkg.name);
|
|
124
|
-
}
|
|
125
|
-
} catch {
|
|
126
|
-
// ignore malformed package.json
|
|
127
|
-
}
|
|
128
|
-
};
|
|
129
|
-
|
|
130
|
-
const scanDir = (dir: string): void => {
|
|
131
|
-
if (!fs.existsSync(dir)) return;
|
|
132
|
-
let entries: fs.Dirent[] = [];
|
|
133
|
-
try {
|
|
134
|
-
entries = fs.readdirSync(dir, { withFileTypes: true });
|
|
135
|
-
} catch {
|
|
136
|
-
return;
|
|
137
|
-
}
|
|
138
|
-
for (const entry of entries) {
|
|
139
|
-
if (!entry.isDirectory()) continue;
|
|
140
|
-
if (entry.name === ".bin" || entry.name === ".cache") continue;
|
|
141
|
-
const full = path.join(dir, entry.name);
|
|
142
|
-
if (entry.name.startsWith("@")) {
|
|
143
|
-
// scope directory ā recurse one level into the scoped packages
|
|
144
|
-
scanDir(full);
|
|
145
|
-
continue;
|
|
146
|
-
}
|
|
147
|
-
readPkgScripts(full);
|
|
148
|
-
// Recurse into nested node_modules for hoisting edge cases.
|
|
149
|
-
const nested = path.join(full, "node_modules");
|
|
150
|
-
if (fs.existsSync(nested)) scanDir(nested);
|
|
151
|
-
}
|
|
152
|
-
};
|
|
153
|
-
|
|
154
|
-
scanDir(nodeModules);
|
|
155
|
-
return Array.from(found).sort();
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
/**
|
|
159
|
-
* Check whether the just-installed tree contains packages with install scripts
|
|
160
|
-
* (that were skipped because --allow-scripts wasn't passed) and, if so, print a
|
|
161
|
-
* clear warning telling the user to re-run with --allow-scripts.
|
|
162
|
-
*/
|
|
163
|
-
function warnIfInstallScriptsSkipped(knowhowDir: string): void {
|
|
164
|
-
let pkgsWithScripts: string[] = [];
|
|
165
|
-
try {
|
|
166
|
-
pkgsWithScripts = findPackagesWithInstallScripts(knowhowDir);
|
|
167
|
-
} catch {
|
|
168
|
-
return;
|
|
169
|
-
}
|
|
170
|
-
if (pkgsWithScripts.length === 0) return;
|
|
171
|
-
|
|
172
|
-
console.warn(
|
|
173
|
-
"\nā ļø Some installed packages have native install/build scripts that may have\n" +
|
|
174
|
-
" been skipped (npm 11+ blocks install scripts by default):\n" +
|
|
175
|
-
pkgsWithScripts.map((p) => ` ⢠${p}`).join("\n") +
|
|
176
|
-
"\n\n If a module fails to load at runtime (e.g. isolated-vm), re-run the\n" +
|
|
177
|
-
" install with --allow-scripts so these build steps can run:\n\n" +
|
|
178
|
-
" knowhow modules install <module> --allow-scripts\n" +
|
|
179
|
-
" # or\n" +
|
|
180
|
-
" knowhow modules setup --allow-scripts\n"
|
|
181
|
-
);
|
|
182
|
-
}
|
|
183
|
-
|
|
184
|
-
/**
|
|
185
|
-
* Returns true if a module package is already installed in the given knowhow dir.
|
|
186
|
-
*/
|
|
187
|
-
function isModuleInstalled(mod: string, knowhowDir: string): boolean {
|
|
188
|
-
try {
|
|
189
|
-
require.resolve(mod, {
|
|
190
|
-
paths: [path.join(knowhowDir, "node_modules"), knowhowDir],
|
|
191
|
-
});
|
|
192
|
-
return true;
|
|
193
|
-
} catch {
|
|
194
|
-
return false;
|
|
195
|
-
}
|
|
196
|
-
}
|
|
197
|
-
|
|
198
|
-
interface NpmRegistryInfo {
|
|
199
|
-
latestVersion: string;
|
|
200
|
-
publishedAt: string;
|
|
201
|
-
}
|
|
202
|
-
|
|
203
|
-
/**
|
|
204
|
-
* Fetch the latest version and publish time from the npm registry for a package.
|
|
205
|
-
* Returns null if the package info can't be fetched.
|
|
206
|
-
*/
|
|
207
|
-
async function fetchNpmRegistryInfo(mod: string): Promise<NpmRegistryInfo | null> {
|
|
208
|
-
try {
|
|
209
|
-
// npm view <pkg> version time --json returns either a single value or array
|
|
210
|
-
const output = execSync(`npm view ${mod} version time --json`, {
|
|
211
|
-
stdio: ["ignore", "pipe", "pipe"],
|
|
212
|
-
encoding: "utf-8",
|
|
213
|
-
});
|
|
214
|
-
const parsed = JSON.parse(output.trim());
|
|
215
|
-
let latestVersion: string;
|
|
216
|
-
let timestamps: Record<string, string> = {};
|
|
217
|
-
if (Array.isArray(parsed)) {
|
|
218
|
-
latestVersion = parsed[0];
|
|
219
|
-
timestamps = parsed[1] || {};
|
|
220
|
-
} else if (parsed && typeof parsed === "object") {
|
|
221
|
-
latestVersion = parsed["version"] || "";
|
|
222
|
-
timestamps = parsed["time"] || {};
|
|
223
|
-
} else {
|
|
224
|
-
latestVersion = String(parsed);
|
|
225
|
-
}
|
|
226
|
-
const publishedAt = timestamps[latestVersion] || timestamps["modified"] || "";
|
|
227
|
-
return { latestVersion, publishedAt };
|
|
228
|
-
} catch {
|
|
229
|
-
return null;
|
|
230
|
-
}
|
|
231
|
-
}
|
|
232
|
-
|
|
233
|
-
/**
|
|
234
|
-
* Simple engine range checker ā handles the common cases:
|
|
235
|
-
* ">=22" ">=22.0.0" "^20" "20.x" "*" ""
|
|
236
|
-
* Returns true if the given nodeVersion satisfies the range.
|
|
237
|
-
* Falls back to true (permissive) for unsupported range syntax.
|
|
238
|
-
*/
|
|
239
|
-
function nodeSatisfiesRange(nodeVersion: string, range: string): boolean {
|
|
240
|
-
if (!range || range === "*" || range === "") return true;
|
|
241
|
-
|
|
242
|
-
// Parse "major.minor.patch" from e.g. "v20.17.0"
|
|
243
|
-
const vMatch = nodeVersion.replace(/^v/, "").match(/^(\d+)(?:\.(\d+))?(?:\.(\d+))?/);
|
|
244
|
-
if (!vMatch) return true;
|
|
245
|
-
const vMajor = parseInt(vMatch[1], 10);
|
|
246
|
-
const vMinor = parseInt(vMatch[2] ?? "0", 10);
|
|
247
|
-
const vPatch = parseInt(vMatch[3] ?? "0", 10);
|
|
248
|
-
const vNum = vMajor * 1_000_000 + vMinor * 1_000 + vPatch;
|
|
249
|
-
|
|
250
|
-
function parseVersion(s: string): number {
|
|
251
|
-
const m = s.trim().match(/^(\d+)(?:\.(\d+))?(?:\.(\d+))?/);
|
|
252
|
-
if (!m) return 0;
|
|
253
|
-
return parseInt(m[1], 10) * 1_000_000 + parseInt(m[2] ?? "0", 10) * 1_000 + parseInt(m[3] ?? "0", 10);
|
|
254
|
-
}
|
|
255
|
-
|
|
256
|
-
// Handle " || " ā any segment satisfying is fine
|
|
257
|
-
if (range.includes("||")) {
|
|
258
|
-
return range.split("||").some((r) => nodeSatisfiesRange(nodeVersion, r.trim()));
|
|
259
|
-
}
|
|
260
|
-
|
|
261
|
-
// Handle space-separated AND conditions e.g. ">=14 <18"
|
|
262
|
-
const parts = range.trim().split(/\s+/);
|
|
263
|
-
for (const part of parts) {
|
|
264
|
-
const gteMatch = part.match(/^>=(.+)/);
|
|
265
|
-
const gtMatch = part.match(/^>(?!=)(.+)/);
|
|
266
|
-
const lteMatch = part.match(/^<=(.+)/);
|
|
267
|
-
const ltMatch = part.match(/^<(?!=)(.+)/);
|
|
268
|
-
const caretMatch = part.match(/^\^(\d+)/);
|
|
269
|
-
const tildeMatch = part.match(/^~(\d+)(?:\.(\d+))?/);
|
|
270
|
-
const exactMatch = part.match(/^(\d+(?:\.\d+)*)/);
|
|
271
|
-
|
|
272
|
-
if (gteMatch) {
|
|
273
|
-
if (vNum < parseVersion(gteMatch[1])) return false;
|
|
274
|
-
} else if (gtMatch) {
|
|
275
|
-
if (vNum <= parseVersion(gtMatch[1])) return false;
|
|
276
|
-
} else if (lteMatch) {
|
|
277
|
-
if (vNum > parseVersion(lteMatch[1])) return false;
|
|
278
|
-
} else if (ltMatch) {
|
|
279
|
-
if (vNum >= parseVersion(ltMatch[1])) return false;
|
|
280
|
-
} else if (caretMatch) {
|
|
281
|
-
const base = parseVersion(caretMatch[1]);
|
|
282
|
-
const baseMajor = parseInt(caretMatch[1], 10);
|
|
283
|
-
if (vNum < base || vMajor !== baseMajor) return false;
|
|
284
|
-
} else if (tildeMatch) {
|
|
285
|
-
const baseMajor = parseInt(tildeMatch[1], 10);
|
|
286
|
-
const baseMinor = parseInt(tildeMatch[2] ?? "0", 10);
|
|
287
|
-
const base = parseVersion(`${baseMajor}.${baseMinor}`);
|
|
288
|
-
const nextMinor = parseVersion(`${baseMajor}.${baseMinor + 1}`);
|
|
289
|
-
if (vNum < base || vNum >= nextMinor) return false;
|
|
290
|
-
} else if (exactMatch && !part.startsWith("v")) {
|
|
291
|
-
// e.g. "20.x" or "20"
|
|
292
|
-
const xMatch = part.match(/^(\d+)(?:\.x)?$/);
|
|
293
|
-
if (xMatch) {
|
|
294
|
-
if (vMajor !== parseInt(xMatch[1], 10)) return false;
|
|
295
|
-
}
|
|
296
|
-
}
|
|
297
|
-
// Unknown operators ā fall through (permissive)
|
|
298
|
-
}
|
|
299
|
-
return true;
|
|
300
|
-
}
|
|
301
|
-
|
|
302
|
-
/**
|
|
303
|
-
* Fetch the latest version of a package that is compatible with the current
|
|
304
|
-
* Node.js engine. Falls back to "@latest" if no engine info is available.
|
|
305
|
-
*
|
|
306
|
-
* Uses the npm registry API to get per-version engine requirements.
|
|
307
|
-
*/
|
|
308
|
-
async function fetchLatestCompatibleVersion(mod: string): Promise<string> {
|
|
309
|
-
const currentNode = process.version; // e.g. "v20.17.0"
|
|
310
|
-
try {
|
|
311
|
-
// Encode scoped package names for URL (e.g. @tyvm/pkg -> @tyvm%2Fpkg)
|
|
312
|
-
const encodedMod = mod.replace(/^@/, "").replace("/", "%2F");
|
|
313
|
-
const registryUrl = mod.startsWith("@")
|
|
314
|
-
? `https://registry.npmjs.org/@${encodedMod}`
|
|
315
|
-
: `https://registry.npmjs.org/${mod}`;
|
|
316
|
-
|
|
317
|
-
const response = await fetch(registryUrl);
|
|
318
|
-
if (!response.ok) throw new Error(`Registry returned ${response.status}`);
|
|
319
|
-
const pkgData = await response.json() as any;
|
|
320
|
-
|
|
321
|
-
// pkgData.versions is a map of version -> package metadata
|
|
322
|
-
const versionsMap: Record<string, any> = pkgData.versions ?? {};
|
|
323
|
-
const allVersions = Object.keys(versionsMap);
|
|
324
|
-
|
|
325
|
-
// Build per-version engine map from actual per-version metadata
|
|
326
|
-
const enginesByVersion: Record<string, string> = {};
|
|
327
|
-
for (const [v, meta] of Object.entries(versionsMap)) {
|
|
328
|
-
enginesByVersion[v] = (meta as any)?.engines?.node ?? "";
|
|
329
|
-
}
|
|
330
|
-
|
|
331
|
-
if (allVersions.length === 0) return `${mod}@latest`;
|
|
332
|
-
|
|
333
|
-
// Sort versions descending (simple semver numeric sort)
|
|
334
|
-
const sorted = [...allVersions].sort((a, b) => {
|
|
335
|
-
const pa = a.split(".").map(Number);
|
|
336
|
-
const pb = b.split(".").map(Number);
|
|
337
|
-
for (let i = 0; i < 3; i++) {
|
|
338
|
-
if ((pa[i] ?? 0) !== (pb[i] ?? 0)) return (pb[i] ?? 0) - (pa[i] ?? 0);
|
|
339
|
-
}
|
|
340
|
-
return 0;
|
|
341
|
-
});
|
|
342
|
-
|
|
343
|
-
for (const v of sorted) {
|
|
344
|
-
const engineRange = enginesByVersion[v] ?? "";
|
|
345
|
-
if (nodeSatisfiesRange(currentNode, engineRange)) {
|
|
346
|
-
return `${mod}@${v}`;
|
|
347
|
-
}
|
|
348
|
-
}
|
|
349
|
-
|
|
350
|
-
// No compatible version found ā warn and fall back to latest
|
|
351
|
-
console.warn(`ā ļø No version of ${mod} found compatible with Node ${currentNode}. Installing latest anyway.`);
|
|
352
|
-
return `${mod}@latest`;
|
|
353
|
-
} catch {
|
|
354
|
-
// Can't fetch registry info ā fall back to latest
|
|
355
|
-
return `${mod}@latest`;
|
|
356
|
-
}
|
|
357
|
-
}
|
|
358
|
-
|
|
359
|
-
/**
|
|
360
|
-
* Get the currently installed version of a package in .knowhow/node_modules.
|
|
361
|
-
*/
|
|
362
|
-
function getInstalledVersion(mod: string, knowhowDir: string): string | null {
|
|
363
|
-
try {
|
|
364
|
-
const pkgJsonPath = path.join(knowhowDir, "node_modules", mod, "package.json");
|
|
365
|
-
const pkgJson = JSON.parse(fs.readFileSync(pkgJsonPath, "utf-8"));
|
|
366
|
-
return pkgJson.version ?? null;
|
|
367
|
-
} catch {
|
|
368
|
-
return null;
|
|
369
|
-
}
|
|
370
|
-
}
|
|
371
|
-
|
|
372
|
-
/**
|
|
373
|
-
* Format a date string as a human-readable relative time (e.g. "2 days ago").
|
|
374
|
-
*/
|
|
375
|
-
function formatRelativeTime(isoDate: string): string {
|
|
376
|
-
if (!isoDate) return "unknown";
|
|
377
|
-
const then = new Date(isoDate).getTime();
|
|
378
|
-
if (isNaN(then)) return "unknown";
|
|
379
|
-
const diffMs = Date.now() - then;
|
|
380
|
-
const diffMins = Math.floor(diffMs / 60_000);
|
|
381
|
-
if (diffMins < 2) return "just now";
|
|
382
|
-
if (diffMins < 60) return `${diffMins} minutes ago`;
|
|
383
|
-
const diffHours = Math.floor(diffMins / 60);
|
|
384
|
-
if (diffHours < 24) return `${diffHours} hour${diffHours !== 1 ? "s" : ""} ago`;
|
|
385
|
-
const diffDays = Math.floor(diffHours / 24);
|
|
386
|
-
if (diffDays < 30) return `${diffDays} day${diffDays !== 1 ? "s" : ""} ago`;
|
|
387
|
-
const diffMonths = Math.floor(diffDays / 30);
|
|
388
|
-
if (diffMonths < 12) return `${diffMonths} month${diffMonths !== 1 ? "s" : ""} ago`;
|
|
389
|
-
const diffYears = Math.floor(diffMonths / 12);
|
|
390
|
-
return `${diffYears} year${diffYears !== 1 ? "s" : ""} ago`;
|
|
391
|
-
}
|
|
392
|
-
|
|
393
|
-
/**
|
|
394
|
-
* Prompt the user for a yes/no confirmation.
|
|
395
|
-
*/
|
|
396
|
-
function promptConfirm(question: string): Promise<boolean> {
|
|
397
|
-
return new Promise((resolve) => {
|
|
398
|
-
const rl = readline.createInterface({
|
|
399
|
-
input: process.stdin,
|
|
400
|
-
output: process.stdout,
|
|
401
|
-
});
|
|
402
|
-
rl.question(`${question} (y/N) `, (answer) => {
|
|
403
|
-
rl.close();
|
|
404
|
-
resolve(
|
|
405
|
-
answer.trim().toLowerCase() === "y" ||
|
|
406
|
-
answer.trim().toLowerCase() === "yes"
|
|
407
|
-
);
|
|
408
|
-
});
|
|
409
|
-
});
|
|
410
|
-
}
|
|
411
|
-
|
|
412
|
-
export function addModulesCommand(program: Command): void {
|
|
413
|
-
const modulesCmd = program
|
|
414
|
-
.command("modules")
|
|
415
|
-
.description("Manage knowhow modules (install, add to config, list)");
|
|
416
|
-
|
|
417
|
-
modulesCmd
|
|
418
|
-
.command("setup")
|
|
419
|
-
.description(
|
|
420
|
-
"Add default built-in modules to your config and install them into .knowhow/node_modules"
|
|
421
|
-
)
|
|
422
|
-
.option("--global", "Use the global config (~/.knowhow/knowhow.json)")
|
|
423
|
-
.option(
|
|
424
|
-
"--allow-scripts",
|
|
425
|
-
"Allow modules' native install/build scripts to run (needed for native deps like isolated-vm under npm 11)"
|
|
426
|
-
)
|
|
427
|
-
.action(async (opts) => {
|
|
428
|
-
try {
|
|
429
|
-
const isGlobal: boolean = opts.global ?? false;
|
|
430
|
-
const allowScripts: boolean = opts.allowScripts ?? false;
|
|
431
|
-
const cfg = isGlobal ? await getGlobalConfig() : await getConfig();
|
|
432
|
-
const configLabel = isGlobal
|
|
433
|
-
? "~/.knowhow/knowhow.json"
|
|
434
|
-
: ".knowhow/knowhow.json";
|
|
435
|
-
|
|
436
|
-
if (!cfg.modules) cfg.modules = [];
|
|
437
|
-
|
|
438
|
-
const knowhowDir = getKnowhowDir(isGlobal);
|
|
439
|
-
ensureKnowhowPackageJson(knowhowDir);
|
|
440
|
-
|
|
441
|
-
// Even if modules are already in the config, they may not be installed.
|
|
442
|
-
// Check and install any that are missing from .knowhow/node_modules.
|
|
443
|
-
let anyChanges = false;
|
|
444
|
-
for (const mod of BUILTIN_MODULES) {
|
|
445
|
-
if (!mod.startsWith(".") && !mod.startsWith("/")) {
|
|
446
|
-
// Reinstall if the module isn't installed yet, OR if the user
|
|
447
|
-
// explicitly passed --allow-scripts. In the latter case the whole
|
|
448
|
-
// point is to (re-)run the native install/build scripts (e.g.
|
|
449
|
-
// isolated-vm's node-gyp build), so skipping because the package
|
|
450
|
-
// is "already installed" would silently do nothing ā which is
|
|
451
|
-
// exactly the confusing "Nothing to do" case we want to avoid.
|
|
452
|
-
if (!isModuleInstalled(mod, knowhowDir) || allowScripts) {
|
|
453
|
-
const installTarget = await fetchLatestCompatibleVersion(mod);
|
|
454
|
-
console.log(`š¦ Installing ${installTarget}...`);
|
|
455
|
-
npmInstallToKnowhow(installTarget, knowhowDir, { allowScripts });
|
|
456
|
-
console.log(`ā
Installed ${mod}`);
|
|
457
|
-
anyChanges = true;
|
|
458
|
-
}
|
|
459
|
-
}
|
|
460
|
-
if (!cfg.modules.includes(mod)) {
|
|
461
|
-
cfg.modules.push(mod);
|
|
462
|
-
console.log(`ā
Added ${mod} to ${configLabel}`);
|
|
463
|
-
anyChanges = true;
|
|
464
|
-
}
|
|
465
|
-
}
|
|
466
|
-
|
|
467
|
-
if (!anyChanges) {
|
|
468
|
-
console.log(
|
|
469
|
-
`ā
All default modules are already in ${configLabel} and installed. Nothing to do.`
|
|
470
|
-
);
|
|
471
|
-
} else {
|
|
472
|
-
await (isGlobal ? updateGlobalConfig(cfg) : updateConfig(cfg));
|
|
473
|
-
console.log(
|
|
474
|
-
`\nš Setup complete! Modules ready in ${knowhowDir}/node_modules.`
|
|
475
|
-
);
|
|
476
|
-
}
|
|
477
|
-
} catch (error: any) {
|
|
478
|
-
console.error("Error during modules setup:", error.message ?? error);
|
|
479
|
-
process.exit(1);
|
|
480
|
-
}
|
|
481
|
-
});
|
|
482
|
-
|
|
483
|
-
modulesCmd
|
|
484
|
-
.command("install [module]")
|
|
485
|
-
.description(
|
|
486
|
-
"Install a module into .knowhow/node_modules and add it to your config. " +
|
|
487
|
-
"If no module name is given, installs all modules already in the config."
|
|
488
|
-
)
|
|
489
|
-
.option("--global", "Use the global config (~/.knowhow/knowhow.json)")
|
|
490
|
-
.option("--latest", "Force install the latest version (bypasses package-lock)")
|
|
491
|
-
.option(
|
|
492
|
-
"--allow-scripts",
|
|
493
|
-
"Allow the module's native install/build scripts to run (needed for native deps like isolated-vm under npm 11)"
|
|
494
|
-
)
|
|
495
|
-
.action(async (moduleName: string | undefined, opts) => {
|
|
496
|
-
try {
|
|
497
|
-
const isGlobal: boolean = opts.global ?? false;
|
|
498
|
-
const allowScripts: boolean = opts.allowScripts ?? false;
|
|
499
|
-
const cfg = isGlobal ? await getGlobalConfig() : await getConfig();
|
|
500
|
-
const configLabel = isGlobal
|
|
501
|
-
? "~/.knowhow/knowhow.json"
|
|
502
|
-
: ".knowhow/knowhow.json";
|
|
503
|
-
|
|
504
|
-
if (!cfg.modules) cfg.modules = [];
|
|
505
|
-
|
|
506
|
-
const knowhowDir = getKnowhowDir(isGlobal);
|
|
507
|
-
ensureKnowhowPackageJson(knowhowDir);
|
|
508
|
-
|
|
509
|
-
if (!moduleName) {
|
|
510
|
-
// No module specified ā install everything already in the config
|
|
511
|
-
const installable = cfg.modules.filter(
|
|
512
|
-
(m) => !m.startsWith(".") && !m.startsWith("/")
|
|
513
|
-
);
|
|
514
|
-
if (installable.length === 0) {
|
|
515
|
-
console.log(`ā¹ No installable modules found in ${configLabel}.`);
|
|
516
|
-
return;
|
|
517
|
-
}
|
|
518
|
-
console.log(
|
|
519
|
-
`š¦ Installing ${installable.length} module(s) from ${configLabel} into ${knowhowDir}/node_modules...`
|
|
520
|
-
);
|
|
521
|
-
for (const mod of installable) {
|
|
522
|
-
console.log(` š¦ Installing ${mod}...`);
|
|
523
|
-
const installTarget = opts.latest ? await fetchLatestCompatibleVersion(mod) : mod;
|
|
524
|
-
npmInstallToKnowhow(installTarget, knowhowDir, { allowScripts });
|
|
525
|
-
console.log(` ā
Installed ${mod}`);
|
|
526
|
-
}
|
|
527
|
-
console.log(`\nš All modules installed!`);
|
|
528
|
-
return;
|
|
529
|
-
}
|
|
530
|
-
|
|
531
|
-
// Install the specified module
|
|
532
|
-
const installTarget = opts.latest ? await fetchLatestCompatibleVersion(moduleName) : moduleName;
|
|
533
|
-
console.log(`š¦ Installing ${installTarget} into ${knowhowDir}/node_modules...`);
|
|
534
|
-
npmInstallToKnowhow(installTarget, knowhowDir, { allowScripts });
|
|
535
|
-
console.log(`ā
Installed ${moduleName}`);
|
|
536
|
-
|
|
537
|
-
// Add to config if not already there
|
|
538
|
-
if (!cfg.modules.includes(moduleName)) {
|
|
539
|
-
cfg.modules.push(moduleName);
|
|
540
|
-
if (isGlobal) {
|
|
541
|
-
await updateGlobalConfig(cfg);
|
|
542
|
-
} else {
|
|
543
|
-
await updateConfig(cfg);
|
|
544
|
-
}
|
|
545
|
-
console.log(`ā
Added ${moduleName} to ${configLabel}`);
|
|
546
|
-
} else {
|
|
547
|
-
console.log(`ā¹ ${moduleName} is already in ${configLabel}`);
|
|
548
|
-
}
|
|
549
|
-
} catch (error: any) {
|
|
550
|
-
console.error("Error during module install:", error.message ?? error);
|
|
551
|
-
process.exit(1);
|
|
552
|
-
}
|
|
553
|
-
});
|
|
554
|
-
|
|
555
|
-
modulesCmd
|
|
556
|
-
.command("list")
|
|
557
|
-
.description("List all modules in your config")
|
|
558
|
-
.option("--global", "Show global config modules only")
|
|
559
|
-
.action(async (opts) => {
|
|
560
|
-
try {
|
|
561
|
-
const isGlobal: boolean = opts.global ?? false;
|
|
562
|
-
const globalCfg = await getGlobalConfig();
|
|
563
|
-
const localCfg = isGlobal ? null : await getConfig();
|
|
564
|
-
|
|
565
|
-
const globalModules = globalCfg.modules || [];
|
|
566
|
-
const localModules = localCfg?.modules || [];
|
|
567
|
-
|
|
568
|
-
if (isGlobal) {
|
|
569
|
-
console.log(`\nš Global modules (~/.knowhow/knowhow.json):`);
|
|
570
|
-
if (globalModules.length === 0) {
|
|
571
|
-
console.log(" (none)");
|
|
572
|
-
} else {
|
|
573
|
-
globalModules.forEach((m, i) => console.log(` ${i + 1}. ${m}`));
|
|
574
|
-
}
|
|
575
|
-
} else {
|
|
576
|
-
console.log(`\nš Global modules (~/.knowhow/knowhow.json):`);
|
|
577
|
-
if (globalModules.length === 0) {
|
|
578
|
-
console.log(" (none)");
|
|
579
|
-
} else {
|
|
580
|
-
globalModules.forEach((m, i) => console.log(` ${i + 1}. ${m}`));
|
|
581
|
-
}
|
|
582
|
-
console.log(`\nš Local modules (.knowhow/knowhow.json):`);
|
|
583
|
-
if (localModules.length === 0) {
|
|
584
|
-
console.log(" (none)");
|
|
585
|
-
} else {
|
|
586
|
-
localModules.forEach((m, i) => console.log(` ${i + 1}. ${m}`));
|
|
587
|
-
}
|
|
588
|
-
}
|
|
589
|
-
} catch (error: any) {
|
|
590
|
-
console.error("Error listing modules:", error.message ?? error);
|
|
591
|
-
process.exit(1);
|
|
592
|
-
}
|
|
593
|
-
});
|
|
594
|
-
|
|
595
|
-
modulesCmd
|
|
596
|
-
.command("update")
|
|
597
|
-
.description(
|
|
598
|
-
"Check for updates to all modules in your config and update them. " +
|
|
599
|
-
"Shows installed vs latest version with publish date before updating."
|
|
600
|
-
)
|
|
601
|
-
.option("--global", "Use the global config (~/.knowhow/knowhow.json)")
|
|
602
|
-
.option("-y, --yes", "Skip confirmation prompt and update all outdated modules automatically")
|
|
603
|
-
.option(
|
|
604
|
-
"--allow-scripts",
|
|
605
|
-
"Allow modules' native install/build scripts to run (needed for native deps like isolated-vm under npm 11)"
|
|
606
|
-
)
|
|
607
|
-
.action(async (opts) => {
|
|
608
|
-
try {
|
|
609
|
-
const isGlobal: boolean = opts.global ?? false;
|
|
610
|
-
const skipConfirm: boolean = opts.yes ?? false;
|
|
611
|
-
const allowScripts: boolean = opts.allowScripts ?? false;
|
|
612
|
-
const cfg = isGlobal ? await getGlobalConfig() : await getConfig();
|
|
613
|
-
const configLabel = isGlobal
|
|
614
|
-
? "~/.knowhow/knowhow.json"
|
|
615
|
-
: ".knowhow/knowhow.json";
|
|
616
|
-
|
|
617
|
-
if (!cfg.modules || cfg.modules.length === 0) {
|
|
618
|
-
console.log(`ā¹ No modules found in ${configLabel}.`);
|
|
619
|
-
return;
|
|
620
|
-
}
|
|
621
|
-
|
|
622
|
-
const knowhowDir = getKnowhowDir(isGlobal);
|
|
623
|
-
ensureKnowhowPackageJson(knowhowDir);
|
|
624
|
-
|
|
625
|
-
// Only check npm packages (not local paths)
|
|
626
|
-
const installable = cfg.modules.filter(
|
|
627
|
-
(m) => !m.startsWith(".") && !m.startsWith("/")
|
|
628
|
-
);
|
|
629
|
-
|
|
630
|
-
if (installable.length === 0) {
|
|
631
|
-
console.log(`ā¹ No npm modules found in ${configLabel}.`);
|
|
632
|
-
return;
|
|
633
|
-
}
|
|
634
|
-
|
|
635
|
-
console.log(`š Checking for updates to ${installable.length} module(s)...\n`);
|
|
636
|
-
|
|
637
|
-
interface UpdateInfo {
|
|
638
|
-
mod: string;
|
|
639
|
-
installed: string | null;
|
|
640
|
-
latest: string;
|
|
641
|
-
compatibleVersion: string; // e.g. "@tyvm/knowhow-module-script@0.0.4"
|
|
642
|
-
publishedAt: string;
|
|
643
|
-
needsUpdate: boolean;
|
|
644
|
-
}
|
|
645
|
-
|
|
646
|
-
const updates: UpdateInfo[] = [];
|
|
647
|
-
|
|
648
|
-
for (const mod of installable) {
|
|
649
|
-
const registryInfo = await fetchNpmRegistryInfo(mod);
|
|
650
|
-
if (!registryInfo) {
|
|
651
|
-
console.log(` ā ļø ${mod}: could not fetch registry info (skipping)`);
|
|
652
|
-
continue;
|
|
653
|
-
}
|
|
654
|
-
const installed = getInstalledVersion(mod, knowhowDir);
|
|
655
|
-
const { latestVersion, publishedAt } = registryInfo;
|
|
656
|
-
// Find the latest compatible version for the current Node.js engine
|
|
657
|
-
const compatibleInstallTarget = await fetchLatestCompatibleVersion(mod);
|
|
658
|
-
const compatibleVersion = compatibleInstallTarget.replace(/^[^@]+@/, ""); // strip "pkg@" prefix
|
|
659
|
-
const needsUpdate = installed !== compatibleVersion;
|
|
660
|
-
const timeAgo = formatRelativeTime(publishedAt);
|
|
661
|
-
|
|
662
|
-
if (needsUpdate) {
|
|
663
|
-
const installedStr = installed ?? "(not installed)";
|
|
664
|
-
const versionLabel = compatibleVersion !== latestVersion
|
|
665
|
-
? `${compatibleVersion} (latest compatible with Node ${process.version}; absolute latest: ${latestVersion})`
|
|
666
|
-
: compatibleVersion;
|
|
667
|
-
console.log(` š¦ ${mod}`);
|
|
668
|
-
console.log(` installed: ${installedStr} ā latest: ${versionLabel} (published ${timeAgo})`);
|
|
669
|
-
} else {
|
|
670
|
-
console.log(` ā
${mod} v${compatibleVersion} (up to date, published ${timeAgo})`);
|
|
671
|
-
}
|
|
672
|
-
updates.push({ mod, installed, latest: compatibleVersion, compatibleVersion: compatibleInstallTarget, publishedAt, needsUpdate });
|
|
673
|
-
}
|
|
674
|
-
|
|
675
|
-
const toUpdate = updates.filter((u) => u.needsUpdate);
|
|
676
|
-
|
|
677
|
-
if (toUpdate.length === 0) {
|
|
678
|
-
console.log(`\nā
All modules are up to date!`);
|
|
679
|
-
return;
|
|
680
|
-
}
|
|
681
|
-
|
|
682
|
-
console.log(`\n${toUpdate.length} module(s) can be updated.`);
|
|
683
|
-
|
|
684
|
-
if (!skipConfirm) {
|
|
685
|
-
const confirmed = await promptConfirm(`Update ${toUpdate.length} module(s) now?`);
|
|
686
|
-
if (!confirmed) {
|
|
687
|
-
console.log("Cancelled.");
|
|
688
|
-
return;
|
|
689
|
-
}
|
|
690
|
-
}
|
|
691
|
-
|
|
692
|
-
console.log("");
|
|
693
|
-
for (const { mod, compatibleVersion } of toUpdate) {
|
|
694
|
-
console.log(` š¦ Updating ${compatibleVersion}...`);
|
|
695
|
-
npmInstallToKnowhow(compatibleVersion, knowhowDir, { allowScripts });
|
|
696
|
-
console.log(` ā
Updated ${mod}`);
|
|
697
|
-
}
|
|
698
|
-
console.log(`\nš Update complete! ${toUpdate.length} module(s) updated.`);
|
|
699
|
-
} catch (error: any) {
|
|
700
|
-
console.error("Error during modules update:", error.message ?? error);
|
|
701
|
-
process.exit(1);
|
|
702
|
-
}
|
|
703
|
-
});
|
|
704
|
-
}
|