|
|
|
@ -5,6 +5,24 @@
|
|
|
|
|
// Global variables for AI functionality
|
|
|
|
|
let aiProfileData = null;
|
|
|
|
|
|
|
|
|
|
// Get config from window or use defaults
|
|
|
|
|
const OAUTH_PDS = window.OAUTH_CONFIG?.pds || 'syu.is';
|
|
|
|
|
const ADMIN_HANDLE = window.OAUTH_CONFIG?.admin || 'ai.syui.ai';
|
|
|
|
|
const OAUTH_COLLECTION = window.OAUTH_CONFIG?.collection || 'ai.syui.log';
|
|
|
|
|
|
|
|
|
|
// Listen for AI profile data from OAuth app
|
|
|
|
|
window.addEventListener('aiProfileLoaded', function(event) {
|
|
|
|
|
console.log('AI profile received from OAuth app:', event.detail);
|
|
|
|
|
aiProfileData = event.detail;
|
|
|
|
|
updateAskAIButton();
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
// Check if AI profile data is already available
|
|
|
|
|
if (window.aiProfileData) {
|
|
|
|
|
console.log('AI profile already available:', window.aiProfileData);
|
|
|
|
|
aiProfileData = window.aiProfileData;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Original functions from working implementation
|
|
|
|
|
function toggleAskAI() {
|
|
|
|
|
const panel = document.getElementById('askAiPanel');
|
|
|
|
@ -129,11 +147,7 @@ async function loadAndShowProfiles() {
|
|
|
|
|
chatHistory.innerHTML = '<div class="loading-message">Loading profiles...</div>';
|
|
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
const ADMIN_HANDLE = 'ai.syui.ai';
|
|
|
|
|
const OAUTH_COLLECTION = 'ai.syui.log';
|
|
|
|
|
const ATPROTO_PDS = 'syu.is';
|
|
|
|
|
|
|
|
|
|
const response = await fetch(`https://${ATPROTO_PDS}/xrpc/com.atproto.repo.listRecords?repo=${ADMIN_HANDLE}&collection=${OAUTH_COLLECTION}&limit=100`);
|
|
|
|
|
const response = await fetch(`https://${OAUTH_PDS}/xrpc/com.atproto.repo.listRecords?repo=${ADMIN_HANDLE}&collection=${OAUTH_COLLECTION}&limit=100`);
|
|
|
|
|
|
|
|
|
|
if (!response.ok) {
|
|
|
|
|
throw new Error('Failed to fetch profiles');
|
|
|
|
@ -174,7 +188,7 @@ async function loadAndShowProfiles() {
|
|
|
|
|
<div class="avatar">${avatarElement}</div>
|
|
|
|
|
<div class="user-info">
|
|
|
|
|
<div class="display-name">${profile.value.author.displayName || profile.value.author.handle} ${adminBadge}</div>
|
|
|
|
|
<div class="handle"><a href="https://web.syu.is/profile/${profile.value.author.handle}" target="_blank" rel="noopener noreferrer">@${profile.value.author.handle}</a></div>
|
|
|
|
|
<div class="handle"><a href="https://${OAUTH_PDS}/profile/${profile.value.author.handle}" target="_blank" rel="noopener noreferrer">@${profile.value.author.handle}</a></div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="message-content">${profile.value.text}</div>
|
|
|
|
@ -255,7 +269,7 @@ function addUserMessage(question) {
|
|
|
|
|
<div class="avatar">${userAvatar}</div>
|
|
|
|
|
<div class="user-info">
|
|
|
|
|
<div class="display-name">${userDisplay}</div>
|
|
|
|
|
<div class="handle"><a href="https://web.syu.is/profile/${userHandle}" target="_blank" rel="noopener noreferrer">@${userHandle}</a></div>
|
|
|
|
|
<div class="handle"><a href="https://${OAUTH_PDS}/profile/${userHandle}" target="_blank" rel="noopener noreferrer">@${userHandle}</a></div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="message-content">${question}</div>
|
|
|
|
@ -318,7 +332,7 @@ function showInitialGreeting() {
|
|
|
|
|
<div class="avatar">${avatarElement}</div>
|
|
|
|
|
<div class="user-info">
|
|
|
|
|
<div class="display-name">${aiProfileData.displayName}</div>
|
|
|
|
|
<div class="handle"><a href="https://web.syu.is/profile/${aiProfileData.handle}" target="_blank" rel="noopener noreferrer">@${aiProfileData.handle}</a></div>
|
|
|
|
|
<div class="handle"><a href="https://${OAUTH_PDS}/profile/${aiProfileData.handle}" target="_blank" rel="noopener noreferrer">@${aiProfileData.handle}</a></div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="message-content">Hello! I'm an AI assistant trained on this blog's content. I can answer questions about the articles, provide insights, and help you understand the topics discussed here. What would you like to know?</div>
|
|
|
|
@ -345,7 +359,7 @@ function showAIIntroduction() {
|
|
|
|
|
<div class="avatar">${avatarElement}</div>
|
|
|
|
|
<div class="user-info">
|
|
|
|
|
<div class="display-name">${aiProfileData.displayName}</div>
|
|
|
|
|
<div class="handle"><a href="https://web.syu.is/profile/${aiProfileData.handle}" target="_blank" rel="noopener noreferrer">@${aiProfileData.handle}</a></div>
|
|
|
|
|
<div class="handle"><a href="https://${OAUTH_PDS}/profile/${aiProfileData.handle}" target="_blank" rel="noopener noreferrer">@${aiProfileData.handle}</a></div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="message-content">Hello! I'm an AI assistant trained on this blog's content. I can answer questions about the articles, provide insights, and help you understand the topics discussed here. What would you like to know?</div>
|
|
|
|
@ -361,7 +375,7 @@ function showAIIntroduction() {
|
|
|
|
|
<div class="avatar">${avatarElement}</div>
|
|
|
|
|
<div class="user-info">
|
|
|
|
|
<div class="display-name">${aiProfileData.displayName}</div>
|
|
|
|
|
<div class="handle"><a href="https://web.syu.is/profile/${aiProfileData.handle}" target="_blank" rel="noopener noreferrer">@${aiProfileData.handle}</a></div>
|
|
|
|
|
<div class="handle"><a href="https://${OAUTH_PDS}/profile/${aiProfileData.handle}" target="_blank" rel="noopener noreferrer">@${aiProfileData.handle}</a></div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="message-content">Please atproto oauth login</div>
|
|
|
|
@ -404,7 +418,7 @@ function handleAIResponse(responseData) {
|
|
|
|
|
<div class="avatar">${avatarElement}</div>
|
|
|
|
|
<div class="user-info">
|
|
|
|
|
<div class="display-name">${aiProfile.displayName}</div>
|
|
|
|
|
<div class="handle"><a href="https://web.syu.is/profile/${aiProfile.handle}" target="_blank" rel="noopener noreferrer">@${aiProfile.handle}</a></div>
|
|
|
|
|
<div class="handle"><a href="https://${OAUTH_PDS}/profile/${aiProfile.handle}" target="_blank" rel="noopener noreferrer">@${aiProfile.handle}</a></div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="message-content">${responseData.answer}</div>
|
|
|
|
|