删除不再使用的bootstrap.md文件,更新promptx.js、MCPStreamableHttpCommand.js等文件以使用logger进行日志记录,重构资源管理和发现逻辑,确保代码一致性和可维护性。
This commit is contained in:
@ -1,7 +1,9 @@
|
||||
const fs = require('fs')
|
||||
const ResourceRegistry = require('./resourceRegistry')
|
||||
const RegistryData = require('./RegistryData')
|
||||
const ResourceProtocolParser = require('./resourceProtocolParser')
|
||||
const DiscoveryManager = require('./discovery/DiscoveryManager')
|
||||
const logger = require('../../utils/logger')
|
||||
|
||||
// 导入协议处理器
|
||||
const PackageProtocol = require('./protocols/PackageProtocol')
|
||||
@ -13,7 +15,9 @@ const KnowledgeProtocol = require('./protocols/KnowledgeProtocol')
|
||||
|
||||
class ResourceManager {
|
||||
constructor() {
|
||||
this.registry = new ResourceRegistry()
|
||||
// 使用新的RegistryData替代旧的ResourceRegistry
|
||||
this.registry = new ResourceRegistry() // 保持向后兼容
|
||||
this.registryData = RegistryData.createEmpty('merged', null) // 新的v2.0注册表
|
||||
this.protocolParser = new ResourceProtocolParser()
|
||||
this.parser = new ResourceProtocolParser() // 向后兼容别名
|
||||
this.discoveryManager = new DiscoveryManager() // 新发现管理器
|
||||
@ -43,23 +47,58 @@ class ResourceManager {
|
||||
*/
|
||||
async initializeWithNewArchitecture() {
|
||||
try {
|
||||
// 1. 直接发现并注册资源(无需中间合并步骤)
|
||||
// 1. 清空现有注册表(支持重新初始化)
|
||||
this.registry.clear()
|
||||
this.registryData.clear()
|
||||
|
||||
// 2. 清除发现器缓存
|
||||
if (this.discoveryManager && typeof this.discoveryManager.clearCache === 'function') {
|
||||
this.discoveryManager.clearCache()
|
||||
}
|
||||
|
||||
// 3. 直接发现并注册资源到旧的ResourceRegistry(保持向后兼容)
|
||||
await this.discoveryManager.discoverAndDirectRegister(this.registry)
|
||||
|
||||
// 2. 为逻辑协议设置注册表引用
|
||||
// 4. 同时填充新的RegistryData
|
||||
await this.populateRegistryData()
|
||||
|
||||
// 5. 为逻辑协议设置注册表引用
|
||||
this.setupLogicalProtocols()
|
||||
|
||||
// 3. 设置初始化状态
|
||||
// 6. 设置初始化状态
|
||||
this.initialized = true
|
||||
|
||||
// 初始化完成,不输出日志避免干扰用户界面
|
||||
} catch (error) {
|
||||
console.warn(`[ResourceManager] New architecture initialization failed: ${error.message}`)
|
||||
console.warn('[ResourceManager] Continuing with empty registry')
|
||||
logger.warn(`ResourceManager new architecture initialization failed: ${error.message}`)
|
||||
logger.warn('ResourceManager continuing with empty registry')
|
||||
this.initialized = true // 即使失败也标记为已初始化,避免重复尝试
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 填充新的RegistryData
|
||||
*/
|
||||
async populateRegistryData() {
|
||||
// 清空现有数据
|
||||
this.registryData.clear()
|
||||
|
||||
// 从各个发现器获取RegistryData并合并
|
||||
for (const discovery of this.discoveryManager.discoveries) {
|
||||
try {
|
||||
if (typeof discovery.getRegistryData === 'function') {
|
||||
const registryData = await discovery.getRegistryData()
|
||||
if (registryData && registryData.resources) {
|
||||
// 合并资源到主注册表
|
||||
this.registryData.merge(registryData, true) // 允许覆盖
|
||||
}
|
||||
}
|
||||
} catch (error) {
|
||||
logger.warn(`Failed to get RegistryData from ${discovery.source}: ${error.message}`)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 为逻辑协议设置注册表引用
|
||||
*/
|
||||
@ -116,33 +155,53 @@ class ResourceManager {
|
||||
|
||||
async loadResource(resourceId) {
|
||||
try {
|
||||
// 每次都刷新资源(无状态设计)
|
||||
await this.refreshResources()
|
||||
// 不再每次刷新资源,依赖初始化时的资源发现
|
||||
|
||||
// 处理@!开头的DPML格式(如 @!role://java-developer)
|
||||
if (resourceId.startsWith('@!')) {
|
||||
const parsed = this.protocolParser.parse(resourceId)
|
||||
const logicalResourceId = `${parsed.protocol}:${parsed.path}`
|
||||
|
||||
// 从注册表查找对应的@package://引用
|
||||
const reference = this.registry.get(logicalResourceId)
|
||||
if (!reference) {
|
||||
throw new Error(`Resource not found: ${logicalResourceId}`)
|
||||
// 从新的RegistryData查找资源
|
||||
const resourceData = this.registryData.findResourceById(parsed.path, parsed.protocol)
|
||||
if (!resourceData) {
|
||||
throw new Error(`Resource not found: ${parsed.protocol}:${parsed.path}`)
|
||||
}
|
||||
|
||||
// 通过协议解析加载内容
|
||||
const content = await this.loadResourceByProtocol(reference)
|
||||
const content = await this.loadResourceByProtocol(resourceData.reference)
|
||||
|
||||
return {
|
||||
success: true,
|
||||
content,
|
||||
resourceId,
|
||||
reference
|
||||
reference: resourceData.reference
|
||||
}
|
||||
}
|
||||
|
||||
// 处理传统格式(如 role:java-developer)
|
||||
const reference = this.registry.get(resourceId)
|
||||
// 先尝试从新的RegistryData查找
|
||||
let reference = null
|
||||
|
||||
// 如果包含协议前缀(如 thought:remember)
|
||||
if (resourceId.includes(':')) {
|
||||
const [protocol, id] = resourceId.split(':', 2)
|
||||
const resourceData = this.registryData.findResourceById(id, protocol)
|
||||
if (resourceData) {
|
||||
reference = resourceData.reference
|
||||
}
|
||||
} else {
|
||||
// 如果没有协议前缀,尝试查找任意协议的资源
|
||||
const resourceData = this.registryData.findResourceById(resourceId)
|
||||
if (resourceData) {
|
||||
reference = resourceData.reference
|
||||
}
|
||||
}
|
||||
|
||||
// 如果新的RegistryData中没找到,回退到旧的registry
|
||||
if (!reference) {
|
||||
reference = this.registry.get(resourceId)
|
||||
}
|
||||
|
||||
if (!reference) {
|
||||
throw new Error(`Resource not found: ${resourceId}`)
|
||||
}
|
||||
@ -216,8 +275,7 @@ class ResourceManager {
|
||||
// 向后兼容方法
|
||||
async resolve(resourceUrl) {
|
||||
try {
|
||||
// 每次都刷新资源(无状态设计)
|
||||
await this.refreshResources()
|
||||
// 不再每次刷新资源,依赖初始化时的资源发现
|
||||
|
||||
// Handle old format: role:java-backend-developer or @package://...
|
||||
if (resourceUrl.startsWith('@')) {
|
||||
@ -275,7 +333,7 @@ class ResourceManager {
|
||||
|
||||
// 无状态设计:不设置initialized标志
|
||||
} catch (error) {
|
||||
console.warn(`[ResourceManager] Resource refresh failed: ${error.message}`)
|
||||
logger.warn(`ResourceManager resource refresh failed: ${error.message}`)
|
||||
// 失败时保持注册表为空状态,下次调用时重试
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user