diff --git a/oauth/src/App.jsx b/oauth/src/App.jsx index 7c87e75..e597cbf 100644 --- a/oauth/src/App.jsx +++ b/oauth/src/App.jsx @@ -85,6 +85,37 @@ Answer:` console.log('AI response received:', answer) + // Save conversation to ATProto + try { + const timestamp = new Date().toISOString() + const conversationRecord = { + repo: adminData.did, + collection: 'ai.syui.log.chat', + record: { + type: 'ai.syui.log.chat', + question: question, + answer: answer, + user: user ? { + did: user.did, + handle: user.handle, + displayName: user.displayName || user.handle + } : null, + ai: { + did: adminData.did, + handle: adminData.profile?.handle, + displayName: adminData.profile?.displayName + }, + timestamp: timestamp, + createdAt: timestamp + } + } + + await agent.com.atproto.repo.putRecord(conversationRecord) + console.log('Conversation saved to ATProto') + } catch (saveError) { + console.error('Failed to save conversation:', saveError) + } + // Send response to blog window.dispatchEvent(new CustomEvent('aiResponseReceived', { detail: { diff --git a/oauth/src/hooks/useUserData.js b/oauth/src/hooks/useUserData.js index ea0bc37..ef915d9 100644 --- a/oauth/src/hooks/useUserData.js +++ b/oauth/src/hooks/useUserData.js @@ -1,6 +1,6 @@ import { useState, useEffect } from 'react' import { atproto, collections } from '../api/atproto.js' -import { getApiConfig, isSyuIsHandle } from '../utils/pds.js' +import { getApiConfig, isSyuIsHandle, getPdsFromHandle } from '../utils/pds.js' import { env } from '../config/env.js' export function useUserData(adminData) { @@ -88,16 +88,11 @@ export function useUserData(adminData) { userPds = user.pds.replace('https://', '') userApiConfig = getApiConfig(userPds) } else { - // Auto-detect PDS based on handle and get real DID - if (isSyuIsHandle(userHandle)) { - userPds = env.pds - userApiConfig = getApiConfig(userPds) - userDid = await atproto.getDid(userPds, userHandle) - } else { - userPds = 'bsky.social' - userApiConfig = getApiConfig(userPds) - userDid = await atproto.getDid(userPds, userHandle) - } + // Get actual PDS from handle first + const realPds = await getPdsFromHandle(userHandle) + userPds = realPds.replace('https://', '') + userApiConfig = getApiConfig(realPds) + userDid = await atproto.getDid(userPds, userHandle) } // Get user's own ai.syui.log records diff --git a/oauth/src/utils/pds.js b/oauth/src/utils/pds.js index da23aa4..88f0122 100644 --- a/oauth/src/utils/pds.js +++ b/oauth/src/utils/pds.js @@ -1,8 +1,11 @@ import { env } from '../config/env.js' -// PDS判定からAPI設定を取得 +// PDS判定からAPI設定を取得 - 実際のPDSエンドポイントに基づいて設定 export function getApiConfig(pds) { - if (pds.includes(env.pds)) { + // pdsからhttps://を除去してドメインのみ取得 + const cleanPds = pds.replace(/^https?:\/\//, '') + + if (cleanPds.includes(env.pds)) { return { pds: `https://${env.pds}`, bsky: `https://bsky.${env.pds}`, diff --git a/scpt/delete-chat-records.zsh b/scpt/delete-chat-records.zsh index ae8d297..572eee8 100755 --- a/scpt/delete-chat-records.zsh +++ b/scpt/delete-chat-records.zsh @@ -3,11 +3,11 @@ set -e cb=ai.syui.log -cl=( $cb.chat.lang $cb.chat.comment) +cl=($cb.chat $cb.user $cb ) f=~/.config/syui/ai/log/config.json default_collection="ai.syui.log.chat" -default_pds="syu.is" +default_pds=bsky.social default_did=`cat $f|jq -r .admin.did` default_token=`cat $f|jq -r .admin.access_jwt` default_refresh=`cat $f|jq -r .admin.refresh_jwt`