When a project.json file_structure section is missing the gitignore key,
the extension crashes with KeyError, which can halt the agent entirely.
Fix uses .get() with sensible defaults for all file_structure accesses:
- enabled -> .get("enabled", False)
- max_depth -> .get("max_depth", 0)
- gitignore -> .get("gitignore", "")
- Extract presets into global presets.yaml; move editor to plugin main screen
- Add project-wide override sync and three-layer permission checks
- Fix embedding change detection, new-chat inheritance, and preset name leak bugs
- Clean up dead imports/params and fix description text