{"repo":"NousResearch/hermes-agent","public_id":"107288","display_label":"Fix circular module cycle breaking desktop runtime plugins","summary":"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.","subsystem":"apps/desktop","counts":{"members":6,"open_issues":0,"open_issues_distinct":0,"open_prs":0,"closed_issues":1,"merged_prs":1,"attempt_prs":4},"landed_fix":{"status":"merged_to_main","basis":"structural","pr":107303},"resolution":{"state":"unresolved","by":null},"freshness":{"state":"verified","last_verified_at":"2026-09-10T22:35:32+00:00","is_stale":false},"grouping":{"backbone":"STRUCTURAL_SPANNING","link_density":0.3333333333333333},"fix_edges":[{"issue_number":107288,"pr_number":107303,"tier":"verified","basis":"superseded_ref","confidence":0.9,"recoverable_from_timeline":false},{"issue_number":107291,"pr_number":107303,"tier":"verified","basis":"superseded_ref","confidence":0.9,"recoverable_from_timeline":false},{"issue_number":107304,"pr_number":107303,"tier":"verified","basis":"closing_ref","confidence":0.95,"recoverable_from_timeline":true},{"issue_number":107484,"pr_number":107303,"tier":"verified","basis":"superseded_ref","confidence":0.9,"recoverable_from_timeline":false}],"members":[{"kind":"issue","number":107288,"title":"[Bug]: #107212 puts sdk/index.ts in a module cycle — every runtime (disk) desktop plugin fails with \"Cannot convert undefined or null to object\"","url":null,"state":"closed"},{"kind":"pr","number":107301,"title":"fix(desktop): lazy-load runtime-loader to break the sdk/index cycle","url":null,"state":"closed","close_reason":{"refs":[{"kind":"commit","value":"6c3d4a4af7","number":0},{"kind":"pr","value":"#107303","number":107303},{"kind":"pr","value":"#107288","number":107288}],"category":"implemented_elsewhere","implication":"superseded"},"merged":false},{"kind":"pr","number":107303,"title":"fix(desktop): resolve plugin SDK namespaces lazily so disk plugins load in production builds","url":null,"state":"merged","close_reason":{"category":"merged","implication":"superseded"},"merged":true,"is_fix_pr":true,"fix_tier":"verified","files_changed":["apps/desktop/src/sdk/runtime.ts"]},{"kind":"pr","number":107447,"title":"fix(desktop): break runtime plugin SDK cycle","url":null,"state":"closed","close_reason":{"refs":[{"kind":"pr","value":"#107301","number":107301},{"kind":"pr","value":"#107288","number":107288},{"kind":"pr","value":"#107301","number":107301},{"kind":"pr","value":"#107303","number":107303},{"kind":"pr","value":"#107309","number":107309}],"category":"duplicate_of","implication":"duplicate"},"merged":false},{"kind":"pr","number":107753,"title":"fix(desktop): resolve runtime plugin SDK namespaces lazily and break sdk cycle","url":null,"state":"closed","close_reason":{"refs":[{"kind":"pr","value":"#107303","number":107303},{"kind":"pr","value":"#107288","number":107288},{"kind":"pr","value":"#107352","number":107352},{"kind":"pr","value":"#107518","number":107518},{"kind":"pr","value":"#107603","number":107603},{"kind":"pr","value":"#107644","number":107644}],"category":"duplicate_of","implication":"duplicate"},"merged":false},{"kind":"pr","number":109253,"title":"fix(desktop): break sdk module cycle to restore runtime plugins (fixes #107288)","url":null,"state":"closed","close_reason":{"category":"silent_close","implication":"active"},"merged":false}],"trust":{"default_tier":"verified","includes_suggested":false}}