@machina.ai/cell-cli-core 1.41.1-rc2 → 1.45.1-rc2
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/dist/docs/AFTER_MERGE_PROMPT.md +1 -1
- package/dist/docs/changelogs/index.md +63 -0
- package/dist/docs/changelogs/latest.md +200 -244
- package/dist/docs/changelogs/preview.md +198 -385
- package/dist/docs/cli/auto-memory.md +61 -40
- package/dist/docs/cli/cli-reference.md +2 -1
- package/dist/docs/cli/creating-skills.md +165 -38
- package/dist/docs/cli/custom-commands.md +1 -0
- package/dist/docs/cli/gemini-md.md +0 -3
- package/dist/docs/cli/model-routing.md +3 -3
- package/dist/docs/cli/plan-mode.md +2 -2
- package/dist/docs/cli/settings.md +20 -19
- package/dist/docs/cli/skills-best-practices.md +78 -0
- package/dist/docs/cli/skills.md +98 -176
- package/dist/docs/cli/tutorials/memory-management.md +3 -3
- package/dist/docs/cli/tutorials/session-management.md +13 -0
- package/dist/docs/cli/tutorials/skills-getting-started.md +140 -92
- package/dist/docs/cli/using-agent-skills.md +90 -0
- package/dist/docs/core/gemma-setup.md +83 -0
- package/dist/docs/core/index.md +3 -2
- package/dist/docs/core/local-model-routing.md +14 -7
- package/dist/docs/extensions/reference.md +16 -0
- package/dist/docs/extensions/releasing.md +58 -24
- package/dist/docs/extensions/writing-extensions.md +7 -0
- package/dist/docs/get-started/installation.mdx +2 -2
- package/dist/docs/model-routing-spec.md +683 -0
- package/dist/docs/reference/commands.md +14 -7
- package/dist/docs/reference/configuration.md +264 -88
- package/dist/docs/reference/keyboard-shortcuts.md +24 -1
- package/dist/docs/reference/policy-engine.md +14 -3
- package/dist/docs/reference/tools.md +48 -1
- package/dist/docs/releases.md +2 -2
- package/dist/docs/sidebar.json +24 -2
- package/dist/docs/tools/activate-skill.md +1 -1
- package/dist/docs/tools/mcp-server.md +24 -3
- package/dist/docs/tools/memory.md +10 -13
- package/dist/docs/tools/shell.md +17 -0
- package/dist/package.json +18 -18
- package/dist/src/agent/content-utils.js +6 -1
- package/dist/src/agent/content-utils.js.map +1 -1
- package/dist/src/agent/content-utils.test.js +5 -1
- package/dist/src/agent/content-utils.test.js.map +1 -1
- package/dist/src/agent/event-translator.js +8 -7
- package/dist/src/agent/event-translator.js.map +1 -1
- package/dist/src/agent/event-translator.test.js +2 -2
- package/dist/src/agent/event-translator.test.js.map +1 -1
- package/dist/src/agent/legacy-agent-session.js +5 -1
- package/dist/src/agent/legacy-agent-session.js.map +1 -1
- package/dist/src/agent/legacy-agent-session.test.js +11 -3
- package/dist/src/agent/legacy-agent-session.test.js.map +1 -1
- package/dist/src/agent/tool-display-utils.d.ts +3 -2
- package/dist/src/agent/tool-display-utils.js +3 -2
- package/dist/src/agent/tool-display-utils.js.map +1 -1
- package/dist/src/agent/types.d.ts +33 -3
- package/dist/src/agents/a2aUtils.d.ts +1 -1
- package/dist/src/agents/a2aUtils.js +5 -4
- package/dist/src/agents/a2aUtils.js.map +1 -1
- package/dist/src/agents/a2aUtils.test.js +18 -0
- package/dist/src/agents/a2aUtils.test.js.map +1 -1
- package/dist/src/agents/agent-tool.d.ts +3 -1
- package/dist/src/agents/agent-tool.js +19 -3
- package/dist/src/agents/agent-tool.js.map +1 -1
- package/dist/src/agents/agent-tool.test.js +76 -0
- package/dist/src/agents/agent-tool.test.js.map +1 -1
- package/dist/src/agents/agentLoader.d.ts +127 -22
- package/dist/src/agents/agentLoader.js +20 -0
- package/dist/src/agents/agentLoader.js.map +1 -1
- package/dist/src/agents/agentLoader.test.js +60 -0
- package/dist/src/agents/agentLoader.test.js.map +1 -1
- package/dist/src/agents/auth-provider/types.d.ts +5 -0
- package/dist/src/agents/browser/browserAgentInvocation.js +24 -19
- package/dist/src/agents/browser/browserAgentInvocation.js.map +1 -1
- package/dist/src/agents/browser/snapshotSuperseder.js +11 -8
- package/dist/src/agents/browser/snapshotSuperseder.js.map +1 -1
- package/dist/src/agents/browser/snapshotSuperseder.test.js +6 -1
- package/dist/src/agents/browser/snapshotSuperseder.test.js.map +1 -1
- package/dist/src/agents/generalist-agent.js +8 -1
- package/dist/src/agents/generalist-agent.js.map +1 -1
- package/dist/src/agents/generalist-agent.test.js +24 -0
- package/dist/src/agents/generalist-agent.test.js.map +1 -1
- package/dist/src/agents/local-executor.d.ts +1 -0
- package/dist/src/agents/local-executor.js +76 -45
- package/dist/src/agents/local-executor.js.map +1 -1
- package/dist/src/agents/local-executor.test.js +199 -27
- package/dist/src/agents/local-executor.test.js.map +1 -1
- package/dist/src/agents/local-invocation.d.ts +1 -1
- package/dist/src/agents/local-invocation.js +47 -48
- package/dist/src/agents/local-invocation.js.map +1 -1
- package/dist/src/agents/local-invocation.test.js +13 -15
- package/dist/src/agents/local-invocation.test.js.map +1 -1
- package/dist/src/agents/local-session-invocation.d.ts +51 -0
- package/dist/src/agents/local-session-invocation.js +320 -0
- package/dist/src/agents/local-session-invocation.js.map +1 -0
- package/dist/src/agents/local-session-invocation.test.js +512 -0
- package/dist/src/agents/local-session-invocation.test.js.map +1 -0
- package/dist/src/agents/local-subagent-protocol.d.ts +18 -0
- package/dist/src/agents/local-subagent-protocol.js +357 -0
- package/dist/src/agents/local-subagent-protocol.js.map +1 -0
- package/dist/src/agents/local-subagent-protocol.test.js +676 -0
- package/dist/src/agents/local-subagent-protocol.test.js.map +1 -0
- package/dist/src/agents/registry.d.ts +8 -4
- package/dist/src/agents/registry.js +112 -47
- package/dist/src/agents/registry.js.map +1 -1
- package/dist/src/agents/registry.test.js +9 -20
- package/dist/src/agents/registry.test.js.map +1 -1
- package/dist/src/agents/remote-invocation.js +6 -6
- package/dist/src/agents/remote-invocation.js.map +1 -1
- package/dist/src/agents/remote-invocation.test.js +23 -12
- package/dist/src/agents/remote-invocation.test.js.map +1 -1
- package/dist/src/agents/remote-session-invocation.d.ts +48 -0
- package/dist/src/agents/remote-session-invocation.js +193 -0
- package/dist/src/agents/remote-session-invocation.js.map +1 -0
- package/dist/src/agents/remote-session-invocation.test.d.ts +6 -0
- package/dist/src/agents/remote-session-invocation.test.js +405 -0
- package/dist/src/agents/remote-session-invocation.test.js.map +1 -0
- package/dist/src/agents/remote-subagent-protocol.d.ts +42 -0
- package/dist/src/agents/remote-subagent-protocol.js +348 -0
- package/dist/src/agents/remote-subagent-protocol.js.map +1 -0
- package/dist/src/agents/remote-subagent-protocol.test.d.ts +6 -0
- package/dist/src/agents/remote-subagent-protocol.test.js +652 -0
- package/dist/src/agents/remote-subagent-protocol.test.js.map +1 -0
- package/dist/src/agents/skill-extraction-agent.d.ts +8 -1
- package/dist/src/agents/skill-extraction-agent.js +171 -21
- package/dist/src/agents/skill-extraction-agent.js.map +1 -1
- package/dist/src/agents/skill-extraction-agent.test.js +66 -2
- package/dist/src/agents/skill-extraction-agent.test.js.map +1 -1
- package/dist/src/agents/types.d.ts +38 -2
- package/dist/src/agents/types.js +7 -0
- package/dist/src/agents/types.js.map +1 -1
- package/dist/src/availability/autoRoutingFallback.integration.test.d.ts +6 -0
- package/dist/src/availability/autoRoutingFallback.integration.test.js +288 -0
- package/dist/src/availability/autoRoutingFallback.integration.test.js.map +1 -0
- package/dist/src/availability/fallbackIntegration.test.js +29 -0
- package/dist/src/availability/fallbackIntegration.test.js.map +1 -1
- package/dist/src/availability/modelAvailabilityService.d.ts +6 -6
- package/dist/src/availability/modelAvailabilityService.js +16 -8
- package/dist/src/availability/modelAvailabilityService.js.map +1 -1
- package/dist/src/availability/modelAvailabilityService.test.js +39 -0
- package/dist/src/availability/modelAvailabilityService.test.js.map +1 -1
- package/dist/src/availability/modelPolicy.d.ts +1 -0
- package/dist/src/availability/policyCatalog.d.ts +2 -0
- package/dist/src/availability/policyCatalog.js +38 -9
- package/dist/src/availability/policyCatalog.js.map +1 -1
- package/dist/src/availability/policyCatalog.test.js +5 -4
- package/dist/src/availability/policyCatalog.test.js.map +1 -1
- package/dist/src/availability/policyHelpers.js +42 -27
- package/dist/src/availability/policyHelpers.js.map +1 -1
- package/dist/src/availability/policyHelpers.test.js +47 -7
- package/dist/src/availability/policyHelpers.test.js.map +1 -1
- package/dist/src/availability/testUtils.js +1 -1
- package/dist/src/availability/testUtils.js.map +1 -1
- package/dist/src/code_assist/admin/admin_controls.js +3 -1
- package/dist/src/code_assist/admin/admin_controls.js.map +1 -1
- package/dist/src/code_assist/experiments/flagNames.d.ts +1 -1
- package/dist/src/code_assist/experiments/flagNames.js +1 -1
- package/dist/src/code_assist/experiments/flagNames.js.map +1 -1
- package/dist/src/code_assist/oauth-credential-storage.js +12 -3
- package/dist/src/code_assist/oauth-credential-storage.js.map +1 -1
- package/dist/src/code_assist/oauth-credential-storage.test.js +29 -2
- package/dist/src/code_assist/oauth-credential-storage.test.js.map +1 -1
- package/dist/src/code_assist/oauth2.js +12 -3
- package/dist/src/code_assist/oauth2.js.map +1 -1
- package/dist/src/code_assist/oauth2.test.js +38 -0
- package/dist/src/code_assist/oauth2.test.js.map +1 -1
- package/dist/src/code_assist/setup.d.ts +3 -0
- package/dist/src/code_assist/setup.js +9 -0
- package/dist/src/code_assist/setup.js.map +1 -1
- package/dist/src/code_assist/setup.test.js +10 -1
- package/dist/src/code_assist/setup.test.js.map +1 -1
- package/dist/src/commands/memory.d.ts +83 -2
- package/dist/src/commands/memory.js +479 -28
- package/dist/src/commands/memory.js.map +1 -1
- package/dist/src/commands/memory.test.js +414 -58
- package/dist/src/commands/memory.test.js.map +1 -1
- package/dist/src/config/config.d.ts +61 -37
- package/dist/src/config/config.js +294 -101
- package/dist/src/config/config.js.map +1 -1
- package/dist/src/config/config.test.js +365 -113
- package/dist/src/config/config.test.js.map +1 -1
- package/dist/src/config/defaultModelConfigs.js +185 -61
- package/dist/src/config/defaultModelConfigs.js.map +1 -1
- package/dist/src/config/flashFallback.test.js +31 -0
- package/dist/src/config/flashFallback.test.js.map +1 -1
- package/dist/src/config/models.d.ts +20 -10
- package/dist/src/config/models.js +105 -34
- package/dist/src/config/models.js.map +1 -1
- package/dist/src/config/models.test.js +204 -47
- package/dist/src/config/models.test.js.map +1 -1
- package/dist/src/config/projectRegistry.d.ts +1 -0
- package/dist/src/config/projectRegistry.js +14 -3
- package/dist/src/config/projectRegistry.js.map +1 -1
- package/dist/src/config/projectRegistry.test.js +43 -0
- package/dist/src/config/projectRegistry.test.js.map +1 -1
- package/dist/src/config/scoped-config.d.ts +22 -0
- package/dist/src/config/scoped-config.js +32 -0
- package/dist/src/config/scoped-config.js.map +1 -1
- package/dist/src/config/storage.d.ts +0 -1
- package/dist/src/config/storage.js +0 -3
- package/dist/src/config/storage.js.map +1 -1
- package/dist/src/confirmation-bus/message-bus.d.ts +3 -1
- package/dist/src/confirmation-bus/message-bus.js +14 -5
- package/dist/src/confirmation-bus/message-bus.js.map +1 -1
- package/dist/src/confirmation-bus/message-bus.test.js +34 -0
- package/dist/src/confirmation-bus/message-bus.test.js.map +1 -1
- package/dist/src/context/chatCompressionService.js +7 -5
- package/dist/src/context/chatCompressionService.js.map +1 -1
- package/dist/src/context/chatCompressionService.test.js +1 -1
- package/dist/src/context/chatCompressionService.test.js.map +1 -1
- package/dist/src/context/config/configLoader.js +4 -1
- package/dist/src/context/config/configLoader.js.map +1 -1
- package/dist/src/context/config/profiles.d.ts +10 -0
- package/dist/src/context/config/profiles.js +98 -3
- package/dist/src/context/config/profiles.js.map +1 -1
- package/dist/src/context/config/schema.d.ts +4 -0
- package/dist/src/context/config/schema.js +4 -0
- package/dist/src/context/config/schema.js.map +1 -1
- package/dist/src/context/config/types.d.ts +13 -1
- package/dist/src/context/contextCompressionService.test.js +7 -3
- package/dist/src/context/contextCompressionService.test.js.map +1 -1
- package/dist/src/context/contextManager.barrier.test.js +39 -16
- package/dist/src/context/contextManager.barrier.test.js.map +1 -1
- package/dist/src/context/contextManager.d.ts +25 -28
- package/dist/src/context/contextManager.hotstart.test.d.ts +6 -0
- package/dist/src/context/contextManager.hotstart.test.js +65 -0
- package/dist/src/context/contextManager.hotstart.test.js.map +1 -0
- package/dist/src/context/contextManager.incremental.test.d.ts +6 -0
- package/dist/src/context/contextManager.incremental.test.js +101 -0
- package/dist/src/context/contextManager.incremental.test.js.map +1 -0
- package/dist/src/context/contextManager.js +276 -79
- package/dist/src/context/contextManager.js.map +1 -1
- package/dist/src/context/contextManager.test.d.ts +6 -0
- package/dist/src/context/contextManager.test.js +142 -0
- package/dist/src/context/contextManager.test.js.map +1 -0
- package/dist/src/context/eventBus.d.ts +13 -0
- package/dist/src/context/eventBus.js +12 -0
- package/dist/src/context/eventBus.js.map +1 -1
- package/dist/src/context/graph/behaviorRegistry.d.ts +4 -12
- package/dist/src/context/graph/behaviorRegistry.js.map +1 -1
- package/dist/src/context/graph/builtinBehaviors.d.ts +6 -1
- package/dist/src/context/graph/builtinBehaviors.js +23 -108
- package/dist/src/context/graph/builtinBehaviors.js.map +1 -1
- package/dist/src/context/graph/fromGraph.d.ts +8 -3
- package/dist/src/context/graph/fromGraph.js +46 -30
- package/dist/src/context/graph/fromGraph.js.map +1 -1
- package/dist/src/context/graph/fromGraph.test.d.ts +6 -0
- package/dist/src/context/graph/fromGraph.test.js +186 -0
- package/dist/src/context/graph/fromGraph.test.js.map +1 -0
- package/dist/src/context/graph/mapper.d.ts +8 -10
- package/dist/src/context/graph/mapper.js +11 -19
- package/dist/src/context/graph/mapper.js.map +1 -1
- package/dist/src/context/graph/mapper.test.d.ts +6 -0
- package/dist/src/context/graph/mapper.test.js +101 -0
- package/dist/src/context/graph/mapper.test.js.map +1 -0
- package/dist/src/context/graph/nodeIdService.d.ts +17 -0
- package/dist/src/context/graph/nodeIdService.js +24 -0
- package/dist/src/context/graph/nodeIdService.js.map +1 -0
- package/dist/src/context/graph/render.d.ts +24 -5
- package/dist/src/context/graph/render.js +129 -34
- package/dist/src/context/graph/render.js.map +1 -1
- package/dist/src/context/graph/render.test.d.ts +6 -0
- package/dist/src/context/graph/render.test.js +280 -0
- package/dist/src/context/graph/render.test.js.map +1 -0
- package/dist/src/context/graph/toGraph.d.ts +16 -14
- package/dist/src/context/graph/toGraph.js +180 -202
- package/dist/src/context/graph/toGraph.js.map +1 -1
- package/dist/src/context/graph/toGraph.test.d.ts +6 -0
- package/dist/src/context/graph/toGraph.test.js +116 -0
- package/dist/src/context/graph/toGraph.test.js.map +1 -0
- package/dist/src/context/graph/types.d.ts +36 -73
- package/dist/src/context/graph/types.js +23 -14
- package/dist/src/context/graph/types.js.map +1 -1
- package/dist/src/context/initializer.js +26 -5
- package/dist/src/context/initializer.js.map +1 -1
- package/dist/src/context/pipeline/contextWorkingBuffer.d.ts +5 -8
- package/dist/src/context/pipeline/contextWorkingBuffer.js +105 -35
- package/dist/src/context/pipeline/contextWorkingBuffer.js.map +1 -1
- package/dist/src/context/pipeline/contextWorkingBuffer.test.js +81 -13
- package/dist/src/context/pipeline/contextWorkingBuffer.test.js.map +1 -1
- package/dist/src/context/pipeline/environment.d.ts +4 -0
- package/dist/src/context/pipeline/environmentImpl.d.ts +6 -5
- package/dist/src/context/pipeline/environmentImpl.js +7 -9
- package/dist/src/context/pipeline/environmentImpl.js.map +1 -1
- package/dist/src/context/pipeline/environmentImpl.test.js +5 -1
- package/dist/src/context/pipeline/environmentImpl.test.js.map +1 -1
- package/dist/src/context/pipeline/orchestrator.d.ts +20 -6
- package/dist/src/context/pipeline/orchestrator.js +97 -80
- package/dist/src/context/pipeline/orchestrator.js.map +1 -1
- package/dist/src/context/pipeline/orchestrator.test.js +33 -36
- package/dist/src/context/pipeline/orchestrator.test.js.map +1 -1
- package/dist/src/context/pipeline.d.ts +0 -1
- package/dist/src/context/processors/blobDegradationProcessor.js +43 -84
- package/dist/src/context/processors/blobDegradationProcessor.js.map +1 -1
- package/dist/src/context/processors/blobDegradationProcessor.test.js +33 -37
- package/dist/src/context/processors/blobDegradationProcessor.test.js.map +1 -1
- package/dist/src/context/processors/nodeDistillationProcessor.js +58 -80
- package/dist/src/context/processors/nodeDistillationProcessor.js.map +1 -1
- package/dist/src/context/processors/nodeDistillationProcessor.test.js +21 -15
- package/dist/src/context/processors/nodeDistillationProcessor.test.js.map +1 -1
- package/dist/src/context/processors/nodeTruncationProcessor.js +16 -60
- package/dist/src/context/processors/nodeTruncationProcessor.js.map +1 -1
- package/dist/src/context/processors/nodeTruncationProcessor.test.js +16 -19
- package/dist/src/context/processors/nodeTruncationProcessor.test.js.map +1 -1
- package/dist/src/context/processors/rollingSummaryProcessor.js +12 -25
- package/dist/src/context/processors/rollingSummaryProcessor.js.map +1 -1
- package/dist/src/context/processors/rollingSummaryProcessor.test.js +10 -9
- package/dist/src/context/processors/rollingSummaryProcessor.test.js.map +1 -1
- package/dist/src/context/processors/stateSnapshotAsyncProcessor.d.ts +7 -0
- package/dist/src/context/processors/stateSnapshotAsyncProcessor.js +37 -19
- package/dist/src/context/processors/stateSnapshotAsyncProcessor.js.map +1 -1
- package/dist/src/context/processors/stateSnapshotAsyncProcessor.test.js +35 -10
- package/dist/src/context/processors/stateSnapshotAsyncProcessor.test.js.map +1 -1
- package/dist/src/context/processors/stateSnapshotProcessor.d.ts +2 -0
- package/dist/src/context/processors/stateSnapshotProcessor.js +53 -21
- package/dist/src/context/processors/stateSnapshotProcessor.js.map +1 -1
- package/dist/src/context/processors/stateSnapshotProcessor.test.js +52 -12
- package/dist/src/context/processors/stateSnapshotProcessor.test.js.map +1 -1
- package/dist/src/context/processors/toolMaskingProcessor.js +96 -117
- package/dist/src/context/processors/toolMaskingProcessor.js.map +1 -1
- package/dist/src/context/processors/toolMaskingProcessor.test.js +50 -17
- package/dist/src/context/processors/toolMaskingProcessor.test.js.map +1 -1
- package/dist/src/context/system-tests/hysteresis.test.d.ts +6 -0
- package/dist/src/context/system-tests/hysteresis.test.js +100 -0
- package/dist/src/context/system-tests/hysteresis.test.js.map +1 -0
- package/dist/src/context/system-tests/lifecycle.golden.test.js +107 -72
- package/dist/src/context/system-tests/lifecycle.golden.test.js.map +1 -1
- package/dist/src/context/system-tests/powerUserLifecycle.test.d.ts +6 -0
- package/dist/src/context/system-tests/powerUserLifecycle.test.js +91 -0
- package/dist/src/context/system-tests/powerUserLifecycle.test.js.map +1 -0
- package/dist/src/context/system-tests/simulationHarness.d.ts +2 -5
- package/dist/src/context/system-tests/simulationHarness.js +34 -35
- package/dist/src/context/system-tests/simulationHarness.js.map +1 -1
- package/dist/src/context/testing/contextTestUtils.d.ts +5 -3
- package/dist/src/context/testing/contextTestUtils.js +74 -53
- package/dist/src/context/testing/contextTestUtils.js.map +1 -1
- package/dist/src/context/testing/testProfile.js +1 -0
- package/dist/src/context/testing/testProfile.js.map +1 -1
- package/dist/src/context/toolOutputMaskingService.js +1 -2
- package/dist/src/context/toolOutputMaskingService.js.map +1 -1
- package/dist/src/context/toolOutputMaskingService.test.js +5 -20
- package/dist/src/context/toolOutputMaskingService.test.js.map +1 -1
- package/dist/src/context/utils/adaptiveTokenCalculator.d.ts +70 -0
- package/dist/src/context/utils/adaptiveTokenCalculator.js +138 -0
- package/dist/src/context/utils/adaptiveTokenCalculator.js.map +1 -0
- package/dist/src/context/utils/adaptiveTokenCalculator.test.d.ts +6 -0
- package/dist/src/context/utils/adaptiveTokenCalculator.test.js +129 -0
- package/dist/src/context/utils/adaptiveTokenCalculator.test.js.map +1 -0
- package/dist/src/context/utils/contextTokenCalculator.d.ts +63 -2
- package/dist/src/context/utils/contextTokenCalculator.js +80 -5
- package/dist/src/context/utils/contextTokenCalculator.js.map +1 -1
- package/dist/src/context/utils/contextTokenCalculator.test.d.ts +6 -0
- package/dist/src/context/utils/contextTokenCalculator.test.js +54 -0
- package/dist/src/context/utils/contextTokenCalculator.test.js.map +1 -0
- package/dist/src/context/utils/formatNodesForLlm.d.ts +21 -0
- package/dist/src/context/utils/formatNodesForLlm.js +69 -0
- package/dist/src/context/utils/formatNodesForLlm.js.map +1 -0
- package/dist/src/context/utils/formatNodesForLlm.test.d.ts +6 -0
- package/dist/src/context/utils/formatNodesForLlm.test.js +110 -0
- package/dist/src/context/utils/formatNodesForLlm.test.js.map +1 -0
- package/dist/src/context/utils/invariantChecker.d.ts +11 -0
- package/dist/src/context/utils/invariantChecker.js +36 -0
- package/dist/src/context/utils/invariantChecker.js.map +1 -0
- package/dist/src/context/utils/snapshotGenerator.d.ts +43 -1
- package/dist/src/context/utils/snapshotGenerator.js +332 -33
- package/dist/src/context/utils/snapshotGenerator.js.map +1 -1
- package/dist/src/context/utils/snapshotGenerator.test.d.ts +6 -0
- package/dist/src/context/utils/snapshotGenerator.test.js +362 -0
- package/dist/src/context/utils/snapshotGenerator.test.js.map +1 -0
- package/dist/src/context/utils/tokenCalibration.d.ts +9 -0
- package/dist/src/context/utils/tokenCalibration.js +30 -0
- package/dist/src/context/utils/tokenCalibration.js.map +1 -0
- package/dist/src/core/agentChatHistory.d.ts +29 -14
- package/dist/src/core/agentChatHistory.js +27 -27
- package/dist/src/core/agentChatHistory.js.map +1 -1
- package/dist/src/core/baseLlmClient.d.ts +8 -0
- package/dist/src/core/baseLlmClient.js +23 -3
- package/dist/src/core/baseLlmClient.js.map +1 -1
- package/dist/src/core/baseLlmClient.test.js +27 -23
- package/dist/src/core/baseLlmClient.test.js.map +1 -1
- package/dist/src/core/client.d.ts +7 -5
- package/dist/src/core/client.js +65 -40
- package/dist/src/core/client.js.map +1 -1
- package/dist/src/core/client.test.js +35 -131
- package/dist/src/core/client.test.js.map +1 -1
- package/dist/src/core/contentGenerator.js +46 -21
- package/dist/src/core/contentGenerator.js.map +1 -1
- package/dist/src/core/contentGenerator.test.js +191 -13
- package/dist/src/core/contentGenerator.test.js.map +1 -1
- package/dist/src/core/fakeContentGenerator.d.ts +15 -3
- package/dist/src/core/fakeContentGenerator.js +29 -9
- package/dist/src/core/fakeContentGenerator.js.map +1 -1
- package/dist/src/core/geminiChat.d.ts +18 -7
- package/dist/src/core/geminiChat.js +312 -54
- package/dist/src/core/geminiChat.js.map +1 -1
- package/dist/src/core/geminiChat.test.js +448 -54
- package/dist/src/core/geminiChat.test.js.map +1 -1
- package/dist/src/core/geminiChat_network_retry.test.js +39 -0
- package/dist/src/core/geminiChat_network_retry.test.js.map +1 -1
- package/dist/src/core/localLiteRtLmClient.js +6 -2
- package/dist/src/core/localLiteRtLmClient.js.map +1 -1
- package/dist/src/core/prompts.test.js +12 -7
- package/dist/src/core/prompts.test.js.map +1 -1
- package/dist/src/core/turn.d.ts +7 -2
- package/dist/src/core/turn.js +61 -4
- package/dist/src/core/turn.js.map +1 -1
- package/dist/src/core/turn.test.js +19 -10
- package/dist/src/core/turn.test.js.map +1 -1
- package/dist/src/fallback/handler.js +16 -6
- package/dist/src/fallback/handler.js.map +1 -1
- package/dist/src/fallback/handler.test.js +8 -2
- package/dist/src/fallback/handler.test.js.map +1 -1
- package/dist/src/generated/git-commit.d.ts +2 -2
- package/dist/src/generated/git-commit.js +2 -2
- package/dist/src/hooks/hookEventHandler.js +3 -2
- package/dist/src/hooks/hookEventHandler.js.map +1 -1
- package/dist/src/hooks/hookEventHandler.test.js +80 -0
- package/dist/src/hooks/hookEventHandler.test.js.map +1 -1
- package/dist/src/hooks/hookRunner.test.js +3 -3
- package/dist/src/hooks/hookRunner.test.js.map +1 -1
- package/dist/src/hooks/hookTranslator.js +95 -5
- package/dist/src/hooks/hookTranslator.js.map +1 -1
- package/dist/src/hooks/hookTranslator.test.js +171 -0
- package/dist/src/hooks/hookTranslator.test.js.map +1 -1
- package/dist/src/ide/ide-client.js +5 -3
- package/dist/src/ide/ide-client.js.map +1 -1
- package/dist/src/ide/ide-connection-utils.js +12 -10
- package/dist/src/ide/ide-connection-utils.js.map +1 -1
- package/dist/src/ide/ide-connection-utils.test.js +25 -2
- package/dist/src/ide/ide-connection-utils.test.js.map +1 -1
- package/dist/src/ide/types.d.ts +16 -16
- package/dist/src/index.d.ts +5 -2
- package/dist/src/index.js +5 -3
- package/dist/src/index.js.map +1 -1
- package/dist/src/mcp/oauth-provider.d.ts +8 -0
- package/dist/src/mcp/oauth-provider.js +41 -0
- package/dist/src/mcp/oauth-provider.js.map +1 -1
- package/dist/src/mcp/oauth-token-storage.js +7 -1
- package/dist/src/mcp/oauth-token-storage.js.map +1 -1
- package/dist/src/mcp/oauth-token-storage.test.js +55 -0
- package/dist/src/mcp/oauth-token-storage.test.js.map +1 -1
- package/dist/src/mcp/stored-token-provider.d.ts +27 -0
- package/dist/src/mcp/stored-token-provider.js +76 -0
- package/dist/src/mcp/stored-token-provider.js.map +1 -0
- package/dist/src/mcp/token-storage/keychain-token-storage.js +2 -2
- package/dist/src/mcp/token-storage/keychain-token-storage.js.map +1 -1
- package/dist/src/mcp/token-storage/keychain-token-storage.test.js +14 -1
- package/dist/src/mcp/token-storage/keychain-token-storage.test.js.map +1 -1
- package/dist/src/output/json-formatter.d.ts +1 -1
- package/dist/src/output/json-formatter.js +4 -1
- package/dist/src/output/json-formatter.js.map +1 -1
- package/dist/src/output/json-formatter.test.js +7 -0
- package/dist/src/output/json-formatter.test.js.map +1 -1
- package/dist/src/output/types.d.ts +1 -0
- package/dist/src/output/types.js.map +1 -1
- package/dist/src/policy/config.js +25 -0
- package/dist/src/policy/config.js.map +1 -1
- package/dist/src/policy/config.test.js +80 -0
- package/dist/src/policy/config.test.js.map +1 -1
- package/dist/src/policy/core-tools-mapping.test.js +9 -1
- package/dist/src/policy/core-tools-mapping.test.js.map +1 -1
- package/dist/src/policy/policies/plan.toml +1 -1
- package/dist/src/policy/policies/write.toml +0 -7
- package/dist/src/policy/policy-engine.test.js +0 -8
- package/dist/src/policy/policy-engine.test.js.map +1 -1
- package/dist/src/policy/sandboxPolicyManager.d.ts +20 -20
- package/dist/src/policy/stable-stringify.js +10 -6
- package/dist/src/policy/stable-stringify.js.map +1 -1
- package/dist/src/policy/stable-stringify.test.js +157 -0
- package/dist/src/policy/stable-stringify.test.js.map +1 -0
- package/dist/src/policy/types.d.ts +1 -0
- package/dist/src/policy/types.js.map +1 -1
- package/dist/src/prompts/promptProvider.js +8 -9
- package/dist/src/prompts/promptProvider.js.map +1 -1
- package/dist/src/prompts/promptProvider.test.js +3 -1
- package/dist/src/prompts/promptProvider.test.js.map +1 -1
- package/dist/src/prompts/snippets-memory.test.d.ts +6 -0
- package/dist/src/prompts/{snippets-memory-v2.test.js → snippets-memory.test.js} +5 -23
- package/dist/src/prompts/snippets-memory.test.js.map +1 -0
- package/dist/src/prompts/snippets.d.ts +6 -11
- package/dist/src/prompts/snippets.js +28 -30
- package/dist/src/prompts/snippets.js.map +1 -1
- package/dist/src/prompts/snippets.legacy.d.ts +0 -1
- package/dist/src/prompts/snippets.legacy.js +8 -15
- package/dist/src/prompts/snippets.legacy.js.map +1 -1
- package/dist/src/routing/strategies/approvalModeStrategy.js +5 -3
- package/dist/src/routing/strategies/approvalModeStrategy.js.map +1 -1
- package/dist/src/routing/strategies/approvalModeStrategy.test.js +9 -0
- package/dist/src/routing/strategies/approvalModeStrategy.test.js.map +1 -1
- package/dist/src/routing/strategies/classifierStrategy.js +18 -4
- package/dist/src/routing/strategies/classifierStrategy.js.map +1 -1
- package/dist/src/routing/strategies/classifierStrategy.test.js +77 -1
- package/dist/src/routing/strategies/classifierStrategy.test.js.map +1 -1
- package/dist/src/routing/strategies/defaultStrategy.js +1 -1
- package/dist/src/routing/strategies/defaultStrategy.js.map +1 -1
- package/dist/src/routing/strategies/fallbackStrategy.js +1 -1
- package/dist/src/routing/strategies/fallbackStrategy.js.map +1 -1
- package/dist/src/routing/strategies/gemmaClassifierStrategy.js +7 -1
- package/dist/src/routing/strategies/gemmaClassifierStrategy.js.map +1 -1
- package/dist/src/routing/strategies/gemmaClassifierStrategy.test.js +15 -1
- package/dist/src/routing/strategies/gemmaClassifierStrategy.test.js.map +1 -1
- package/dist/src/routing/strategies/numericalClassifierStrategy.d.ts +1 -0
- package/dist/src/routing/strategies/numericalClassifierStrategy.js +32 -5
- package/dist/src/routing/strategies/numericalClassifierStrategy.js.map +1 -1
- package/dist/src/routing/strategies/numericalClassifierStrategy.test.js +247 -25
- package/dist/src/routing/strategies/numericalClassifierStrategy.test.js.map +1 -1
- package/dist/src/routing/strategies/overrideStrategy.js +1 -1
- package/dist/src/routing/strategies/overrideStrategy.js.map +1 -1
- package/dist/src/sandbox/utils/commandSafety.js +22 -2
- package/dist/src/sandbox/utils/commandSafety.js.map +1 -1
- package/dist/src/sandbox/utils/commandSafety.test.d.ts +6 -0
- package/dist/src/sandbox/utils/commandSafety.test.js +85 -0
- package/dist/src/sandbox/utils/commandSafety.test.js.map +1 -0
- package/dist/src/scheduler/confirmation.test.js +29 -0
- package/dist/src/scheduler/confirmation.test.js.map +1 -1
- package/dist/src/scheduler/scheduler.js +15 -0
- package/dist/src/scheduler/scheduler.js.map +1 -1
- package/dist/src/scheduler/scheduler.test.js +1 -1
- package/dist/src/scheduler/scheduler.test.js.map +1 -1
- package/dist/src/scheduler/scheduler_parallel.test.js +37 -0
- package/dist/src/scheduler/scheduler_parallel.test.js.map +1 -1
- package/dist/src/scheduler/state-manager.js +5 -1
- package/dist/src/scheduler/state-manager.js.map +1 -1
- package/dist/src/scheduler/tool-executor.js +7 -4
- package/dist/src/scheduler/tool-executor.js.map +1 -1
- package/dist/src/scheduler/types.d.ts +5 -1
- package/dist/src/scheduler/types.js.map +1 -1
- package/dist/src/services/chatRecordingService.d.ts +14 -7
- package/dist/src/services/chatRecordingService.js +157 -133
- package/dist/src/services/chatRecordingService.js.map +1 -1
- package/dist/src/services/chatRecordingService.test.js +189 -52
- package/dist/src/services/chatRecordingService.test.js.map +1 -1
- package/dist/src/services/fileDiscoveryService.js +2 -1
- package/dist/src/services/fileDiscoveryService.js.map +1 -1
- package/dist/src/services/fileDiscoveryService.test.js +36 -0
- package/dist/src/services/fileDiscoveryService.test.js.map +1 -1
- package/dist/src/services/gitService.js +43 -4
- package/dist/src/services/gitService.js.map +1 -1
- package/dist/src/services/gitService.test.js +105 -1
- package/dist/src/services/gitService.test.js.map +1 -1
- package/dist/src/services/keychainService.js +14 -5
- package/dist/src/services/keychainService.js.map +1 -1
- package/dist/src/services/memoryPatchUtils.d.ts +93 -0
- package/dist/src/services/memoryPatchUtils.js +310 -2
- package/dist/src/services/memoryPatchUtils.js.map +1 -1
- package/dist/src/services/memoryService.d.ts +2 -0
- package/dist/src/services/memoryService.js +214 -9
- package/dist/src/services/memoryService.js.map +1 -1
- package/dist/src/services/memoryService.test.js +133 -0
- package/dist/src/services/memoryService.test.js.map +1 -1
- package/dist/src/services/modelConfigService.d.ts +3 -0
- package/dist/src/services/modelConfigService.js +22 -13
- package/dist/src/services/modelConfigService.js.map +1 -1
- package/dist/src/services/modelConfigService.test.js +73 -0
- package/dist/src/services/modelConfigService.test.js.map +1 -1
- package/dist/src/services/shellExecutionService.js +88 -41
- package/dist/src/services/shellExecutionService.js.map +1 -1
- package/dist/src/services/shellExecutionService.test.js +22 -9
- package/dist/src/services/shellExecutionService.test.js.map +1 -1
- package/dist/src/services/shellExecutionService.windows.integration.test.d.ts +6 -0
- package/dist/src/services/shellExecutionService.windows.integration.test.js +63 -0
- package/dist/src/services/shellExecutionService.windows.integration.test.js.map +1 -0
- package/dist/src/services/test-data/resolved-aliases-retry.golden.json +85 -7
- package/dist/src/services/test-data/resolved-aliases.golden.json +85 -7
- package/dist/src/services/trackerTypes.d.ts +4 -4
- package/dist/src/skills/skillManager.d.ts +4 -0
- package/dist/src/skills/skillManager.js +6 -0
- package/dist/src/skills/skillManager.js.map +1 -1
- package/dist/src/skills/skillManager.test.js +10 -0
- package/dist/src/skills/skillManager.test.js.map +1 -1
- package/dist/src/telemetry/file-exporters.d.ts +4 -1
- package/dist/src/telemetry/file-exporters.js +21 -3
- package/dist/src/telemetry/file-exporters.js.map +1 -1
- package/dist/src/telemetry/file-exporters.test.js +32 -2
- package/dist/src/telemetry/file-exporters.test.js.map +1 -1
- package/dist/src/telemetry/gcp-exporters.d.ts +3 -0
- package/dist/src/telemetry/gcp-exporters.js +72 -5
- package/dist/src/telemetry/gcp-exporters.js.map +1 -1
- package/dist/src/telemetry/gcp-exporters.test.js +52 -0
- package/dist/src/telemetry/gcp-exporters.test.js.map +1 -1
- package/dist/src/telemetry/heap-snapshot.d.ts +12 -0
- package/dist/src/telemetry/heap-snapshot.js +35 -0
- package/dist/src/telemetry/heap-snapshot.js.map +1 -0
- package/dist/src/telemetry/heap-snapshot.test.d.ts +6 -0
- package/dist/src/telemetry/heap-snapshot.test.js +38 -0
- package/dist/src/telemetry/heap-snapshot.test.js.map +1 -0
- package/dist/src/telemetry/index.d.ts +1 -0
- package/dist/src/telemetry/index.js +1 -0
- package/dist/src/telemetry/index.js.map +1 -1
- package/dist/src/telemetry/loggers.test.js +1 -0
- package/dist/src/telemetry/loggers.test.js.map +1 -1
- package/dist/src/telemetry/memory-monitor.d.ts +5 -0
- package/dist/src/telemetry/memory-monitor.js +8 -0
- package/dist/src/telemetry/memory-monitor.js.map +1 -1
- package/dist/src/telemetry/metrics.js +13 -2
- package/dist/src/telemetry/metrics.js.map +1 -1
- package/dist/src/telemetry/metrics.test.js +61 -1
- package/dist/src/telemetry/metrics.test.js.map +1 -1
- package/dist/src/test-utils/config.js +10 -1
- package/dist/src/test-utils/config.js.map +1 -1
- package/dist/src/tools/ask-user.js +25 -1
- package/dist/src/tools/ask-user.js.map +1 -1
- package/dist/src/tools/ask-user.test.js +46 -1
- package/dist/src/tools/ask-user.test.js.map +1 -1
- package/dist/src/tools/definitions/base-declarations.d.ts +0 -3
- package/dist/src/tools/definitions/base-declarations.js +0 -4
- package/dist/src/tools/definitions/base-declarations.js.map +1 -1
- package/dist/src/tools/definitions/coreTools.d.ts +1 -2
- package/dist/src/tools/definitions/coreTools.js +2 -8
- package/dist/src/tools/definitions/coreTools.js.map +1 -1
- package/dist/src/tools/definitions/coreToolsModelSnapshots.test.js +1 -2
- package/dist/src/tools/definitions/coreToolsModelSnapshots.test.js.map +1 -1
- package/dist/src/tools/definitions/model-family-sets/default-legacy.js +7 -31
- package/dist/src/tools/definitions/model-family-sets/default-legacy.js.map +1 -1
- package/dist/src/tools/definitions/model-family-sets/gemini-3.js +9 -26
- package/dist/src/tools/definitions/model-family-sets/gemini-3.js.map +1 -1
- package/dist/src/tools/definitions/types.d.ts +0 -1
- package/dist/src/tools/edit.js +27 -5
- package/dist/src/tools/edit.js.map +1 -1
- package/dist/src/tools/edit.test.js +37 -0
- package/dist/src/tools/edit.test.js.map +1 -1
- package/dist/src/tools/grep.js +14 -2
- package/dist/src/tools/grep.js.map +1 -1
- package/dist/src/tools/grep.test.js +17 -0
- package/dist/src/tools/grep.test.js.map +1 -1
- package/dist/src/tools/jit-context.d.ts +1 -1
- package/dist/src/tools/jit-context.js +1 -4
- package/dist/src/tools/jit-context.js.map +1 -1
- package/dist/src/tools/jit-context.test.js +1 -13
- package/dist/src/tools/jit-context.test.js.map +1 -1
- package/dist/src/tools/ls.js +5 -0
- package/dist/src/tools/ls.js.map +1 -1
- package/dist/src/tools/mcp-client-manager.js +2 -1
- package/dist/src/tools/mcp-client-manager.js.map +1 -1
- package/dist/src/tools/mcp-client-manager.test.js +29 -0
- package/dist/src/tools/mcp-client-manager.test.js.map +1 -1
- package/dist/src/tools/mcp-client.js +89 -50
- package/dist/src/tools/mcp-client.js.map +1 -1
- package/dist/src/tools/mcp-client.test.js +353 -59
- package/dist/src/tools/mcp-client.test.js.map +1 -1
- package/dist/src/tools/{xcode-mcp-fix-transport.d.ts → mcp-compliance-transport.d.ts} +6 -6
- package/dist/src/tools/{xcode-mcp-fix-transport.js → mcp-compliance-transport.js} +6 -6
- package/dist/src/tools/mcp-compliance-transport.js.map +1 -0
- package/dist/src/tools/mcp-compliance-transport.test.d.ts +6 -0
- package/dist/src/tools/mcp-compliance-transport.test.js +162 -0
- package/dist/src/tools/mcp-compliance-transport.test.js.map +1 -0
- package/dist/src/tools/memoryTool.d.ts +9 -31
- package/dist/src/tools/memoryTool.js +47 -262
- package/dist/src/tools/memoryTool.js.map +1 -1
- package/dist/src/tools/memoryTool.test.js +41 -312
- package/dist/src/tools/memoryTool.test.js.map +1 -1
- package/dist/src/tools/read-file.js +11 -6
- package/dist/src/tools/read-file.js.map +1 -1
- package/dist/src/tools/read-file.test.js +20 -8
- package/dist/src/tools/read-file.test.js.map +1 -1
- package/dist/src/tools/read-many-files.js +2 -2
- package/dist/src/tools/read-many-files.js.map +1 -1
- package/dist/src/tools/ripGrep.d.ts +3 -7
- package/dist/src/tools/ripGrep.js +57 -35
- package/dist/src/tools/ripGrep.js.map +1 -1
- package/dist/src/tools/ripGrep.test.js +197 -276
- package/dist/src/tools/ripGrep.test.js.map +1 -1
- package/dist/src/tools/shell.d.ts +5 -3
- package/dist/src/tools/shell.js +130 -36
- package/dist/src/tools/shell.js.map +1 -1
- package/dist/src/tools/shell.test.js +186 -14
- package/dist/src/tools/shell.test.js.map +1 -1
- package/dist/src/tools/shell_proactive.test.js +1 -0
- package/dist/src/tools/shell_proactive.test.js.map +1 -1
- package/dist/src/tools/tool-names.d.ts +3 -3
- package/dist/src/tools/tool-names.js +4 -5
- package/dist/src/tools/tool-names.js.map +1 -1
- package/dist/src/tools/tool-registry.js +1 -1
- package/dist/src/tools/tool-registry.js.map +1 -1
- package/dist/src/tools/tools.d.ts +6 -0
- package/dist/src/tools/tools.js.map +1 -1
- package/dist/src/tools/topicTool.js +5 -0
- package/dist/src/tools/topicTool.js.map +1 -1
- package/dist/src/tools/write-file.js +13 -0
- package/dist/src/tools/write-file.js.map +1 -1
- package/dist/src/tools/write-file.test.js +8 -0
- package/dist/src/tools/write-file.test.js.map +1 -1
- package/dist/src/utils/atCommandUtils.d.ts +35 -0
- package/dist/src/utils/atCommandUtils.js +163 -0
- package/dist/src/utils/atCommandUtils.js.map +1 -0
- package/dist/src/utils/atCommandUtils.test.d.ts +6 -0
- package/dist/src/utils/atCommandUtils.test.js +292 -0
- package/dist/src/utils/atCommandUtils.test.js.map +1 -0
- package/dist/src/utils/channel.d.ts +8 -0
- package/dist/src/utils/channel.js +21 -10
- package/dist/src/utils/channel.js.map +1 -1
- package/dist/src/utils/cryptoUtils.d.ts +11 -0
- package/dist/src/utils/cryptoUtils.js +19 -0
- package/dist/src/utils/cryptoUtils.js.map +1 -0
- package/dist/src/utils/cryptoUtils.test.d.ts +6 -0
- package/dist/src/utils/cryptoUtils.test.js +31 -0
- package/dist/src/utils/cryptoUtils.test.js.map +1 -0
- package/dist/src/utils/editor.d.ts +29 -3
- package/dist/src/utils/editor.js +94 -3
- package/dist/src/utils/editor.js.map +1 -1
- package/dist/src/utils/editor.test.js +176 -2
- package/dist/src/utils/editor.test.js.map +1 -1
- package/dist/src/utils/environmentContext.d.ts +2 -1
- package/dist/src/utils/environmentContext.js +15 -8
- package/dist/src/utils/environmentContext.js.map +1 -1
- package/dist/src/utils/environmentContext.test.js +4 -14
- package/dist/src/utils/environmentContext.test.js.map +1 -1
- package/dist/src/utils/errors.js +3 -8
- package/dist/src/utils/errors.js.map +1 -1
- package/dist/src/utils/events.d.ts +26 -1
- package/dist/src/utils/events.js +21 -2
- package/dist/src/utils/events.js.map +1 -1
- package/dist/src/utils/events.test.js +39 -0
- package/dist/src/utils/events.test.js.map +1 -1
- package/dist/src/utils/extensionLoader.js +2 -2
- package/dist/src/utils/extensionLoader.js.map +1 -1
- package/dist/src/utils/extensionLoader.test.js +22 -15
- package/dist/src/utils/extensionLoader.test.js.map +1 -1
- package/dist/src/utils/fetch.d.ts +3 -3
- package/dist/src/utils/fetch.js +44 -20
- package/dist/src/utils/fetch.js.map +1 -1
- package/dist/src/utils/fetch.test.js +93 -17
- package/dist/src/utils/fetch.test.js.map +1 -1
- package/dist/src/utils/fileUtils.js +4 -1
- package/dist/src/utils/fileUtils.js.map +1 -1
- package/dist/src/utils/filesearch/fileSearch.js +20 -9
- package/dist/src/utils/filesearch/fileSearch.js.map +1 -1
- package/dist/src/utils/filesearch/ignore.js +4 -1
- package/dist/src/utils/filesearch/ignore.js.map +1 -1
- package/dist/src/utils/generateContentResponseUtilities.d.ts +1 -0
- package/dist/src/utils/generateContentResponseUtilities.js +37 -7
- package/dist/src/utils/generateContentResponseUtilities.js.map +1 -1
- package/dist/src/utils/generateContentResponseUtilities.test.js +33 -0
- package/dist/src/utils/generateContentResponseUtilities.test.js.map +1 -1
- package/dist/src/utils/gitUtils.d.ts +5 -0
- package/dist/src/utils/gitUtils.js +11 -0
- package/dist/src/utils/gitUtils.js.map +1 -1
- package/dist/src/utils/historyHardening.d.ts +37 -0
- package/dist/src/utils/historyHardening.js +332 -0
- package/dist/src/utils/historyHardening.js.map +1 -0
- package/dist/src/utils/historyHardening.test.d.ts +6 -0
- package/dist/src/utils/historyHardening.test.js +317 -0
- package/dist/src/utils/historyHardening.test.js.map +1 -0
- package/dist/src/utils/ignoreFileParser.js +1 -1
- package/dist/src/utils/ignoreFileParser.js.map +1 -1
- package/dist/src/utils/ignorePatterns.js +2 -0
- package/dist/src/utils/ignorePatterns.js.map +1 -1
- package/dist/src/utils/ignorePatterns.test.js +1 -0
- package/dist/src/utils/ignorePatterns.test.js.map +1 -1
- package/dist/src/utils/memoryDiscovery.d.ts +0 -20
- package/dist/src/utils/memoryDiscovery.js +57 -220
- package/dist/src/utils/memoryDiscovery.js.map +1 -1
- package/dist/src/utils/memoryDiscovery.test.js +112 -403
- package/dist/src/utils/memoryDiscovery.test.js.map +1 -1
- package/dist/src/utils/modelUtils.d.ts +14 -0
- package/dist/src/utils/modelUtils.js +17 -0
- package/dist/src/utils/modelUtils.js.map +1 -0
- package/dist/src/utils/modelUtils.test.d.ts +6 -0
- package/dist/src/utils/modelUtils.test.js +23 -0
- package/dist/src/utils/modelUtils.test.js.map +1 -0
- package/dist/src/utils/partUtils.d.ts +26 -1
- package/dist/src/utils/partUtils.js +37 -0
- package/dist/src/utils/partUtils.js.map +1 -1
- package/dist/src/utils/path-validator.d.ts +17 -0
- package/dist/src/utils/path-validator.js +76 -0
- package/dist/src/utils/path-validator.js.map +1 -0
- package/dist/src/utils/path-validator.test.d.ts +6 -0
- package/dist/src/utils/path-validator.test.js +91 -0
- package/dist/src/utils/path-validator.test.js.map +1 -0
- package/dist/src/utils/pathReader.js +12 -0
- package/dist/src/utils/pathReader.js.map +1 -1
- package/dist/src/utils/pathReader.test.js +95 -0
- package/dist/src/utils/pathReader.test.js.map +1 -1
- package/dist/src/utils/paths.d.ts +19 -1
- package/dist/src/utils/paths.js +74 -9
- package/dist/src/utils/paths.js.map +1 -1
- package/dist/src/utils/paths.test.js +111 -1
- package/dist/src/utils/paths.test.js.map +1 -1
- package/dist/src/utils/quotaErrorDetection.js +23 -12
- package/dist/src/utils/quotaErrorDetection.js.map +1 -1
- package/dist/src/utils/ragLogger.d.ts +32 -0
- package/dist/src/utils/ragLogger.js +56 -0
- package/dist/src/utils/ragLogger.js.map +1 -0
- package/dist/src/utils/ragLogger.test.d.ts +6 -0
- package/dist/src/utils/ragLogger.test.js +97 -0
- package/dist/src/utils/ragLogger.test.js.map +1 -0
- package/dist/src/utils/retry.js +8 -3
- package/dist/src/utils/retry.js.map +1 -1
- package/dist/src/utils/retry.test.js +17 -0
- package/dist/src/utils/retry.test.js.map +1 -1
- package/dist/src/utils/safeJsonStringify.js +0 -2
- package/dist/src/utils/safeJsonStringify.js.map +1 -1
- package/dist/src/utils/sessionOperations.d.ts +26 -0
- package/dist/src/utils/sessionOperations.js +177 -8
- package/dist/src/utils/sessionOperations.js.map +1 -1
- package/dist/src/utils/sessionUtils.d.ts +11 -5
- package/dist/src/utils/sessionUtils.js +139 -68
- package/dist/src/utils/sessionUtils.js.map +1 -1
- package/dist/src/utils/sessionUtils.test.js +31 -5
- package/dist/src/utils/sessionUtils.test.js.map +1 -1
- package/dist/src/utils/shell-utils.d.ts +9 -1
- package/dist/src/utils/shell-utils.js +51 -20
- package/dist/src/utils/shell-utils.js.map +1 -1
- package/dist/src/utils/shell-utils.test.js +87 -46
- package/dist/src/utils/shell-utils.test.js.map +1 -1
- package/dist/src/utils/textUtils.d.ts +12 -2
- package/dist/src/utils/textUtils.js +30 -3
- package/dist/src/utils/textUtils.js.map +1 -1
- package/dist/src/utils/textUtils.test.js +96 -1
- package/dist/src/utils/textUtils.test.js.map +1 -1
- package/dist/src/utils/tokenCalculation.d.ts +3 -2
- package/dist/src/utils/tokenCalculation.js +9 -5
- package/dist/src/utils/tokenCalculation.js.map +1 -1
- package/dist/src/utils/tokenCalculation.test.js +15 -0
- package/dist/src/utils/tokenCalculation.test.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +18 -18
- package/dist/src/context/historyObserver.d.ts +0 -28
- package/dist/src/context/historyObserver.js +0 -63
- package/dist/src/context/historyObserver.js.map +0 -1
- package/dist/src/policy/memory-manager-policy.test.js +0 -80
- package/dist/src/policy/memory-manager-policy.test.js.map +0 -1
- package/dist/src/policy/policies/memory-manager.toml +0 -20
- package/dist/src/prompts/snippets-memory-v2.test.js.map +0 -1
- package/dist/src/tools/xcode-mcp-fix-transport.js.map +0 -1
- package/dist/src/tools/xcode-mcp-fix-transport.test.d.ts +0 -1
- package/dist/src/tools/xcode-mcp-fix-transport.test.js +0 -98
- package/dist/src/tools/xcode-mcp-fix-transport.test.js.map +0 -1
- package/dist/src/utils/systemEncoding.d.ts +0 -40
- package/dist/src/utils/systemEncoding.js +0 -150
- package/dist/src/utils/systemEncoding.js.map +0 -1
- package/dist/src/utils/systemEncoding.test.js +0 -369
- package/dist/src/utils/systemEncoding.test.js.map +0 -1
- /package/dist/src/{policy/memory-manager-policy.test.d.ts → agents/local-session-invocation.test.d.ts} +0 -0
- /package/dist/src/{prompts/snippets-memory-v2.test.d.ts → agents/local-subagent-protocol.test.d.ts} +0 -0
- /package/dist/src/{utils/systemEncoding.test.d.ts → policy/stable-stringify.test.d.ts} +0 -0
|
@@ -18,9 +18,11 @@ import { ErrorCode, McpError, PromptListChangedNotificationSchema, ResourceListC
|
|
|
18
18
|
import { GoogleAuth } from 'google-auth-library';
|
|
19
19
|
import { WorkspaceContext } from '../utils/workspaceContext.js';
|
|
20
20
|
import { connectToMcpServer, createTransport, hasNetworkTransport, isEnabled, McpClient, populateMcpServerCommand, discoverPrompts, } from './mcp-client.js';
|
|
21
|
+
import { McpComplianceTransport } from './mcp-compliance-transport.js';
|
|
21
22
|
import * as fs from 'node:fs';
|
|
22
23
|
import * as os from 'node:os';
|
|
23
24
|
import * as path from 'node:path';
|
|
25
|
+
import { cleanupTmpDir } from '@google/gemini-cli-test-utils';
|
|
24
26
|
import { coreEvents } from '../utils/events.js';
|
|
25
27
|
const EMPTY_CONFIG = {
|
|
26
28
|
enableEnvironmentVariableRedaction: true,
|
|
@@ -34,22 +36,27 @@ const MOCK_CONTEXT_DEFAULT = {
|
|
|
34
36
|
isTrustedFolder: vi.fn().mockReturnValue(true),
|
|
35
37
|
};
|
|
36
38
|
let MOCK_CONTEXT = MOCK_CONTEXT_DEFAULT;
|
|
37
|
-
const
|
|
38
|
-
mockAuthProviderKeycloak: vi.fn().mockImplementation(() => ({
|
|
39
|
-
getClient: vi.fn().mockResolvedValue({
|
|
40
|
-
getAccessToken: vi.fn().mockResolvedValue({ token: 'mock-token' }),
|
|
41
|
-
}),
|
|
42
|
-
})),
|
|
43
|
-
}));
|
|
39
|
+
const unwrap = (t) => t instanceof McpComplianceTransport ? t.transport : t;
|
|
44
40
|
vi.mock('@modelcontextprotocol/sdk/client/stdio.js');
|
|
45
41
|
vi.mock('@modelcontextprotocol/sdk/client/index.js');
|
|
46
42
|
vi.mock('@google/genai');
|
|
43
|
+
vi.mock('undici', () => ({
|
|
44
|
+
EnvHttpProxyAgent: vi.fn(),
|
|
45
|
+
fetch: vi.fn(),
|
|
46
|
+
setGlobalDispatcher: vi.fn(),
|
|
47
|
+
Agent: vi.fn(),
|
|
48
|
+
}));
|
|
47
49
|
vi.mock('../mcp/oauth-provider.js');
|
|
48
50
|
vi.mock('../mcp/oauth-token-storage.js');
|
|
49
51
|
vi.mock('../mcp/oauth-utils.js');
|
|
50
|
-
vi.mock('@machina.ai/auth-keycloak', () =>
|
|
51
|
-
|
|
52
|
-
|
|
52
|
+
vi.mock('@machina.ai/auth-keycloak', () => {
|
|
53
|
+
const mockAuth = vi.fn().mockImplementation(() => ({
|
|
54
|
+
getToken: vi.fn().mockResolvedValue('mock-token'),
|
|
55
|
+
}));
|
|
56
|
+
return {
|
|
57
|
+
AuthProviderKeycloak: mockAuth,
|
|
58
|
+
};
|
|
59
|
+
});
|
|
53
60
|
vi.stubGlobal('fetch', vi.fn());
|
|
54
61
|
vi.mock('../utils/events.js', () => ({
|
|
55
62
|
coreEvents: {
|
|
@@ -72,9 +79,11 @@ describe('mcp-client', () => {
|
|
|
72
79
|
testWorkspace = fs.mkdtempSync(path.join(os.tmpdir(), 'gemini-agent-test-'));
|
|
73
80
|
workspaceContext = new WorkspaceContext(testWorkspace);
|
|
74
81
|
});
|
|
75
|
-
afterEach(() => {
|
|
76
|
-
vi.restoreAllMocks();
|
|
82
|
+
afterEach(async () => {
|
|
77
83
|
vi.useRealTimers();
|
|
84
|
+
await cleanupTmpDir(testWorkspace);
|
|
85
|
+
workspaceContext = null;
|
|
86
|
+
vi.restoreAllMocks();
|
|
78
87
|
});
|
|
79
88
|
describe('McpClient', () => {
|
|
80
89
|
it('should discover tools', async () => {
|
|
@@ -613,6 +622,89 @@ describe('mcp-client', () => {
|
|
|
613
622
|
},
|
|
614
623
|
});
|
|
615
624
|
});
|
|
625
|
+
it('should transform nullable array schemas and preserve properties during discovery', async () => {
|
|
626
|
+
const mockedClient = {
|
|
627
|
+
connect: vi.fn(),
|
|
628
|
+
discover: vi.fn(),
|
|
629
|
+
disconnect: vi.fn(),
|
|
630
|
+
getStatus: vi.fn(),
|
|
631
|
+
registerCapabilities: vi.fn(),
|
|
632
|
+
setRequestHandler: vi.fn(),
|
|
633
|
+
setNotificationHandler: vi.fn(),
|
|
634
|
+
getServerCapabilities: vi.fn().mockReturnValue({ tools: {} }),
|
|
635
|
+
listTools: vi.fn().mockResolvedValue({
|
|
636
|
+
tools: [
|
|
637
|
+
{
|
|
638
|
+
name: 'nullableTool',
|
|
639
|
+
description: 'Tool with nullable array',
|
|
640
|
+
inputSchema: {
|
|
641
|
+
type: 'object',
|
|
642
|
+
properties: {
|
|
643
|
+
tags: {
|
|
644
|
+
type: ['array', 'null'],
|
|
645
|
+
items: { type: 'string' },
|
|
646
|
+
},
|
|
647
|
+
},
|
|
648
|
+
$defs: {
|
|
649
|
+
SomeType: { type: 'string' },
|
|
650
|
+
},
|
|
651
|
+
},
|
|
652
|
+
},
|
|
653
|
+
],
|
|
654
|
+
}),
|
|
655
|
+
listPrompts: vi.fn().mockResolvedValue({
|
|
656
|
+
prompts: [],
|
|
657
|
+
}),
|
|
658
|
+
request: vi.fn().mockResolvedValue({}),
|
|
659
|
+
};
|
|
660
|
+
vi.mocked(ClientLib.Client).mockReturnValue(mockedClient);
|
|
661
|
+
vi.spyOn(SdkClientStdioLib, 'StdioClientTransport').mockReturnValue({});
|
|
662
|
+
const mockedToolRegistry = {
|
|
663
|
+
registerTool: vi.fn(),
|
|
664
|
+
sortTools: vi.fn(),
|
|
665
|
+
getToolsByServer: vi.fn().mockReturnValue([]),
|
|
666
|
+
getMessageBus: vi.fn().mockReturnValue(undefined),
|
|
667
|
+
};
|
|
668
|
+
const promptRegistry = {
|
|
669
|
+
registerPrompt: vi.fn(),
|
|
670
|
+
getPromptsByServer: vi.fn().mockReturnValue([]),
|
|
671
|
+
removePromptsByServer: vi.fn(),
|
|
672
|
+
};
|
|
673
|
+
const resourceRegistry = {
|
|
674
|
+
getResourcesByServer: vi.fn().mockReturnValue([]),
|
|
675
|
+
setResourcesForServer: vi.fn(),
|
|
676
|
+
removeResourcesByServer: vi.fn(),
|
|
677
|
+
};
|
|
678
|
+
const client = new McpClient('test-server', {
|
|
679
|
+
command: 'test-command',
|
|
680
|
+
}, workspaceContext, MOCK_CONTEXT, false, '0.0.1');
|
|
681
|
+
await client.connect();
|
|
682
|
+
await client.discoverInto(MOCK_CONTEXT, {
|
|
683
|
+
toolRegistry: mockedToolRegistry,
|
|
684
|
+
promptRegistry,
|
|
685
|
+
resourceRegistry,
|
|
686
|
+
});
|
|
687
|
+
expect(mockedToolRegistry.registerTool).toHaveBeenCalledOnce();
|
|
688
|
+
const registeredTool = vi.mocked(mockedToolRegistry.registerTool).mock
|
|
689
|
+
.calls[0][0];
|
|
690
|
+
expect(registeredTool.schema.parametersJsonSchema).toEqual({
|
|
691
|
+
type: 'object',
|
|
692
|
+
properties: {
|
|
693
|
+
tags: {
|
|
694
|
+
type: 'array',
|
|
695
|
+
nullable: true,
|
|
696
|
+
items: { type: 'string' },
|
|
697
|
+
},
|
|
698
|
+
wait_for_previous: {
|
|
699
|
+
type: 'boolean',
|
|
700
|
+
description: 'Set to true to wait for all previously requested tools in this turn to complete before starting. Set to false (or omit) to run in parallel. Use true when this tool depends on the output of previous tools.',
|
|
701
|
+
},
|
|
702
|
+
},
|
|
703
|
+
$defs: {
|
|
704
|
+
SomeType: { type: 'string' },
|
|
705
|
+
},
|
|
706
|
+
});
|
|
707
|
+
});
|
|
616
708
|
it('should discover resources when a server only exposes resources', async () => {
|
|
617
709
|
const mockedClient = {
|
|
618
710
|
connect: vi.fn(),
|
|
@@ -1291,29 +1383,222 @@ describe('mcp-client', () => {
|
|
|
1291
1383
|
});
|
|
1292
1384
|
});
|
|
1293
1385
|
describe('createTransport', () => {
|
|
1386
|
+
it('should create an HTTP transport that respects NO_PROXY', async () => {
|
|
1387
|
+
const { createTransport } = await import('./mcp-client.js');
|
|
1388
|
+
const { EnvHttpProxyAgent } = await import('undici');
|
|
1389
|
+
const noProxyValue = 'localhost,127.0.0.1';
|
|
1390
|
+
vi.stubEnv('NO_PROXY', noProxyValue);
|
|
1391
|
+
await createTransport('test-server', {
|
|
1392
|
+
url: 'http://test-server',
|
|
1393
|
+
type: 'http',
|
|
1394
|
+
}, false, MOCK_CONTEXT);
|
|
1395
|
+
expect(EnvHttpProxyAgent).toHaveBeenCalledWith(expect.objectContaining({
|
|
1396
|
+
noProxy: noProxyValue,
|
|
1397
|
+
}));
|
|
1398
|
+
});
|
|
1294
1399
|
describe('should connect via httpUrl', () => {
|
|
1295
|
-
it('
|
|
1400
|
+
it('uses MCP SDK authProvider token() path for oauth-enabled servers', async () => {
|
|
1401
|
+
const mockGetValidTokenWithMetadata = vi.fn().mockResolvedValue({
|
|
1402
|
+
accessToken: 'fresh-token',
|
|
1403
|
+
tokenType: 'Bearer',
|
|
1404
|
+
expiresAt: Date.now() + 10 * 60 * 1000,
|
|
1405
|
+
});
|
|
1406
|
+
vi.mocked(MCPOAuthProvider).mockReturnValue({
|
|
1407
|
+
getValidTokenWithMetadata: mockGetValidTokenWithMetadata,
|
|
1408
|
+
});
|
|
1409
|
+
vi.mocked(MCPOAuthTokenStorage).mockReturnValue({
|
|
1410
|
+
getCredentials: vi.fn().mockResolvedValue({
|
|
1411
|
+
clientId: 'cid',
|
|
1412
|
+
token: {
|
|
1413
|
+
accessToken: 'fresh-token',
|
|
1414
|
+
tokenType: 'Bearer',
|
|
1415
|
+
expiresAt: Date.now() + 10 * 60 * 1000,
|
|
1416
|
+
},
|
|
1417
|
+
}),
|
|
1418
|
+
});
|
|
1296
1419
|
const transport = await createTransport('test-server', {
|
|
1297
|
-
|
|
1420
|
+
url: 'http://test-server',
|
|
1421
|
+
type: 'http',
|
|
1422
|
+
oauth: { enabled: true },
|
|
1298
1423
|
}, false, MOCK_CONTEXT);
|
|
1299
|
-
|
|
1300
|
-
expect(
|
|
1301
|
-
|
|
1302
|
-
|
|
1424
|
+
const testableTransport = unwrap(transport);
|
|
1425
|
+
expect(testableTransport._authProvider).toBeDefined();
|
|
1426
|
+
const tokens = await testableTransport._authProvider.tokens();
|
|
1427
|
+
expect(tokens?.access_token).toBe('fresh-token');
|
|
1428
|
+
});
|
|
1429
|
+
it('uses storage-backed expiry instead of long fallback cache for dynamic authProvider', async () => {
|
|
1430
|
+
const now = Date.now();
|
|
1431
|
+
const soonExpiry = now + 10 * 60 * 1000; // 10 minutes
|
|
1432
|
+
const mockGetValidTokenWithMetadata = vi.fn().mockResolvedValue({
|
|
1433
|
+
accessToken: 'fresh-token',
|
|
1434
|
+
tokenType: 'Bearer',
|
|
1435
|
+
expiresAt: soonExpiry,
|
|
1436
|
+
});
|
|
1437
|
+
const mockGetCredentials = vi.fn().mockImplementation(async () => ({
|
|
1438
|
+
clientId: 'cid',
|
|
1439
|
+
token: {
|
|
1440
|
+
accessToken: 'fresh-token',
|
|
1441
|
+
tokenType: 'Bearer',
|
|
1442
|
+
expiresAt: soonExpiry,
|
|
1443
|
+
},
|
|
1444
|
+
}));
|
|
1445
|
+
vi.mocked(MCPOAuthProvider).mockReturnValue({
|
|
1446
|
+
getValidTokenWithMetadata: mockGetValidTokenWithMetadata,
|
|
1447
|
+
});
|
|
1448
|
+
vi.mocked(MCPOAuthTokenStorage).mockReturnValue({
|
|
1449
|
+
getCredentials: mockGetCredentials,
|
|
1303
1450
|
});
|
|
1451
|
+
const transport = await createTransport('test-server', {
|
|
1452
|
+
url: 'http://test-server',
|
|
1453
|
+
type: 'http',
|
|
1454
|
+
}, false, MOCK_CONTEXT);
|
|
1455
|
+
const testableTransport = unwrap(transport);
|
|
1456
|
+
expect(testableTransport._authProvider).toBeDefined();
|
|
1457
|
+
const tokens = await testableTransport._authProvider.tokens();
|
|
1458
|
+
expect(tokens?.access_token).toBe('fresh-token');
|
|
1459
|
+
expect(tokens?.expires_in).toBeDefined();
|
|
1460
|
+
expect((tokens?.expires_in ?? 0) <= 10 * 60).toBe(true);
|
|
1461
|
+
expect(mockGetValidTokenWithMetadata).toHaveBeenCalledTimes(1);
|
|
1462
|
+
expect(mockGetCredentials).toHaveBeenCalledTimes(1);
|
|
1304
1463
|
});
|
|
1305
|
-
it('
|
|
1464
|
+
it('uses dynamic authProvider when stored OAuth token exists', async () => {
|
|
1465
|
+
const mockGetValidTokenWithMetadata = vi.fn().mockResolvedValue({
|
|
1466
|
+
accessToken: 'stored-fresh-token',
|
|
1467
|
+
tokenType: 'Bearer',
|
|
1468
|
+
expiresAt: Date.now() + 10 * 60 * 1000,
|
|
1469
|
+
});
|
|
1470
|
+
vi.mocked(MCPOAuthProvider).mockReturnValue({
|
|
1471
|
+
getValidTokenWithMetadata: mockGetValidTokenWithMetadata,
|
|
1472
|
+
});
|
|
1473
|
+
vi.mocked(MCPOAuthTokenStorage).mockReturnValue({
|
|
1474
|
+
getCredentials: vi.fn().mockResolvedValue({
|
|
1475
|
+
clientId: 'cid',
|
|
1476
|
+
token: {
|
|
1477
|
+
accessToken: 'stored-fresh-token',
|
|
1478
|
+
tokenType: 'Bearer',
|
|
1479
|
+
expiresAt: Date.now() + 10 * 60 * 1000,
|
|
1480
|
+
},
|
|
1481
|
+
}),
|
|
1482
|
+
});
|
|
1306
1483
|
const transport = await createTransport('test-server', {
|
|
1307
|
-
|
|
1308
|
-
|
|
1484
|
+
url: 'http://test-server',
|
|
1485
|
+
type: 'http',
|
|
1309
1486
|
}, false, MOCK_CONTEXT);
|
|
1310
|
-
|
|
1311
|
-
expect(
|
|
1312
|
-
|
|
1313
|
-
|
|
1314
|
-
|
|
1487
|
+
const testableTransport = unwrap(transport);
|
|
1488
|
+
expect(testableTransport._authProvider).toBeDefined();
|
|
1489
|
+
const tokens = await testableTransport._authProvider.tokens();
|
|
1490
|
+
expect(tokens?.access_token).toBe('stored-fresh-token');
|
|
1491
|
+
});
|
|
1492
|
+
it('caches OAuth tokens in dynamic authProvider and avoids repeated lookups', async () => {
|
|
1493
|
+
const mockGetValidTokenWithMetadata = vi.fn().mockResolvedValue({
|
|
1494
|
+
accessToken: 'cached-token',
|
|
1495
|
+
tokenType: 'Bearer',
|
|
1496
|
+
expiresAt: Date.now() + 10 * 60 * 1000,
|
|
1497
|
+
});
|
|
1498
|
+
const mockGetCredentials = vi.fn().mockResolvedValue({
|
|
1499
|
+
clientId: 'cid',
|
|
1500
|
+
token: {
|
|
1501
|
+
accessToken: 'cached-token',
|
|
1502
|
+
tokenType: 'Bearer',
|
|
1503
|
+
expiresAt: Date.now() + 10 * 60 * 1000,
|
|
1504
|
+
},
|
|
1505
|
+
});
|
|
1506
|
+
vi.mocked(MCPOAuthProvider).mockReturnValue({
|
|
1507
|
+
getValidTokenWithMetadata: mockGetValidTokenWithMetadata,
|
|
1508
|
+
});
|
|
1509
|
+
vi.mocked(MCPOAuthTokenStorage).mockReturnValue({
|
|
1510
|
+
getCredentials: mockGetCredentials,
|
|
1511
|
+
});
|
|
1512
|
+
const transport = await createTransport('test-server', {
|
|
1513
|
+
url: 'http://test-server',
|
|
1514
|
+
type: 'http',
|
|
1515
|
+
}, false, MOCK_CONTEXT);
|
|
1516
|
+
const testableTransport = unwrap(transport);
|
|
1517
|
+
expect(testableTransport._authProvider).toBeDefined();
|
|
1518
|
+
const t1 = await testableTransport._authProvider.tokens();
|
|
1519
|
+
const t2 = await testableTransport._authProvider.tokens();
|
|
1520
|
+
expect(t1?.access_token).toBe('cached-token');
|
|
1521
|
+
expect(t2?.access_token).toBe('cached-token');
|
|
1522
|
+
// one call from createTransport fallback detection + one call in first tokens();
|
|
1523
|
+
// second tokens() should come from in-memory cache
|
|
1524
|
+
expect(mockGetCredentials).toHaveBeenCalledTimes(1);
|
|
1525
|
+
expect(mockGetValidTokenWithMetadata).toHaveBeenCalledTimes(1);
|
|
1526
|
+
});
|
|
1527
|
+
it('does not long-cache token when metadata has no expiresAt', async () => {
|
|
1528
|
+
const mockGetValidTokenWithMetadata = vi.fn().mockResolvedValue({
|
|
1529
|
+
accessToken: 'no-exp-token',
|
|
1530
|
+
tokenType: 'Bearer',
|
|
1531
|
+
// expiresAt intentionally omitted
|
|
1532
|
+
});
|
|
1533
|
+
const mockGetCredentials = vi.fn().mockResolvedValue({
|
|
1534
|
+
clientId: 'cid',
|
|
1535
|
+
token: {
|
|
1536
|
+
accessToken: 'no-exp-token',
|
|
1537
|
+
tokenType: 'Bearer',
|
|
1538
|
+
// expiresAt intentionally omitted
|
|
1315
1539
|
},
|
|
1316
1540
|
});
|
|
1541
|
+
vi.mocked(MCPOAuthProvider).mockReturnValue({
|
|
1542
|
+
getValidTokenWithMetadata: mockGetValidTokenWithMetadata,
|
|
1543
|
+
});
|
|
1544
|
+
vi.mocked(MCPOAuthTokenStorage).mockReturnValue({
|
|
1545
|
+
getCredentials: mockGetCredentials,
|
|
1546
|
+
});
|
|
1547
|
+
const transport = await createTransport('test-server', {
|
|
1548
|
+
url: 'http://test-server',
|
|
1549
|
+
type: 'http',
|
|
1550
|
+
}, false, MOCK_CONTEXT);
|
|
1551
|
+
const testableTransport = unwrap(transport);
|
|
1552
|
+
expect(testableTransport._authProvider).toBeDefined();
|
|
1553
|
+
const t1 = await testableTransport._authProvider.tokens();
|
|
1554
|
+
const t2 = await testableTransport._authProvider.tokens();
|
|
1555
|
+
expect(t1?.access_token).toBe('no-exp-token');
|
|
1556
|
+
expect(t2?.access_token).toBe('no-exp-token');
|
|
1557
|
+
expect(t1?.expires_in).toBeUndefined();
|
|
1558
|
+
expect(t2?.expires_in).toBeUndefined();
|
|
1559
|
+
// no-expiry tokens should not be long-cached in memory
|
|
1560
|
+
expect(mockGetValidTokenWithMetadata).toHaveBeenCalledTimes(2);
|
|
1561
|
+
});
|
|
1562
|
+
it('wraps fetch to convert GET 404 to 405 for POST-only servers (e.g. n8n)', async () => {
|
|
1563
|
+
const mockFetch = vi
|
|
1564
|
+
.fn()
|
|
1565
|
+
.mockResolvedValue(new Response(null, { status: 404, statusText: 'Not Found' }));
|
|
1566
|
+
vi.stubGlobal('fetch', mockFetch);
|
|
1567
|
+
try {
|
|
1568
|
+
const transport = await createTransport('test-server', { httpUrl: 'http://test-server' }, false, MOCK_CONTEXT);
|
|
1569
|
+
const wrappedFetch = unwrap(transport)._fetch;
|
|
1570
|
+
// GET 404 → 405: server doesn't support optional SSE GET stream
|
|
1571
|
+
const getRes = await wrappedFetch('http://test-server', {
|
|
1572
|
+
method: 'GET',
|
|
1573
|
+
});
|
|
1574
|
+
expect(getRes.status).toBe(405);
|
|
1575
|
+
expect(getRes.statusText).toBe('Method Not Allowed');
|
|
1576
|
+
// POST 404 → unchanged: real "not found" errors must still propagate
|
|
1577
|
+
const postRes = await wrappedFetch('http://test-server', {
|
|
1578
|
+
method: 'POST',
|
|
1579
|
+
});
|
|
1580
|
+
expect(postRes.status).toBe(404);
|
|
1581
|
+
}
|
|
1582
|
+
finally {
|
|
1583
|
+
vi.unstubAllGlobals();
|
|
1584
|
+
}
|
|
1585
|
+
});
|
|
1586
|
+
it('respects NO_PROXY for network transports', async () => {
|
|
1587
|
+
const mockFetch = vi
|
|
1588
|
+
.fn()
|
|
1589
|
+
.mockResolvedValue(new Response('OK', { status: 200 }));
|
|
1590
|
+
vi.stubGlobal('fetch', mockFetch);
|
|
1591
|
+
vi.stubEnv('NO_PROXY', 'localhost');
|
|
1592
|
+
try {
|
|
1593
|
+
const transport = await createTransport('test-server', { url: 'http://localhost/sse', type: 'sse' }, false, MOCK_CONTEXT);
|
|
1594
|
+
// For SSEClientTransport, the fetch is private or passed to the SDK.
|
|
1595
|
+
// We can check if it creates the transport successfully.
|
|
1596
|
+
expect(unwrap(transport)).toBeInstanceOf(SSEClientTransport);
|
|
1597
|
+
}
|
|
1598
|
+
finally {
|
|
1599
|
+
vi.unstubAllEnvs();
|
|
1600
|
+
vi.unstubAllGlobals();
|
|
1601
|
+
}
|
|
1317
1602
|
});
|
|
1318
1603
|
});
|
|
1319
1604
|
describe('should connect via url', () => {
|
|
@@ -1321,8 +1606,8 @@ describe('mcp-client', () => {
|
|
|
1321
1606
|
const transport = await createTransport('test-server', {
|
|
1322
1607
|
url: 'http://test-server',
|
|
1323
1608
|
}, false, MOCK_CONTEXT);
|
|
1324
|
-
expect(transport).toBeInstanceOf(StreamableHTTPClientTransport);
|
|
1325
|
-
expect(transport).toMatchObject({
|
|
1609
|
+
expect(unwrap(transport)).toBeInstanceOf(StreamableHTTPClientTransport);
|
|
1610
|
+
expect(unwrap(transport)).toMatchObject({
|
|
1326
1611
|
_url: new URL('http://test-server'),
|
|
1327
1612
|
_requestInit: { headers: {} },
|
|
1328
1613
|
});
|
|
@@ -1332,8 +1617,8 @@ describe('mcp-client', () => {
|
|
|
1332
1617
|
url: 'http://test-server',
|
|
1333
1618
|
headers: { Authorization: 'derp' },
|
|
1334
1619
|
}, false, MOCK_CONTEXT);
|
|
1335
|
-
expect(transport).toBeInstanceOf(StreamableHTTPClientTransport);
|
|
1336
|
-
expect(transport).toMatchObject({
|
|
1620
|
+
expect(unwrap(transport)).toBeInstanceOf(StreamableHTTPClientTransport);
|
|
1621
|
+
expect(unwrap(transport)).toMatchObject({
|
|
1337
1622
|
_url: new URL('http://test-server'),
|
|
1338
1623
|
_requestInit: {
|
|
1339
1624
|
headers: { Authorization: 'derp' },
|
|
@@ -1345,8 +1630,8 @@ describe('mcp-client', () => {
|
|
|
1345
1630
|
url: 'http://test-server',
|
|
1346
1631
|
type: 'http',
|
|
1347
1632
|
}, false, MOCK_CONTEXT);
|
|
1348
|
-
expect(transport).toBeInstanceOf(StreamableHTTPClientTransport);
|
|
1349
|
-
expect(transport).toMatchObject({
|
|
1633
|
+
expect(unwrap(transport)).toBeInstanceOf(StreamableHTTPClientTransport);
|
|
1634
|
+
expect(unwrap(transport)).toMatchObject({
|
|
1350
1635
|
_url: new URL('http://test-server'),
|
|
1351
1636
|
_requestInit: { headers: {} },
|
|
1352
1637
|
});
|
|
@@ -1356,8 +1641,8 @@ describe('mcp-client', () => {
|
|
|
1356
1641
|
url: 'http://test-server',
|
|
1357
1642
|
type: 'sse',
|
|
1358
1643
|
}, false, MOCK_CONTEXT);
|
|
1359
|
-
expect(transport).toBeInstanceOf(SSEClientTransport);
|
|
1360
|
-
expect(transport).toMatchObject({
|
|
1644
|
+
expect(unwrap(transport)).toBeInstanceOf(SSEClientTransport);
|
|
1645
|
+
expect(unwrap(transport)).toMatchObject({
|
|
1361
1646
|
_url: new URL('http://test-server'),
|
|
1362
1647
|
_requestInit: { headers: {} },
|
|
1363
1648
|
});
|
|
@@ -1366,8 +1651,8 @@ describe('mcp-client', () => {
|
|
|
1366
1651
|
const transport = await createTransport('test-server', {
|
|
1367
1652
|
url: 'http://test-server',
|
|
1368
1653
|
}, false, MOCK_CONTEXT);
|
|
1369
|
-
expect(transport).toBeInstanceOf(StreamableHTTPClientTransport);
|
|
1370
|
-
expect(transport).toMatchObject({
|
|
1654
|
+
expect(unwrap(transport)).toBeInstanceOf(StreamableHTTPClientTransport);
|
|
1655
|
+
expect(unwrap(transport)).toMatchObject({
|
|
1371
1656
|
_url: new URL('http://test-server'),
|
|
1372
1657
|
_requestInit: { headers: {} },
|
|
1373
1658
|
});
|
|
@@ -1378,8 +1663,8 @@ describe('mcp-client', () => {
|
|
|
1378
1663
|
type: 'http',
|
|
1379
1664
|
headers: { Authorization: 'Bearer token' },
|
|
1380
1665
|
}, false, MOCK_CONTEXT);
|
|
1381
|
-
expect(transport).toBeInstanceOf(StreamableHTTPClientTransport);
|
|
1382
|
-
expect(transport).toMatchObject({
|
|
1666
|
+
expect(unwrap(transport)).toBeInstanceOf(StreamableHTTPClientTransport);
|
|
1667
|
+
expect(unwrap(transport)).toMatchObject({
|
|
1383
1668
|
_url: new URL('http://test-server'),
|
|
1384
1669
|
_requestInit: {
|
|
1385
1670
|
headers: { Authorization: 'Bearer token' },
|
|
@@ -1392,8 +1677,8 @@ describe('mcp-client', () => {
|
|
|
1392
1677
|
type: 'sse',
|
|
1393
1678
|
headers: { 'X-API-Key': 'key123' },
|
|
1394
1679
|
}, false, MOCK_CONTEXT);
|
|
1395
|
-
expect(transport).toBeInstanceOf(SSEClientTransport);
|
|
1396
|
-
expect(transport).toMatchObject({
|
|
1680
|
+
expect(unwrap(transport)).toBeInstanceOf(SSEClientTransport);
|
|
1681
|
+
expect(unwrap(transport)).toMatchObject({
|
|
1397
1682
|
_url: new URL('http://test-server'),
|
|
1398
1683
|
_requestInit: {
|
|
1399
1684
|
headers: { 'X-API-Key': 'key123' },
|
|
@@ -1406,8 +1691,8 @@ describe('mcp-client', () => {
|
|
|
1406
1691
|
url: 'http://test-server-url',
|
|
1407
1692
|
}, false, MOCK_CONTEXT);
|
|
1408
1693
|
// httpUrl should take priority and create HTTP transport
|
|
1409
|
-
expect(transport).toBeInstanceOf(StreamableHTTPClientTransport);
|
|
1410
|
-
expect(transport).toMatchObject({
|
|
1694
|
+
expect(unwrap(transport)).toBeInstanceOf(StreamableHTTPClientTransport);
|
|
1695
|
+
expect(unwrap(transport)).toMatchObject({
|
|
1411
1696
|
_url: new URL('http://test-server-http'),
|
|
1412
1697
|
_requestInit: { headers: {} },
|
|
1413
1698
|
});
|
|
@@ -1576,8 +1861,8 @@ describe('mcp-client', () => {
|
|
|
1576
1861
|
'X-Goog-User-Project': 'myproject',
|
|
1577
1862
|
},
|
|
1578
1863
|
}, false, MOCK_CONTEXT);
|
|
1579
|
-
expect(transport).toBeInstanceOf(StreamableHTTPClientTransport);
|
|
1580
|
-
const testableTransport = transport;
|
|
1864
|
+
expect(unwrap(transport)).toBeInstanceOf(StreamableHTTPClientTransport);
|
|
1865
|
+
const testableTransport = unwrap(transport);
|
|
1581
1866
|
const authProvider = testableTransport._authProvider;
|
|
1582
1867
|
expect(authProvider).toBeInstanceOf(GoogleCredentialProvider);
|
|
1583
1868
|
const googUserProject = testableTransport._requestInit?.headers?.['X-Goog-User-Project'];
|
|
@@ -1595,9 +1880,9 @@ describe('mcp-client', () => {
|
|
|
1595
1880
|
scopes: ['scope1'],
|
|
1596
1881
|
},
|
|
1597
1882
|
}, false, MOCK_CONTEXT);
|
|
1598
|
-
expect(transport).toBeInstanceOf(StreamableHTTPClientTransport);
|
|
1883
|
+
expect(unwrap(transport)).toBeInstanceOf(StreamableHTTPClientTransport);
|
|
1599
1884
|
expect(mockGetRequestHeaders).toHaveBeenCalled();
|
|
1600
|
-
const testableTransport = transport;
|
|
1885
|
+
const testableTransport = unwrap(transport);
|
|
1601
1886
|
const headers = testableTransport._requestInit?.headers;
|
|
1602
1887
|
expect(headers?.['X-Goog-User-Project']).toBe('provider-project');
|
|
1603
1888
|
});
|
|
@@ -1616,8 +1901,8 @@ describe('mcp-client', () => {
|
|
|
1616
1901
|
'X-Goog-User-Project': 'config-project',
|
|
1617
1902
|
},
|
|
1618
1903
|
}, false, MOCK_CONTEXT);
|
|
1619
|
-
expect(transport).toBeInstanceOf(StreamableHTTPClientTransport);
|
|
1620
|
-
const testableTransport = transport;
|
|
1904
|
+
expect(unwrap(transport)).toBeInstanceOf(StreamableHTTPClientTransport);
|
|
1905
|
+
const testableTransport = unwrap(transport);
|
|
1621
1906
|
const headers = testableTransport._requestInit?.headers;
|
|
1622
1907
|
expect(headers?.['X-Goog-User-Project']).toBe('provider-project');
|
|
1623
1908
|
});
|
|
@@ -1630,8 +1915,8 @@ describe('mcp-client', () => {
|
|
|
1630
1915
|
scopes: ['scope1'],
|
|
1631
1916
|
},
|
|
1632
1917
|
}, false, MOCK_CONTEXT);
|
|
1633
|
-
expect(transport).toBeInstanceOf(SSEClientTransport);
|
|
1634
|
-
const testableTransport = transport;
|
|
1918
|
+
expect(unwrap(transport)).toBeInstanceOf(SSEClientTransport);
|
|
1919
|
+
const testableTransport = unwrap(transport);
|
|
1635
1920
|
const authProvider = testableTransport._authProvider;
|
|
1636
1921
|
expect(authProvider).toBeInstanceOf(GoogleCredentialProvider);
|
|
1637
1922
|
});
|
|
@@ -1739,7 +2024,10 @@ describe('connectToMcpServer with OAuth', () => {
|
|
|
1739
2024
|
};
|
|
1740
2025
|
vi.mocked(MCPOAuthProvider).mockReturnValue(mockAuthProvider);
|
|
1741
2026
|
});
|
|
1742
|
-
afterEach(() => {
|
|
2027
|
+
afterEach(async () => {
|
|
2028
|
+
vi.useRealTimers();
|
|
2029
|
+
await cleanupTmpDir(testWorkspace);
|
|
2030
|
+
workspaceContext = null;
|
|
1743
2031
|
vi.clearAllMocks();
|
|
1744
2032
|
});
|
|
1745
2033
|
it('should handle automatic OAuth flow on 401 with www-authenticate header', async () => {
|
|
@@ -1756,15 +2044,15 @@ describe('connectToMcpServer with OAuth', () => {
|
|
|
1756
2044
|
// We need this to be typed to dig into its private state.
|
|
1757
2045
|
let capturedTransport;
|
|
1758
2046
|
vi.mocked(mockedClient.connect).mockImplementationOnce(async (transport) => {
|
|
1759
|
-
capturedTransport = transport;
|
|
2047
|
+
capturedTransport = unwrap(transport);
|
|
1760
2048
|
return Promise.resolve();
|
|
1761
2049
|
});
|
|
1762
2050
|
const client = await connectToMcpServer('0.0.1', 'test-server', { httpUrl: serverUrl, oauth: { enabled: true } }, false, workspaceContext, MOCK_CONTEXT);
|
|
1763
2051
|
expect(client).toBe(mockedClient);
|
|
1764
2052
|
expect(mockedClient.connect).toHaveBeenCalledTimes(2);
|
|
1765
2053
|
expect(mockAuthProvider.authenticate).toHaveBeenCalledOnce();
|
|
1766
|
-
const authHeader = capturedTransport
|
|
1767
|
-
?.headers?.['Authorization'];
|
|
2054
|
+
const authHeader = unwrap(capturedTransport)
|
|
2055
|
+
._requestInit?.headers?.['Authorization'];
|
|
1768
2056
|
expect(authHeader).toBe('Bearer test-access-token');
|
|
1769
2057
|
});
|
|
1770
2058
|
it('should discover oauth config if not in www-authenticate header', async () => {
|
|
@@ -1781,7 +2069,7 @@ describe('connectToMcpServer with OAuth', () => {
|
|
|
1781
2069
|
// We need this to be typed to dig into its private state.
|
|
1782
2070
|
let capturedTransport;
|
|
1783
2071
|
vi.mocked(mockedClient.connect).mockImplementationOnce(async (transport) => {
|
|
1784
|
-
capturedTransport = transport;
|
|
2072
|
+
capturedTransport = unwrap(transport);
|
|
1785
2073
|
return Promise.resolve();
|
|
1786
2074
|
});
|
|
1787
2075
|
const client = await connectToMcpServer('0.0.1', 'test-server', { httpUrl: serverUrl, oauth: { enabled: true } }, false, workspaceContext, MOCK_CONTEXT);
|
|
@@ -1789,8 +2077,8 @@ describe('connectToMcpServer with OAuth', () => {
|
|
|
1789
2077
|
expect(mockedClient.connect).toHaveBeenCalledTimes(2);
|
|
1790
2078
|
expect(mockAuthProvider.authenticate).toHaveBeenCalledOnce();
|
|
1791
2079
|
expect(OAuthUtils.discoverOAuthConfig).toHaveBeenCalledWith(serverUrl);
|
|
1792
|
-
const authHeader = capturedTransport
|
|
1793
|
-
?.headers?.['Authorization'];
|
|
2080
|
+
const authHeader = unwrap(capturedTransport)
|
|
2081
|
+
._requestInit?.headers?.['Authorization'];
|
|
1794
2082
|
expect(authHeader).toBe('Bearer test-access-token-from-discovery');
|
|
1795
2083
|
});
|
|
1796
2084
|
it('should use discoverOAuthFromWWWAuthenticate when it succeeds and skip discoverOAuthConfig', async () => {
|
|
@@ -1854,7 +2142,10 @@ describe('connectToMcpServer - HTTP→SSE fallback', () => {
|
|
|
1854
2142
|
vi.spyOn(console, 'warn').mockImplementation(() => { });
|
|
1855
2143
|
vi.spyOn(console, 'error').mockImplementation(() => { });
|
|
1856
2144
|
});
|
|
1857
|
-
afterEach(() => {
|
|
2145
|
+
afterEach(async () => {
|
|
2146
|
+
vi.useRealTimers();
|
|
2147
|
+
await cleanupTmpDir(testWorkspace);
|
|
2148
|
+
workspaceContext = null;
|
|
1858
2149
|
vi.clearAllMocks();
|
|
1859
2150
|
});
|
|
1860
2151
|
it('should NOT trigger fallback when type="http" is explicit', async () => {
|
|
@@ -1942,7 +2233,10 @@ describe('connectToMcpServer - OAuth with transport fallback', () => {
|
|
|
1942
2233
|
scopes: ['test-scope'],
|
|
1943
2234
|
});
|
|
1944
2235
|
});
|
|
1945
|
-
afterEach(() => {
|
|
2236
|
+
afterEach(async () => {
|
|
2237
|
+
vi.useRealTimers();
|
|
2238
|
+
await cleanupTmpDir(testWorkspace);
|
|
2239
|
+
workspaceContext = null;
|
|
1946
2240
|
vi.clearAllMocks();
|
|
1947
2241
|
vi.unstubAllGlobals();
|
|
1948
2242
|
});
|