- Promote _request() to public method request() in ServerHttpClient
to fix encapsulation violation across sync_client and remote_project
- Fix WebSocket connect() to raise NotImplementedError with clear TODO
documenting that real websockets transport is not yet implemented
- Fix thread safety: protect last_event_id write under self._lock
in ws_client.process_event()
- Broaden exception handling in sync() to catch ServerTimeoutError
and A2aNotAvailableError in addition to ServerConnectionError
- Add has_next to PageResult in benchmark and test helpers
- Add comments explaining Retry-After header logging-only behavior
and why blocking time.sleep is acceptable in sync client
- Update all test steps, robot helpers, and benchmarks to use the
renamed public request() method and updated connect() behavior
Refs: #335, #336, #337, #338
Implement PlanSyncClient for synchronizing local resources with a remote
CleverAgents server and submitting plans for remote execution:
- Sync actions, skills, tools, projects with configurable scope flags
- Conflict resolution policies (local_wins / server_wins)
- Remote plan execution, apply, and status query endpoints
- Server-side ID persistence in local item metadata
- Sync summary output (created/updated/skipped/errors)
- Dry-run mode that skips server mutations
- SyncScope, SyncSummary, ExecutionResult data models
- Behave scenarios (18 scenarios, 62 steps)
- Robot Framework smoke tests
- ASV benchmark for sync throughput baseline
- Reference documentation at docs/reference/server_sync.md
ISSUES CLOSED: #336