Copilot loads every manifest in $COPILOT_HOME/hooks. Treat our dedicated * filename as an exact-owned document: a foreign collision fails closed, and * uninstall accepts only the complete generated lifecycle schema. */
| 3619 | * filename as an exact-owned document: a foreign collision fails closed, and |
| 3620 | * uninstall accepts only the complete generated lifecycle schema. */ |
| 3621 | static int cbm_upsert_copilot_hooks(const char *binary_path, const char *manifest_path) { |
| 3622 | char *manifest = cbm_build_copilot_hook_manifest(binary_path); |
| 3623 | if (!manifest || !manifest_path) { |
| 3624 | free(manifest); |
| 3625 | return CLI_ERR; |
| 3626 | } |
| 3627 | int rc = cbm_text_ensure_owned_document(manifest_path, manifest); |
| 3628 | free(manifest); |
| 3629 | return rc == 0 ? CLI_OK : CLI_ERR; |
| 3630 | } |
| 3631 | |
| 3632 | static int cbm_remove_copilot_hooks(const char *manifest_path, const char *binary_path) { |
| 3633 | char *manifest = cbm_build_copilot_hook_manifest(binary_path); |
no test coverage detected