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. */
| 3557 | * filename as an exact-owned document: a foreign collision fails closed, and |
| 3558 | * uninstall accepts only the complete generated lifecycle schema. */ |
| 3559 | static int cbm_upsert_copilot_hooks(const char *binary_path, const char *manifest_path) { |
| 3560 | char *manifest = cbm_build_copilot_hook_manifest(binary_path); |
| 3561 | if (!manifest || !manifest_path) { |
| 3562 | free(manifest); |
| 3563 | return CLI_ERR; |
| 3564 | } |
| 3565 | int rc = cbm_text_ensure_owned_document(manifest_path, manifest); |
| 3566 | free(manifest); |
| 3567 | return rc == 0 ? CLI_OK : CLI_ERR; |
| 3568 | } |
| 3569 | |
| 3570 | static int cbm_remove_copilot_hooks(const char *manifest_path, const char *binary_path) { |
| 3571 | char *manifest = cbm_build_copilot_hook_manifest(binary_path); |
no test coverage detected