@machina.ai/cell-cli-core 1.38.1-rc2 → 1.40.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/admin/enterprise-controls.md +1 -1
- package/dist/docs/changelogs/index.md +42 -0
- package/dist/docs/changelogs/latest.md +254 -361
- package/dist/docs/changelogs/preview.md +237 -406
- package/dist/docs/cli/acp-mode.md +6 -6
- package/dist/docs/cli/auto-memory.md +143 -0
- package/dist/docs/cli/checkpointing.md +5 -5
- package/dist/docs/cli/cli-reference.md +12 -11
- package/dist/docs/cli/creating-skills.md +2 -2
- package/dist/docs/cli/custom-commands.md +15 -14
- package/dist/docs/cli/enterprise.md +17 -14
- package/dist/docs/cli/gemini-ignore.md +2 -2
- package/dist/docs/cli/generation-settings.md +21 -20
- package/dist/docs/cli/model-routing.md +2 -2
- package/dist/docs/cli/model-steering.md +1 -1
- package/dist/docs/cli/plan-mode.md +11 -6
- package/dist/docs/cli/sandbox.md +7 -5
- package/dist/docs/cli/settings.md +32 -28
- package/dist/docs/cli/system-prompt.md +8 -8
- package/dist/docs/cli/telemetry.md +18 -11
- package/dist/docs/cli/themes.md +2 -2
- package/dist/docs/cli/trusted-folders.md +41 -13
- package/dist/docs/cli/tutorials/mcp-setup.md +1 -1
- package/dist/docs/cli/tutorials/memory-management.md +3 -1
- package/dist/docs/cli/tutorials/plan-mode-steering.md +2 -2
- package/dist/docs/cli/tutorials/session-management.md +1 -1
- package/dist/docs/cli/tutorials/shell-commands.md +1 -1
- package/dist/docs/cli/tutorials/task-planning.md +3 -3
- package/dist/docs/core/index.md +5 -6
- package/dist/docs/core/local-model-routing.md +1 -1
- package/dist/docs/core/remote-agents.md +1 -1
- package/dist/docs/core/subagents.md +38 -8
- package/dist/docs/extensions/best-practices.md +5 -4
- package/dist/docs/extensions/reference.md +6 -5
- package/dist/docs/extensions/releasing.md +6 -5
- package/dist/docs/extensions/writing-extensions.md +11 -11
- package/dist/docs/get-started/{authentication.md → authentication.mdx} +139 -93
- package/dist/docs/get-started/gemini-3.md +1 -1
- package/dist/docs/get-started/index.md +4 -4
- package/dist/docs/get-started/installation.mdx +201 -0
- package/dist/docs/hooks/best-practices.md +18 -17
- package/dist/docs/hooks/index.md +10 -8
- package/dist/docs/hooks/reference.md +10 -10
- package/dist/docs/ide-integration/ide-companion-spec.md +14 -14
- package/dist/docs/ide-integration/index.md +4 -4
- package/dist/docs/index.md +2 -2
- package/dist/docs/integration-tests.md +84 -2
- package/dist/docs/issue-and-pr-automation.md +8 -7
- package/dist/docs/npm.md +2 -2
- package/dist/docs/reference/commands.md +11 -11
- package/dist/docs/reference/configuration.md +150 -47
- package/dist/docs/reference/keyboard-shortcuts.md +79 -2
- package/dist/docs/reference/memport.md +2 -3
- package/dist/docs/reference/policy-engine.md +60 -26
- package/dist/docs/reference/tools.md +38 -4
- package/dist/docs/release-confidence.md +1 -1
- package/dist/docs/releases.md +19 -19
- package/dist/docs/resources/faq.md +5 -5
- package/dist/docs/resources/tos-privacy.md +10 -9
- package/dist/docs/resources/troubleshooting.md +17 -16
- package/dist/docs/resources/uninstall.md +5 -4
- package/dist/docs/sidebar.json +13 -1
- package/dist/docs/tools/ask-user.md +3 -3
- package/dist/docs/tools/file-system.md +7 -7
- package/dist/docs/tools/mcp-resources.md +44 -0
- package/dist/docs/tools/mcp-server.md +42 -39
- package/dist/docs/tools/shell.md +5 -5
- package/dist/docs/tools/tracker.md +61 -0
- package/dist/package.json +5 -4
- package/dist/src/agent/content-utils.d.ts +0 -6
- package/dist/src/agent/content-utils.js +0 -14
- package/dist/src/agent/content-utils.js.map +1 -1
- package/dist/src/agent/content-utils.test.js +1 -18
- package/dist/src/agent/content-utils.test.js.map +1 -1
- package/dist/src/agent/event-translator.js +8 -3
- package/dist/src/agent/event-translator.js.map +1 -1
- package/dist/src/agent/event-translator.test.js +14 -9
- package/dist/src/agent/event-translator.test.js.map +1 -1
- package/dist/src/agent/legacy-agent-session.js +9 -3
- package/dist/src/agent/legacy-agent-session.js.map +1 -1
- package/dist/src/agent/legacy-agent-session.test.js +4 -3
- package/dist/src/agent/legacy-agent-session.test.js.map +1 -1
- package/dist/src/agent/tool-display-utils.d.ts +30 -0
- package/dist/src/agent/tool-display-utils.js +69 -0
- package/dist/src/agent/tool-display-utils.js.map +1 -0
- package/dist/src/agent/tool-display-utils.test.js +101 -0
- package/dist/src/agent/tool-display-utils.test.js.map +1 -0
- package/dist/src/agent/types.d.ts +25 -5
- package/dist/src/agents/a2aUtils.js +28 -15
- package/dist/src/agents/a2aUtils.js.map +1 -1
- package/dist/src/agents/a2aUtils.test.js +43 -0
- package/dist/src/agents/a2aUtils.test.js.map +1 -1
- package/dist/src/agents/agent-tool.d.ts +31 -0
- package/dist/src/agents/agent-tool.js +155 -0
- package/dist/src/agents/agent-tool.js.map +1 -0
- package/dist/src/agents/agent-tool.test.js +110 -0
- package/dist/src/agents/agent-tool.test.js.map +1 -0
- package/dist/src/agents/agentLoader.d.ts +79 -4
- package/dist/src/agents/agentLoader.js +40 -2
- package/dist/src/agents/agentLoader.js.map +1 -1
- package/dist/src/agents/agentLoader.test.js +32 -0
- package/dist/src/agents/agentLoader.test.js.map +1 -1
- package/dist/src/agents/browser/analyzeScreenshot.js +1 -1
- package/dist/src/agents/browser/analyzeScreenshot.js.map +1 -1
- package/dist/src/agents/browser/analyzeScreenshot.test.js +19 -7
- package/dist/src/agents/browser/analyzeScreenshot.test.js.map +1 -1
- package/dist/src/agents/browser/browserAgentInvocation.d.ts +2 -2
- package/dist/src/agents/browser/browserAgentInvocation.js +2 -1
- package/dist/src/agents/browser/browserAgentInvocation.js.map +1 -1
- package/dist/src/agents/browser/browserAgentInvocation.test.js +61 -17
- package/dist/src/agents/browser/browserAgentInvocation.test.js.map +1 -1
- package/dist/src/agents/browser/mcpToolWrapper.js +1 -1
- package/dist/src/agents/browser/mcpToolWrapper.js.map +1 -1
- package/dist/src/agents/browser/mcpToolWrapper.test.js +22 -10
- package/dist/src/agents/browser/mcpToolWrapper.test.js.map +1 -1
- package/dist/src/agents/codebase-investigator.js +2 -2
- package/dist/src/agents/codebase-investigator.js.map +1 -1
- package/dist/src/agents/generalist-agent.js +3 -2
- package/dist/src/agents/generalist-agent.js.map +1 -1
- package/dist/src/agents/generalist-agent.test.js +1 -0
- package/dist/src/agents/generalist-agent.test.js.map +1 -1
- package/dist/src/agents/local-executor.d.ts +1 -1
- package/dist/src/agents/local-executor.js +10 -7
- package/dist/src/agents/local-executor.js.map +1 -1
- package/dist/src/agents/local-executor.test.js +5 -3
- package/dist/src/agents/local-executor.test.js.map +1 -1
- package/dist/src/agents/local-invocation.d.ts +2 -2
- package/dist/src/agents/local-invocation.js +8 -2
- package/dist/src/agents/local-invocation.js.map +1 -1
- package/dist/src/agents/local-invocation.test.js +29 -13
- package/dist/src/agents/local-invocation.test.js.map +1 -1
- package/dist/src/agents/registry.d.ts +2 -0
- package/dist/src/agents/registry.js +20 -19
- package/dist/src/agents/registry.js.map +1 -1
- package/dist/src/agents/registry.test.js +19 -30
- package/dist/src/agents/registry.test.js.map +1 -1
- package/dist/src/agents/remote-invocation.d.ts +3 -4
- package/dist/src/agents/remote-invocation.js +2 -1
- package/dist/src/agents/remote-invocation.js.map +1 -1
- package/dist/src/agents/remote-invocation.test.js +45 -18
- package/dist/src/agents/remote-invocation.test.js.map +1 -1
- package/dist/src/agents/skill-extraction-agent.d.ts +3 -2
- package/dist/src/agents/skill-extraction-agent.js +99 -56
- package/dist/src/agents/skill-extraction-agent.js.map +1 -1
- package/dist/src/agents/skill-extraction-agent.test.js +54 -0
- package/dist/src/agents/skill-extraction-agent.test.js.map +1 -0
- package/dist/src/availability/policyCatalog.js +1 -1
- package/dist/src/availability/policyCatalog.js.map +1 -1
- package/dist/src/availability/policyCatalog.test.js +1 -1
- package/dist/src/availability/policyCatalog.test.js.map +1 -1
- package/dist/src/code_assist/oauth2.js +14 -4
- package/dist/src/code_assist/oauth2.js.map +1 -1
- package/dist/src/commands/memory.d.ts +77 -0
- package/dist/src/commands/memory.js +494 -0
- package/dist/src/commands/memory.js.map +1 -1
- package/dist/src/commands/memory.test.js +720 -1
- package/dist/src/commands/memory.test.js.map +1 -1
- package/dist/src/config/config-agents-reload.test.js +26 -31
- package/dist/src/config/config-agents-reload.test.js.map +1 -1
- package/dist/src/config/config.d.ts +24 -10
- package/dist/src/config/config.js +148 -82
- package/dist/src/config/config.js.map +1 -1
- package/dist/src/config/config.test.js +373 -10
- package/dist/src/config/config.test.js.map +1 -1
- package/dist/src/config/constants.d.ts +1 -0
- package/dist/src/config/constants.js +2 -0
- package/dist/src/config/constants.js.map +1 -1
- package/dist/src/config/defaultModelConfigs.js +7 -7
- package/dist/src/config/defaultModelConfigs.js.map +1 -1
- package/dist/src/config/memory.js +1 -1
- package/dist/src/config/memory.js.map +1 -1
- package/dist/src/config/path-validation.test.js +15 -6
- package/dist/src/config/path-validation.test.js.map +1 -1
- package/dist/src/config/projectRegistry.js +113 -32
- package/dist/src/config/projectRegistry.js.map +1 -1
- package/dist/src/config/projectRegistry.test.js +51 -0
- package/dist/src/config/projectRegistry.test.js.map +1 -1
- package/dist/src/config/storage.d.ts +5 -1
- package/dist/src/config/storage.js +14 -1
- package/dist/src/config/storage.js.map +1 -1
- package/dist/src/config/storage.test.js +12 -0
- package/dist/src/config/storage.test.js.map +1 -1
- package/dist/src/confirmation-bus/message-bus.d.ts +4 -1
- package/dist/src/confirmation-bus/message-bus.js +39 -1
- package/dist/src/confirmation-bus/message-bus.js.map +1 -1
- package/dist/src/confirmation-bus/message-bus.test.js +43 -0
- package/dist/src/confirmation-bus/message-bus.test.js.map +1 -1
- package/dist/src/context/config/configLoader.d.ts +13 -0
- package/dist/src/context/config/configLoader.js +65 -0
- package/dist/src/context/config/configLoader.js.map +1 -0
- package/dist/src/context/config/configLoader.test.d.ts +6 -0
- package/dist/src/context/config/configLoader.test.js +79 -0
- package/dist/src/context/config/configLoader.test.js.map +1 -0
- package/dist/src/context/config/profiles.d.ts +17 -0
- package/dist/src/context/config/profiles.js +93 -0
- package/dist/src/context/config/profiles.js.map +1 -0
- package/dist/src/context/config/registry.d.ts +21 -0
- package/dist/src/context/config/registry.js +32 -0
- package/dist/src/context/config/registry.js.map +1 -0
- package/dist/src/context/config/schema.d.ts +45 -0
- package/dist/src/context/config/schema.js +47 -0
- package/dist/src/context/config/schema.js.map +1 -0
- package/dist/src/context/config/types.d.ts +39 -0
- package/dist/src/context/config/types.js +7 -0
- package/dist/src/context/config/types.js.map +1 -0
- package/dist/src/context/contextManager.barrier.test.d.ts +6 -0
- package/dist/src/context/contextManager.barrier.test.js +56 -0
- package/dist/src/context/contextManager.barrier.test.js.map +1 -0
- package/dist/src/context/contextManager.d.ts +49 -0
- package/dist/src/context/contextManager.js +120 -0
- package/dist/src/context/contextManager.js.map +1 -0
- package/dist/src/context/eventBus.d.ts +28 -0
- package/dist/src/context/eventBus.js +27 -0
- package/dist/src/context/eventBus.js.map +1 -0
- package/dist/src/context/graph/behaviorRegistry.d.ts +28 -0
- package/dist/src/context/graph/behaviorRegistry.js +14 -0
- package/dist/src/context/graph/behaviorRegistry.js.map +1 -0
- package/dist/src/context/graph/builtinBehaviors.d.ts +11 -0
- package/dist/src/context/graph/builtinBehaviors.js +145 -0
- package/dist/src/context/graph/builtinBehaviors.js.map +1 -0
- package/dist/src/context/graph/fromGraph.d.ts +9 -0
- package/dist/src/context/graph/fromGraph.js +34 -0
- package/dist/src/context/graph/fromGraph.js.map +1 -0
- package/dist/src/context/graph/mapper.d.ts +16 -0
- package/dist/src/context/graph/mapper.js +16 -0
- package/dist/src/context/graph/mapper.js.map +1 -0
- package/dist/src/context/graph/render.d.ts +15 -0
- package/dist/src/context/graph/render.js +72 -0
- package/dist/src/context/graph/render.js.map +1 -0
- package/dist/src/context/graph/toGraph.d.ts +10 -0
- package/dist/src/context/graph/toGraph.js +172 -0
- package/dist/src/context/graph/toGraph.js.map +1 -0
- package/dist/src/context/graph/types.d.ts +139 -0
- package/dist/src/context/graph/types.js +36 -0
- package/dist/src/context/graph/types.js.map +1 -0
- package/dist/src/context/historyObserver.d.ts +27 -0
- package/dist/src/context/historyObserver.js +64 -0
- package/dist/src/context/historyObserver.js.map +1 -0
- package/dist/src/context/pipeline/contextWorkingBuffer.d.ts +33 -0
- package/dist/src/context/pipeline/contextWorkingBuffer.js +197 -0
- package/dist/src/context/pipeline/contextWorkingBuffer.js.map +1 -0
- package/dist/src/context/pipeline/contextWorkingBuffer.test.d.ts +6 -0
- package/dist/src/context/pipeline/contextWorkingBuffer.test.js +89 -0
- package/dist/src/context/pipeline/contextWorkingBuffer.test.js.map +1 -0
- package/dist/src/context/pipeline/environment.d.ts +27 -0
- package/dist/src/context/pipeline/environment.js +2 -0
- package/dist/src/context/pipeline/environment.js.map +1 -0
- package/dist/src/context/pipeline/environmentImpl.d.ts +28 -0
- package/dist/src/context/pipeline/environmentImpl.js +40 -0
- package/dist/src/context/pipeline/environmentImpl.js.map +1 -0
- package/dist/src/context/pipeline/environmentImpl.test.d.ts +1 -0
- package/dist/src/context/pipeline/environmentImpl.test.js +32 -0
- package/dist/src/context/pipeline/environmentImpl.test.js.map +1 -0
- package/dist/src/context/pipeline/inbox.d.ts +15 -0
- package/dist/src/context/pipeline/inbox.js +52 -0
- package/dist/src/context/pipeline/inbox.js.map +1 -0
- package/dist/src/context/pipeline/inbox.test.d.ts +1 -0
- package/dist/src/context/pipeline/inbox.test.js +36 -0
- package/dist/src/context/pipeline/inbox.test.js.map +1 -0
- package/dist/src/context/pipeline/orchestrator.d.ts +22 -0
- package/dist/src/context/pipeline/orchestrator.js +126 -0
- package/dist/src/context/pipeline/orchestrator.js.map +1 -0
- package/dist/src/context/pipeline/orchestrator.test.d.ts +6 -0
- package/dist/src/context/pipeline/orchestrator.test.js +154 -0
- package/dist/src/context/pipeline/orchestrator.test.js.map +1 -0
- package/dist/src/context/pipeline.d.ts +52 -0
- package/dist/src/context/pipeline.js +7 -0
- package/dist/src/context/pipeline.js.map +1 -0
- package/dist/src/context/processors/blobDegradationProcessor.d.ts +6 -0
- package/dist/src/context/processors/blobDegradationProcessor.js +127 -0
- package/dist/src/context/processors/blobDegradationProcessor.js.map +1 -0
- package/dist/src/context/processors/blobDegradationProcessor.test.d.ts +6 -0
- package/dist/src/context/processors/blobDegradationProcessor.test.js +72 -0
- package/dist/src/context/processors/blobDegradationProcessor.test.js.map +1 -0
- package/dist/src/context/processors/historyTruncationProcessor.d.ts +11 -0
- package/dist/src/context/processors/historyTruncationProcessor.js +61 -0
- package/dist/src/context/processors/historyTruncationProcessor.js.map +1 -0
- package/dist/src/context/processors/nodeDistillationProcessor.d.ts +8 -0
- package/dist/src/context/processors/nodeDistillationProcessor.js +167 -0
- package/dist/src/context/processors/nodeDistillationProcessor.js.map +1 -0
- package/dist/src/context/processors/nodeDistillationProcessor.test.d.ts +6 -0
- package/dist/src/context/processors/nodeDistillationProcessor.test.js +77 -0
- package/dist/src/context/processors/nodeDistillationProcessor.test.js.map +1 -0
- package/dist/src/context/processors/nodeTruncationProcessor.d.ts +8 -0
- package/dist/src/context/processors/nodeTruncationProcessor.js +109 -0
- package/dist/src/context/processors/nodeTruncationProcessor.js.map +1 -0
- package/dist/src/context/processors/nodeTruncationProcessor.test.d.ts +6 -0
- package/dist/src/context/processors/nodeTruncationProcessor.test.js +71 -0
- package/dist/src/context/processors/nodeTruncationProcessor.test.js.map +1 -0
- package/dist/src/context/processors/rollingSummaryProcessor.d.ts +8 -0
- package/dist/src/context/processors/rollingSummaryProcessor.js +129 -0
- package/dist/src/context/processors/rollingSummaryProcessor.js.map +1 -0
- package/dist/src/context/processors/rollingSummaryProcessor.test.d.ts +1 -0
- package/dist/src/context/processors/rollingSummaryProcessor.test.js +60 -0
- package/dist/src/context/processors/rollingSummaryProcessor.test.js.map +1 -0
- package/dist/src/context/processors/stateSnapshotAsyncProcessor.d.ts +9 -0
- package/dist/src/context/processors/stateSnapshotAsyncProcessor.js +75 -0
- package/dist/src/context/processors/stateSnapshotAsyncProcessor.js.map +1 -0
- package/dist/src/context/processors/stateSnapshotAsyncProcessor.test.d.ts +1 -0
- package/dist/src/context/processors/stateSnapshotAsyncProcessor.test.js +80 -0
- package/dist/src/context/processors/stateSnapshotAsyncProcessor.test.js.map +1 -0
- package/dist/src/context/processors/stateSnapshotProcessor.d.ts +9 -0
- package/dist/src/context/processors/stateSnapshotProcessor.js +130 -0
- package/dist/src/context/processors/stateSnapshotProcessor.js.map +1 -0
- package/dist/src/context/processors/stateSnapshotProcessor.test.d.ts +1 -0
- package/dist/src/context/processors/stateSnapshotProcessor.test.js +91 -0
- package/dist/src/context/processors/stateSnapshotProcessor.test.js.map +1 -0
- package/dist/src/context/processors/toolMaskingProcessor.d.ts +8 -0
- package/dist/src/context/processors/toolMaskingProcessor.js +194 -0
- package/dist/src/context/processors/toolMaskingProcessor.js.map +1 -0
- package/dist/src/context/processors/toolMaskingProcessor.test.d.ts +1 -0
- package/dist/src/context/processors/toolMaskingProcessor.test.js +50 -0
- package/dist/src/context/processors/toolMaskingProcessor.test.js.map +1 -0
- package/dist/src/context/system-tests/lifecycle.golden.test.d.ts +6 -0
- package/dist/src/context/system-tests/lifecycle.golden.test.js +195 -0
- package/dist/src/context/system-tests/lifecycle.golden.test.js.map +1 -0
- package/dist/src/context/system-tests/simulationHarness.d.ts +41 -0
- package/dist/src/context/system-tests/simulationHarness.js +88 -0
- package/dist/src/context/system-tests/simulationHarness.js.map +1 -0
- package/dist/src/context/testing/contextTestUtils.d.ts +44 -0
- package/dist/src/context/testing/contextTestUtils.js +176 -0
- package/dist/src/context/testing/contextTestUtils.js.map +1 -0
- package/dist/src/context/testing/testProfile.d.ts +7 -0
- package/dist/src/context/testing/testProfile.js +20 -0
- package/dist/src/context/testing/testProfile.js.map +1 -0
- package/dist/src/context/tracer.d.ts +19 -0
- package/dist/src/context/tracer.js +79 -0
- package/dist/src/context/tracer.js.map +1 -0
- package/dist/src/context/tracer.test.d.ts +6 -0
- package/dist/src/context/tracer.test.js +71 -0
- package/dist/src/context/tracer.test.js.map +1 -0
- package/dist/src/context/utils/contextTokenCalculator.d.ts +53 -0
- package/dist/src/context/utils/contextTokenCalculator.js +97 -0
- package/dist/src/context/utils/contextTokenCalculator.js.map +1 -0
- package/dist/src/context/utils/snapshotGenerator.d.ts +12 -0
- package/dist/src/context/utils/snapshotGenerator.js +43 -0
- package/dist/src/context/utils/snapshotGenerator.js.map +1 -0
- package/dist/src/core/agentChatHistory.d.ts +26 -0
- package/dist/src/core/agentChatHistory.js +50 -0
- package/dist/src/core/agentChatHistory.js.map +1 -0
- package/dist/src/core/client.js +3 -1
- package/dist/src/core/client.js.map +1 -1
- package/dist/src/core/client.test.js +4 -0
- package/dist/src/core/client.test.js.map +1 -1
- package/dist/src/core/contentGenerator.d.ts +8 -1
- package/dist/src/core/contentGenerator.js +46 -4
- package/dist/src/core/contentGenerator.js.map +1 -1
- package/dist/src/core/contentGenerator.test.js +174 -8
- package/dist/src/core/contentGenerator.test.js.map +1 -1
- package/dist/src/core/coreToolHookTriggers.d.ts +1 -1
- package/dist/src/core/coreToolHookTriggers.js +5 -1
- package/dist/src/core/coreToolHookTriggers.js.map +1 -1
- package/dist/src/core/coreToolHookTriggers.test.js +1 -1
- package/dist/src/core/coreToolHookTriggers.test.js.map +1 -1
- package/dist/src/core/geminiChat.d.ts +2 -1
- package/dist/src/core/geminiChat.js +7 -2
- package/dist/src/core/geminiChat.js.map +1 -1
- package/dist/src/core/geminiChat.test.js +19 -6
- package/dist/src/core/geminiChat.test.js.map +1 -1
- package/dist/src/core/geminiChat_network_retry.test.js +42 -0
- package/dist/src/core/geminiChat_network_retry.test.js.map +1 -1
- package/dist/src/core/localLiteRtLmClient.js +2 -0
- package/dist/src/core/localLiteRtLmClient.js.map +1 -1
- package/dist/src/core/localLiteRtLmClient.test.js +7 -0
- package/dist/src/core/localLiteRtLmClient.test.js.map +1 -1
- package/dist/src/core/loggingContentGenerator.js +19 -6
- package/dist/src/core/loggingContentGenerator.js.map +1 -1
- package/dist/src/core/loggingContentGenerator.test.js +55 -0
- package/dist/src/core/loggingContentGenerator.test.js.map +1 -1
- package/dist/src/core/prompts-substitution.test.js +1 -0
- package/dist/src/core/prompts-substitution.test.js.map +1 -1
- package/dist/src/core/prompts.d.ts +1 -1
- package/dist/src/core/prompts.js +2 -2
- package/dist/src/core/prompts.js.map +1 -1
- package/dist/src/core/prompts.test.js +39 -8
- package/dist/src/core/prompts.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/hookRunner.js +8 -0
- package/dist/src/hooks/hookRunner.js.map +1 -1
- package/dist/src/hooks/hookRunner.test.js +23 -0
- package/dist/src/hooks/hookRunner.test.js.map +1 -1
- package/dist/src/ide/ide-client.js +3 -4
- package/dist/src/ide/ide-client.js.map +1 -1
- package/dist/src/index.d.ts +7 -3
- package/dist/src/index.js +7 -2
- package/dist/src/index.js.map +1 -1
- package/dist/src/mcp/mcpLauncher.js +1 -1
- package/dist/src/mcp/mcpLauncher.js.map +1 -1
- package/dist/src/mcp/oauth-provider.test.js +24 -17
- package/dist/src/mcp/oauth-provider.test.js.map +1 -1
- package/dist/src/policy/config.d.ts +2 -0
- package/dist/src/policy/config.js +67 -12
- package/dist/src/policy/config.js.map +1 -1
- package/dist/src/policy/core-tools-mapping.test.d.ts +6 -0
- package/dist/src/policy/core-tools-mapping.test.js +44 -0
- package/dist/src/policy/core-tools-mapping.test.js.map +1 -0
- package/dist/src/policy/policies/agents.toml +10 -0
- package/dist/src/policy/policies/plan.toml +17 -43
- package/dist/src/policy/policies/read-only.toml +24 -38
- package/dist/src/policy/policy-engine.d.ts +1 -1
- package/dist/src/policy/policy-engine.js +72 -67
- package/dist/src/policy/policy-engine.js.map +1 -1
- package/dist/src/policy/policy-engine.test.js +71 -4
- package/dist/src/policy/policy-engine.test.js.map +1 -1
- package/dist/src/policy/sandboxPolicyManager.js +4 -4
- package/dist/src/policy/sandboxPolicyManager.js.map +1 -1
- package/dist/src/policy/shell-safety-regression.test.d.ts +6 -0
- package/dist/src/policy/shell-safety-regression.test.js +86 -0
- package/dist/src/policy/shell-safety-regression.test.js.map +1 -0
- package/dist/src/policy/shell-safety.test.js +24 -0
- package/dist/src/policy/shell-safety.test.js.map +1 -1
- package/dist/src/policy/shell-substitution.test.d.ts +6 -0
- package/dist/src/policy/shell-substitution.test.js +75 -0
- package/dist/src/policy/shell-substitution.test.js.map +1 -0
- package/dist/src/policy/toml-loader.test.js +25 -11
- package/dist/src/policy/toml-loader.test.js.map +1 -1
- package/dist/src/policy/types.d.ts +6 -2
- package/dist/src/policy/types.js +4 -2
- package/dist/src/policy/types.js.map +1 -1
- package/dist/src/prompts/promptProvider.d.ts +1 -1
- package/dist/src/prompts/promptProvider.js +41 -24
- package/dist/src/prompts/promptProvider.js.map +1 -1
- package/dist/src/prompts/promptProvider.test.js +36 -2
- package/dist/src/prompts/promptProvider.test.js.map +1 -1
- package/dist/src/prompts/snippets-memory-v2.test.d.ts +6 -0
- package/dist/src/prompts/snippets-memory-v2.test.js +94 -0
- package/dist/src/prompts/snippets-memory-v2.test.js.map +1 -0
- package/dist/src/prompts/snippets.d.ts +19 -1
- package/dist/src/prompts/snippets.js +33 -6
- package/dist/src/prompts/snippets.js.map +1 -1
- package/dist/src/prompts/snippets.legacy.d.ts +6 -1
- package/dist/src/prompts/snippets.legacy.js +14 -7
- package/dist/src/prompts/snippets.legacy.js.map +1 -1
- package/dist/src/prompts/utils.test.js +1 -0
- package/dist/src/prompts/utils.test.js.map +1 -1
- package/dist/src/routing/modelRouterService.js +1 -1
- package/dist/src/routing/modelRouterService.js.map +1 -1
- package/dist/src/sandbox/linux/LinuxSandboxManager.d.ts +2 -0
- package/dist/src/sandbox/linux/LinuxSandboxManager.js +43 -19
- package/dist/src/sandbox/linux/LinuxSandboxManager.js.map +1 -1
- package/dist/src/sandbox/linux/LinuxSandboxManager.test.js +16 -0
- package/dist/src/sandbox/linux/LinuxSandboxManager.test.js.map +1 -1
- package/dist/src/sandbox/linux/bwrapArgsBuilder.d.ts +3 -7
- package/dist/src/sandbox/linux/bwrapArgsBuilder.js +96 -105
- package/dist/src/sandbox/linux/bwrapArgsBuilder.js.map +1 -1
- package/dist/src/sandbox/linux/bwrapArgsBuilder.test.js +144 -41
- package/dist/src/sandbox/linux/bwrapArgsBuilder.test.js.map +1 -1
- package/dist/src/sandbox/macos/MacOsSandboxManager.js +19 -10
- package/dist/src/sandbox/macos/MacOsSandboxManager.js.map +1 -1
- package/dist/src/sandbox/macos/MacOsSandboxManager.test.js +24 -37
- package/dist/src/sandbox/macos/MacOsSandboxManager.test.js.map +1 -1
- package/dist/src/sandbox/macos/seatbeltArgsBuilder.d.ts +3 -9
- package/dist/src/sandbox/macos/seatbeltArgsBuilder.js +129 -96
- package/dist/src/sandbox/macos/seatbeltArgsBuilder.js.map +1 -1
- package/dist/src/sandbox/macos/seatbeltArgsBuilder.test.js +78 -77
- package/dist/src/sandbox/macos/seatbeltArgsBuilder.test.js.map +1 -1
- package/dist/src/sandbox/utils/fsUtils.d.ts +2 -3
- package/dist/src/sandbox/utils/fsUtils.js +12 -27
- package/dist/src/sandbox/utils/fsUtils.js.map +1 -1
- package/dist/src/sandbox/utils/fsUtils.test.js +87 -29
- package/dist/src/sandbox/utils/fsUtils.test.js.map +1 -1
- package/dist/src/sandbox/windows/GeminiSandbox.cs +186 -77
- package/dist/src/sandbox/windows/WindowsSandboxManager.d.ts +4 -16
- package/dist/src/sandbox/windows/WindowsSandboxManager.js +138 -204
- package/dist/src/sandbox/windows/WindowsSandboxManager.js.map +1 -1
- package/dist/src/sandbox/windows/WindowsSandboxManager.test.js +105 -122
- package/dist/src/sandbox/windows/WindowsSandboxManager.test.js.map +1 -1
- package/dist/src/scheduler/policy.js +1 -2
- package/dist/src/scheduler/policy.js.map +1 -1
- package/dist/src/scheduler/policy.test.js +58 -2
- package/dist/src/scheduler/policy.test.js.map +1 -1
- package/dist/src/scheduler/scheduler.d.ts +2 -1
- package/dist/src/scheduler/scheduler.js +13 -14
- package/dist/src/scheduler/scheduler.js.map +1 -1
- package/dist/src/scheduler/scheduler.test.js +66 -0
- package/dist/src/scheduler/scheduler.test.js.map +1 -1
- package/dist/src/scheduler/scheduler_hooks.test.js +1 -0
- package/dist/src/scheduler/scheduler_hooks.test.js.map +1 -1
- package/dist/src/scheduler/scheduler_parallel.test.js +2 -0
- package/dist/src/scheduler/scheduler_parallel.test.js.map +1 -1
- package/dist/src/scheduler/tool-executor.js +2 -0
- package/dist/src/scheduler/tool-executor.js.map +1 -1
- package/dist/src/services/chatRecordingService.d.ts +12 -153
- package/dist/src/services/chatRecordingService.js +444 -350
- package/dist/src/services/chatRecordingService.js.map +1 -1
- package/dist/src/services/chatRecordingService.test.js +174 -128
- package/dist/src/services/chatRecordingService.test.js.map +1 -1
- package/dist/src/services/chatRecordingTypes.d.ts +111 -0
- package/dist/src/services/chatRecordingTypes.js +10 -0
- package/dist/src/services/chatRecordingTypes.js.map +1 -0
- package/dist/src/services/gitService.d.ts +2 -0
- package/dist/src/services/gitService.js +10 -1
- package/dist/src/services/gitService.js.map +1 -1
- package/dist/src/services/gitService.test.js +6 -2
- package/dist/src/services/gitService.test.js.map +1 -1
- package/dist/src/services/keychainService.d.ts +2 -2
- package/dist/src/services/keychainService.js +9 -9
- package/dist/src/services/keychainService.js.map +1 -1
- package/dist/src/services/keychainService.test.js +7 -7
- package/dist/src/services/keychainService.test.js.map +1 -1
- package/dist/src/services/keychainTypes.d.ts +1 -1
- package/dist/src/services/memoryPatchUtils.d.ts +42 -0
- package/dist/src/services/memoryPatchUtils.js +216 -0
- package/dist/src/services/memoryPatchUtils.js.map +1 -0
- package/dist/src/services/memoryService.d.ts +21 -1
- package/dist/src/services/memoryService.js +405 -64
- package/dist/src/services/memoryService.js.map +1 -1
- package/dist/src/services/memoryService.test.js +686 -2
- package/dist/src/services/memoryService.test.js.map +1 -1
- package/dist/src/services/sandboxManager.d.ts +33 -19
- package/dist/src/services/sandboxManager.integration.test.js +728 -266
- package/dist/src/services/sandboxManager.integration.test.js.map +1 -1
- package/dist/src/services/sandboxManager.js +65 -62
- package/dist/src/services/sandboxManager.js.map +1 -1
- package/dist/src/services/sandboxManager.test.js +17 -114
- package/dist/src/services/sandboxManager.test.js.map +1 -1
- package/dist/src/services/sandboxedFileSystemService.js +72 -62
- package/dist/src/services/sandboxedFileSystemService.js.map +1 -1
- package/dist/src/services/sessionSummaryUtils.d.ts +1 -1
- package/dist/src/services/sessionSummaryUtils.js +111 -38
- package/dist/src/services/sessionSummaryUtils.js.map +1 -1
- package/dist/src/services/sessionSummaryUtils.test.js +204 -51
- package/dist/src/services/sessionSummaryUtils.test.js.map +1 -1
- package/dist/src/services/shellExecutionService.d.ts +19 -0
- package/dist/src/services/shellExecutionService.js +88 -34
- package/dist/src/services/shellExecutionService.js.map +1 -1
- package/dist/src/services/shellExecutionService.test.js +38 -4
- package/dist/src/services/shellExecutionService.test.js.map +1 -1
- package/dist/src/telemetry/activity-monitor.js +1 -0
- package/dist/src/telemetry/activity-monitor.js.map +1 -1
- package/dist/src/telemetry/config.js +3 -0
- package/dist/src/telemetry/config.js.map +1 -1
- package/dist/src/telemetry/conseca-logger.js +18 -20
- package/dist/src/telemetry/conseca-logger.js.map +1 -1
- package/dist/src/telemetry/conseca-logger.test.js +100 -0
- package/dist/src/telemetry/conseca-logger.test.js.map +1 -1
- package/dist/src/telemetry/event-loop-monitor.d.ts +17 -0
- package/dist/src/telemetry/event-loop-monitor.js +76 -0
- package/dist/src/telemetry/event-loop-monitor.js.map +1 -0
- package/dist/src/telemetry/index.d.ts +2 -1
- package/dist/src/telemetry/index.js +2 -1
- package/dist/src/telemetry/index.js.map +1 -1
- package/dist/src/telemetry/llmRole.d.ts +2 -1
- package/dist/src/telemetry/llmRole.js +1 -0
- package/dist/src/telemetry/llmRole.js.map +1 -1
- package/dist/src/telemetry/loggers.test.js +184 -8
- package/dist/src/telemetry/loggers.test.js.map +1 -1
- package/dist/src/telemetry/memory-monitor.d.ts +1 -0
- package/dist/src/telemetry/memory-monitor.js +8 -1
- package/dist/src/telemetry/memory-monitor.js.map +1 -1
- package/dist/src/telemetry/memory-monitor.test.js +6 -1
- package/dist/src/telemetry/memory-monitor.test.js.map +1 -1
- package/dist/src/telemetry/metrics.d.ts +12 -0
- package/dist/src/telemetry/metrics.js +19 -0
- package/dist/src/telemetry/metrics.js.map +1 -1
- package/dist/src/telemetry/sdk.js +20 -1
- package/dist/src/telemetry/sdk.js.map +1 -1
- package/dist/src/telemetry/trace.d.ts +23 -6
- package/dist/src/telemetry/trace.js +71 -22
- package/dist/src/telemetry/trace.js.map +1 -1
- package/dist/src/telemetry/trace.test.js +79 -15
- package/dist/src/telemetry/trace.test.js.map +1 -1
- package/dist/src/telemetry/types.js +61 -15
- package/dist/src/telemetry/types.js.map +1 -1
- package/dist/src/test-utils/mock-tool.d.ts +3 -2
- package/dist/src/test-utils/mock-tool.js +4 -3
- package/dist/src/test-utils/mock-tool.js.map +1 -1
- package/dist/src/tools/activate-skill.js +1 -1
- package/dist/src/tools/activate-skill.js.map +1 -1
- package/dist/src/tools/activate-skill.test.js +6 -2
- package/dist/src/tools/activate-skill.test.js.map +1 -1
- package/dist/src/tools/ask-user.d.ts +2 -2
- package/dist/src/tools/ask-user.js +1 -1
- package/dist/src/tools/ask-user.js.map +1 -1
- package/dist/src/tools/ask-user.test.js +9 -3
- package/dist/src/tools/ask-user.test.js.map +1 -1
- package/dist/src/tools/complete-task.d.ts +2 -2
- package/dist/src/tools/complete-task.js +1 -1
- package/dist/src/tools/complete-task.js.map +1 -1
- package/dist/src/tools/complete-task.test.js +9 -3
- package/dist/src/tools/complete-task.test.js.map +1 -1
- package/dist/src/tools/definitions/base-declarations.d.ts +2 -0
- package/dist/src/tools/definitions/base-declarations.js +3 -0
- package/dist/src/tools/definitions/base-declarations.js.map +1 -1
- package/dist/src/tools/definitions/coreTools.d.ts +3 -1
- package/dist/src/tools/definitions/coreTools.js +13 -1
- package/dist/src/tools/definitions/coreTools.js.map +1 -1
- package/dist/src/tools/definitions/model-family-sets/default-legacy.js +29 -1
- 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 +29 -1
- package/dist/src/tools/definitions/model-family-sets/gemini-3.js.map +1 -1
- package/dist/src/tools/definitions/types.d.ts +2 -0
- package/dist/src/tools/edit.js +20 -4
- package/dist/src/tools/edit.js.map +1 -1
- package/dist/src/tools/edit.test.js +41 -18
- package/dist/src/tools/edit.test.js.map +1 -1
- package/dist/src/tools/enter-plan-mode.d.ts +2 -2
- package/dist/src/tools/enter-plan-mode.js +1 -1
- package/dist/src/tools/enter-plan-mode.js.map +1 -1
- package/dist/src/tools/enter-plan-mode.test.js +10 -4
- package/dist/src/tools/enter-plan-mode.test.js.map +1 -1
- package/dist/src/tools/exit-plan-mode.d.ts +2 -2
- package/dist/src/tools/exit-plan-mode.js +9 -12
- package/dist/src/tools/exit-plan-mode.js.map +1 -1
- package/dist/src/tools/exit-plan-mode.test.js +44 -17
- package/dist/src/tools/exit-plan-mode.test.js.map +1 -1
- package/dist/src/tools/get-internal-docs.js +6 -3
- package/dist/src/tools/get-internal-docs.js.map +1 -1
- package/dist/src/tools/get-internal-docs.test.js +4 -4
- package/dist/src/tools/get-internal-docs.test.js.map +1 -1
- package/dist/src/tools/glob.js +1 -1
- package/dist/src/tools/glob.js.map +1 -1
- package/dist/src/tools/glob.test.js +16 -16
- package/dist/src/tools/glob.test.js.map +1 -1
- package/dist/src/tools/grep.js +21 -12
- package/dist/src/tools/grep.js.map +1 -1
- package/dist/src/tools/grep.test.js +18 -18
- package/dist/src/tools/grep.test.js.map +1 -1
- package/dist/src/tools/line-endings.test.js +3 -3
- package/dist/src/tools/line-endings.test.js.map +1 -1
- package/dist/src/tools/list-mcp-resources.d.ts +24 -0
- package/dist/src/tools/list-mcp-resources.js +74 -0
- package/dist/src/tools/list-mcp-resources.js.map +1 -0
- package/dist/src/tools/list-mcp-resources.test.d.ts +6 -0
- package/dist/src/tools/list-mcp-resources.test.js +79 -0
- package/dist/src/tools/list-mcp-resources.test.js.map +1 -0
- package/dist/src/tools/ls.js +2 -2
- package/dist/src/tools/ls.js.map +1 -1
- package/dist/src/tools/ls.test.js +21 -21
- package/dist/src/tools/ls.test.js.map +1 -1
- package/dist/src/tools/mcp-client-manager.d.ts +3 -1
- package/dist/src/tools/mcp-client-manager.js +24 -1
- package/dist/src/tools/mcp-client-manager.js.map +1 -1
- package/dist/src/tools/mcp-client-manager.test.js +43 -0
- package/dist/src/tools/mcp-client-manager.test.js.map +1 -1
- package/dist/src/tools/mcp-client.js +10 -12
- package/dist/src/tools/mcp-client.js.map +1 -1
- package/dist/src/tools/mcp-client.test.js +14 -2
- package/dist/src/tools/mcp-client.test.js.map +1 -1
- package/dist/src/tools/mcp-tool.d.ts +2 -2
- package/dist/src/tools/mcp-tool.js +1 -1
- package/dist/src/tools/mcp-tool.js.map +1 -1
- package/dist/src/tools/mcp-tool.test.js +51 -21
- package/dist/src/tools/mcp-tool.test.js.map +1 -1
- package/dist/src/tools/memoryTool.d.ts +4 -3
- package/dist/src/tools/memoryTool.js +43 -14
- package/dist/src/tools/memoryTool.js.map +1 -1
- package/dist/src/tools/memoryTool.test.js +29 -9
- package/dist/src/tools/memoryTool.test.js.map +1 -1
- package/dist/src/tools/read-file.js +1 -1
- package/dist/src/tools/read-file.js.map +1 -1
- package/dist/src/tools/read-file.test.js +17 -17
- package/dist/src/tools/read-file.test.js.map +1 -1
- package/dist/src/tools/read-many-files.js +4 -4
- package/dist/src/tools/read-many-files.js.map +1 -1
- package/dist/src/tools/read-many-files.test.js +70 -24
- package/dist/src/tools/read-many-files.test.js.map +1 -1
- package/dist/src/tools/read-mcp-resource.d.ts +25 -0
- package/dist/src/tools/read-mcp-resource.js +120 -0
- package/dist/src/tools/read-mcp-resource.js.map +1 -0
- package/dist/src/tools/read-mcp-resource.test.d.ts +6 -0
- package/dist/src/tools/read-mcp-resource.test.js +110 -0
- package/dist/src/tools/read-mcp-resource.test.js.map +1 -0
- package/dist/src/tools/ripGrep.d.ts +3 -2
- package/dist/src/tools/ripGrep.js +26 -55
- package/dist/src/tools/ripGrep.js.map +1 -1
- package/dist/src/tools/ripGrep.test.js +113 -167
- package/dist/src/tools/ripGrep.test.js.map +1 -1
- package/dist/src/tools/shell.d.ts +2 -2
- package/dist/src/tools/shell.js +51 -21
- package/dist/src/tools/shell.js.map +1 -1
- package/dist/src/tools/shell.test.js +479 -76
- package/dist/src/tools/shell.test.js.map +1 -1
- package/dist/src/tools/shellBackgroundTools.d.ts +3 -3
- package/dist/src/tools/shellBackgroundTools.integration.test.js +6 -2
- package/dist/src/tools/shellBackgroundTools.integration.test.js.map +1 -1
- package/dist/src/tools/shellBackgroundTools.js +2 -2
- package/dist/src/tools/shellBackgroundTools.js.map +1 -1
- package/dist/src/tools/shellBackgroundTools.test.js +30 -10
- package/dist/src/tools/shellBackgroundTools.test.js.map +1 -1
- package/dist/src/tools/tool-error.d.ts +1 -0
- package/dist/src/tools/tool-error.js +1 -0
- package/dist/src/tools/tool-error.js.map +1 -1
- package/dist/src/tools/tool-names.d.ts +5 -4
- package/dist/src/tools/tool-names.js +8 -2
- package/dist/src/tools/tool-names.js.map +1 -1
- package/dist/src/tools/tool-registry.js +137 -114
- package/dist/src/tools/tool-registry.js.map +1 -1
- package/dist/src/tools/tool-registry.test.js +3 -1
- package/dist/src/tools/tool-registry.test.js.map +1 -1
- package/dist/src/tools/tools.d.ts +6 -6
- package/dist/src/tools/tools.js +6 -2
- package/dist/src/tools/tools.js.map +1 -1
- package/dist/src/tools/topicTool.d.ts +2 -2
- package/dist/src/tools/topicTool.js +1 -1
- package/dist/src/tools/topicTool.js.map +1 -1
- package/dist/src/tools/topicTool.test.js +6 -2
- package/dist/src/tools/topicTool.test.js.map +1 -1
- package/dist/src/tools/trackerTools.d.ts +7 -7
- package/dist/src/tools/trackerTools.js +6 -6
- package/dist/src/tools/trackerTools.js.map +1 -1
- package/dist/src/tools/web-fetch.js +1 -1
- package/dist/src/tools/web-fetch.js.map +1 -1
- package/dist/src/tools/web-fetch.test.js +59 -23
- package/dist/src/tools/web-fetch.test.js.map +1 -1
- package/dist/src/tools/web-search.js +1 -1
- package/dist/src/tools/web-search.js.map +1 -1
- package/dist/src/tools/web-search.test.js +5 -5
- package/dist/src/tools/web-search.test.js.map +1 -1
- package/dist/src/tools/write-file.js +22 -4
- package/dist/src/tools/write-file.js.map +1 -1
- package/dist/src/tools/write-file.test.js +29 -11
- package/dist/src/tools/write-file.test.js.map +1 -1
- package/dist/src/tools/write-todos.js +1 -1
- package/dist/src/tools/write-todos.js.map +1 -1
- package/dist/src/utils/compatibility.js +6 -1
- package/dist/src/utils/compatibility.js.map +1 -1
- package/dist/src/utils/compatibility.test.js +23 -0
- package/dist/src/utils/compatibility.test.js.map +1 -1
- package/dist/src/utils/errors.d.ts +3 -0
- package/dist/src/utils/errors.js +6 -0
- package/dist/src/utils/errors.js.map +1 -1
- package/dist/src/utils/fileUtils.d.ts +1 -2
- package/dist/src/utils/fileUtils.js +80 -40
- package/dist/src/utils/fileUtils.js.map +1 -1
- package/dist/src/utils/fileUtils.test.js +61 -0
- package/dist/src/utils/fileUtils.test.js.map +1 -1
- package/dist/src/utils/filesearch/fileSearch.d.ts +2 -0
- package/dist/src/utils/filesearch/fileSearch.js +97 -6
- package/dist/src/utils/filesearch/fileSearch.js.map +1 -1
- package/dist/src/utils/filesearch/fileSearch.test.js +54 -0
- package/dist/src/utils/filesearch/fileSearch.test.js.map +1 -1
- package/dist/src/utils/filesearch/fileWatcher.d.ts +25 -0
- package/dist/src/utils/filesearch/fileWatcher.js +86 -0
- package/dist/src/utils/filesearch/fileWatcher.js.map +1 -0
- package/dist/src/utils/filesearch/fileWatcher.test.js +142 -0
- package/dist/src/utils/filesearch/fileWatcher.test.js.map +1 -0
- package/dist/src/utils/getFolderStructure.js +4 -2
- package/dist/src/utils/getFolderStructure.js.map +1 -1
- package/dist/src/utils/gitIgnoreParser.js +1 -1
- package/dist/src/utils/gitIgnoreParser.js.map +1 -1
- package/dist/src/utils/googleQuotaErrors.d.ts +2 -1
- package/dist/src/utils/googleQuotaErrors.js +30 -35
- package/dist/src/utils/googleQuotaErrors.js.map +1 -1
- package/dist/src/utils/googleQuotaErrors.test.js +24 -0
- package/dist/src/utils/googleQuotaErrors.test.js.map +1 -1
- package/dist/src/utils/ignoreFileParser.js +1 -1
- package/dist/src/utils/ignoreFileParser.js.map +1 -1
- package/dist/src/utils/memoryDiscovery.js +15 -5
- package/dist/src/utils/memoryDiscovery.js.map +1 -1
- package/dist/src/utils/oauth-flow.js +17 -5
- package/dist/src/utils/oauth-flow.js.map +1 -1
- package/dist/src/utils/oauth-flow.test.js +20 -0
- package/dist/src/utils/oauth-flow.test.js.map +1 -1
- package/dist/src/utils/paths.d.ts +9 -0
- package/dist/src/utils/paths.js +37 -0
- package/dist/src/utils/paths.js.map +1 -1
- package/dist/src/utils/paths.test.js +45 -1
- package/dist/src/utils/paths.test.js.map +1 -1
- package/dist/src/utils/planUtils.d.ts +11 -2
- package/dist/src/utils/planUtils.js +43 -11
- package/dist/src/utils/planUtils.js.map +1 -1
- package/dist/src/utils/planUtils.test.js +10 -9
- package/dist/src/utils/planUtils.test.js.map +1 -1
- package/dist/src/utils/process-utils.d.ts +2 -1
- package/dist/src/utils/process-utils.js +64 -33
- package/dist/src/utils/process-utils.js.map +1 -1
- package/dist/src/utils/process-utils.test.js +9 -0
- package/dist/src/utils/process-utils.test.js.map +1 -1
- package/dist/src/utils/retry.js +18 -6
- package/dist/src/utils/retry.js.map +1 -1
- package/dist/src/utils/retry.test.js +30 -0
- package/dist/src/utils/retry.test.js.map +1 -1
- package/dist/src/utils/sessionOperations.js +3 -2
- package/dist/src/utils/sessionOperations.js.map +1 -1
- package/dist/src/utils/shell-utils.d.ts +2 -0
- package/dist/src/utils/shell-utils.js +237 -107
- package/dist/src/utils/shell-utils.js.map +1 -1
- package/dist/src/utils/tool-utils.d.ts +1 -29
- package/dist/src/utils/tool-utils.js +0 -39
- package/dist/src/utils/tool-utils.js.map +1 -1
- package/dist/src/utils/tool-utils.test.js +2 -76
- package/dist/src/utils/tool-utils.test.js.map +1 -1
- package/dist/src/utils/tool-visibility.d.ts +40 -0
- package/dist/src/utils/tool-visibility.js +111 -0
- package/dist/src/utils/tool-visibility.js.map +1 -0
- package/dist/src/utils/tool-visibility.test.d.ts +6 -0
- package/dist/src/utils/tool-visibility.test.js +96 -0
- package/dist/src/utils/tool-visibility.test.js.map +1 -0
- package/dist/src/utils/trust.d.ts +64 -0
- package/dist/src/utils/trust.js +276 -0
- package/dist/src/utils/trust.js.map +1 -0
- package/dist/src/utils/trust.test.d.ts +6 -0
- package/dist/src/utils/trust.test.js +159 -0
- package/dist/src/utils/trust.test.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +5 -4
- package/dist/docs/get-started/installation.md +0 -181
- package/dist/src/agents/memory-manager-agent.d.ts +0 -25
- package/dist/src/agents/memory-manager-agent.js +0 -138
- package/dist/src/agents/memory-manager-agent.js.map +0 -1
- package/dist/src/agents/memory-manager-agent.test.js +0 -123
- package/dist/src/agents/memory-manager-agent.test.js.map +0 -1
- package/dist/src/agents/subagent-tool-wrapper.d.ts +0 -38
- package/dist/src/agents/subagent-tool-wrapper.js +0 -58
- package/dist/src/agents/subagent-tool-wrapper.js.map +0 -1
- package/dist/src/agents/subagent-tool-wrapper.test.js +0 -123
- package/dist/src/agents/subagent-tool-wrapper.test.js.map +0 -1
- package/dist/src/agents/subagent-tool.d.ts +0 -18
- package/dist/src/agents/subagent-tool.js +0 -134
- package/dist/src/agents/subagent-tool.js.map +0 -1
- package/dist/src/agents/subagent-tool.test.js +0 -287
- package/dist/src/agents/subagent-tool.test.js.map +0 -1
- package/dist/src/policy/policies/tracker.toml +0 -34
- package/dist/src/prompts/snippets-memory-manager.test.js +0 -31
- package/dist/src/prompts/snippets-memory-manager.test.js.map +0 -1
- /package/dist/src/{agents/memory-manager-agent.test.d.ts → agent/tool-display-utils.test.d.ts} +0 -0
- /package/dist/src/agents/{subagent-tool.test.d.ts → agent-tool.test.d.ts} +0 -0
- /package/dist/src/{prompts/snippets-memory-manager.test.d.ts → agents/skill-extraction-agent.test.d.ts} +0 -0
- /package/dist/src/{agents/subagent-tool-wrapper.test.d.ts → utils/filesearch/fileWatcher.test.d.ts} +0 -0
|
@@ -3,145 +3,58 @@
|
|
|
3
3
|
* Copyright 2025 Google LLC
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
|
-
import { describe, it, expect, beforeEach, afterEach,
|
|
7
|
-
import { canUseRipgrep, RipGrepTool, ensureRgPath, } from './ripGrep.js';
|
|
6
|
+
import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest';
|
|
7
|
+
import { canUseRipgrep, RipGrepTool, ensureRgPath, getRipgrepPath, } from './ripGrep.js';
|
|
8
8
|
import path from 'node:path';
|
|
9
9
|
import { isSubpath } from '../utils/paths.js';
|
|
10
10
|
import fs from 'node:fs/promises';
|
|
11
11
|
import os from 'node:os';
|
|
12
|
-
import { Storage } from '../config/storage.js';
|
|
13
12
|
import { GEMINI_IGNORE_FILE_NAME } from '../config/constants.js';
|
|
14
13
|
import { createMockWorkspaceContext } from '../test-utils/mockWorkspaceContext.js';
|
|
15
14
|
import { spawn } from 'node:child_process';
|
|
16
15
|
import { PassThrough, Readable } from 'node:stream';
|
|
17
16
|
import EventEmitter from 'node:events';
|
|
18
|
-
import { downloadRipGrep } from '@joshua.litt/get-ripgrep';
|
|
19
17
|
import { createMockMessageBus } from '../test-utils/mock-message-bus.js';
|
|
20
|
-
|
|
21
|
-
vi.mock('
|
|
22
|
-
|
|
23
|
-
|
|
18
|
+
import { fileExists } from '../utils/fileUtils.js';
|
|
19
|
+
vi.mock('../utils/fileUtils.js', async (importOriginal) => {
|
|
20
|
+
const actual = await importOriginal();
|
|
21
|
+
return {
|
|
22
|
+
...actual,
|
|
23
|
+
fileExists: vi.fn(),
|
|
24
|
+
};
|
|
25
|
+
});
|
|
24
26
|
// Mock child_process for ripgrep calls
|
|
25
27
|
vi.mock('child_process', () => ({
|
|
26
28
|
spawn: vi.fn(),
|
|
27
29
|
}));
|
|
28
30
|
const mockSpawn = vi.mocked(spawn);
|
|
29
|
-
const downloadRipGrepMock = vi.mocked(downloadRipGrep);
|
|
30
|
-
const originalGetGlobalBinDir = Storage.getGlobalBinDir.bind(Storage);
|
|
31
|
-
const storageSpy = vi.spyOn(Storage, 'getGlobalBinDir');
|
|
32
|
-
function getRipgrepBinaryName() {
|
|
33
|
-
return process.platform === 'win32' ? 'rg.exe' : 'rg';
|
|
34
|
-
}
|
|
35
31
|
describe('canUseRipgrep', () => {
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
beforeEach(async () => {
|
|
39
|
-
downloadRipGrepMock.mockReset();
|
|
40
|
-
downloadRipGrepMock.mockResolvedValue(undefined);
|
|
41
|
-
tempRootDir = await fs.mkdtemp(path.join(os.tmpdir(), 'ripgrep-bin-'));
|
|
42
|
-
binDir = path.join(tempRootDir, 'bin');
|
|
43
|
-
await fs.mkdir(binDir, { recursive: true });
|
|
44
|
-
storageSpy.mockImplementation(() => binDir);
|
|
45
|
-
});
|
|
46
|
-
afterEach(async () => {
|
|
47
|
-
storageSpy.mockImplementation(() => originalGetGlobalBinDir());
|
|
48
|
-
await fs.rm(tempRootDir, { recursive: true, force: true });
|
|
32
|
+
beforeEach(() => {
|
|
33
|
+
vi.mocked(fileExists).mockReset();
|
|
49
34
|
});
|
|
50
35
|
it('should return true if ripgrep already exists', async () => {
|
|
51
|
-
|
|
52
|
-
await fs.writeFile(existingPath, '');
|
|
36
|
+
vi.mocked(fileExists).mockResolvedValue(true);
|
|
53
37
|
const result = await canUseRipgrep();
|
|
54
38
|
expect(result).toBe(true);
|
|
55
|
-
expect(downloadRipGrepMock).not.toHaveBeenCalled();
|
|
56
39
|
});
|
|
57
|
-
it('should
|
|
58
|
-
|
|
59
|
-
downloadRipGrepMock.mockImplementation(async () => {
|
|
60
|
-
await fs.writeFile(expectedPath, '');
|
|
61
|
-
});
|
|
62
|
-
const result = await canUseRipgrep();
|
|
63
|
-
expect(result).toBe(true);
|
|
64
|
-
expect(downloadRipGrep).toHaveBeenCalledWith(binDir);
|
|
65
|
-
await expect(fs.access(expectedPath)).resolves.toBeUndefined();
|
|
66
|
-
});
|
|
67
|
-
it('should return false if download fails and file does not exist', async () => {
|
|
40
|
+
it('should return false if file does not exist', async () => {
|
|
41
|
+
vi.mocked(fileExists).mockResolvedValue(false);
|
|
68
42
|
const result = await canUseRipgrep();
|
|
69
43
|
expect(result).toBe(false);
|
|
70
|
-
expect(downloadRipGrep).toHaveBeenCalledWith(binDir);
|
|
71
|
-
});
|
|
72
|
-
it('should propagate errors from downloadRipGrep', async () => {
|
|
73
|
-
const error = new Error('Download failed');
|
|
74
|
-
downloadRipGrepMock.mockRejectedValue(error);
|
|
75
|
-
await expect(canUseRipgrep()).rejects.toThrow(error);
|
|
76
|
-
expect(downloadRipGrep).toHaveBeenCalledWith(binDir);
|
|
77
|
-
});
|
|
78
|
-
it('should only download once when called concurrently', async () => {
|
|
79
|
-
const expectedPath = path.join(binDir, getRipgrepBinaryName());
|
|
80
|
-
downloadRipGrepMock.mockImplementation(() => new Promise((resolve, reject) => {
|
|
81
|
-
setTimeout(() => {
|
|
82
|
-
fs.writeFile(expectedPath, '')
|
|
83
|
-
.then(() => resolve())
|
|
84
|
-
.catch(reject);
|
|
85
|
-
}, 0);
|
|
86
|
-
}));
|
|
87
|
-
const firstCall = ensureRgPath();
|
|
88
|
-
const secondCall = ensureRgPath();
|
|
89
|
-
const [pathOne, pathTwo] = await Promise.all([firstCall, secondCall]);
|
|
90
|
-
expect(pathOne).toBe(expectedPath);
|
|
91
|
-
expect(pathTwo).toBe(expectedPath);
|
|
92
|
-
expect(downloadRipGrepMock).toHaveBeenCalledTimes(1);
|
|
93
|
-
await expect(fs.access(expectedPath)).resolves.toBeUndefined();
|
|
94
44
|
});
|
|
95
45
|
});
|
|
96
46
|
describe('ensureRgPath', () => {
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
beforeEach(async () => {
|
|
100
|
-
downloadRipGrepMock.mockReset();
|
|
101
|
-
downloadRipGrepMock.mockResolvedValue(undefined);
|
|
102
|
-
tempRootDir = await fs.mkdtemp(path.join(os.tmpdir(), 'ripgrep-bin-'));
|
|
103
|
-
binDir = path.join(tempRootDir, 'bin');
|
|
104
|
-
await fs.mkdir(binDir, { recursive: true });
|
|
105
|
-
storageSpy.mockImplementation(() => binDir);
|
|
106
|
-
});
|
|
107
|
-
afterEach(async () => {
|
|
108
|
-
storageSpy.mockImplementation(() => originalGetGlobalBinDir());
|
|
109
|
-
await fs.rm(tempRootDir, { recursive: true, force: true });
|
|
47
|
+
beforeEach(() => {
|
|
48
|
+
vi.mocked(fileExists).mockReset();
|
|
110
49
|
});
|
|
111
50
|
it('should return rg path if ripgrep already exists', async () => {
|
|
112
|
-
|
|
113
|
-
await fs.writeFile(existingPath, '');
|
|
51
|
+
vi.mocked(fileExists).mockResolvedValue(true);
|
|
114
52
|
const rgPath = await ensureRgPath();
|
|
115
|
-
expect(rgPath).toBe(
|
|
116
|
-
expect(downloadRipGrep).not.toHaveBeenCalled();
|
|
117
|
-
});
|
|
118
|
-
it('should return rg path if ripgrep is downloaded successfully', async () => {
|
|
119
|
-
const expectedPath = path.join(binDir, getRipgrepBinaryName());
|
|
120
|
-
downloadRipGrepMock.mockImplementation(async () => {
|
|
121
|
-
await fs.writeFile(expectedPath, '');
|
|
122
|
-
});
|
|
123
|
-
const rgPath = await ensureRgPath();
|
|
124
|
-
expect(rgPath).toBe(expectedPath);
|
|
125
|
-
expect(downloadRipGrep).toHaveBeenCalledTimes(1);
|
|
126
|
-
await expect(fs.access(expectedPath)).resolves.toBeUndefined();
|
|
127
|
-
});
|
|
128
|
-
it('should throw an error if ripgrep cannot be used after download attempt', async () => {
|
|
129
|
-
await expect(ensureRgPath()).rejects.toThrow('Cannot use ripgrep.');
|
|
130
|
-
expect(downloadRipGrep).toHaveBeenCalledTimes(1);
|
|
53
|
+
expect(rgPath).toBe(await getRipgrepPath());
|
|
131
54
|
});
|
|
132
|
-
it('should
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
await expect(ensureRgPath()).rejects.toThrow(error);
|
|
136
|
-
expect(downloadRipGrep).toHaveBeenCalledWith(binDir);
|
|
137
|
-
});
|
|
138
|
-
it.runIf(process.platform === 'win32')('should detect ripgrep when only rg.exe exists on Windows', async () => {
|
|
139
|
-
const expectedRgExePath = path.join(binDir, 'rg.exe');
|
|
140
|
-
await fs.writeFile(expectedRgExePath, '');
|
|
141
|
-
const rgPath = await ensureRgPath();
|
|
142
|
-
expect(rgPath).toBe(expectedRgExePath);
|
|
143
|
-
expect(downloadRipGrep).not.toHaveBeenCalled();
|
|
144
|
-
await expect(fs.access(expectedRgExePath)).resolves.toBeUndefined();
|
|
55
|
+
it('should throw an error if ripgrep cannot be used', async () => {
|
|
56
|
+
vi.mocked(fileExists).mockResolvedValue(false);
|
|
57
|
+
await expect(ensureRgPath()).rejects.toThrow(/Cannot find bundled ripgrep binary/);
|
|
145
58
|
});
|
|
146
59
|
});
|
|
147
60
|
// Helper function to create mock spawn implementations
|
|
@@ -179,9 +92,6 @@ function createMockSpawn(options = {}) {
|
|
|
179
92
|
}
|
|
180
93
|
describe('RipGrepTool', () => {
|
|
181
94
|
let tempRootDir;
|
|
182
|
-
let tempBinRoot;
|
|
183
|
-
let binDir;
|
|
184
|
-
let ripgrepBinaryPath;
|
|
185
95
|
let grepTool;
|
|
186
96
|
const abortSignal = new AbortController().signal;
|
|
187
97
|
let mockConfig = {
|
|
@@ -196,18 +106,10 @@ describe('RipGrepTool', () => {
|
|
|
196
106
|
}),
|
|
197
107
|
};
|
|
198
108
|
beforeEach(async () => {
|
|
199
|
-
downloadRipGrepMock.mockReset();
|
|
200
|
-
downloadRipGrepMock.mockResolvedValue(undefined);
|
|
201
109
|
mockSpawn.mockReset();
|
|
202
110
|
mockSpawn.mockImplementation(createMockSpawn());
|
|
203
|
-
tempBinRoot = await fs.mkdtemp(path.join(os.tmpdir(), 'ripgrep-bin-'));
|
|
204
|
-
binDir = path.join(tempBinRoot, 'bin');
|
|
205
|
-
await fs.mkdir(binDir, { recursive: true });
|
|
206
|
-
const binaryName = process.platform === 'win32' ? 'rg.exe' : 'rg';
|
|
207
|
-
ripgrepBinaryPath = path.join(binDir, binaryName);
|
|
208
|
-
await fs.writeFile(ripgrepBinaryPath, '');
|
|
209
|
-
storageSpy.mockImplementation(() => binDir);
|
|
210
111
|
tempRootDir = await fs.mkdtemp(path.join(os.tmpdir(), 'grep-tool-root-'));
|
|
112
|
+
vi.mocked(fileExists).mockResolvedValue(true);
|
|
211
113
|
mockConfig = {
|
|
212
114
|
getTargetDir: () => tempRootDir,
|
|
213
115
|
getWorkspaceContext: () => createMockWorkspaceContext(tempRootDir),
|
|
@@ -247,9 +149,7 @@ describe('RipGrepTool', () => {
|
|
|
247
149
|
await fs.writeFile(path.join(tempRootDir, 'sub', 'fileD.md'), '# Markdown file\nThis is a test.');
|
|
248
150
|
});
|
|
249
151
|
afterEach(async () => {
|
|
250
|
-
storageSpy.mockImplementation(() => originalGetGlobalBinDir());
|
|
251
152
|
await fs.rm(tempRootDir, { recursive: true, force: true });
|
|
252
|
-
await fs.rm(tempBinRoot, { recursive: true, force: true });
|
|
253
153
|
});
|
|
254
154
|
describe('validateToolParams', () => {
|
|
255
155
|
it.each([
|
|
@@ -332,7 +232,7 @@ describe('RipGrepTool', () => {
|
|
|
332
232
|
}));
|
|
333
233
|
const params = { pattern: 'world' };
|
|
334
234
|
const invocation = grepTool.build(params);
|
|
335
|
-
const result = await invocation.execute(abortSignal);
|
|
235
|
+
const result = await invocation.execute({ abortSignal });
|
|
336
236
|
expect(result.llmContent).toContain('Found 3 matches for pattern "world" in path "."');
|
|
337
237
|
expect(result.llmContent).toContain('File: fileA.txt');
|
|
338
238
|
expect(result.llmContent).toContain('L1: hello world');
|
|
@@ -365,7 +265,7 @@ describe('RipGrepTool', () => {
|
|
|
365
265
|
}));
|
|
366
266
|
const params = { pattern: 'world' };
|
|
367
267
|
const invocation = grepTool.build(params);
|
|
368
|
-
const result = await invocation.execute(abortSignal);
|
|
268
|
+
const result = await invocation.execute({ abortSignal });
|
|
369
269
|
expect(result.llmContent).toContain('File: ..env');
|
|
370
270
|
expect(result.llmContent).toContain('L1: world in ..env');
|
|
371
271
|
expect(result.llmContent).not.toContain('secret.txt');
|
|
@@ -385,7 +285,7 @@ describe('RipGrepTool', () => {
|
|
|
385
285
|
}));
|
|
386
286
|
const params = { pattern: 'world', dir_path: 'sub' };
|
|
387
287
|
const invocation = grepTool.build(params);
|
|
388
|
-
const result = await invocation.execute(abortSignal);
|
|
288
|
+
const result = await invocation.execute({ abortSignal });
|
|
389
289
|
expect(result.llmContent).toContain('Found 1 match for pattern "world" in path "sub"');
|
|
390
290
|
expect(result.llmContent).toContain('File: fileC.txt'); // Path relative to 'sub'
|
|
391
291
|
expect(result.llmContent).toContain('L1: another world in sub dir');
|
|
@@ -409,7 +309,7 @@ describe('RipGrepTool', () => {
|
|
|
409
309
|
include_pattern: '*.js',
|
|
410
310
|
};
|
|
411
311
|
const invocation = grepTool.build(params);
|
|
412
|
-
const result = await invocation.execute(abortSignal);
|
|
312
|
+
const result = await invocation.execute({ abortSignal });
|
|
413
313
|
expect(result.llmContent).toContain('Found 1 match for pattern "hello" in path "." (filter: "*.js"):');
|
|
414
314
|
expect(result.llmContent).toContain('File: fileB.js');
|
|
415
315
|
expect(result.llmContent).toContain('L2: function baz() { return "hello"; }');
|
|
@@ -435,7 +335,7 @@ describe('RipGrepTool', () => {
|
|
|
435
335
|
include_pattern: '*.js',
|
|
436
336
|
};
|
|
437
337
|
const invocation = grepTool.build(params);
|
|
438
|
-
const result = await invocation.execute(abortSignal);
|
|
338
|
+
const result = await invocation.execute({ abortSignal });
|
|
439
339
|
expect(result.llmContent).toContain('Found 1 match for pattern "hello" in path "sub" (filter: "*.js")');
|
|
440
340
|
expect(result.llmContent).toContain('File: another.js');
|
|
441
341
|
expect(result.llmContent).toContain('L1: const greeting = "hello";');
|
|
@@ -448,7 +348,7 @@ describe('RipGrepTool', () => {
|
|
|
448
348
|
}));
|
|
449
349
|
const params = { pattern: 'nonexistentpattern' };
|
|
450
350
|
const invocation = grepTool.build(params);
|
|
451
|
-
const result = await invocation.execute(abortSignal);
|
|
351
|
+
const result = await invocation.execute({ abortSignal });
|
|
452
352
|
expect(result.llmContent).toContain('No matches found for pattern "nonexistentpattern" in path ".".');
|
|
453
353
|
expect(result.returnDisplay.summary).toBe('No matches found');
|
|
454
354
|
});
|
|
@@ -466,7 +366,7 @@ describe('RipGrepTool', () => {
|
|
|
466
366
|
pattern: 'foo',
|
|
467
367
|
dir_path: tempRootDir,
|
|
468
368
|
});
|
|
469
|
-
const result = await invocation.execute(abortSignal);
|
|
369
|
+
const result = await invocation.execute({ abortSignal });
|
|
470
370
|
expect(result.llmContent).toContain('Process exited with code 2');
|
|
471
371
|
expect(result.returnDisplay).toContain('Error: Process exited with code 2');
|
|
472
372
|
});
|
|
@@ -525,7 +425,7 @@ describe('RipGrepTool', () => {
|
|
|
525
425
|
pattern: 'test',
|
|
526
426
|
dir_path: tempRootDir,
|
|
527
427
|
});
|
|
528
|
-
const result = await invocation.execute(abortSignal);
|
|
428
|
+
const result = await invocation.execute({ abortSignal });
|
|
529
429
|
expect(result.returnDisplay.summary).toContain('(limited)');
|
|
530
430
|
}, 10000);
|
|
531
431
|
it('should filter out files based on FileDiscoveryService even if ripgrep returns them', async () => {
|
|
@@ -557,7 +457,7 @@ describe('RipGrepTool', () => {
|
|
|
557
457
|
}));
|
|
558
458
|
const params = { pattern: 'should' };
|
|
559
459
|
const invocation = toolWithIgnore.build(params);
|
|
560
|
-
const result = await invocation.execute(abortSignal);
|
|
460
|
+
const result = await invocation.execute({ abortSignal });
|
|
561
461
|
// Verify ignored file is filtered out
|
|
562
462
|
expect(result.llmContent).toContain('allowed.txt');
|
|
563
463
|
expect(result.llmContent).toContain('should be kept');
|
|
@@ -580,7 +480,7 @@ describe('RipGrepTool', () => {
|
|
|
580
480
|
}));
|
|
581
481
|
const params = { pattern: 'foo.*bar' }; // Matches 'const foo = "bar";'
|
|
582
482
|
const invocation = grepTool.build(params);
|
|
583
|
-
const result = await invocation.execute(abortSignal);
|
|
483
|
+
const result = await invocation.execute({ abortSignal });
|
|
584
484
|
expect(result.llmContent).toContain('Found 1 match for pattern "foo.*bar" in path ".":');
|
|
585
485
|
expect(result.llmContent).toContain('File: fileB.js');
|
|
586
486
|
expect(result.llmContent).toContain('L1: const foo = "bar";');
|
|
@@ -610,7 +510,7 @@ describe('RipGrepTool', () => {
|
|
|
610
510
|
}));
|
|
611
511
|
const params = { pattern: 'HELLO' };
|
|
612
512
|
const invocation = grepTool.build(params);
|
|
613
|
-
const result = await invocation.execute(abortSignal);
|
|
513
|
+
const result = await invocation.execute({ abortSignal });
|
|
614
514
|
expect(result.llmContent).toContain('Found 2 matches for pattern "HELLO" in path ".":');
|
|
615
515
|
expect(result.llmContent).toContain('File: fileA.txt');
|
|
616
516
|
expect(result.llmContent).toContain('L1: hello world');
|
|
@@ -622,14 +522,13 @@ describe('RipGrepTool', () => {
|
|
|
622
522
|
expect(() => grepTool.build(params)).toThrow(/params must have required property 'pattern'/);
|
|
623
523
|
});
|
|
624
524
|
it('should throw an error if ripgrep is not available', async () => {
|
|
625
|
-
|
|
626
|
-
downloadRipGrepMock.mockResolvedValue(undefined);
|
|
525
|
+
vi.mocked(fileExists).mockResolvedValue(false);
|
|
627
526
|
const params = { pattern: 'world' };
|
|
628
527
|
const invocation = grepTool.build(params);
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
528
|
+
const result = await invocation.execute({ abortSignal });
|
|
529
|
+
expect(result.llmContent).toContain('Cannot find bundled ripgrep binary');
|
|
530
|
+
// restore the mock for subsequent tests
|
|
531
|
+
vi.mocked(fileExists).mockResolvedValue(true);
|
|
633
532
|
});
|
|
634
533
|
});
|
|
635
534
|
describe('multi-directory workspace', () => {
|
|
@@ -703,7 +602,7 @@ describe('RipGrepTool', () => {
|
|
|
703
602
|
const multiDirGrepTool = new RipGrepTool(multiDirConfig, createMockMessageBus());
|
|
704
603
|
const params = { pattern: 'world' };
|
|
705
604
|
const invocation = multiDirGrepTool.build(params);
|
|
706
|
-
const result = await invocation.execute(abortSignal);
|
|
605
|
+
const result = await invocation.execute({ abortSignal });
|
|
707
606
|
// Should find matches in CWD only (default behavior now)
|
|
708
607
|
expect(result.llmContent).toContain('Found 3 matches for pattern "world" in path "."');
|
|
709
608
|
// Matches from first directory
|
|
@@ -772,7 +671,7 @@ describe('RipGrepTool', () => {
|
|
|
772
671
|
// Search only in the 'sub' directory of the first workspace
|
|
773
672
|
const params = { pattern: 'world', dir_path: 'sub' };
|
|
774
673
|
const invocation = multiDirGrepTool.build(params);
|
|
775
|
-
const result = await invocation.execute(abortSignal);
|
|
674
|
+
const result = await invocation.execute({ abortSignal });
|
|
776
675
|
// Should only find matches in the specified sub directory
|
|
777
676
|
expect(result.llmContent).toContain('Found 1 match for pattern "world" in path "sub"');
|
|
778
677
|
expect(result.llmContent).toContain('File: fileC.txt');
|
|
@@ -789,7 +688,9 @@ describe('RipGrepTool', () => {
|
|
|
789
688
|
const params = { pattern: 'world' };
|
|
790
689
|
const invocation = grepTool.build(params);
|
|
791
690
|
controller.abort();
|
|
792
|
-
const result = await invocation.execute(
|
|
691
|
+
const result = await invocation.execute({
|
|
692
|
+
abortSignal: controller.signal,
|
|
693
|
+
});
|
|
793
694
|
expect(result).toBeDefined();
|
|
794
695
|
});
|
|
795
696
|
it('should abort streaming search when signal is triggered', async () => {
|
|
@@ -803,7 +704,9 @@ describe('RipGrepTool', () => {
|
|
|
803
704
|
const invocation = grepTool.build(params);
|
|
804
705
|
// Abort immediately before starting the search
|
|
805
706
|
controller.abort();
|
|
806
|
-
const result = await invocation.execute(
|
|
707
|
+
const result = await invocation.execute({
|
|
708
|
+
abortSignal: controller.signal,
|
|
709
|
+
});
|
|
807
710
|
expect(result.returnDisplay.summary).toContain('No matches found');
|
|
808
711
|
});
|
|
809
712
|
});
|
|
@@ -835,7 +738,7 @@ describe('RipGrepTool', () => {
|
|
|
835
738
|
mockSpawn.mockImplementation(createMockSpawn({ exitCode: 1 }));
|
|
836
739
|
const params = await setup();
|
|
837
740
|
const invocation = grepTool.build(params);
|
|
838
|
-
const result = await invocation.execute(abortSignal);
|
|
741
|
+
const result = await invocation.execute({ abortSignal });
|
|
839
742
|
expect(result.llmContent).toContain('No matches found');
|
|
840
743
|
});
|
|
841
744
|
it('should handle special characters in file names', async () => {
|
|
@@ -854,7 +757,7 @@ describe('RipGrepTool', () => {
|
|
|
854
757
|
}));
|
|
855
758
|
const params = { pattern: 'world' };
|
|
856
759
|
const invocation = grepTool.build(params);
|
|
857
|
-
const result = await invocation.execute(abortSignal);
|
|
760
|
+
const result = await invocation.execute({ abortSignal });
|
|
858
761
|
expect(result.llmContent).toContain(specialFileName);
|
|
859
762
|
expect(result.llmContent).toContain('hello world with special chars');
|
|
860
763
|
});
|
|
@@ -875,7 +778,7 @@ describe('RipGrepTool', () => {
|
|
|
875
778
|
}));
|
|
876
779
|
const params = { pattern: 'deep' };
|
|
877
780
|
const invocation = grepTool.build(params);
|
|
878
|
-
const result = await invocation.execute(abortSignal);
|
|
781
|
+
const result = await invocation.execute({ abortSignal });
|
|
879
782
|
expect(result.llmContent).toContain('deep.txt');
|
|
880
783
|
expect(result.llmContent).toContain('content in deep directory');
|
|
881
784
|
});
|
|
@@ -899,7 +802,7 @@ describe('RipGrepTool', () => {
|
|
|
899
802
|
context: 0,
|
|
900
803
|
};
|
|
901
804
|
const invocation = grepTool.build(params);
|
|
902
|
-
const result = await invocation.execute(abortSignal);
|
|
805
|
+
const result = await invocation.execute({ abortSignal });
|
|
903
806
|
expect(result.llmContent).toContain('function getName()');
|
|
904
807
|
expect(result.llmContent).not.toContain('const getValue');
|
|
905
808
|
});
|
|
@@ -937,7 +840,7 @@ describe('RipGrepTool', () => {
|
|
|
937
840
|
}));
|
|
938
841
|
const params = { pattern: 'hello' };
|
|
939
842
|
const invocation = grepTool.build(params);
|
|
940
|
-
const result = await invocation.execute(abortSignal);
|
|
843
|
+
const result = await invocation.execute({ abortSignal });
|
|
941
844
|
expect(result.llmContent).toContain('Hello World');
|
|
942
845
|
expect(result.llmContent).toContain('hello world');
|
|
943
846
|
expect(result.llmContent).toContain('HELLO WORLD');
|
|
@@ -960,7 +863,7 @@ describe('RipGrepTool', () => {
|
|
|
960
863
|
context: 0,
|
|
961
864
|
};
|
|
962
865
|
const invocation = grepTool.build(params);
|
|
963
|
-
const result = await invocation.execute(abortSignal);
|
|
866
|
+
const result = await invocation.execute({ abortSignal });
|
|
964
867
|
expect(result.llmContent).toContain('Price: $19.99');
|
|
965
868
|
expect(result.llmContent).not.toContain('Email: test@example.com');
|
|
966
869
|
});
|
|
@@ -997,7 +900,7 @@ describe('RipGrepTool', () => {
|
|
|
997
900
|
include_pattern: '*.{ts,tsx}',
|
|
998
901
|
};
|
|
999
902
|
const invocation = grepTool.build(params);
|
|
1000
|
-
const result = await invocation.execute(abortSignal);
|
|
903
|
+
const result = await invocation.execute({ abortSignal });
|
|
1001
904
|
expect(result.llmContent).toContain('test.ts');
|
|
1002
905
|
expect(result.llmContent).toContain('test.tsx');
|
|
1003
906
|
expect(result.llmContent).not.toContain('test.js');
|
|
@@ -1023,7 +926,7 @@ describe('RipGrepTool', () => {
|
|
|
1023
926
|
include_pattern: 'src/**',
|
|
1024
927
|
};
|
|
1025
928
|
const invocation = grepTool.build(params);
|
|
1026
|
-
const result = await invocation.execute(abortSignal);
|
|
929
|
+
const result = await invocation.execute({ abortSignal });
|
|
1027
930
|
expect(result.llmContent).toContain('main.ts');
|
|
1028
931
|
expect(result.llmContent).not.toContain('other.ts');
|
|
1029
932
|
});
|
|
@@ -1044,7 +947,7 @@ describe('RipGrepTool', () => {
|
|
|
1044
947
|
}));
|
|
1045
948
|
let params = { pattern: 'HELLO', context: 0 };
|
|
1046
949
|
let invocation = grepTool.build(params);
|
|
1047
|
-
let result = await invocation.execute(abortSignal);
|
|
950
|
+
let result = await invocation.execute({ abortSignal });
|
|
1048
951
|
expect(mockSpawn).toHaveBeenLastCalledWith(expect.anything(), expect.arrayContaining(['--ignore-case']), expect.anything());
|
|
1049
952
|
expect(result.llmContent).toContain('Found 1 match for pattern "HELLO"');
|
|
1050
953
|
expect(result.llmContent).toContain('L1: hello world');
|
|
@@ -1062,7 +965,7 @@ describe('RipGrepTool', () => {
|
|
|
1062
965
|
}));
|
|
1063
966
|
params = { pattern: 'HELLO', case_sensitive: true, context: 0 };
|
|
1064
967
|
invocation = grepTool.build(params);
|
|
1065
|
-
result = await invocation.execute(abortSignal);
|
|
968
|
+
result = await invocation.execute({ abortSignal });
|
|
1066
969
|
expect(mockSpawn).toHaveBeenLastCalledWith(expect.anything(), expect.not.arrayContaining(['--ignore-case']), expect.anything());
|
|
1067
970
|
expect(result.llmContent).toContain('Found 1 match for pattern "HELLO"');
|
|
1068
971
|
expect(result.llmContent).toContain('L1: HELLO world');
|
|
@@ -1083,7 +986,7 @@ describe('RipGrepTool', () => {
|
|
|
1083
986
|
pattern: 'hello.world',
|
|
1084
987
|
fixed_strings: true,
|
|
1085
988
|
});
|
|
1086
|
-
const result = await invocation.execute(abortSignal);
|
|
989
|
+
const result = await invocation.execute({ abortSignal });
|
|
1087
990
|
const spawnArgs = mockSpawn.mock.calls[0][1];
|
|
1088
991
|
expect(spawnArgs).toContain('--fixed-strings');
|
|
1089
992
|
expect(spawnArgs).toContain('--regexp');
|
|
@@ -1114,7 +1017,7 @@ describe('RipGrepTool', () => {
|
|
|
1114
1017
|
}));
|
|
1115
1018
|
const params = { pattern: 'secret', no_ignore: true };
|
|
1116
1019
|
const invocation = grepTool.build(params);
|
|
1117
|
-
const result = await invocation.execute(abortSignal);
|
|
1020
|
+
const result = await invocation.execute({ abortSignal });
|
|
1118
1021
|
expect(mockSpawn).toHaveBeenLastCalledWith(expect.anything(), expect.arrayContaining(['--no-ignore']), expect.anything());
|
|
1119
1022
|
expect(mockSpawn).toHaveBeenLastCalledWith(expect.anything(), expect.not.arrayContaining(['--glob', '!node_modules']), expect.anything());
|
|
1120
1023
|
expect(result.llmContent).toContain('Found 1 match for pattern "secret"');
|
|
@@ -1166,7 +1069,7 @@ describe('RipGrepTool', () => {
|
|
|
1166
1069
|
}));
|
|
1167
1070
|
const params = { pattern: 'secret' };
|
|
1168
1071
|
const invocation = gitIgnoreDisabledTool.build(params);
|
|
1169
|
-
await invocation.execute(abortSignal);
|
|
1072
|
+
await invocation.execute({ abortSignal });
|
|
1170
1073
|
expect(mockSpawn).toHaveBeenLastCalledWith(expect.anything(), expect.arrayContaining(['--no-ignore-vcs', '--no-ignore-exclude']), expect.anything());
|
|
1171
1074
|
});
|
|
1172
1075
|
it('should add .geminiignore when enabled and patterns exist', async () => {
|
|
@@ -1216,7 +1119,7 @@ describe('RipGrepTool', () => {
|
|
|
1216
1119
|
}));
|
|
1217
1120
|
const params = { pattern: 'secret' };
|
|
1218
1121
|
const invocation = geminiIgnoreTool.build(params);
|
|
1219
|
-
await invocation.execute(abortSignal);
|
|
1122
|
+
await invocation.execute({ abortSignal });
|
|
1220
1123
|
expect(mockSpawn).toHaveBeenLastCalledWith(expect.anything(), expect.arrayContaining(['--ignore-file', geminiIgnorePath]), expect.anything());
|
|
1221
1124
|
});
|
|
1222
1125
|
it('should skip .geminiignore when disabled', async () => {
|
|
@@ -1266,7 +1169,7 @@ describe('RipGrepTool', () => {
|
|
|
1266
1169
|
}));
|
|
1267
1170
|
const params = { pattern: 'secret' };
|
|
1268
1171
|
const invocation = geminiIgnoreTool.build(params);
|
|
1269
|
-
await invocation.execute(abortSignal);
|
|
1172
|
+
await invocation.execute({ abortSignal });
|
|
1270
1173
|
expect(mockSpawn).toHaveBeenLastCalledWith(expect.anything(), expect.not.arrayContaining(['--ignore-file', geminiIgnorePath]), expect.anything());
|
|
1271
1174
|
});
|
|
1272
1175
|
it('should handle context parameters', async () => {
|
|
@@ -1316,7 +1219,7 @@ describe('RipGrepTool', () => {
|
|
|
1316
1219
|
before: 1,
|
|
1317
1220
|
};
|
|
1318
1221
|
const invocation = grepTool.build(params);
|
|
1319
|
-
const result = await invocation.execute(abortSignal);
|
|
1222
|
+
const result = await invocation.execute({ abortSignal });
|
|
1320
1223
|
expect(mockSpawn).toHaveBeenLastCalledWith(expect.anything(), expect.arrayContaining([
|
|
1321
1224
|
'--context',
|
|
1322
1225
|
'1',
|
|
@@ -1430,7 +1333,7 @@ describe('RipGrepTool', () => {
|
|
|
1430
1333
|
max_matches_per_file: 1,
|
|
1431
1334
|
};
|
|
1432
1335
|
const invocation = grepTool.build(params);
|
|
1433
|
-
await invocation.execute(abortSignal);
|
|
1336
|
+
await invocation.execute({ abortSignal });
|
|
1434
1337
|
const spawnArgs = mockSpawn.mock.calls[0][1];
|
|
1435
1338
|
expect(spawnArgs).toContain('--max-count');
|
|
1436
1339
|
expect(spawnArgs).toContain('1');
|
|
@@ -1473,7 +1376,7 @@ describe('RipGrepTool', () => {
|
|
|
1473
1376
|
context: 0,
|
|
1474
1377
|
};
|
|
1475
1378
|
const invocation = grepTool.build(params);
|
|
1476
|
-
const result = await invocation.execute(abortSignal);
|
|
1379
|
+
const result = await invocation.execute({ abortSignal });
|
|
1477
1380
|
expect(result.llmContent).toContain('Found 2 matches');
|
|
1478
1381
|
expect(result.llmContent).toContain('results limited to 2 matches for performance');
|
|
1479
1382
|
expect(result.llmContent).toContain('L1: match 1');
|
|
@@ -1508,7 +1411,7 @@ describe('RipGrepTool', () => {
|
|
|
1508
1411
|
names_only: true,
|
|
1509
1412
|
};
|
|
1510
1413
|
const invocation = grepTool.build(params);
|
|
1511
|
-
const result = await invocation.execute(abortSignal);
|
|
1414
|
+
const result = await invocation.execute({ abortSignal });
|
|
1512
1415
|
expect(result.llmContent).toContain('Found 2 files with matches');
|
|
1513
1416
|
expect(result.llmContent).toContain('fileA.txt');
|
|
1514
1417
|
expect(result.llmContent).toContain('fileB.txt');
|
|
@@ -1543,7 +1446,7 @@ describe('RipGrepTool', () => {
|
|
|
1543
1446
|
context: 0,
|
|
1544
1447
|
};
|
|
1545
1448
|
const invocation = grepTool.build(params);
|
|
1546
|
-
const result = await invocation.execute(abortSignal);
|
|
1449
|
+
const result = await invocation.execute({ abortSignal });
|
|
1547
1450
|
expect(result.llmContent).toContain('Found 1 match');
|
|
1548
1451
|
expect(result.llmContent).toContain('fileA.txt');
|
|
1549
1452
|
expect(result.llmContent).not.toContain('fileB.txt');
|
|
@@ -1564,14 +1467,57 @@ describe('RipGrepTool', () => {
|
|
|
1564
1467
|
}));
|
|
1565
1468
|
const params = { pattern: 'Target match', context: 0 };
|
|
1566
1469
|
const invocation = grepTool.build(params);
|
|
1567
|
-
const result = await invocation.execute(abortSignal);
|
|
1470
|
+
const result = await invocation.execute({ abortSignal });
|
|
1568
1471
|
// MAX_LINE_LENGTH_TEXT_FILE is 2000. It should be truncated.
|
|
1569
1472
|
expect(result.llmContent).toContain('... [truncated]');
|
|
1570
1473
|
expect(result.llmContent).not.toContain(longString);
|
|
1571
1474
|
});
|
|
1572
1475
|
});
|
|
1573
1476
|
});
|
|
1574
|
-
|
|
1575
|
-
|
|
1477
|
+
describe('getRipgrepPath', () => {
|
|
1478
|
+
afterEach(() => {
|
|
1479
|
+
vi.restoreAllMocks();
|
|
1480
|
+
});
|
|
1481
|
+
describe('OS/Architecture Resolution', () => {
|
|
1482
|
+
it.each([
|
|
1483
|
+
{ platform: 'darwin', arch: 'arm64', expectedBin: 'rg-darwin-arm64' },
|
|
1484
|
+
{ platform: 'darwin', arch: 'x64', expectedBin: 'rg-darwin-x64' },
|
|
1485
|
+
{ platform: 'linux', arch: 'arm64', expectedBin: 'rg-linux-arm64' },
|
|
1486
|
+
{ platform: 'linux', arch: 'x64', expectedBin: 'rg-linux-x64' },
|
|
1487
|
+
{ platform: 'win32', arch: 'x64', expectedBin: 'rg-win32-x64.exe' },
|
|
1488
|
+
])('should map $platform $arch to $expectedBin', async ({ platform, arch, expectedBin }) => {
|
|
1489
|
+
vi.spyOn(os, 'platform').mockReturnValue(platform);
|
|
1490
|
+
vi.spyOn(os, 'arch').mockReturnValue(arch);
|
|
1491
|
+
vi.mocked(fileExists).mockImplementation(async (checkPath) => checkPath.endsWith(expectedBin));
|
|
1492
|
+
const resolvedPath = await getRipgrepPath();
|
|
1493
|
+
expect(resolvedPath).not.toBeNull();
|
|
1494
|
+
expect(resolvedPath?.endsWith(expectedBin)).toBe(true);
|
|
1495
|
+
});
|
|
1496
|
+
});
|
|
1497
|
+
describe('Path Fallback Logic', () => {
|
|
1498
|
+
beforeEach(() => {
|
|
1499
|
+
vi.spyOn(os, 'platform').mockReturnValue('linux');
|
|
1500
|
+
vi.spyOn(os, 'arch').mockReturnValue('x64');
|
|
1501
|
+
});
|
|
1502
|
+
it('should resolve the SEA (flattened) path first', async () => {
|
|
1503
|
+
vi.mocked(fileExists).mockImplementation(async (checkPath) => checkPath.includes(path.normalize('tools/vendor/ripgrep')));
|
|
1504
|
+
const resolvedPath = await getRipgrepPath();
|
|
1505
|
+
expect(resolvedPath).not.toBeNull();
|
|
1506
|
+
expect(resolvedPath).toContain(path.normalize('tools/vendor/ripgrep'));
|
|
1507
|
+
});
|
|
1508
|
+
it('should fall back to the Dev path if SEA path is missing', async () => {
|
|
1509
|
+
vi.mocked(fileExists).mockImplementation(async (checkPath) => checkPath.includes(path.normalize('core/vendor/ripgrep')) &&
|
|
1510
|
+
!checkPath.includes(path.join(path.sep, 'tools', path.sep)));
|
|
1511
|
+
const resolvedPath = await getRipgrepPath();
|
|
1512
|
+
expect(resolvedPath).not.toBeNull();
|
|
1513
|
+
expect(resolvedPath).toContain(path.normalize('core/vendor/ripgrep'));
|
|
1514
|
+
expect(resolvedPath).not.toContain(path.join(path.sep, 'tools', path.sep));
|
|
1515
|
+
});
|
|
1516
|
+
it('should return null if binary is missing from both paths', async () => {
|
|
1517
|
+
vi.mocked(fileExists).mockResolvedValue(false);
|
|
1518
|
+
const resolvedPath = await getRipgrepPath();
|
|
1519
|
+
expect(resolvedPath).toBeNull();
|
|
1520
|
+
});
|
|
1521
|
+
});
|
|
1576
1522
|
});
|
|
1577
1523
|
//# sourceMappingURL=ripGrep.test.js.map
|