fix: Force re-register tools with handlers after torch connection
- Clear WebMCP storage before registering tools - Force re-register all tools to ensure handlers are attached - Add activatePageToolsForced for clean tool registration after reconnect
This commit is contained in:
@@ -36,15 +36,21 @@ export type PageName = 'home' | 'canvas' | 'components' | 'themes' | 'projects'
|
|||||||
let webmcpInstance: any = null
|
let webmcpInstance: any = null
|
||||||
const registeredToolsSet = new Set<string>()
|
const registeredToolsSet = new Set<string>()
|
||||||
|
|
||||||
async function internalRegisterTool(config: ToolConfig): Promise<boolean> {
|
async function internalRegisterTool(config: ToolConfig, force: boolean = false): Promise<boolean> {
|
||||||
if (!webmcpInstance) {
|
if (!webmcpInstance) {
|
||||||
webmcpInstance = await initWebMCP()
|
webmcpInstance = await initWebMCP()
|
||||||
}
|
}
|
||||||
|
|
||||||
if (registeredToolsSet.has(config.name)) {
|
// Always re-register if force is true (needed after reconnection)
|
||||||
|
if (!force && registeredToolsSet.has(config.name)) {
|
||||||
return false // Already registered
|
return false // Already registered
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Unregister first if exists (to clear any stale handlers from storage)
|
||||||
|
if (registeredToolsSet.has(config.name)) {
|
||||||
|
webmcpInstance.unregisterTool(config.name)
|
||||||
|
}
|
||||||
|
|
||||||
webmcpInstance.registerTool(config.name, config.description, config.schema, config.handler)
|
webmcpInstance.registerTool(config.name, config.description, config.schema, config.handler)
|
||||||
registeredToolsSet.add(config.name)
|
registeredToolsSet.add(config.name)
|
||||||
console.log(`[ToolRegistry] Registered: ${config.name}`)
|
console.log(`[ToolRegistry] Registered: ${config.name}`)
|
||||||
@@ -290,8 +296,46 @@ export async function onTorchConnected() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
console.log(`[ToolRegistry] Torch connected, activating tools for "${currentPage}"`)
|
console.log(`[ToolRegistry] Torch connected, activating tools for "${currentPage}"`)
|
||||||
internalClearAllTools()
|
|
||||||
await activatePageTools(currentPage, true)
|
// Clear any stale tools from WebMCP storage first
|
||||||
|
clearWebMCPTools()
|
||||||
|
registeredToolsSet.clear()
|
||||||
|
|
||||||
|
// Force re-register all tools for current page
|
||||||
|
await activatePageToolsForced(currentPage)
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Force activate tools for a page (used after torch connection)
|
||||||
|
*/
|
||||||
|
async function activatePageToolsForced(pageName: PageName) {
|
||||||
|
const toolsStore = useToolsStore()
|
||||||
|
const pinnedTools = toolsStore.getPinnedToolNames()
|
||||||
|
const configs = getToolConfigs()
|
||||||
|
const categories = pageCategories[pageName]
|
||||||
|
const tools = new Set(categories.flatMap(cat => categoryTools[cat]))
|
||||||
|
|
||||||
|
// Register all tools with force flag
|
||||||
|
for (const toolName of tools) {
|
||||||
|
const config = configs.get(toolName)
|
||||||
|
if (config) {
|
||||||
|
await internalRegisterTool(config, true)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Also register pinned tools
|
||||||
|
for (const toolName of pinnedTools) {
|
||||||
|
if (!tools.has(toolName)) {
|
||||||
|
const config = configs.get(toolName)
|
||||||
|
if (config) {
|
||||||
|
await internalRegisterTool(config, true)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
currentPage = pageName
|
||||||
|
syncStoreWithActiveTools()
|
||||||
|
console.log(`[ToolRegistry] Force activated ${registeredToolsSet.size} tools for "${pageName}"`)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
Reference in New Issue
Block a user