@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
|
@@ -7,22 +7,10 @@ import { vi, describe, it, expect, beforeEach, afterEach } from 'vitest';
|
|
|
7
7
|
import * as fsPromises from 'node:fs/promises';
|
|
8
8
|
import * as os from 'node:os';
|
|
9
9
|
import * as path from 'node:path';
|
|
10
|
-
import {
|
|
11
|
-
import { setGeminiMdFilename, DEFAULT_CONTEXT_FILENAME, } from '../tools/memoryTool.js';
|
|
12
|
-
import {
|
|
13
|
-
import { FileDiscoveryService } from '../services/fileDiscoveryService.js';
|
|
14
|
-
import { CELL_DIR, normalizePath, homedir as pathsHomedir } from './paths.js';
|
|
15
|
-
function flattenResult(result) {
|
|
16
|
-
return {
|
|
17
|
-
...result,
|
|
18
|
-
memoryContent: flattenMemory(result.memoryContent),
|
|
19
|
-
filePaths: result.filePaths.map((p) => normalizePath(p)),
|
|
20
|
-
};
|
|
21
|
-
}
|
|
22
|
-
import { Config } from '../config/config.js';
|
|
23
|
-
import { Storage } from '../config/storage.js';
|
|
10
|
+
import { deduplicatePathsByFileIdentity, getGlobalMemoryPaths, getExtensionMemoryPaths, getEnvironmentMemoryPaths, getUserProjectMemoryPaths, loadJitSubdirectoryMemory, readGeminiMdFiles, } from './memoryDiscovery.js';
|
|
11
|
+
import { setGeminiMdFilename, DEFAULT_CONTEXT_FILENAME, PROJECT_MEMORY_INDEX_FILENAME, } from '../tools/memoryTool.js';
|
|
12
|
+
import { CELL_DIR, toAbsolutePath, homedir as pathsHomedir } from './paths.js';
|
|
24
13
|
import { SimpleExtensionLoader } from './extensionLoader.js';
|
|
25
|
-
import { CoreEvent, coreEvents } from './events.js';
|
|
26
14
|
vi.mock('os', async (importOriginal) => {
|
|
27
15
|
const actualOs = await importOriginal();
|
|
28
16
|
return {
|
|
@@ -42,33 +30,29 @@ vi.mock('../utils/paths.js', async (importOriginal) => {
|
|
|
42
30
|
};
|
|
43
31
|
});
|
|
44
32
|
describe('memoryDiscovery', () => {
|
|
45
|
-
const DEFAULT_FOLDER_TRUST = true;
|
|
46
33
|
let testRootDir;
|
|
47
|
-
let cwd;
|
|
48
34
|
let projectRoot;
|
|
49
35
|
let homedir;
|
|
50
36
|
async function createEmptyDir(fullPath) {
|
|
51
37
|
await fsPromises.mkdir(fullPath, { recursive: true });
|
|
52
|
-
return
|
|
38
|
+
return toAbsolutePath(fullPath);
|
|
53
39
|
}
|
|
54
40
|
async function createTestFile(fullPath, fileContents) {
|
|
55
41
|
await fsPromises.mkdir(path.dirname(fullPath), { recursive: true });
|
|
56
42
|
await fsPromises.writeFile(fullPath, fileContents);
|
|
57
|
-
return
|
|
43
|
+
return toAbsolutePath(path.resolve(testRootDir, fullPath));
|
|
58
44
|
}
|
|
59
45
|
beforeEach(async () => {
|
|
60
|
-
testRootDir =
|
|
46
|
+
testRootDir = toAbsolutePath(await fsPromises.mkdtemp(path.join(os.tmpdir(), 'folder-structure-test-')));
|
|
61
47
|
vi.resetAllMocks();
|
|
62
48
|
// Set environment variables to indicate test environment
|
|
63
49
|
vi.stubEnv('NODE_ENV', 'test');
|
|
64
50
|
vi.stubEnv('VITEST', 'true');
|
|
65
51
|
projectRoot = await createEmptyDir(path.join(testRootDir, 'project'));
|
|
66
|
-
cwd = await createEmptyDir(path.join(projectRoot, 'src'));
|
|
67
52
|
homedir = await createEmptyDir(path.join(testRootDir, 'userhome'));
|
|
68
53
|
vi.mocked(os.homedir).mockReturnValue(homedir);
|
|
69
54
|
vi.mocked(pathsHomedir).mockReturnValue(homedir);
|
|
70
55
|
});
|
|
71
|
-
const normMarker = (p) => process.platform === 'win32' ? p.toLowerCase() : p;
|
|
72
56
|
afterEach(async () => {
|
|
73
57
|
vi.unstubAllEnvs();
|
|
74
58
|
// Some tests set this to a different value.
|
|
@@ -82,289 +66,15 @@ describe('memoryDiscovery', () => {
|
|
|
82
66
|
retryDelay: 10,
|
|
83
67
|
});
|
|
84
68
|
});
|
|
85
|
-
describe('
|
|
86
|
-
it('
|
|
87
|
-
await
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
expect(
|
|
91
|
-
|
|
92
|
-
fileCount: 0,
|
|
93
|
-
filePaths: [],
|
|
94
|
-
});
|
|
95
|
-
});
|
|
96
|
-
it('loads context from outside the untrusted workspace', async () => {
|
|
97
|
-
await createTestFile(path.join(projectRoot, DEFAULT_CONTEXT_FILENAME), 'Project root memory');
|
|
98
|
-
await createTestFile(path.join(cwd, DEFAULT_CONTEXT_FILENAME), 'Src directory memory');
|
|
99
|
-
const filepathInput = path.join(homedir, CELL_DIR, DEFAULT_CONTEXT_FILENAME);
|
|
100
|
-
const filepath = await createTestFile(filepathInput, 'default context content'); // In user home dir (outside untrusted space).
|
|
101
|
-
const { fileCount, memoryContent, filePaths } = flattenResult(await loadServerHierarchicalMemory(cwd, [], new FileDiscoveryService(projectRoot), new SimpleExtensionLoader([]), false));
|
|
102
|
-
expect(fileCount).toEqual(1);
|
|
103
|
-
expect(memoryContent).toContain(filepath);
|
|
104
|
-
expect(filePaths).toEqual([filepath]);
|
|
105
|
-
});
|
|
106
|
-
});
|
|
107
|
-
it('should return empty memory and count if no context files are found', async () => {
|
|
108
|
-
const result = flattenResult(await loadServerHierarchicalMemory(cwd, [], new FileDiscoveryService(projectRoot), new SimpleExtensionLoader([]), DEFAULT_FOLDER_TRUST));
|
|
109
|
-
expect(result).toEqual({
|
|
110
|
-
memoryContent: '',
|
|
111
|
-
fileCount: 0,
|
|
112
|
-
filePaths: [],
|
|
113
|
-
});
|
|
114
|
-
});
|
|
115
|
-
it('should load only the global context file if present and others are not (default filename)', async () => {
|
|
116
|
-
const defaultContextFile = await createTestFile(path.join(homedir, CELL_DIR, DEFAULT_CONTEXT_FILENAME), 'default context content');
|
|
117
|
-
const result = flattenResult(await loadServerHierarchicalMemory(cwd, [], new FileDiscoveryService(projectRoot), new SimpleExtensionLoader([]), DEFAULT_FOLDER_TRUST));
|
|
118
|
-
expect({
|
|
119
|
-
...result,
|
|
120
|
-
memoryContent: flattenMemory(result.memoryContent),
|
|
121
|
-
}).toEqual({
|
|
122
|
-
memoryContent: `--- Global ---
|
|
123
|
-
--- Context from: ${defaultContextFile} ---
|
|
124
|
-
default context content
|
|
125
|
-
--- End of Context from: ${defaultContextFile} ---`,
|
|
126
|
-
fileCount: 1,
|
|
127
|
-
filePaths: [defaultContextFile],
|
|
128
|
-
});
|
|
129
|
-
});
|
|
130
|
-
it('should load only the global custom context file if present and filename is changed', async () => {
|
|
131
|
-
const customFilename = 'CUSTOM_AGENTS.md';
|
|
132
|
-
setGeminiMdFilename(customFilename);
|
|
133
|
-
const customContextFile = await createTestFile(path.join(homedir, CELL_DIR, customFilename), 'custom context content');
|
|
134
|
-
const result = flattenResult(await loadServerHierarchicalMemory(cwd, [], new FileDiscoveryService(projectRoot), new SimpleExtensionLoader([]), DEFAULT_FOLDER_TRUST));
|
|
135
|
-
expect(result).toEqual({
|
|
136
|
-
memoryContent: `--- Global ---
|
|
137
|
-
--- Context from: ${customContextFile} ---
|
|
138
|
-
custom context content
|
|
139
|
-
--- End of Context from: ${customContextFile} ---`,
|
|
140
|
-
fileCount: 1,
|
|
141
|
-
filePaths: [customContextFile],
|
|
142
|
-
});
|
|
143
|
-
});
|
|
144
|
-
it('should load context files by upward traversal with custom filename', async () => {
|
|
145
|
-
const customFilename = 'PROJECT_CONTEXT.md';
|
|
146
|
-
setGeminiMdFilename(customFilename);
|
|
147
|
-
const projectContextFile = await createTestFile(path.join(projectRoot, customFilename), 'project context content');
|
|
148
|
-
const cwdContextFile = await createTestFile(path.join(cwd, customFilename), 'cwd context content');
|
|
149
|
-
const result = flattenResult(await loadServerHierarchicalMemory(cwd, [], new FileDiscoveryService(projectRoot), new SimpleExtensionLoader([]), DEFAULT_FOLDER_TRUST));
|
|
150
|
-
expect(result).toEqual({
|
|
151
|
-
memoryContent: `--- Project ---
|
|
152
|
-
--- Context from: ${projectContextFile} ---
|
|
153
|
-
project context content
|
|
154
|
-
--- End of Context from: ${projectContextFile} ---
|
|
155
|
-
|
|
156
|
-
--- Context from: ${cwdContextFile} ---
|
|
157
|
-
cwd context content
|
|
158
|
-
--- End of Context from: ${cwdContextFile} ---`,
|
|
159
|
-
fileCount: 2,
|
|
160
|
-
filePaths: [projectContextFile, cwdContextFile],
|
|
161
|
-
});
|
|
162
|
-
});
|
|
163
|
-
it('should load context files by downward traversal with custom filename', async () => {
|
|
164
|
-
const customFilename = 'LOCAL_CONTEXT.md';
|
|
165
|
-
setGeminiMdFilename(customFilename);
|
|
166
|
-
const subdirCustomFile = await createTestFile(path.join(cwd, 'subdir', customFilename), 'Subdir custom memory');
|
|
167
|
-
const cwdCustomFile = await createTestFile(path.join(cwd, customFilename), 'CWD custom memory');
|
|
168
|
-
const result = flattenResult(await loadServerHierarchicalMemory(cwd, [], new FileDiscoveryService(projectRoot), new SimpleExtensionLoader([]), DEFAULT_FOLDER_TRUST));
|
|
169
|
-
expect(result).toEqual({
|
|
170
|
-
memoryContent: `--- Project ---
|
|
171
|
-
--- Context from: ${cwdCustomFile} ---
|
|
172
|
-
CWD custom memory
|
|
173
|
-
--- End of Context from: ${cwdCustomFile} ---
|
|
174
|
-
|
|
175
|
-
--- Context from: ${subdirCustomFile} ---
|
|
176
|
-
Subdir custom memory
|
|
177
|
-
--- End of Context from: ${subdirCustomFile} ---`,
|
|
178
|
-
fileCount: 2,
|
|
179
|
-
filePaths: [cwdCustomFile, subdirCustomFile],
|
|
180
|
-
});
|
|
181
|
-
});
|
|
182
|
-
it('should load ORIGINAL_GEMINI_MD_FILENAME files by upward traversal from CWD to project root', async () => {
|
|
183
|
-
const projectRootGeminiFile = await createTestFile(path.join(projectRoot, DEFAULT_CONTEXT_FILENAME), 'Project root memory');
|
|
184
|
-
const srcGeminiFile = await createTestFile(path.join(cwd, DEFAULT_CONTEXT_FILENAME), 'Src directory memory');
|
|
185
|
-
const result = flattenResult(await loadServerHierarchicalMemory(cwd, [], new FileDiscoveryService(projectRoot), new SimpleExtensionLoader([]), DEFAULT_FOLDER_TRUST));
|
|
186
|
-
expect(result).toEqual({
|
|
187
|
-
memoryContent: `--- Project ---
|
|
188
|
-
--- Context from: ${projectRootGeminiFile} ---
|
|
189
|
-
Project root memory
|
|
190
|
-
--- End of Context from: ${projectRootGeminiFile} ---
|
|
191
|
-
|
|
192
|
-
--- Context from: ${srcGeminiFile} ---
|
|
193
|
-
Src directory memory
|
|
194
|
-
--- End of Context from: ${srcGeminiFile} ---`,
|
|
195
|
-
fileCount: 2,
|
|
196
|
-
filePaths: [projectRootGeminiFile, srcGeminiFile],
|
|
197
|
-
});
|
|
198
|
-
});
|
|
199
|
-
it('should load ORIGINAL_GEMINI_MD_FILENAME files by downward traversal from CWD', async () => {
|
|
200
|
-
const subDirGeminiFile = await createTestFile(path.join(cwd, 'subdir', DEFAULT_CONTEXT_FILENAME), 'Subdir memory');
|
|
201
|
-
const cwdGeminiFile = await createTestFile(path.join(cwd, DEFAULT_CONTEXT_FILENAME), 'CWD memory');
|
|
202
|
-
const result = flattenResult(await loadServerHierarchicalMemory(cwd, [], new FileDiscoveryService(projectRoot), new SimpleExtensionLoader([]), DEFAULT_FOLDER_TRUST));
|
|
203
|
-
expect(result).toEqual({
|
|
204
|
-
memoryContent: `--- Project ---
|
|
205
|
-
--- Context from: ${cwdGeminiFile} ---
|
|
206
|
-
CWD memory
|
|
207
|
-
--- End of Context from: ${cwdGeminiFile} ---
|
|
208
|
-
|
|
209
|
-
--- Context from: ${subDirGeminiFile} ---
|
|
210
|
-
Subdir memory
|
|
211
|
-
--- End of Context from: ${subDirGeminiFile} ---`,
|
|
212
|
-
fileCount: 2,
|
|
213
|
-
filePaths: [cwdGeminiFile, subDirGeminiFile],
|
|
214
|
-
});
|
|
215
|
-
});
|
|
216
|
-
it('should load and correctly order global, upward, and downward ORIGINAL_GEMINI_MD_FILENAME files', async () => {
|
|
217
|
-
const defaultContextFile = await createTestFile(path.join(homedir, CELL_DIR, DEFAULT_CONTEXT_FILENAME), 'default context content');
|
|
218
|
-
const rootGeminiFile = await createTestFile(path.join(testRootDir, DEFAULT_CONTEXT_FILENAME), 'Project parent memory');
|
|
219
|
-
const projectRootGeminiFile = await createTestFile(path.join(projectRoot, DEFAULT_CONTEXT_FILENAME), 'Project root memory');
|
|
220
|
-
const cwdGeminiFile = await createTestFile(path.join(cwd, DEFAULT_CONTEXT_FILENAME), 'CWD memory');
|
|
221
|
-
const subDirGeminiFile = await createTestFile(path.join(cwd, 'sub', DEFAULT_CONTEXT_FILENAME), 'Subdir memory');
|
|
222
|
-
const result = flattenResult(await loadServerHierarchicalMemory(cwd, [], new FileDiscoveryService(projectRoot), new SimpleExtensionLoader([]), DEFAULT_FOLDER_TRUST));
|
|
223
|
-
expect(result).toEqual({
|
|
224
|
-
memoryContent: `--- Global ---
|
|
225
|
-
--- Context from: ${defaultContextFile} ---
|
|
226
|
-
default context content
|
|
227
|
-
--- End of Context from: ${defaultContextFile} ---
|
|
228
|
-
|
|
229
|
-
--- Project ---
|
|
230
|
-
--- Context from: ${rootGeminiFile} ---
|
|
231
|
-
Project parent memory
|
|
232
|
-
--- End of Context from: ${rootGeminiFile} ---
|
|
233
|
-
|
|
234
|
-
--- Context from: ${projectRootGeminiFile} ---
|
|
235
|
-
Project root memory
|
|
236
|
-
--- End of Context from: ${projectRootGeminiFile} ---
|
|
237
|
-
|
|
238
|
-
--- Context from: ${cwdGeminiFile} ---
|
|
239
|
-
CWD memory
|
|
240
|
-
--- End of Context from: ${cwdGeminiFile} ---
|
|
241
|
-
|
|
242
|
-
--- Context from: ${subDirGeminiFile} ---
|
|
243
|
-
Subdir memory
|
|
244
|
-
--- End of Context from: ${subDirGeminiFile} ---`,
|
|
245
|
-
fileCount: 5,
|
|
246
|
-
filePaths: [
|
|
247
|
-
defaultContextFile,
|
|
248
|
-
rootGeminiFile,
|
|
249
|
-
projectRootGeminiFile,
|
|
250
|
-
cwdGeminiFile,
|
|
251
|
-
subDirGeminiFile,
|
|
252
|
-
],
|
|
253
|
-
});
|
|
254
|
-
});
|
|
255
|
-
it('should ignore specified directories during downward scan', async () => {
|
|
256
|
-
await createEmptyDir(path.join(projectRoot, '.git'));
|
|
257
|
-
await createTestFile(path.join(projectRoot, '.gitignore'), 'node_modules');
|
|
258
|
-
await createTestFile(path.join(cwd, 'node_modules', DEFAULT_CONTEXT_FILENAME), 'Ignored memory');
|
|
259
|
-
const regularSubDirGeminiFile = await createTestFile(path.join(cwd, 'my_code', DEFAULT_CONTEXT_FILENAME), 'My code memory');
|
|
260
|
-
const result = flattenResult(await loadServerHierarchicalMemory(cwd, [], new FileDiscoveryService(projectRoot), new SimpleExtensionLoader([]), DEFAULT_FOLDER_TRUST, 'tree', {
|
|
261
|
-
respectGitIgnore: true,
|
|
262
|
-
respectGeminiIgnore: true,
|
|
263
|
-
customIgnoreFilePaths: [],
|
|
264
|
-
}, 200));
|
|
265
|
-
expect(result).toEqual({
|
|
266
|
-
memoryContent: `--- Project ---
|
|
267
|
-
--- Context from: ${regularSubDirGeminiFile} ---
|
|
268
|
-
My code memory
|
|
269
|
-
--- End of Context from: ${regularSubDirGeminiFile} ---`,
|
|
270
|
-
fileCount: 1,
|
|
271
|
-
filePaths: [regularSubDirGeminiFile],
|
|
272
|
-
});
|
|
273
|
-
});
|
|
274
|
-
it('should respect the maxDirs parameter during downward scan', async () => {
|
|
275
|
-
// Create directories in parallel for better performance
|
|
276
|
-
const dirPromises = Array.from({ length: 2 }, (_, i) => createEmptyDir(path.join(cwd, `deep_dir_${i}`)));
|
|
277
|
-
await Promise.all(dirPromises);
|
|
278
|
-
// Pass the custom limit directly to the function
|
|
279
|
-
await loadServerHierarchicalMemory(cwd, [], new FileDiscoveryService(projectRoot), new SimpleExtensionLoader([]), DEFAULT_FOLDER_TRUST, 'tree', // importFormat
|
|
280
|
-
{
|
|
281
|
-
respectGitIgnore: true,
|
|
282
|
-
respectGeminiIgnore: true,
|
|
283
|
-
customIgnoreFilePaths: [],
|
|
284
|
-
}, 1);
|
|
285
|
-
// Note: bfsFileSearch debug logging is no longer controlled via debugMode parameter
|
|
286
|
-
// The test verifies maxDirs is respected by checking the result, not debug logs
|
|
287
|
-
const result = flattenResult(await loadServerHierarchicalMemory(cwd, [], new FileDiscoveryService(projectRoot), new SimpleExtensionLoader([]), DEFAULT_FOLDER_TRUST));
|
|
288
|
-
expect(result).toEqual({
|
|
289
|
-
memoryContent: '',
|
|
290
|
-
fileCount: 0,
|
|
291
|
-
filePaths: [],
|
|
292
|
-
});
|
|
293
|
-
});
|
|
294
|
-
it('should load extension context file paths', async () => {
|
|
295
|
-
const extensionFilePath = await createTestFile(path.join(testRootDir, 'extensions/ext1/GEMINI.md'), 'Extension memory content');
|
|
296
|
-
const result = flattenResult(await loadServerHierarchicalMemory(cwd, [], new FileDiscoveryService(projectRoot), new SimpleExtensionLoader([
|
|
297
|
-
{
|
|
298
|
-
contextFiles: [extensionFilePath],
|
|
299
|
-
isActive: true,
|
|
300
|
-
},
|
|
301
|
-
]), DEFAULT_FOLDER_TRUST));
|
|
302
|
-
expect(result).toEqual({
|
|
303
|
-
memoryContent: `--- Extension ---
|
|
304
|
-
--- Context from: ${extensionFilePath} ---
|
|
305
|
-
Extension memory content
|
|
306
|
-
--- End of Context from: ${extensionFilePath} ---`,
|
|
307
|
-
fileCount: 1,
|
|
308
|
-
filePaths: [extensionFilePath],
|
|
309
|
-
});
|
|
310
|
-
});
|
|
311
|
-
it('should load memory from included directories', async () => {
|
|
312
|
-
const includedDir = await createEmptyDir(path.join(testRootDir, 'included'));
|
|
313
|
-
const includedFile = await createTestFile(path.join(includedDir, DEFAULT_CONTEXT_FILENAME), 'included directory memory');
|
|
314
|
-
const result = flattenResult(await loadServerHierarchicalMemory(cwd, [includedDir], new FileDiscoveryService(projectRoot), new SimpleExtensionLoader([]), DEFAULT_FOLDER_TRUST));
|
|
315
|
-
expect(result).toEqual({
|
|
316
|
-
memoryContent: `--- Project ---
|
|
317
|
-
--- Context from: ${includedFile} ---
|
|
318
|
-
included directory memory
|
|
319
|
-
--- End of Context from: ${includedFile} ---`,
|
|
320
|
-
fileCount: 1,
|
|
321
|
-
filePaths: [includedFile],
|
|
69
|
+
describe('EISDIR handling for GEMINI.md as a directory', () => {
|
|
70
|
+
it('readGeminiMdFiles returns null content (without throwing) when path is a directory', async () => {
|
|
71
|
+
const dirAsFilePath = await createEmptyDir(path.join(projectRoot, DEFAULT_CONTEXT_FILENAME));
|
|
72
|
+
const results = await readGeminiMdFiles([dirAsFilePath]);
|
|
73
|
+
expect(results).toHaveLength(1);
|
|
74
|
+
expect(results[0].filePath).toBe(dirAsFilePath);
|
|
75
|
+
expect(results[0].content).toBeNull();
|
|
322
76
|
});
|
|
323
77
|
});
|
|
324
|
-
it('should handle multiple directories and files in parallel correctly', async () => {
|
|
325
|
-
// Create multiple test directories with GEMINI.md files
|
|
326
|
-
const numDirs = 5;
|
|
327
|
-
const createdFiles = [];
|
|
328
|
-
for (let i = 0; i < numDirs; i++) {
|
|
329
|
-
const dirPath = await createEmptyDir(path.join(testRootDir, `project-${i}`));
|
|
330
|
-
const filePath = await createTestFile(path.join(dirPath, DEFAULT_CONTEXT_FILENAME), `Content from project ${i}`);
|
|
331
|
-
createdFiles.push(filePath);
|
|
332
|
-
}
|
|
333
|
-
// Load memory from all directories
|
|
334
|
-
const result = flattenResult(await loadServerHierarchicalMemory(cwd, createdFiles.map((f) => path.dirname(f)), new FileDiscoveryService(projectRoot), new SimpleExtensionLoader([]), DEFAULT_FOLDER_TRUST));
|
|
335
|
-
// Should have loaded all files
|
|
336
|
-
expect(result.fileCount).toBe(numDirs);
|
|
337
|
-
expect(result.filePaths.length).toBe(numDirs);
|
|
338
|
-
expect(result.filePaths.sort()).toEqual(createdFiles.sort());
|
|
339
|
-
// Content should include all project contents
|
|
340
|
-
const flattenedMemory = flattenMemory(result.memoryContent);
|
|
341
|
-
for (let i = 0; i < numDirs; i++) {
|
|
342
|
-
expect(flattenedMemory).toContain(`Content from project ${i}`);
|
|
343
|
-
}
|
|
344
|
-
});
|
|
345
|
-
it('should preserve order and prevent duplicates when processing multiple directories', async () => {
|
|
346
|
-
// Create overlapping directory structure
|
|
347
|
-
const parentDir = await createEmptyDir(path.join(testRootDir, 'parent'));
|
|
348
|
-
const childDir = await createEmptyDir(path.join(parentDir, 'child'));
|
|
349
|
-
const parentFile = await createTestFile(path.join(parentDir, DEFAULT_CONTEXT_FILENAME), 'Parent content');
|
|
350
|
-
const childFile = await createTestFile(path.join(childDir, DEFAULT_CONTEXT_FILENAME), 'Child content');
|
|
351
|
-
// Include both parent and child directories
|
|
352
|
-
const result = flattenResult(await loadServerHierarchicalMemory(parentDir, [childDir, parentDir], // Deliberately include duplicates
|
|
353
|
-
new FileDiscoveryService(projectRoot), new SimpleExtensionLoader([]), DEFAULT_FOLDER_TRUST));
|
|
354
|
-
// Should have both files without duplicates
|
|
355
|
-
const flattenedMemory = flattenMemory(result.memoryContent);
|
|
356
|
-
expect(result.fileCount).toBe(2);
|
|
357
|
-
expect(flattenedMemory).toContain('Parent content');
|
|
358
|
-
expect(flattenedMemory).toContain('Child content');
|
|
359
|
-
expect(result.filePaths.sort()).toEqual([parentFile, childFile].sort());
|
|
360
|
-
// Check that files are not duplicated
|
|
361
|
-
const parentOccurrences = (flattenedMemory.match(/Parent content/g) || [])
|
|
362
|
-
.length;
|
|
363
|
-
const childOccurrences = (flattenedMemory.match(/Child content/g) || [])
|
|
364
|
-
.length;
|
|
365
|
-
expect(parentOccurrences).toBe(1);
|
|
366
|
-
expect(childOccurrences).toBe(1);
|
|
367
|
-
});
|
|
368
78
|
describe('getGlobalMemoryPaths', () => {
|
|
369
79
|
it('should find global memory file if it exists', async () => {
|
|
370
80
|
const globalMemoryFile = await createTestFile(path.join(homedir, CELL_DIR, DEFAULT_CONTEXT_FILENAME), 'Global memory content');
|
|
@@ -377,6 +87,38 @@ included directory memory
|
|
|
377
87
|
expect(result).toHaveLength(0);
|
|
378
88
|
});
|
|
379
89
|
});
|
|
90
|
+
describe('getUserProjectMemoryPaths', () => {
|
|
91
|
+
it('should find MEMORY.md when it exists', async () => {
|
|
92
|
+
const memoryDir = await createEmptyDir(path.join(testRootDir, 'memdir1'));
|
|
93
|
+
const memoryFile = await createTestFile(path.join(memoryDir, PROJECT_MEMORY_INDEX_FILENAME), 'project memory');
|
|
94
|
+
const result = await getUserProjectMemoryPaths(memoryDir);
|
|
95
|
+
expect(result).toHaveLength(1);
|
|
96
|
+
expect(result[0]).toBe(memoryFile);
|
|
97
|
+
});
|
|
98
|
+
it('should preserve the on-disk casing of the index filename', async () => {
|
|
99
|
+
// Regression: paths surfaced through /memory list and /memory show
|
|
100
|
+
// were previously lowercased on macOS/Windows because they passed
|
|
101
|
+
// through normalizePath. The MEMORY.md filename must be kept as-is
|
|
102
|
+
// for display.
|
|
103
|
+
const memoryDir = await createEmptyDir(path.join(testRootDir, 'memdir2'));
|
|
104
|
+
await createTestFile(path.join(memoryDir, PROJECT_MEMORY_INDEX_FILENAME), 'project memory');
|
|
105
|
+
const result = await getUserProjectMemoryPaths(memoryDir);
|
|
106
|
+
expect(result).toHaveLength(1);
|
|
107
|
+
expect(result[0]).toContain(PROJECT_MEMORY_INDEX_FILENAME);
|
|
108
|
+
expect(result[0]).not.toContain(PROJECT_MEMORY_INDEX_FILENAME.toLowerCase());
|
|
109
|
+
});
|
|
110
|
+
it('should fall back to legacy GEMINI.md when MEMORY.md is absent', async () => {
|
|
111
|
+
const memoryDir = await createEmptyDir(path.join(testRootDir, 'memdir3'));
|
|
112
|
+
const legacyFile = await createTestFile(path.join(memoryDir, DEFAULT_CONTEXT_FILENAME), 'legacy memory');
|
|
113
|
+
const result = await getUserProjectMemoryPaths(memoryDir);
|
|
114
|
+
expect(result).toContain(legacyFile);
|
|
115
|
+
});
|
|
116
|
+
it('should return empty array when neither MEMORY.md nor GEMINI.md exists', async () => {
|
|
117
|
+
const memoryDir = await createEmptyDir(path.join(testRootDir, 'memdir4'));
|
|
118
|
+
const result = await getUserProjectMemoryPaths(memoryDir);
|
|
119
|
+
expect(result).toHaveLength(0);
|
|
120
|
+
});
|
|
121
|
+
});
|
|
380
122
|
describe('getExtensionMemoryPaths', () => {
|
|
381
123
|
it('should return active extension context files', async () => {
|
|
382
124
|
const extFile = await createTestFile(path.join(testRootDir, 'ext', 'GEMINI.md'), 'Extension content');
|
|
@@ -443,6 +185,43 @@ included directory memory
|
|
|
443
185
|
expect(result).toHaveLength(1);
|
|
444
186
|
expect(result[0]).toBe(repoFile);
|
|
445
187
|
});
|
|
188
|
+
it('should preserve case-distinct files before identity deduplication', async () => {
|
|
189
|
+
const platformSpy = vi
|
|
190
|
+
.spyOn(process, 'platform', 'get')
|
|
191
|
+
.mockReturnValue('win32');
|
|
192
|
+
vi.resetModules();
|
|
193
|
+
vi.doMock('node:fs/promises', async () => {
|
|
194
|
+
const actual = await vi.importActual('node:fs/promises');
|
|
195
|
+
return {
|
|
196
|
+
...actual,
|
|
197
|
+
access: vi.fn().mockResolvedValue(undefined),
|
|
198
|
+
stat: vi.fn(async (filePath) => {
|
|
199
|
+
const normalizedPath = String(filePath).replace(/\\/g, '/');
|
|
200
|
+
return {
|
|
201
|
+
dev: 1,
|
|
202
|
+
ino: normalizedPath.endsWith('/GEMINI.md') ? 101 : 202,
|
|
203
|
+
};
|
|
204
|
+
}),
|
|
205
|
+
};
|
|
206
|
+
});
|
|
207
|
+
try {
|
|
208
|
+
const paths = await import('./paths.js');
|
|
209
|
+
const memoryTool = await import('../tools/memoryTool.js');
|
|
210
|
+
const memoryDiscovery = await import('./memoryDiscovery.js');
|
|
211
|
+
vi.mocked(paths.homedir).mockReturnValue('/home/tester');
|
|
212
|
+
memoryTool.setGeminiMdFilename(['GEMINI.md', 'gemini.md']);
|
|
213
|
+
const result = await memoryDiscovery.getEnvironmentMemoryPaths(['/case-root'], []);
|
|
214
|
+
expect(result).toEqual([
|
|
215
|
+
paths.toAbsolutePath('/case-root/GEMINI.md'),
|
|
216
|
+
paths.toAbsolutePath('/case-root/gemini.md'),
|
|
217
|
+
]);
|
|
218
|
+
}
|
|
219
|
+
finally {
|
|
220
|
+
platformSpy.mockRestore();
|
|
221
|
+
vi.doUnmock('node:fs/promises');
|
|
222
|
+
vi.resetModules();
|
|
223
|
+
}
|
|
224
|
+
});
|
|
446
225
|
it('should recognize .git as a file (submodules/worktrees)', async () => {
|
|
447
226
|
const repoDir = await createEmptyDir(path.join(testRootDir, 'worktree_repo'));
|
|
448
227
|
// .git as a file, like in submodules and worktrees
|
|
@@ -472,7 +251,7 @@ included directory memory
|
|
|
472
251
|
expect(result[1]).toBe(secondaryFile);
|
|
473
252
|
});
|
|
474
253
|
});
|
|
475
|
-
describe('
|
|
254
|
+
describe('file identity deduplication', () => {
|
|
476
255
|
it('should deduplicate files that point to the same inode (same physical file)', async () => {
|
|
477
256
|
const geminiFile = await createTestFile(path.join(projectRoot, 'gemini.md'), 'Project root memory');
|
|
478
257
|
// create hard link to simulate case-insensitive filesystem behavior
|
|
@@ -493,13 +272,12 @@ included directory memory
|
|
|
493
272
|
const stats2 = await fsPromises.lstat(geminiFileLink);
|
|
494
273
|
expect(stats1.ino).toBe(stats2.ino);
|
|
495
274
|
expect(stats1.dev).toBe(stats2.dev);
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
expect(result.
|
|
501
|
-
|
|
502
|
-
expect(contentMatches).toHaveLength(1);
|
|
275
|
+
const result = await deduplicatePathsByFileIdentity([
|
|
276
|
+
geminiFileLink,
|
|
277
|
+
geminiFile,
|
|
278
|
+
]);
|
|
279
|
+
expect(result.paths).toHaveLength(1);
|
|
280
|
+
expect(result.identityMap.get(geminiFile)).toBe(result.identityMap.get(geminiFileLink));
|
|
503
281
|
try {
|
|
504
282
|
await fsPromises.unlink(geminiFileLink);
|
|
505
283
|
}
|
|
@@ -513,20 +291,24 @@ included directory memory
|
|
|
513
291
|
const stats1 = await fsPromises.lstat(geminiFileLower);
|
|
514
292
|
const stats2 = await fsPromises.lstat(geminiFileUpper);
|
|
515
293
|
if (stats1.ino !== stats2.ino || stats1.dev !== stats2.dev) {
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
expect(result.
|
|
521
|
-
expect(result.
|
|
294
|
+
const result = await deduplicatePathsByFileIdentity([
|
|
295
|
+
geminiFileLower,
|
|
296
|
+
geminiFileUpper,
|
|
297
|
+
]);
|
|
298
|
+
expect(result.paths).toHaveLength(2);
|
|
299
|
+
expect(result.paths).toContain(geminiFileLower);
|
|
300
|
+
expect(result.paths).toContain(geminiFileUpper);
|
|
522
301
|
}
|
|
523
302
|
});
|
|
524
303
|
it("should handle files that cannot be stat'd (missing files)", async () => {
|
|
525
|
-
await createTestFile(path.join(projectRoot, 'gemini.md'), 'Valid file content');
|
|
526
|
-
|
|
527
|
-
const result =
|
|
528
|
-
|
|
529
|
-
|
|
304
|
+
const geminiFile = await createTestFile(path.join(projectRoot, 'gemini.md'), 'Valid file content');
|
|
305
|
+
const missingFile = path.join(projectRoot, 'missing.md');
|
|
306
|
+
const result = await deduplicatePathsByFileIdentity([
|
|
307
|
+
geminiFile,
|
|
308
|
+
missingFile,
|
|
309
|
+
]);
|
|
310
|
+
expect(result.paths).toEqual([geminiFile, missingFile]);
|
|
311
|
+
expect(result.identityMap.has(missingFile)).toBe(false);
|
|
530
312
|
});
|
|
531
313
|
it('should deduplicate multiple paths pointing to same file (3+ duplicates)', async () => {
|
|
532
314
|
const geminiFile = await createTestFile(path.join(projectRoot, 'gemini.md'), 'Project root memory');
|
|
@@ -550,13 +332,14 @@ included directory memory
|
|
|
550
332
|
const stats3 = await fsPromises.lstat(link2);
|
|
551
333
|
expect(stats1.ino).toBe(stats2.ino);
|
|
552
334
|
expect(stats1.ino).toBe(stats3.ino);
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
expect(
|
|
335
|
+
const result = await deduplicatePathsByFileIdentity([
|
|
336
|
+
geminiFile,
|
|
337
|
+
link1,
|
|
338
|
+
link2,
|
|
339
|
+
]);
|
|
340
|
+
expect(result.paths).toHaveLength(1);
|
|
341
|
+
expect(result.identityMap.get(geminiFile)).toBe(result.identityMap.get(link1));
|
|
342
|
+
expect(result.identityMap.get(geminiFile)).toBe(result.identityMap.get(link2));
|
|
560
343
|
try {
|
|
561
344
|
await fsPromises.unlink(link1);
|
|
562
345
|
await fsPromises.unlink(link2);
|
|
@@ -726,79 +509,5 @@ included directory memory
|
|
|
726
509
|
expect(result.files.find((f) => f.path === subDirMemory)).toBeDefined();
|
|
727
510
|
});
|
|
728
511
|
});
|
|
729
|
-
it('refreshServerHierarchicalMemory should refresh memory and update config', async () => {
|
|
730
|
-
const extensionLoader = new SimpleExtensionLoader([]);
|
|
731
|
-
const config = new Config({
|
|
732
|
-
sessionId: '1',
|
|
733
|
-
targetDir: cwd,
|
|
734
|
-
cwd,
|
|
735
|
-
debugMode: false,
|
|
736
|
-
model: 'fake-model',
|
|
737
|
-
extensionLoader,
|
|
738
|
-
});
|
|
739
|
-
const result = flattenResult(await loadServerHierarchicalMemory(config.getWorkingDir(), config.shouldLoadMemoryFromIncludeDirectories()
|
|
740
|
-
? config.getWorkspaceContext().getDirectories()
|
|
741
|
-
: [], config.getFileService(), config.getExtensionLoader(), config.isTrustedFolder(), config.getImportFormat()));
|
|
742
|
-
expect(result.fileCount).equals(0);
|
|
743
|
-
// Now add an extension with a memory file
|
|
744
|
-
const extensionsDir = new Storage(homedir).getExtensionsDir();
|
|
745
|
-
const extensionPath = path.join(extensionsDir, 'new-extension');
|
|
746
|
-
const contextFilePath = path.join(extensionPath, 'CustomContext.md');
|
|
747
|
-
await fsPromises.mkdir(extensionPath, { recursive: true });
|
|
748
|
-
await fsPromises.writeFile(contextFilePath, 'Really cool custom context!');
|
|
749
|
-
await extensionLoader.loadExtension({
|
|
750
|
-
name: 'new-extension',
|
|
751
|
-
isActive: true,
|
|
752
|
-
contextFiles: [contextFilePath],
|
|
753
|
-
version: '1.0.0',
|
|
754
|
-
id: '1234',
|
|
755
|
-
path: extensionPath,
|
|
756
|
-
});
|
|
757
|
-
const mockEventListener = vi.fn();
|
|
758
|
-
coreEvents.on(CoreEvent.MemoryChanged, mockEventListener);
|
|
759
|
-
const refreshResult = await refreshServerHierarchicalMemory(config);
|
|
760
|
-
expect(refreshResult.fileCount).equals(1);
|
|
761
|
-
expect(config.getGeminiMdFileCount()).equals(refreshResult.fileCount);
|
|
762
|
-
const flattenedMemory = flattenMemory(refreshResult.memoryContent);
|
|
763
|
-
expect(flattenedMemory).toContain('Really cool custom context!');
|
|
764
|
-
expect(config.getUserMemory()).toStrictEqual(refreshResult.memoryContent);
|
|
765
|
-
expect(refreshResult.filePaths[0]).toContain(normMarker(path.join(extensionPath, 'CustomContext.md')));
|
|
766
|
-
expect(config.getGeminiMdFilePaths()).equals(refreshResult.filePaths);
|
|
767
|
-
expect(mockEventListener).toHaveBeenCalledExactlyOnceWith({
|
|
768
|
-
fileCount: refreshResult.fileCount,
|
|
769
|
-
});
|
|
770
|
-
});
|
|
771
|
-
it('should include MCP instructions in user memory', async () => {
|
|
772
|
-
const mockConfig = {
|
|
773
|
-
getWorkingDir: vi.fn().mockReturnValue(cwd),
|
|
774
|
-
shouldLoadMemoryFromIncludeDirectories: vi.fn().mockReturnValue(false),
|
|
775
|
-
getFileService: vi
|
|
776
|
-
.fn()
|
|
777
|
-
.mockReturnValue(new FileDiscoveryService(projectRoot)),
|
|
778
|
-
getExtensionLoader: vi
|
|
779
|
-
.fn()
|
|
780
|
-
.mockReturnValue(new SimpleExtensionLoader([])),
|
|
781
|
-
isTrustedFolder: vi.fn().mockReturnValue(true),
|
|
782
|
-
getImportFormat: vi.fn().mockReturnValue('tree'),
|
|
783
|
-
getFileFilteringOptions: vi.fn().mockReturnValue(undefined),
|
|
784
|
-
getDiscoveryMaxDirs: vi.fn().mockReturnValue(200),
|
|
785
|
-
getMemoryBoundaryMarkers: vi.fn().mockReturnValue(['.git']),
|
|
786
|
-
setUserMemory: vi.fn(),
|
|
787
|
-
setGeminiMdFileCount: vi.fn(),
|
|
788
|
-
setGeminiMdFilePaths: vi.fn(),
|
|
789
|
-
getMcpClientManager: vi.fn().mockReturnValue({
|
|
790
|
-
getMcpInstructions: vi
|
|
791
|
-
.fn()
|
|
792
|
-
.mockReturnValue("\n\n# Instructions for MCP Server 'extension-server'\nAlways be polite."),
|
|
793
|
-
}),
|
|
794
|
-
};
|
|
795
|
-
await refreshServerHierarchicalMemory(mockConfig);
|
|
796
|
-
expect(mockConfig.setUserMemory).toHaveBeenCalledWith(expect.objectContaining({
|
|
797
|
-
project: expect.stringContaining("# Instructions for MCP Server 'extension-server'"),
|
|
798
|
-
}));
|
|
799
|
-
expect(mockConfig.setUserMemory).toHaveBeenCalledWith(expect.objectContaining({
|
|
800
|
-
project: expect.stringContaining('Always be polite.'),
|
|
801
|
-
}));
|
|
802
|
-
});
|
|
803
512
|
});
|
|
804
513
|
//# sourceMappingURL=memoryDiscovery.test.js.map
|