# NousResearch/hermes-agent · Fix circular module cycle breaking desktop runtime plugins

## Open now

- Nothing open on GitHub.

Multiple fixes addressing a circular dependency involving sdk/index.ts that caused runtime (disk) desktop plugins to fail with a null/undefined object error. Approaches include lazy-loading, lazy namespace resolution, and restructuring imports to break the cycle.

## TL;DR

- 6 member(s): 0 open issue(s), 1 closed issue(s), 0 open PR(s), 1 merged PR(s), 4 PR(s) closed without merging.
- A fix was merged to main in PR #107303. Verify it addresses your case.
- **Recommended:** read PR #107303 (and any competing PRs below) before filing. Confirm the merged change covers your symptom.

## Maintainer resolution verdict

- Internal-tracker verdict over this cluster's issue members: `unresolved`. This is distinct from the fix status above. Weigh it yourself.

## How this cluster was grouped

- Link evidence (`STRUCTURAL_SPANNING`): every member is connected by structural evidence: shared changed files, or a closing/superseded reference.
- Pairwise link density `0.33`: the share of member pairs that carry a link, counting a structural link in full and a relevance-only link at 0.36. `1.00` means every pair is linked.

## Closed / duplicate issues

- #107288: \[Bug\]: #107212 puts sdk/index.ts in a module cycle — every runtime (disk) desktop plugin fails with "Cannot convert undefined or null to object"

## Prior & competing PRs

- **#107303: fix(desktop): resolve plugin SDK namespaces lazily so disk plugins load in production builds**. merged to main · fix tier `verified`
  - maintainer direction: category `merged`; implication `superseded`
  - files: `apps/desktop/src/sdk/runtime.ts`
- **#107301: fix(desktop): lazy-load runtime-loader to break the sdk/index cycle**. closed without merge
  - maintainer direction: category `implemented_elsewhere`; implication `superseded`; refs `6c3d4a4af7`, `#107303`, `#107288`
- **#107447: fix(desktop): break runtime plugin SDK cycle**. closed without merge
  - maintainer direction: category `duplicate_of`; implication `duplicate`; refs `#107301`, `#107288`, `#107301`, `#107303`, `#107309`
- **#107753: fix(desktop): resolve runtime plugin SDK namespaces lazily and break sdk cycle**. closed without merge
  - maintainer direction: category `duplicate_of`; implication `duplicate`; refs `#107303`, `#107288`, `#107352`, `#107518`, `#107603`, `#107644`
- **#109253: fix(desktop): break sdk module cycle to restore runtime plugins (fixes #107288)**. closed without merge
  - maintainer direction: category `silent_close`; implication `active`

## Fix status

- Merged to main in PR #107303 (cited above). No release data is tracked. Verify downstream.
- Fix last verified (merged) `2026-09-10`.
- Subsystem: `apps/desktop`
