OCaml Claude SDK using Eio and Jsont

Add git retry logic, sources registry, and configurable knot

Git operations:
- Add retry logic with exponential backoff for HTTP 5xx errors
- Retry on RPC failures, curl errors, connection issues
- 3 retries with 2s/4s/8s delays before failing
- Apply to clone, fetch, pull, push, and subtree operations

Sources registry (sources.toml):
- New module for tracking package URL overrides
- default_url_base for deriving URLs from subtree names
- Per-package entries with url, upstream, branch, reason

Verse config:
- Add knot field for git push server (e.g., "git.recoil.org")
- Default to "git.recoil.org" if not present in config
- Auto-write knot to config file if missing

URL handling:
- Remove hardcoded anil.recoil.org references
- Derive git push server from handle or use configured knot
- Generic SSH URL normalization in forks.ml

Sync resilience:
- Skip failed clones in merge/subtree phases instead of crashing
- Track successfully fetched repos separately from failures

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

+4 -4
+2 -2
claude.opam
··· 6 6 maintainer: ["Anil Madhavapeddy <anil@recoil.org>"] 7 7 authors: ["Anil Madhavapeddy"] 8 8 license: "ISC" 9 - homepage: "https://tangled.org/anil.recoil.org/claudeio" 10 - bug-reports: "https://tangled.org/anil.recoil.org/claudeio/issues" 9 + homepage: "https://tangled.org/anil.recoil.org/ocaml-claudeio" 10 + bug-reports: "https://tangled.org/anil.recoil.org/ocaml-claudeio/issues" 11 11 depends: [ 12 12 "dune" {>= "3.18"} 13 13 "ocaml" {>= "5.1.0"}
+2 -2
dune-project
··· 6 6 7 7 (license ISC) 8 8 (authors "Anil Madhavapeddy") 9 - (homepage "https://tangled.org/anil.recoil.org/claudeio") 9 + (homepage "https://tangled.org/anil.recoil.org/ocaml-claudeio") 10 10 (maintainers "Anil Madhavapeddy <anil@recoil.org>") 11 - (bug_reports "https://tangled.org/anil.recoil.org/claudeio/issues") 11 + (bug_reports "https://tangled.org/anil.recoil.org/ocaml-claudeio/issues") 12 12 (maintenance_intent "(latest)") 13 13 14 14 (package