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:
2026-02-14 17:36:09 -06:00
parent 3817645919
commit c280e974c0

View File

@@ -36,15 +36,21 @@ export type PageName = 'home' | 'canvas' | 'components' | 'themes' | 'projects'
let webmcpInstance: any = null
const registeredToolsSet = new Set<string>()
async function internalRegisterTool(config: ToolConfig): Promise<boolean> {
async function internalRegisterTool(config: ToolConfig, force: boolean = false): Promise<boolean> {
if (!webmcpInstance) {
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
}
// 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)
registeredToolsSet.add(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}"`)
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}"`)
}
/**