Skip to content

feat(x2a): add x2a-list-modules MCP tool#2838

Merged
eloycoto merged 4 commits intoredhat-developer:mainfrom
mareklibra:FLPATH-4051.mcpListModules
Apr 24, 2026
Merged

feat(x2a): add x2a-list-modules MCP tool#2838
eloycoto merged 4 commits intoredhat-developer:mainfrom
mareklibra:FLPATH-4051.mcpListModules

Conversation

@mareklibra
Copy link
Copy Markdown
Member

@mareklibra mareklibra commented Apr 20, 2026

Adds

  • MCP tool for listing modules of a project. Similar to GET /projects/:projectId/modules
  • MCP tools output schema documentation (for LLMs)

Input parameter: projectId

Example output:

{
  "projectId": "843bb519-509f-4fb8-afce-4f4b8edcc393",
  "projectName": "My first migration project",
  "projectDetailsUrl": "http://localhost:3000/x2a/projects/843bb519-509f-4fb8-afce-4f4b8edcc393",
  "items": [
    {
      "id": "929e6360-9874-42ca-be1e-ed2258b386f7",
      "name": "cache",
      "sourcePath": "cookbooks/cache",
      "projectId": "843bb519-509f-4fb8-afce-4f4b8edcc393",
      "status": "pending",
      "moduleDetailsUrl": "http://localhost:3000/x2a/projects/843bb519-509f-4fb8-afce-4f4b8edcc393/modules/929e6360-9874-42ca-be1e-ed2258b386f7"
    },
    {
      "id": "cbf843f7-c9ba-4c48-b6f2-5bc9653eded8",
      "name": "fastapi-tutorial",
      "sourcePath": "cookbooks/fastapi-tutorial",
      "projectId": "843bb519-509f-4fb8-afce-4f4b8edcc393",
      "status": "pending",
      "moduleDetailsUrl": "http://localhost:3000/x2a/projects/843bb519-509f-4fb8-afce-4f4b8edcc393/modules/cbf843f7-c9ba-4c48-b6f2-5bc9653eded8"
    },
    {
      "id": "0408fc97-f47e-4961-a9c0-72e4d57e32f3",
      "name": "nginx-multisite",
      "sourcePath": "cookbooks/nginx-multisite",
      "projectId": "843bb519-509f-4fb8-afce-4f4b8edcc393",
      "status": "pending",
      "moduleDetailsUrl": "http://localhost:3000/x2a/projects/843bb519-509f-4fb8-afce-4f4b8edcc393/modules/0408fc97-f47e-4961-a9c0-72e4d57e32f3"
    }
  ]
}

@rhdh-qodo-merge
Copy link
Copy Markdown

rhdh-qodo-merge Bot commented Apr 20, 2026

Code Review by Qodo

🐞 Bugs (0) 📘 Rule violations (0) 📎 Requirement gaps (0)

Grey Divider


Action required

1. Callback token leaked🐞 Bug ⛨ Security
Description
reconcileModuleJobs overwrites module phase jobs with the job returned from reconcileJobStatus,
which can include callbackToken from the database. The new x2a-list-modules MCP tool serializes and
returns these modules, potentially exposing the HMAC secret used to authenticate /collectArtifacts
callbacks.
Code

workspaces/x2a/plugins/x2a-node/src/modulesReconcile.ts[R34-37]

+    const job = module[phase];
+    if (job && ['pending', 'running'].includes(job.status)) {
+      module[phase] = await reconcileJobStatus(job, deps);
+    }
Relevance

⭐⭐⭐ High

Team previously enforced stripping callbackToken and fixed secret leaks; reintroducing token via
reconciliation is real risk.

PR-#2258
PR-#2403
PR-#2636

ⓘ Recommendations generated based on similar findings in past PRs

Evidence
X2ADatabaseService.listModules intentionally strips callbackToken from the last jobs via
removeSensitiveFromJob, but reconcileJobStatus returns the updated Job from x2aDatabase.updateJob.
The DB mapper explicitly maps callback_token into a callbackToken property, so when
reconcileModuleJobs assigns the updated job back onto the module, the callbackToken can be
reintroduced. createListModulesAction then JSON-serializes the module objects and returns them as
MCP output, which will include any runtime callbackToken properties present. callbackToken is used
as the HMAC key for authenticating collectArtifacts callbacks, so exposing it breaks callback
authentication.

workspaces/x2a/plugins/x2a-node/src/modulesReconcile.ts[28-38]
workspaces/x2a/plugins/x2a-node/src/utils.ts[95-133]
workspaces/x2a/plugins/x2a-backend/src/services/X2ADatabaseService/mappers.ts[52-75]
workspaces/x2a/plugins/x2a-backend/src/router/common.ts[236-245]
workspaces/x2a/plugins/x2a-backend/src/services/X2ADatabaseService/index.ts[364-380]
workspaces/x2a/plugins/x2a-mcp-extras/src/actions/createListModulesAction.ts[92-107]
workspaces/x2a/plugins/x2a-common/client/src/schema/openapi/generated/apis/Api.client.ts[261-266]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
`reconcileJobStatus` (and the module reconciliation helpers that use it) can reintroduce `callbackToken` onto job objects returned to callers. This is a secret used as the HMAC key for `/collectArtifacts` callback authentication, so it must never be present in module/job objects returned via HTTP/MCP.

## Issue Context
- `X2ADatabaseService.listModules` explicitly removes `callbackToken` from phase jobs before returning modules.
- Reconciliation currently replaces phase jobs with the result of `reconcileJobStatus`, which can come from `x2aDatabase.updateJob()` and include `callbackToken` again.

## Fix Focus Areas
- workspaces/x2a/plugins/x2a-node/src/utils.ts[95-133]
- workspaces/x2a/plugins/x2a-node/src/modulesReconcile.ts[28-38]

## Suggested fix
- Ensure any `Job` object returned from `reconcileJobStatus` is sanitized:
 - clone the returned job and `delete (job as any).callbackToken` before returning, OR
 - sanitize immediately when assigning back into `module[phase]`.
- Add/adjust a unit test to assert reconciliation does not add `callbackToken` back onto module phase jobs.

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


Grey Divider

Qodo Logo

@rhdh-gh-app
Copy link
Copy Markdown

rhdh-gh-app Bot commented Apr 20, 2026

Missing Changesets

The following package(s) are changed by this PR but do not have a changeset:

  • @red-hat-developer-hub/backstage-plugin-x2a-common

See CONTRIBUTING.md for more information about how to add changesets.

Changed Packages

Package Name Package Path Changeset Bump Current Version
@red-hat-developer-hub/backstage-plugin-x2a-backend workspaces/x2a/plugins/x2a-backend patch v1.4.0
@red-hat-developer-hub/backstage-plugin-x2a-common workspaces/x2a/plugins/x2a-common none v1.2.1
@red-hat-developer-hub/backstage-plugin-x2a-mcp-extras workspaces/x2a/plugins/x2a-mcp-extras patch v0.2.0
@red-hat-developer-hub/backstage-plugin-x2a-node workspaces/x2a/plugins/x2a-node patch v0.2.0

@rhdh-qodo-merge
Copy link
Copy Markdown

Review Summary by Qodo

Add x2a-list-modules MCP tool and extract module status logic to shared package

✨ Enhancement

Grey Divider

Walkthroughs

Description
• Add x2a-list-modules MCP tool for listing project modules with statuses
• Extract module status calculation logic to shared x2a-node package
• Refactor module reconciliation into reusable utility functions
• Update backend routes to use new shared reconciliation utilities
Diagram
flowchart LR
  A["x2a-backend<br/>modules.ts"] -->|"extract logic"| B["x2a-node<br/>moduleStatus.ts"]
  A -->|"extract logic"| C["x2a-node<br/>modulesReconcile.ts"]
  D["x2a-mcp-extras<br/>createListModulesAction.ts"] -->|"import from"| B
  D -->|"import from"| C
  E["x2a-backend<br/>X2ADatabaseService"] -->|"import from"| B
  A -->|"use"| C
Loading

Grey Divider

File Changes

1. workspaces/x2a/plugins/x2a-backend/src/router/modules.ts Refactoring +10/-40

Refactor to use shared module reconciliation utilities

workspaces/x2a/plugins/x2a-backend/src/router/modules.ts


2. workspaces/x2a/plugins/x2a-backend/src/services/X2ADatabaseService/index.ts Dependencies +2/-1

Import calculateModuleStatus from x2a-node package

workspaces/x2a/plugins/x2a-backend/src/services/X2ADatabaseService/index.ts


3. workspaces/x2a/plugins/x2a-backend/src/services/X2ADatabaseService/projectStatus.test.ts 🧪 Tests +1/-189

Remove calculateModuleStatus tests, update imports

workspaces/x2a/plugins/x2a-backend/src/services/X2ADatabaseService/projectStatus.test.ts


View more (16)
4. workspaces/x2a/plugins/x2a-backend/src/services/X2ADatabaseService/projectStatus.ts Refactoring +2/-34

Re-export calculateModuleStatus from x2a-node

workspaces/x2a/plugins/x2a-backend/src/services/X2ADatabaseService/projectStatus.ts


5. workspaces/x2a/plugins/x2a-mcp-extras/src/actions/__testUtils__/index.ts 🧪 Tests +10/-0

Add kubeService mock and listModules mock to test utilities

workspaces/x2a/plugins/x2a-mcp-extras/src/actions/testUtils/index.ts


6. workspaces/x2a/plugins/x2a-mcp-extras/src/actions/createListModulesAction.test.ts 🧪 Tests +98/-0

Add comprehensive tests for x2a-list-modules MCP action

workspaces/x2a/plugins/x2a-mcp-extras/src/actions/createListModulesAction.test.ts


7. workspaces/x2a/plugins/x2a-mcp-extras/src/actions/createListModulesAction.ts ✨ Enhancement +119/-0

Implement x2a-list-modules MCP tool action

workspaces/x2a/plugins/x2a-mcp-extras/src/actions/createListModulesAction.ts


8. workspaces/x2a/plugins/x2a-mcp-extras/src/actions/createTriggerNextPhaseAction.ts 📝 Documentation +1/-1

Update description to clarify non-automatic behavior

workspaces/x2a/plugins/x2a-mcp-extras/src/actions/createTriggerNextPhaseAction.ts


9. workspaces/x2a/plugins/x2a-mcp-extras/src/actions/index.ts ✨ Enhancement +8/-1

Export createListModulesAction and add kubeService dependency

workspaces/x2a/plugins/x2a-mcp-extras/src/actions/index.ts


10. workspaces/x2a/plugins/x2a-mcp-extras/src/plugin.integration.test.ts 🧪 Tests +25/-0

Add kubeService factory and test x2a-list-modules action

workspaces/x2a/plugins/x2a-mcp-extras/src/plugin.integration.test.ts


11. workspaces/x2a/plugins/x2a-mcp-extras/src/plugin.ts ✨ Enhancement +7/-1

Register kubeService dependency and initialize list modules action

workspaces/x2a/plugins/x2a-mcp-extras/src/plugin.ts


12. workspaces/x2a/plugins/x2a-node/src/index.ts ✨ Enhancement +7/-0

Export calculateModuleStatus and module reconciliation functions

workspaces/x2a/plugins/x2a-node/src/index.ts


13. workspaces/x2a/plugins/x2a-node/src/moduleStatus.test.ts 🧪 Tests +219/-0

Add comprehensive tests for calculateModuleStatus function

workspaces/x2a/plugins/x2a-node/src/moduleStatus.test.ts


14. workspaces/x2a/plugins/x2a-node/src/moduleStatus.ts ✨ Enhancement +57/-0

Extract calculateModuleStatus logic to shared package

workspaces/x2a/plugins/x2a-node/src/moduleStatus.ts


15. workspaces/x2a/plugins/x2a-node/src/modulesReconcile.ts ✨ Enhancement +63/-0

Extract module reconciliation utilities to shared package

workspaces/x2a/plugins/x2a-node/src/modulesReconcile.ts


16. workspaces/x2a/.changeset/wet-tigers-try.md 📝 Documentation +7/-0

Document x2a-list-modules feature addition

workspaces/x2a/.changeset/wet-tigers-try.md


17. workspaces/x2a/app-config.yaml ⚙️ Configuration changes +1/-0

Add GitHub email matching auth resolver

workspaces/x2a/app-config.yaml


18. workspaces/x2a/plugins/x2a-mcp-extras/README.md 📝 Documentation +1/-0

Document x2a-list-modules MCP tool in table

workspaces/x2a/plugins/x2a-mcp-extras/README.md


19. workspaces/x2a/plugins/x2a-node/report.api.md 📝 Documentation +17/-0

Update API report with new exported functions

workspaces/x2a/plugins/x2a-node/report.api.md


Grey Divider

Qodo Logo

@rhdh-qodo-merge rhdh-qodo-merge Bot added documentation Improvements or additions to documentation enhancement New feature or request Tests labels Apr 20, 2026
@mareklibra mareklibra force-pushed the FLPATH-4051.mcpListModules branch from 1a0e9e2 to 82c35fe Compare April 20, 2026 13:57
@mareklibra mareklibra marked this pull request as ready for review April 20, 2026 14:02
@rhdh-qodo-merge
Copy link
Copy Markdown

rhdh-qodo-merge Bot commented Apr 20, 2026

Code Review by Qodo

🐞 Bugs (2) 📘 Rule violations (0) 📎 Requirement gaps (0)

Grey Divider


Remediation recommended

1. Date fields violate schema 🐞 Bug ≡ Correctness
Description
x2a-list-modules declares phase job timestamps as ISO strings in its Zod output schema, but it
returns the Module objects directly (via spread/clone) where Job.startedAt/finishedAt are Date
objects. If the action framework validates outputs against the Zod schema (or any consumer assumes
the declared string shape pre-JSON), this can fail or produce inconsistent output compared to other
actions that explicitly serialize dates.
Code

workspaces/x2a/plugins/x2a-mcp-extras/src/actions/createListModulesAction.ts[R186-191]

+      const serialized = structuredClone(
+        modules.map(module => ({
+          ...module,
+          moduleDetailsUrl: `${appBaseUrl}/x2a/projects/${project.id}/modules/${module.id}`,
+        })),
+      ) as ListModulesMcpOutput['items'];
Relevance

⭐⭐⭐ High

Team previously serialized Date→ISO for MCP outputs (createdAt); returning Date violates declared
Zod string schema.

PR-#2733

ⓘ Recommendations generated based on similar findings in past PRs

Evidence
The output schema explicitly requires startedAt/finishedAt to be strings, but the
OpenAPI-generated Job model used inside Module defines these fields as Date. The action’s
serialization step uses structuredClone + object spread, which preserves Date objects rather
than converting them to ISO strings, unlike existing MCP actions which manually serialize dates.

workspaces/x2a/plugins/x2a-mcp-extras/src/actions/createListModulesAction.ts[35-41]
workspaces/x2a/plugins/x2a-mcp-extras/src/actions/createListModulesAction.ts[186-191]
workspaces/x2a/plugins/x2a-common/client/src/schema/openapi/generated/models/Job.model.ts[28-55]
workspaces/x2a/plugins/x2a-common/client/src/schema/openapi/generated/models/Module.model.ts[26-46]
workspaces/x2a/plugins/x2a-mcp-extras/src/actions/createListProjectsAction.ts[147-150]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

### Issue description
`createListModulesAction` returns module/job objects that include `Date` fields (`startedAt`, `finishedAt`), while the MCP tool output schema declares those fields as ISO-8601 `string`. `structuredClone` does not convert `Date` to `string`, so outputs can violate the declared schema.

### Issue Context
- OpenAPI-generated types define `Job.startedAt`/`finishedAt` as `Date`.
- Other MCP actions in this plugin already normalize `Date` values to ISO strings.

### Fix Focus Areas
- workspaces/x2a/plugins/x2a-mcp-extras/src/actions/createListModulesAction.ts[35-41]
- workspaces/x2a/plugins/x2a-mcp-extras/src/actions/createListModulesAction.ts[186-191]

### Suggested fix approach
- When constructing `serialized`, explicitly map `analyze`/`migrate`/`publish` jobs (if present) and convert:
 - `startedAt: job.startedAt instanceof Date ? job.startedAt.toISOString() : String(job.startedAt)`
 - `finishedAt: job.finishedAt ? (job.finishedAt instanceof Date ? job.finishedAt.toISOString() : String(job.finishedAt)) : undefined`
- Avoid relying on `structuredClone` for serialization (it preserves `Date`).

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools



Advisory comments

2. Sync check not enforced 🐞 Bug ⚙ Maintainability
Description
X2A*ValuesSyncWithOpenApi types are documented as “compile-time checks”, but they are only
conditional type aliases and nothing asserts they must be true. If OpenAPI/codegen changes, these
aliases can silently become false without failing the build, undermining the intent of the check.
Code

workspaces/x2a/plugins/x2a-common/src/x2aJobStatusLiterals.ts[R44-49]

+export type X2AJobStatusValuesSyncWithOpenApi =
+  JobStatusEnum extends (typeof X2A_JOB_STATUS_VALUES)[number]
+    ? (typeof X2A_JOB_STATUS_VALUES)[number] extends JobStatusEnum
+      ? true
+      : false
+    : false;
Relevance

⭐⭐⭐ High

Type alias “check” can drift to false without TS error; undermines stated compile-time guarantee.

PR-#2505
PR-#2733

ⓘ Recommendations generated based on similar findings in past PRs

Evidence
Both files define a conditional type that resolves to true/false, but there is no accompanying
assignment/assertion that would cause a TypeScript error when it becomes false. The code comments
claim these are compile-time checks, but the current implementation doesn’t force the compiler to
reject drift.

workspaces/x2a/plugins/x2a-common/src/x2aJobStatusLiterals.ts[34-49]
workspaces/x2a/plugins/x2a-common/src/x2aArtifactTypeLiterals.ts[33-44]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

### Issue description
The `X2AJobStatusValuesSyncWithOpenApi` / `X2AArtifactTypeValuesSyncWithOpenApi` types are described as compile-time checks, but they don’t currently *enforce* anything because nothing requires them to resolve to `true`.

### Issue Context
A conditional type alias that evaluates to `false` does not fail compilation unless it’s used in a way that requires `true`.

### Fix Focus Areas
- workspaces/x2a/plugins/x2a-common/src/x2aJobStatusLiterals.ts[44-49]
- workspaces/x2a/plugins/x2a-common/src/x2aArtifactTypeLiterals.ts[39-44]

### Suggested fix approach
Add a local (non-exported) assertion in each file, e.g.
```ts
// eslint-disable-next-line @typescript-eslint/no-unused-vars
const _assertJobStatusValuesSync: X2AJobStatusValuesSyncWithOpenApi = true;
```
(and similarly for artifact types). This will cause a hard TypeScript error if the tuple ever drifts from the OpenAPI union.

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


Grey Divider

Qodo Logo

@rhdh-qodo-merge
Copy link
Copy Markdown

Review Summary by Qodo

Add x2a-list-modules MCP tool and refactor module status utilities

✨ Enhancement

Grey Divider

Walkthroughs

Description
• Add x2a-list-modules MCP tool for listing project modules with statuses
• Refactor module status calculation logic into shared x2a-node package
• Extract reconcileModuleJobs and listModulesWithReconciledStatuses utilities
• Add Zod schema exports for job status and artifact type enums
Diagram
flowchart LR
  A["x2a-backend<br/>modules.ts"] -->|extract| B["x2a-node<br/>moduleStatus.ts"]
  A -->|extract| C["x2a-node<br/>modulesReconcile.ts"]
  D["x2a-mcp-extras<br/>createListModulesAction.ts"] -->|import| B
  D -->|import| C
  E["x2a-common<br/>literals"] -->|export| F["Job Status<br/>& Artifact Type"]
  D -->|use| F
Loading

Grey Divider

File Changes

1. workspaces/x2a/plugins/x2a-backend/src/router/modules.ts Refactoring +10/-40

Refactor module reconciliation to use shared utilities

workspaces/x2a/plugins/x2a-backend/src/router/modules.ts


2. workspaces/x2a/plugins/x2a-backend/src/services/X2ADatabaseService/index.ts Dependencies +2/-1

Import calculateModuleStatus from x2a-node package

workspaces/x2a/plugins/x2a-backend/src/services/X2ADatabaseService/index.ts


3. workspaces/x2a/plugins/x2a-backend/src/services/X2ADatabaseService/projectStatus.test.ts 🧪 Tests +1/-189

Remove calculateModuleStatus tests, keep projectStatus tests

workspaces/x2a/plugins/x2a-backend/src/services/X2ADatabaseService/projectStatus.test.ts


View more (22)
4. workspaces/x2a/plugins/x2a-backend/src/services/X2ADatabaseService/projectStatus.ts Refactoring +1/-35

Re-export calculateModuleStatus from x2a-node

workspaces/x2a/plugins/x2a-backend/src/services/X2ADatabaseService/projectStatus.ts


5. workspaces/x2a/plugins/x2a-common/src/index.ts ✨ Enhancement +2/-0

Export job status and artifact type literal enums

workspaces/x2a/plugins/x2a-common/src/index.ts


6. workspaces/x2a/plugins/x2a-common/src/x2aJobStatusLiterals.ts ✨ Enhancement +49/-0

Define job status enum values with OpenAPI sync check

workspaces/x2a/plugins/x2a-common/src/x2aJobStatusLiterals.ts


7. workspaces/x2a/plugins/x2a-common/src/x2aArtifactTypeLiterals.ts ✨ Enhancement +44/-0

Define artifact type enum values with OpenAPI sync check

workspaces/x2a/plugins/x2a-common/src/x2aArtifactTypeLiterals.ts


8. workspaces/x2a/plugins/x2a-mcp-extras/src/actions/__testUtils__/index.ts 🧪 Tests +10/-0

Add kubeService mock to test utilities

workspaces/x2a/plugins/x2a-mcp-extras/src/actions/testUtils/index.ts


9. workspaces/x2a/plugins/x2a-mcp-extras/src/actions/createCreateProjectAction.ts 📝 Documentation +34/-9

Add comprehensive descriptions to output schema fields

workspaces/x2a/plugins/x2a-mcp-extras/src/actions/createCreateProjectAction.ts


10. workspaces/x2a/plugins/x2a-mcp-extras/src/actions/createListModulesAction.test.ts 🧪 Tests +98/-0

Add comprehensive tests for x2a-list-modules action

workspaces/x2a/plugins/x2a-mcp-extras/src/actions/createListModulesAction.test.ts


11. workspaces/x2a/plugins/x2a-mcp-extras/src/actions/createListModulesAction.ts ✨ Enhancement +203/-0

Implement x2a-list-modules MCP tool with full schema

workspaces/x2a/plugins/x2a-mcp-extras/src/actions/createListModulesAction.ts


12. workspaces/x2a/plugins/x2a-mcp-extras/src/actions/createTriggerNextPhaseAction.ts 📝 Documentation +1/-1

Clarify description for trigger next phase action

workspaces/x2a/plugins/x2a-mcp-extras/src/actions/createTriggerNextPhaseAction.ts


13. workspaces/x2a/plugins/x2a-mcp-extras/src/actions/index.ts ✨ Enhancement +8/-1

Register createListModulesAction and add kubeService dependency

workspaces/x2a/plugins/x2a-mcp-extras/src/actions/index.ts


14. workspaces/x2a/plugins/x2a-mcp-extras/src/plugin.integration.test.ts 🧪 Tests +25/-0

Add kubeService mock and test x2a-list-modules action

workspaces/x2a/plugins/x2a-mcp-extras/src/plugin.integration.test.ts


15. workspaces/x2a/plugins/x2a-mcp-extras/src/plugin.ts ✨ Enhancement +7/-1

Register kubeService dependency in plugin initialization

workspaces/x2a/plugins/x2a-mcp-extras/src/plugin.ts


16. workspaces/x2a/plugins/x2a-node/src/index.ts ✨ Enhancement +7/-0

Export module status and reconciliation utilities

workspaces/x2a/plugins/x2a-node/src/index.ts


17. workspaces/x2a/plugins/x2a-node/src/moduleStatus.test.ts 🧪 Tests +219/-0

Add comprehensive tests for calculateModuleStatus function

workspaces/x2a/plugins/x2a-node/src/moduleStatus.test.ts


18. workspaces/x2a/plugins/x2a-node/src/moduleStatus.ts ✨ Enhancement +57/-0

Extract calculateModuleStatus logic to shared module

workspaces/x2a/plugins/x2a-node/src/moduleStatus.ts


19. workspaces/x2a/plugins/x2a-node/src/modulesReconcile.ts ✨ Enhancement +63/-0

Extract module reconciliation utilities to shared module

workspaces/x2a/plugins/x2a-node/src/modulesReconcile.ts


20. workspaces/x2a/.changeset/wet-tigers-try.md 📝 Documentation +7/-0

Document changeset for x2a-list-modules feature

workspaces/x2a/.changeset/wet-tigers-try.md


21. workspaces/x2a/app-config.yaml ⚙️ Configuration changes +1/-0

Add GitHub email resolver for authentication

workspaces/x2a/app-config.yaml


22. workspaces/x2a/plugins/x2a-common/report.api.md 📝 Documentation +12/-0

Update API report with new literal exports

workspaces/x2a/plugins/x2a-common/report.api.md


23. workspaces/x2a/plugins/x2a-mcp-extras/README.md 📝 Documentation +1/-0

Document x2a-list-modules tool in README

workspaces/x2a/plugins/x2a-mcp-extras/README.md


24. workspaces/x2a/plugins/x2a-mcp-extras/package.json Dependencies +2/-1

Add zod dependency for schema validation

workspaces/x2a/plugins/x2a-mcp-extras/package.json


25. workspaces/x2a/plugins/x2a-node/report.api.md 📝 Documentation +17/-0

Update API report with new module utilities

workspaces/x2a/plugins/x2a-node/report.api.md


Grey Divider

Qodo Logo

@mareklibra mareklibra force-pushed the FLPATH-4051.mcpListModules branch from a76f79a to 5a69964 Compare April 21, 2026 09:29
@mareklibra mareklibra force-pushed the FLPATH-4051.mcpListModules branch from 5d05a70 to 44d72ff Compare April 23, 2026 08:28
@mareklibra
Copy link
Copy Markdown
Member Author

Rebased

@sonarqubecloud
Copy link
Copy Markdown

@eloycoto eloycoto merged commit 484583b into redhat-developer:main Apr 24, 2026
17 of 19 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation enhancement New feature or request Tests workspace/x2a

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants