From 81445cf61c47e69e86ba26250412ecee6f8e1f10 Mon Sep 17 00:00:00 2001 From: Juha Litola Date: Tue, 18 Aug 2026 13:05:07 +0300 Subject: [PATCH] chore: prepare patch releases Finalize githits 0.9.3 and @githits/mcp 0.9.2 changelog sections, preserve CodeDiff as an additive client capability, and align generated release metadata. --- .claude-plugin/marketplace.json | 4 +- .claude-plugin/plugin.json | 2 +- .codex-plugin/plugin.json | 2 +- .cursor-plugin/plugin.json | 2 +- .plugin/plugin.json | 2 +- CHANGELOG.md | 61 +++++++++++++++++++ bun.lock | 2 +- changes/282-current-wait-warning.fixed.md | 6 -- changes/284-exact-path-authority.fixed.md | 6 -- changes/changelog-fragments.changed.md | 8 --- changes/cli-validation-guidance.fixed.md | 8 --- changes/code-diff-cli-dogfood.added.md | 6 -- changes/code-diff-client-adapter.added.md | 6 -- changes/site-search-recovery.fixed.md | 10 --- docs/implementation/code-diff.md | 15 ++--- docs/plans/code-diff-cli-mcp.md | 29 ++++----- gemini-extension.json | 2 +- package.json | 2 +- .../src/services/code-navigation-service.ts | 8 ++- packages/mcp/package.json | 2 +- packages/mcp/src/client.ts | 1 + packages/mcp/src/mcp/server.ts | 1 - packages/mcp/src/services/test-helpers.ts | 5 +- plugin.json | 2 +- scripts/validate-public-packages.ts | 6 +- server.json | 4 +- src/commands/code/diff.ts | 4 +- src/container.ts | 3 +- src/services/test-helpers.ts | 5 +- 29 files changed, 120 insertions(+), 94 deletions(-) delete mode 100644 changes/282-current-wait-warning.fixed.md delete mode 100644 changes/284-exact-path-authority.fixed.md delete mode 100644 changes/changelog-fragments.changed.md delete mode 100644 changes/cli-validation-guidance.fixed.md delete mode 100644 changes/code-diff-cli-dogfood.added.md delete mode 100644 changes/code-diff-client-adapter.added.md delete mode 100644 changes/site-search-recovery.fixed.md diff --git a/.claude-plugin/marketplace.json b/.claude-plugin/marketplace.json index b71d936b..865350bc 100644 --- a/.claude-plugin/marketplace.json +++ b/.claude-plugin/marketplace.json @@ -6,12 +6,12 @@ }, "metadata": { "description": "The code context layer for AI coding agents", - "version": "0.9.2" + "version": "0.9.3" }, "plugins": [ { "name": "githits", - "version": "0.9.2", + "version": "0.9.3", "description": "The code context layer for AI coding agents", "author": { "name": "GitHits" diff --git a/.claude-plugin/plugin.json b/.claude-plugin/plugin.json index 9f0a899c..e2d45a42 100644 --- a/.claude-plugin/plugin.json +++ b/.claude-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "githits", - "version": "0.9.2", + "version": "0.9.3", "description": "The code context layer for AI coding agents", "author": { "name": "GitHits" diff --git a/.codex-plugin/plugin.json b/.codex-plugin/plugin.json index 938d180c..801c13ff 100644 --- a/.codex-plugin/plugin.json +++ b/.codex-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "githits", - "version": "0.9.2", + "version": "0.9.3", "description": "The code context layer for AI coding agents", "author": { "name": "GitHits" diff --git a/.cursor-plugin/plugin.json b/.cursor-plugin/plugin.json index 76f811c1..92334c0c 100644 --- a/.cursor-plugin/plugin.json +++ b/.cursor-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "githits", - "version": "0.9.2", + "version": "0.9.3", "description": "The code context layer for AI coding agents", "author": { "name": "GitHits" diff --git a/.plugin/plugin.json b/.plugin/plugin.json index 9f0a899c..e2d45a42 100644 --- a/.plugin/plugin.json +++ b/.plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "githits", - "version": "0.9.2", + "version": "0.9.3", "description": "The code context layer for AI coding agents", "author": { "name": "GitHits" diff --git a/CHANGELOG.md b/CHANGELOG.md index dd24596a..f5af0adf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,67 @@ changes use independent files under [`changes/`](changes/README.md) and are consolidated here only during release preparation. Dated, versioned sections are historical records and change only to correct blatant factual errors. +## [githits 0.9.3] - 2026-08-18 + +Patch release: adds an unpromoted CodeDiff CLI dogfood surface and improves +CLI recovery, validation guidance, and search diagnostics. + +### Added + +- **Silent CodeDiff CLI dogfooding** - adds `githits code diff` with bounded + Git-like views, repository-relative glob filtering, reversible path quoting, + apply-safe patch handling, structured completeness diagnostics, and JSON + output without exposing an MCP tool or agent guidance yet. + +### Changed + +- **Independent changelog fragments** - notable changes now record release + notes and per-artifact SemVer impact in independently owned files, avoiding + conflicts in `CHANGELOG.md` during normal development. + +### Fixed + +- **Code validation guidance** - client-side `INVALID_ARGUMENT` errors from + shared code-read and grep request builders now name CLI commands, + positionals, and options on the CLI while MCP keeps MCP-native tool and + argument syntax. +- **Remove obsolete ref suggestions** - waited searches no longer recommend an + older ref after reaching the requested commit. +- **Explain unavailable exact paths** - CLI and MCP now return + `FILE_PATH_EXCLUDED` for excluded files and + `SOURCE_FILE_INVENTORY_UNKNOWN` when the index cannot verify a path, with + actionable path and resolution details. +- **Standalone-site search recovery** - CLI and MCP search now preserve ordered + backend site suggestions, distinguish truncated candidate lists, and direct + active crawls through search status without guessing or rewriting targets. + Help text also distinguishes atomic interim evidence from opted-in partial + target/source subsets. + +## [@githits/mcp 0.9.2] - 2026-08-18 + +Patch release: adds an opt-in CodeDiff client capability and improves search +and exact-path recovery without exposing a new remote MCP tool. + +### Added + +- **CodeDiff client support** - adds the transport-neutral package and + repository diff adapter as an additive `CodeDiffService` capability without + exposing a remote MCP tool. + +### Fixed + +- **Remove obsolete ref suggestions** - waited searches no longer recommend an + older ref after reaching the requested commit. +- **Explain unavailable exact paths** - MCP tools now return + `FILE_PATH_EXCLUDED` for excluded files and + `SOURCE_FILE_INVENTORY_UNKNOWN` when the index cannot verify a path, with + actionable path and resolution details. +- **Standalone-site search recovery** - MCP search now preserves ordered + backend site suggestions, distinguishes truncated candidate lists, and + directs active crawls through search status without guessing or rewriting + targets. Help text also distinguishes atomic interim evidence from opted-in + partial target/source subsets. + ## [githits 0.9.2] - 2026-08-14 Patch release: improves CLI exact-path recovery and makes Claude Code and Codex diff --git a/bun.lock b/bun.lock index efeb71ca..d67be59a 100644 --- a/bun.lock +++ b/bun.lock @@ -43,7 +43,7 @@ }, "packages/mcp": { "name": "@githits/mcp", - "version": "0.9.1", + "version": "0.9.2", "dependencies": { "@modelcontextprotocol/sdk": "^1.29.0", "zod": "^4.4.3", diff --git a/changes/282-current-wait-warning.fixed.md b/changes/282-current-wait-warning.fixed.md deleted file mode 100644 index b4b8012a..00000000 --- a/changes/282-current-wait-warning.fixed.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -"githits": patch -"@githits/mcp": patch ---- - -- **Remove obsolete ref suggestions** - Waited searches no longer recommend an older ref after reaching the requested commit. diff --git a/changes/284-exact-path-authority.fixed.md b/changes/284-exact-path-authority.fixed.md deleted file mode 100644 index 398525bc..00000000 --- a/changes/284-exact-path-authority.fixed.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -"githits": patch -"@githits/mcp": patch ---- - -- **Explain unavailable exact paths** - CLI and MCP now return `FILE_PATH_EXCLUDED` for excluded files and `SOURCE_FILE_INVENTORY_UNKNOWN` when the index cannot verify a path, with actionable path and resolution details. diff --git a/changes/changelog-fragments.changed.md b/changes/changelog-fragments.changed.md deleted file mode 100644 index f9fafe50..00000000 --- a/changes/changelog-fragments.changed.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -"githits": none -"@githits/mcp": none ---- - -- **Independent changelog fragments** - Notable changes now record release notes - and per-artifact SemVer impact in independently owned files, avoiding conflicts - in `CHANGELOG.md` during normal development. diff --git a/changes/cli-validation-guidance.fixed.md b/changes/cli-validation-guidance.fixed.md deleted file mode 100644 index 1557c244..00000000 --- a/changes/cli-validation-guidance.fixed.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -"githits": patch -"@githits/mcp": none ---- - -- **Code validation guidance** - Client-side `INVALID_ARGUMENT` errors from - shared code-read and grep request builders now name CLI commands, positionals, - and options on the CLI while MCP keeps MCP-native tool and argument syntax. diff --git a/changes/code-diff-cli-dogfood.added.md b/changes/code-diff-cli-dogfood.added.md deleted file mode 100644 index 7d1ad430..00000000 --- a/changes/code-diff-cli-dogfood.added.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -"githits": minor -"@githits/mcp": none ---- - -- **Add silent CodeDiff CLI dogfooding** - Adds `githits code diff` with bounded Git-like views, repository-relative glob filtering, reversible path quoting, apply-safe patch handling, structured completeness diagnostics, and JSON output without exposing an MCP tool or agent guidance yet. diff --git a/changes/code-diff-client-adapter.added.md b/changes/code-diff-client-adapter.added.md deleted file mode 100644 index 21dbf66e..00000000 --- a/changes/code-diff-client-adapter.added.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -"githits": none -"@githits/mcp": minor ---- - -- **Add CodeDiff client support** - Adds the transport-neutral package and repository diff adapter and public types; custom `CodeNavigationService` implementations must add the required `codeDiff` method. diff --git a/changes/site-search-recovery.fixed.md b/changes/site-search-recovery.fixed.md deleted file mode 100644 index 423e68e4..00000000 --- a/changes/site-search-recovery.fixed.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -"githits": patch -"@githits/mcp": patch ---- - -- **Standalone-site search recovery** - CLI and MCP search now preserve ordered - backend site suggestions, distinguish truncated candidate lists, and direct - active crawls through search status without guessing or rewriting targets. - Help text also distinguishes atomic interim evidence from opted-in partial - target/source subsets. diff --git a/docs/implementation/code-diff.md b/docs/implementation/code-diff.md index 054175ba..f13226fc 100644 --- a/docs/implementation/code-diff.md +++ b/docs/implementation/code-diff.md @@ -13,7 +13,7 @@ ergonomics and evidence envelope have been dogfooded. ## Addressing and modes -`CodeNavigationService.codeDiff` accepts an unversioned package or repository +`CodeDiffService.codeDiff` accepts an unversioned package or repository target plus explicit `from`, `to`, and `mode` values: | Mode | File fields selected | @@ -68,12 +68,13 @@ consumer. ## Public boundary -The service method, CodeDiff request/result types, and `CodeDiffError` are -re-exported from `@githits/mcp/client`. This is a public TypeScript interface -change: custom `CodeNavigationService` implementations must add `codeDiff` -when adopting the package version containing this adapter. The existing test -factories provide deterministic default results so current tool tests remain -focused on their own behavior. +The additive `CodeDiffService` capability, CodeDiff request/result types, and +`CodeDiffError` are re-exported from `@githits/mcp/client`. +`CodeNavigationServiceImpl` implements both `CodeNavigationService` and +`CodeDiffService`, while custom `CodeNavigationService` implementations remain +source-compatible and do not need to implement the unpromoted diff capability. +The existing test factories provide deterministic default results so current +tool tests remain focused on their own behavior. ## Silent CLI dogfood contract diff --git a/docs/plans/code-diff-cli-mcp.md b/docs/plans/code-diff-cli-mcp.md index d94f8ac8..c1d4c19e 100644 --- a/docs/plans/code-diff-cli-mcp.md +++ b/docs/plans/code-diff-cli-mcp.md @@ -1,9 +1,8 @@ # Plan: CodeDiff CLI dogfood and agent rollout -> Overall status: Phase 1 is merged. Phase 2 is implemented and locally/live -> verified and reviewed as a silent CLI-only dogfood launch; merge is pending. -> MCP and agent-facing exposure remain deferred until the CLI contract has -> been exercised after merge. +> Overall status: Phases 1 and 2 are merged as a silent CLI-only dogfood +> launch. MCP and agent-facing exposure remain deferred until the CLI contract +> has been exercised after release. > > Reoriented: 2026-08-17 against `githits` `origin/main` at `77417aa` and > PkgSeer backend `origin/main` at `c0cf92e` with GraphQL schema hash @@ -36,9 +35,10 @@ CodeDiff remains a separate, unexposed backend evaluation surface. ### GitHits repository - Phase 1 merged through PR #287 at `origin/main` `77417aa`. The merged delta - adds `CodeNavigationService.codeDiff`, exact request/result/error types, - mode-minimal GraphQL selections, runtime validation, fixtures, public client - exports, and `docs/implementation/code-diff.md`. + adds the separate `CodeDiffService.codeDiff` capability, exact + request/result/error types, mode-minimal GraphQL selections, runtime + validation, fixtures, public client exports, and + `docs/implementation/code-diff.md`. - The declaration-build pipeline failure was fixed before merge. Phase 1's focused tests, full tests, build, and public-package validation passed. - No `githits code diff` command, `code_diff` MCP tool, response formatter, @@ -141,7 +141,7 @@ into separate phases. Do not implement the old combined Phase 2. ### Boundaries and responsibilities -- `CodeNavigationService.codeDiff` remains the only network/service boundary. +- `CodeDiffService.codeDiff` remains the only network/service boundary. It owns authenticated GraphQL execution, exact variable construction, mode-minimal selections, runtime validation, and typed CodeDiff errors. - Small pure CodeDiff request, response, text, and error helpers live under @@ -168,7 +168,7 @@ remote MCP servers must not. No new module from Phase 2 is exported by ```text CLI target + from..to + view/filter/bounds -> pure CLI request normalization - -> CodeNavigationService.codeDiff + -> CodeDiffService.codeDiff -> mode-minimal codeDiff.raw GraphQL selection -> typed CodeDiff result or error -> pure selected-view JSON/text projection @@ -315,8 +315,9 @@ There is no blocking product decision for Phase 2. ### Compatibility, release, and rollback -- Phase 2 adds a root CLI command and therefore adds one independent fragment - with pending impacts `githits: minor` and `@githits/mcp: none`. +- Phase 2 adds an unpromoted root CLI dogfood command and therefore adds one + independent fragment with pending impacts `githits: patch` and + `@githits/mcp: none`. - Phase 2 does not bump versions directly. Release preparation owns package and generated-manifest versions. - Workspace-internal shared modules must not appear in public export maps or @@ -500,10 +501,10 @@ plugin generator, or generated agent asset in this phase. failed content evidence succeeds with unmistakable structured/text warnings. - CLI help states the bounded glob and revision limitations without claiming full Git pathspec or revision compatibility. -- No `code_diff` tool, MCP instruction, agent guidance, plugin asset, or public - `@githits/mcp` export is added or changed. +- No `code_diff` tool, MCP instruction, agent guidance, or plugin asset is + added or changed by Phase 2. - Durable docs describe the dogfood posture and one release fragment records - `githits: minor`, `@githits/mcp: none`. + `githits: patch`, `@githits/mcp: none`. - Focused tests, full tests, build, CLI smoke, built CLI smoke, package validation, and relevant format/lint checks pass. Authenticated dev results are recorded accurately. diff --git a/gemini-extension.json b/gemini-extension.json index c33a46af..50063de3 100644 --- a/gemini-extension.json +++ b/gemini-extension.json @@ -1,6 +1,6 @@ { "name": "githits", - "version": "0.9.2", + "version": "0.9.3", "description": "The code context layer for AI coding agents", "mcpServers": { "githits": { diff --git a/package.json b/package.json index 10e1dc4b..9d8d448f 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "githits", "description": "The code context layer for AI coding agents", - "version": "0.9.2", + "version": "0.9.3", "mcpName": "com.githits/githits", "type": "module", "workspaces": [ diff --git a/packages/core-internal/src/services/code-navigation-service.ts b/packages/core-internal/src/services/code-navigation-service.ts index f702cb57..fb10d316 100644 --- a/packages/core-internal/src/services/code-navigation-service.ts +++ b/packages/core-internal/src/services/code-navigation-service.ts @@ -723,6 +723,10 @@ export interface CodeNavigationService { listFiles(params: ListFilesParams): Promise; readFile(params: ReadFileParams): Promise; grepRepo(params: GrepRepoParams): Promise; +} + +/** Additive client capability for the unpromoted CodeDiff surface. */ +export interface CodeDiffService { codeDiff(params: CodeDiffParams): Promise; } @@ -2212,7 +2216,9 @@ const unifiedSearchStatusGraphQLResponseSchema = z.object({ errors: z.array(graphQLErrorSchema).optional(), }); -export class CodeNavigationServiceImpl implements CodeNavigationService { +export class CodeNavigationServiceImpl + implements CodeNavigationService, CodeDiffService +{ constructor( private readonly codeNavigationUrl: string, private readonly tokenProvider: TokenProvider, diff --git a/packages/mcp/package.json b/packages/mcp/package.json index 82161afa..3df38f03 100644 --- a/packages/mcp/package.json +++ b/packages/mcp/package.json @@ -1,6 +1,6 @@ { "name": "@githits/mcp", - "version": "0.9.1", + "version": "0.9.2", "description": "Reusable MCP server APIs and tools for GitHits", "type": "module", "files": [ diff --git a/packages/mcp/src/client.ts b/packages/mcp/src/client.ts index 2f40c470..fad40a5c 100644 --- a/packages/mcp/src/client.ts +++ b/packages/mcp/src/client.ts @@ -12,6 +12,7 @@ export type { CodeDiffRefResolution, CodeDiffRepositoryTarget, CodeDiffResult, + CodeDiffService, CodeDiffTarget, CodeDiffVersionSource, CodeNavigationService, diff --git a/packages/mcp/src/mcp/server.ts b/packages/mcp/src/mcp/server.ts index 02acc5b7..ede43c61 100644 --- a/packages/mcp/src/mcp/server.ts +++ b/packages/mcp/src/mcp/server.ts @@ -216,7 +216,6 @@ function createDescriptorServices(): McpToolServices { listFiles: fail, readFile: fail, grepRepo: fail, - codeDiff: fail, }, packageIntelligenceService: { packageSummary: fail, diff --git a/packages/mcp/src/services/test-helpers.ts b/packages/mcp/src/services/test-helpers.ts index c3a0b114..ac22f091 100644 --- a/packages/mcp/src/services/test-helpers.ts +++ b/packages/mcp/src/services/test-helpers.ts @@ -2,6 +2,7 @@ import { mock } from "bun:test"; import type { ChangelogReport, CodeDiffResult, + CodeDiffService, CodeNavigationService, DependencyReport, GitHitsService, @@ -299,8 +300,8 @@ export const defaultCodeDiffResult: CodeDiffResult = { * Creates a mock CodeNavigationService with default implementations. */ export function createMockCodeNavigationService( - impl: Partial = {}, -): CodeNavigationService { + impl: Partial = {}, +): CodeNavigationService & CodeDiffService { return { search: mock(() => Promise.resolve(defaultUnifiedSearchOutcome)), searchStatus: mock(() => Promise.resolve(defaultUnifiedSearchOutcome)), diff --git a/plugin.json b/plugin.json index 84a073c7..ea425411 100644 --- a/plugin.json +++ b/plugin.json @@ -1,7 +1,7 @@ { "$schema": "https://agent-plugins.org/schemas/1.0.0/plugin.schema.json", "name": "githits", - "version": "0.9.2", + "version": "0.9.3", "description": "The code context layer for AI coding agents", "author": { "name": "GitHits" diff --git a/scripts/validate-public-packages.ts b/scripts/validate-public-packages.ts index 06df9070..6f1dddd6 100644 --- a/scripts/validate-public-packages.ts +++ b/scripts/validate-public-packages.ts @@ -370,17 +370,21 @@ async function verifyMcpConsumer( ); await writeFile( join(appDirectory, "code-diff-check.ts"), - `import { CodeDiffError, CodeNavigationServiceImpl, createStaticTokenProvider, getCodeNavigationUrl, type CodeDiffMode, type CodeDiffPackageTarget, type CodeDiffParams, type CodeDiffRepositoryTarget, type CodeDiffResult, type CodeNavigationService } from "@githits/mcp/client"; + `import { CodeDiffError, CodeNavigationServiceImpl, createStaticTokenProvider, getCodeNavigationUrl, type CodeDiffMode, type CodeDiffPackageTarget, type CodeDiffParams, type CodeDiffRepositoryTarget, type CodeDiffResult, type CodeDiffService, type CodeNavigationService } from "@githits/mcp/client"; const packageTarget: CodeDiffPackageTarget = { registry: "NPM", packageName: "express" }; const repositoryTarget: CodeDiffRepositoryTarget = { repoUrl: "https://github.com/expressjs/express" }; const mode: CodeDiffMode = "inventory"; const params: CodeDiffParams = { target: packageTarget, from: "4.18.1", to: "4.18.2", mode }; const result: CodeDiffResult | undefined = undefined; const service: CodeNavigationService = new CodeNavigationServiceImpl(getCodeNavigationUrl(), createStaticTokenProvider("token")); +const diffService: CodeDiffService = new CodeNavigationServiceImpl(getCodeNavigationUrl(), createStaticTokenProvider("token")); +const codeNavigationRemainsCompatible: "codeDiff" extends keyof CodeNavigationService ? never : true = true; void repositoryTarget; void params; void result; void service; +void diffService; +void codeNavigationRemainsCompatible; void CodeDiffError; `, ); diff --git a/server.json b/server.json index a4382e53..0cb57d1d 100644 --- a/server.json +++ b/server.json @@ -16,7 +16,7 @@ "source": "github", "id": "1165453165" }, - "version": "0.9.2", + "version": "0.9.3", "remotes": [ { "type": "streamable-http", @@ -28,7 +28,7 @@ "registryType": "npm", "registryBaseUrl": "https://registry.npmjs.org", "identifier": "githits", - "version": "0.9.2", + "version": "0.9.3", "runtimeHint": "npx", "transport": { "type": "stdio" diff --git a/src/commands/code/diff.ts b/src/commands/code/diff.ts index 94daaf32..241d2672 100644 --- a/src/commands/code/diff.ts +++ b/src/commands/code/diff.ts @@ -1,4 +1,4 @@ -import type { CodeNavigationService } from "@githits/core-internal"; +import type { CodeDiffService } from "@githits/core-internal"; import { buildCodeDiffParams, buildCodeDiffSuccessPayload, @@ -39,7 +39,7 @@ export interface CodeDiffCommandOptions { } export interface CodeDiffCommandDependencies { - codeNavigationService: CodeNavigationService | undefined; + codeNavigationService: CodeDiffService | undefined; codeNavigationUrl: string | undefined; hasValidToken: boolean; mcpUrl: string; diff --git a/src/container.ts b/src/container.ts index 323b5903..47cecc2f 100644 --- a/src/container.ts +++ b/src/container.ts @@ -1,5 +1,6 @@ import { type AgentInfo, + type CodeDiffService, type CodeNavigationService, CodeNavigationServiceImpl, createClientHeaderBuilder, @@ -240,7 +241,7 @@ export interface Dependencies { /** Code navigation backend URL */ codeNavigationUrl: string; /** Code navigation service used by CLI/MCP paths */ - codeNavigationService: CodeNavigationService; + codeNavigationService: CodeNavigationService & CodeDiffService; /** * Package intelligence service — reads registry metadata, * vulnerabilities, dependencies, and changelogs from the diff --git a/src/services/test-helpers.ts b/src/services/test-helpers.ts index 81e97e4a..778caf6c 100644 --- a/src/services/test-helpers.ts +++ b/src/services/test-helpers.ts @@ -3,6 +3,7 @@ import { posix, win32 } from "node:path"; import type { ChangelogReport, CodeDiffResult, + CodeDiffService, CodeNavigationService, DependencyReport, GitHitsService, @@ -541,8 +542,8 @@ export const defaultCodeDiffResult: CodeDiffResult = { * Creates a mock CodeNavigationService with default implementations. */ export function createMockCodeNavigationService( - impl: Partial = {}, -): CodeNavigationService { + impl: Partial = {}, +): CodeNavigationService & CodeDiffService { return { search: mock(() => Promise.resolve(defaultUnifiedSearchOutcome)), searchStatus: mock(() => Promise.resolve(defaultUnifiedSearchOutcome)),