Couldn't you template out a list of component IDs being used on the Page. Then you can insert your extension logic to retrieve this value and build the dialog as required?
using System;
using System.Collections.Generic;
using System.Text;
using Tridion.Web.UI;
using Tridion.Web.UI.SiteEdit.Extensions;
using System.Web.UI;
namespace SEExtension
{ public void OnPageLoaded(TridionWebPage page)
{
//You use the ExtensionHelper class in the UI Extensions framework to interact with the GUI control framework
ExtensionHelper.CurrentPage = page;
// Access to the 'page' object is possible here
// Get array/collection of Components from Page (output by the template for example)
// Consider that you may have retrieved Dynamic Component Presentations on this page too - do you want these to be injected into this list of Components? etc.
/*
{ seExtensionInfo: {
pub: 22,
components {
component: {
id: 123,
title: 'comp a'
},
component: {
id: 456,
title: 'comp b'
}
}
}
*/
}
}