mioku 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/chunk-CUT6urMc.cjs +30 -0
- package/dist/cli.cjs +426 -0
- package/dist/cli.cjs.map +1 -0
- package/dist/cli.d.cts +1 -0
- package/dist/cli.d.ts +1 -0
- package/dist/cli.js +425 -0
- package/dist/cli.js.map +1 -0
- package/dist/index.cjs +616 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +529 -0
- package/dist/index.d.cts.map +1 -0
- package/dist/index.d.ts +529 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +613 -0
- package/dist/index.js.map +1 -0
- package/package.json +71 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs","names":["fallbackLogger: MiokuLogger","activeLogger: MiokuLogger","logger: MiokuLogger | undefined","logger","logger: MiokuLogger","pathExists","filePath: string","entryPath: string","linkPath: string","targetPath: string","runtimePluginsDir: string","metadata: PluginMetadata","plugins: PluginMetadata[]","linkedNames: string[]","pathExists","filePath: string","miokuConfig: any","discovered: PluginMetadata[]","pluginsDir: string","entryPath: string","name: string","pluginPath: string","packageJson: any","metadata: PluginMetadata","pathExists","filePath: string","miokuConfig: any","discovered: ServiceMetadata[]","servicesDir: string","name: string","servicePath: string","metadata: ServiceMetadata","error: any","requiredServices: Set<string>","missing: string[]","ctx: MiokiContext","service: MiokuService","filePath: string","value: any","moduleExports: any","pluginPath: string","ctx: MiokiContext","error: any","pluginName: string","serviceName: string","runtimeState: PluginRuntimeState","pluginName: string","state: Record<string, any>","plugin: T","options: MiokuStartOptions","logger","miokuConfig: any"],"sources":["../src/core/logger.ts","../src/core/plugin-linker.ts","../src/core/plugin-manager.ts","../src/core/service-manager.ts","../src/core/plugin-artifact-registry.ts","../src/service-types.ts","../src/core/data-paths.ts","../src/core/plugin-runtime-state.ts","../src/index.ts"],"sourcesContent":["type LogMethod = (...args: unknown[]) => void;\n\nexport interface MiokuLogger {\n error: LogMethod;\n warn: LogMethod;\n info: LogMethod;\n debug: LogMethod;\n trace?: LogMethod;\n}\n\nconst fallbackLogger: MiokuLogger = {\n error: (...args) => console.error(...args),\n warn: (...args) => console.warn(...args),\n info: (...args) => console.info(...args),\n debug: (...args) => console.debug(...args),\n trace: (...args) => console.debug(...args),\n};\n\nlet activeLogger: MiokuLogger = fallbackLogger;\n\nexport function setMiokuLogger(logger: MiokuLogger | undefined): void {\n activeLogger = logger || fallbackLogger;\n}\n\nexport function getMiokuLogger(): MiokuLogger {\n return activeLogger;\n}\n\nexport const logger: MiokuLogger = {\n error: (...args) => activeLogger.error(...args),\n warn: (...args) => activeLogger.warn(...args),\n info: (...args) => activeLogger.info(...args),\n debug: (...args) => activeLogger.debug(...args),\n trace: (...args) => activeLogger.trace?.(...args),\n};\n","import * as fs from \"fs/promises\";\nimport * as path from \"path\";\nimport type { PluginMetadata } from \"./types\";\nimport { logger } from \"./logger\";\n\nexport const DEFAULT_RUNTIME_PLUGINS_DIR = \".mioku/plugins\";\n\nasync function pathExists(filePath: string): Promise<boolean> {\n try {\n await fs.access(filePath);\n return true;\n } catch {\n return false;\n }\n}\n\nasync function removeIfBrokenSymlink(entryPath: string): Promise<\"ok\" | \"blocked\" | \"removed\"> {\n let stat;\n try {\n stat = await fs.lstat(entryPath);\n } catch {\n return \"removed\";\n }\n\n if (!stat.isSymbolicLink()) {\n return \"blocked\";\n }\n\n try {\n await fs.realpath(entryPath);\n return \"ok\";\n } catch {\n await fs.rm(entryPath, { force: true });\n logger.warn(`[plugin-linker] Removed broken plugin link: ${entryPath}`);\n return \"removed\";\n }\n}\n\nfunction relativeSymlinkTarget(linkPath: string, targetPath: string): string {\n const relativePath = path.relative(path.dirname(linkPath), targetPath);\n return relativePath || \".\";\n}\n\nasync function ensurePluginLink(\n runtimePluginsDir: string,\n metadata: PluginMetadata,\n): Promise<boolean> {\n const linkPath = path.join(runtimePluginsDir, metadata.name);\n const targetPath = metadata.path;\n\n let stat;\n try {\n stat = await fs.lstat(linkPath);\n } catch {\n stat = null;\n }\n\n if (stat?.isSymbolicLink()) {\n try {\n const currentTarget = await fs.realpath(linkPath);\n const expectedTarget = await fs.realpath(targetPath);\n if (currentTarget === expectedTarget) {\n return true;\n }\n await fs.rm(linkPath, { force: true });\n logger.info(`[plugin-linker] Rebuilding plugin link: ${metadata.name}`);\n } catch {\n await fs.rm(linkPath, { force: true });\n logger.warn(`[plugin-linker] Removed broken plugin link: ${linkPath}`);\n }\n } else if (stat) {\n logger.warn(\n `[plugin-linker] ${linkPath} exists and is not a symlink, skip linking ${metadata.name}`,\n );\n return false;\n }\n\n if (!(await pathExists(targetPath))) {\n logger.warn(\n `[plugin-linker] Plugin target missing, skip linking ${metadata.name}: ${targetPath}`,\n );\n return false;\n }\n\n await fs.symlink(relativeSymlinkTarget(linkPath, targetPath), linkPath, \"dir\");\n return true;\n}\n\nexport async function prepareRuntimePluginLinks(\n plugins: PluginMetadata[],\n runtimePluginsDir = path.resolve(process.cwd(), DEFAULT_RUNTIME_PLUGINS_DIR),\n): Promise<string[]> {\n await fs.mkdir(runtimePluginsDir, { recursive: true });\n\n const discoveredNames = new Set(plugins.map((plugin) => plugin.name));\n const entries = await fs.readdir(runtimePluginsDir, { withFileTypes: true });\n\n for (const entry of entries) {\n const entryPath = path.join(runtimePluginsDir, entry.name);\n const symlinkState = await removeIfBrokenSymlink(entryPath);\n if (symlinkState !== \"ok\") {\n continue;\n }\n\n if (entry.isSymbolicLink() && !discoveredNames.has(entry.name)) {\n await fs.rm(entryPath, { force: true });\n logger.info(`[plugin-linker] Removed stale plugin link: ${entry.name}`);\n }\n }\n\n const linkedNames: string[] = [];\n for (const metadata of plugins) {\n if (await ensurePluginLink(runtimePluginsDir, metadata)) {\n linkedNames.push(metadata.name);\n }\n }\n\n return linkedNames;\n}\n","import * as fs from \"fs/promises\";\nimport * as path from \"path\";\nimport { mkdirSync } from \"fs\";\nimport type { PluginMetadata } from \"./types\";\nimport { DEFAULT_RUNTIME_PLUGINS_DIR } from \"./plugin-linker\";\nimport { logger } from \"./logger\";\n\nconst PLUGIN_MANAGER_SYMBOL = Symbol.for(\"mioku.plugin-manager\");\n\nasync function pathExists(filePath: string): Promise<boolean> {\n try {\n await fs.access(filePath);\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * 插件管理器\n *\n * Discover and manage plugins from both local directories and node_modules.\n */\nexport class PluginManager {\n private pluginMetadata: Map<string, PluginMetadata> = new Map();\n\n public static getInstance(): PluginManager {\n const g = global as any;\n if (!g[PLUGIN_MANAGER_SYMBOL]) {\n g[PLUGIN_MANAGER_SYMBOL] = new PluginManager();\n }\n return g[PLUGIN_MANAGER_SYMBOL];\n }\n\n async discoverPlugins(miokuConfig: any = {}): Promise<PluginMetadata[]> {\n // Resolve pluginsDir dynamically so it uses the current cwd\n const configuredPluginsDir = miokuConfig.plugins_dir;\n const pluginsDir =\n configuredPluginsDir && configuredPluginsDir !== DEFAULT_RUNTIME_PLUGINS_DIR\n ? path.resolve(process.cwd(), configuredPluginsDir)\n : path.resolve(process.cwd(), \"plugins\");\n\n this.pluginMetadata.clear();\n\n // Ensure plugins directory exists\n if (!(await pathExists(pluginsDir))) {\n mkdirSync(pluginsDir, { recursive: true });\n }\n\n const discovered: PluginMetadata[] = [];\n\n // Discover from local plugins/ directory\n if (await pathExists(pluginsDir)) {\n const localPlugins = await this.discoverFromDir(pluginsDir);\n discovered.push(...localPlugins);\n }\n\n // Discover from node_modules (mioku-plugin-* prefix)\n const nodeModulesPlugins = await this.discoverFromNodeModules();\n discovered.push(...nodeModulesPlugins);\n\n logger.info(`O.o 发现了 ${this.pluginMetadata.size} 个插件`);\n return Array.from(this.pluginMetadata.values());\n }\n\n private async discoverFromDir(pluginsDir: string): Promise<PluginMetadata[]> {\n const discovered: PluginMetadata[] = [];\n\n try {\n const entries = await fs.readdir(pluginsDir, { withFileTypes: true });\n for (const entry of entries) {\n const pluginPath = path.join(pluginsDir, entry.name);\n const metadataPath = await this.resolveDirectoryPath(pluginPath);\n if (!metadataPath) continue;\n\n const metadata = await this.loadPluginMetadata(entry.name, pluginPath);\n if (metadata) {\n discovered.push(metadata);\n this.pluginMetadata.set(metadata.name, metadata);\n }\n }\n } catch (error) {\n logger.error(`扫描插件目录失败: ${error}`);\n }\n\n return discovered;\n }\n\n private async discoverFromNodeModules(): Promise<PluginMetadata[]> {\n const discovered: PluginMetadata[] = [];\n const nodeModulesPath = path.resolve(process.cwd(), \"node_modules\");\n\n if (!(await pathExists(nodeModulesPath))) {\n return discovered;\n }\n\n try {\n const entries = await fs.readdir(nodeModulesPath, { withFileTypes: true });\n for (const entry of entries) {\n // Check for mioku-plugin-* prefix (don't check isDirectory - symlinks return false)\n if (!entry.name.startsWith(\"mioku-plugin-\")) {\n continue;\n }\n\n const pluginName = entry.name.replace(/^mioku-plugin-/, \"\");\n const pluginPath = path.join(nodeModulesPath, entry.name);\n const metadata = await this.loadPluginMetadata(pluginName, pluginPath);\n if (metadata) {\n discovered.push(metadata);\n this.pluginMetadata.set(metadata.name, metadata);\n }\n }\n } catch (error) {\n logger.debug(`扫描 node_modules 插件失败: ${error}`);\n }\n\n return discovered;\n }\n\n private async resolveDirectoryPath(entryPath: string): Promise<string | null> {\n try {\n const stat = await fs.stat(entryPath);\n return stat.isDirectory() ? entryPath : null;\n } catch {\n return null;\n }\n }\n\n private async loadPluginMetadata(\n name: string,\n pluginPath: string,\n ): Promise<PluginMetadata | null> {\n // Resolve symlinks to get actual path\n let resolvedPath = pluginPath;\n try {\n resolvedPath = await fs.realpath(pluginPath);\n } catch {\n // Not a symlink or doesn't exist, use original path\n }\n\n const packageJsonPath = path.join(resolvedPath, \"package.json\");\n\n let packageJson: any = null;\n try {\n const content = await fs.readFile(packageJsonPath, \"utf-8\");\n packageJson = JSON.parse(content);\n } catch {\n // File doesn't exist or can't be read - plugin uses defaults\n }\n\n const metadata: PluginMetadata = {\n name,\n version: packageJson?.version || \"0.0.0\",\n description: packageJson?.description,\n path: resolvedPath,\n packageJson,\n config: packageJson?.mioku || {},\n };\n return metadata;\n }\n\n collectRequiredServices(): Set<string> {\n const services = new Set<string>();\n for (const metadata of this.pluginMetadata.values()) {\n if (metadata.config.services) {\n metadata.config.services.forEach((s) => services.add(s));\n }\n }\n return services;\n }\n\n getPluginMetadata(name: string): PluginMetadata | undefined {\n return this.pluginMetadata.get(name);\n }\n\n getAllMetadata(): PluginMetadata[] {\n return Array.from(this.pluginMetadata.values());\n }\n\n reset(): void {\n this.pluginMetadata.clear();\n }\n}\n\nexport default PluginManager.getInstance();\n","import * as fs from \"fs/promises\";\nimport * as path from \"path\";\nimport { existsSync, mkdirSync } from \"fs\";\nimport type { MiokiContext } from \"mioki\";\nimport type { ServiceMetadata, MiokuService } from \"./types\";\nimport { logger } from \"./logger\";\n\nconst SERVICE_MANAGER_SYMBOL = Symbol.for(\"mioku.service-manager\");\n\nasync function pathExists(filePath: string): Promise<boolean> {\n try {\n await fs.access(filePath);\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * 服务管理器\n */\nexport class ServiceManager {\n private services: Map<string, MiokuService> = new Map();\n private serviceMetadata: Map<string, ServiceMetadata> = new Map();\n private servicesDir: string = \"services\";\n\n public static getInstance(): ServiceManager {\n const g = global as any;\n if (!g[SERVICE_MANAGER_SYMBOL]) {\n g[SERVICE_MANAGER_SYMBOL] = new ServiceManager();\n }\n return g[SERVICE_MANAGER_SYMBOL];\n }\n\n async discoverServices(miokuConfig: any = {}): Promise<ServiceMetadata[]> {\n // Use services_dir from mioku config if provided, otherwise default to \"services\" in project root\n if (miokuConfig.services_dir) {\n this.servicesDir = path.resolve(process.cwd(), miokuConfig.services_dir);\n } else {\n this.servicesDir = path.resolve(process.cwd(), \"services\");\n }\n\n const discovered: ServiceMetadata[] = [];\n this.serviceMetadata.clear();\n\n // Discover from local services/ directory\n if (existsSync(this.servicesDir)) {\n const localServices = await this.discoverFromDir(this.servicesDir);\n discovered.push(...localServices);\n } else {\n // Ensure the directory exists for user services\n mkdirSync(this.servicesDir, { recursive: true });\n }\n\n // Discover builtin services (config, ai, screenshot, webui)\n await this.loadBuiltinServices();\n\n logger.info(`o.O 发现了 ${this.serviceMetadata.size} 个服务`);\n return Array.from(this.serviceMetadata.values());\n }\n\n private async discoverFromDir(servicesDir: string): Promise<ServiceMetadata[]> {\n const discovered: ServiceMetadata[] = [];\n\n try {\n const entries = await fs.readdir(servicesDir, { withFileTypes: true });\n for (const entry of entries) {\n if (!entry.isDirectory()) continue;\n\n const servicePath = path.join(servicesDir, entry.name);\n const metadata = await this.loadServiceMetadata(entry.name, servicePath);\n if (metadata) {\n discovered.push(metadata);\n this.serviceMetadata.set(entry.name, metadata);\n }\n }\n } catch (error) {\n logger.error(`扫描服务目录失败: ${error}`);\n }\n\n return discovered;\n }\n\n private async loadServiceMetadata(\n name: string,\n servicePath: string,\n ): Promise<ServiceMetadata | null> {\n // Resolve symlinks to get actual path\n let resolvedPath = servicePath;\n try {\n resolvedPath = await fs.realpath(servicePath);\n } catch {\n // Not a symlink or doesn't exist, use original path\n }\n\n const packageJsonPath = path.join(resolvedPath, \"package.json\");\n\n if (!(await pathExists(packageJsonPath))) {\n return null;\n }\n\n try {\n const packageJson = JSON.parse(\n await fs.readFile(packageJsonPath, \"utf-8\"),\n );\n const metadata: ServiceMetadata = {\n name,\n version: packageJson.version || \"0.0.0\",\n description: packageJson.description,\n path: resolvedPath,\n packageJson,\n };\n return metadata;\n } catch (error: any) {\n logger.error(`解析服务 ${name} 失败: ${error.message}`);\n return null;\n }\n }\n\n /**\n * Load built-in services from the package\n */\n private async loadBuiltinServices(): Promise<void> {\n // Discover from node_modules (mioku-service-* prefix)\n await this.discoverFromNodeModules();\n }\n\n private async discoverFromNodeModules(): Promise<void> {\n const nodeModulesPath = path.resolve(process.cwd(), \"node_modules\");\n\n if (!(await pathExists(nodeModulesPath))) {\n return;\n }\n\n try {\n const entries = await fs.readdir(nodeModulesPath, { withFileTypes: true });\n for (const entry of entries) {\n // Don't check isDirectory - symlinks return false\n if (!entry.name.startsWith(\"mioku-service-\")) {\n continue;\n }\n\n const serviceName = entry.name.replace(/^mioku-service-/, \"\");\n const servicePath = path.join(nodeModulesPath, entry.name);\n const metadata = await this.loadServiceMetadata(serviceName, servicePath);\n if (metadata) {\n this.serviceMetadata.set(serviceName, metadata);\n }\n }\n } catch (error) {\n logger.debug(`扫描 node_modules 服务失败: ${error}`);\n }\n }\n\n async checkMissingServices(requiredServices: Set<string>): Promise<string[]> {\n const missing: string[] = [];\n for (const serviceName of requiredServices) {\n if (!this.serviceMetadata.has(serviceName)) {\n missing.push(serviceName);\n }\n }\n return missing;\n }\n\n async loadAllServices(ctx: MiokiContext): Promise<void> {\n const allMetadata = Array.from(this.serviceMetadata.values());\n logger.info(`O.o 准备加载 ${allMetadata.length} 个服务...`);\n\n for (const metadata of allMetadata) {\n await this.loadService(metadata, ctx);\n }\n }\n\n private async loadService(\n metadata: ServiceMetadata,\n ctx: MiokiContext,\n ): Promise<boolean> {\n try {\n const indexPath = path.join(metadata.path, \"index.ts\");\n const indexJsPath = path.join(metadata.path, \"index.js\");\n const indexExists = await pathExists(indexPath);\n const indexJsExists = await pathExists(indexJsPath);\n const entryPoint = indexExists ? indexPath : indexJsPath;\n\n if (!entryPoint || (!indexExists && !indexJsExists)) {\n logger.error(`服务 ${metadata.name} 入口丢失`);\n return false;\n }\n\n let importPath = entryPoint;\n if (process.platform === \"win32\") {\n importPath = \"file:///\" + entryPoint.replace(/\\\\/g, \"/\");\n }\n\n const serviceModule = await import(importPath);\n const service: MiokuService = serviceModule.default || serviceModule;\n\n if (!service || typeof service.init !== \"function\") return false;\n\n await service.init();\n if (service.api) {\n if (!(ctx as any).services) (ctx as any).services = {};\n (ctx as any).services[metadata.name] = service.api;\n }\n\n this.services.set(metadata.name, service);\n return true;\n } catch (error: any) {\n logger.error(`加载服务 ${metadata.name} 失败: ${error.message}`);\n return false;\n }\n }\n\n /**\n * Register a builtin service directly\n */\n registerBuiltinService(name: string, service: MiokuService): void {\n this.services.set(name, service);\n }\n\n /**\n * Get a loaded service\n */\n getService(name: string): MiokuService | undefined {\n return this.services.get(name);\n }\n\n async disposeAll(): Promise<void> {\n for (const [name, service] of this.services) {\n if (service.dispose) await service.dispose();\n }\n this.services.clear();\n }\n\n reset(): void {\n this.services.clear();\n this.serviceMetadata.clear();\n }\n}\n\nexport default ServiceManager.getInstance();\n","import * as fs from \"fs/promises\";\nimport * as path from \"path\";\nimport type { MiokiContext } from \"mioki\";\nimport type { AIService } from \"../types\";\nimport type { HelpService } from \"../service-types\";\nimport type { AISkill } from \"./types\";\nimport pluginManager from \"./plugin-manager\";\nimport { logger } from \"./logger\";\n\nasync function pathExists(filePath: string): Promise<boolean> {\n try {\n await fs.access(filePath);\n return true;\n } catch {\n return false;\n }\n}\n\nfunction toImportPath(filePath: string): string {\n if (process.platform === \"win32\") {\n return \"file:///\" + filePath.replace(/\\\\/g, \"/\");\n }\n return filePath;\n}\n\nfunction isAISkill(value: any): value is AISkill {\n return (\n value &&\n typeof value === \"object\" &&\n typeof value.name === \"string\" &&\n Array.isArray(value.tools)\n );\n}\n\nfunction extractSkills(moduleExports: any): AISkill[] {\n const candidates = [\n moduleExports?.default,\n moduleExports?.skills,\n moduleExports,\n ];\n\n for (const candidate of candidates) {\n if (Array.isArray(candidate)) {\n return candidate.filter(isAISkill);\n }\n if (isAISkill(candidate)) {\n return [candidate];\n }\n }\n\n return [];\n}\n\nasync function resolveSkillsEntry(pluginPath: string): Promise<string | null> {\n const tsPath = path.join(pluginPath, \"skills.ts\");\n if (await pathExists(tsPath)) {\n return tsPath;\n }\n\n const jsPath = path.join(pluginPath, \"skills.js\");\n if (await pathExists(jsPath)) {\n return jsPath;\n }\n\n return null;\n}\n\n/**\n * Auto-register plugin help manifests and AI skills\n */\nexport async function registerPluginArtifacts(\n ctx: MiokiContext,\n): Promise<void> {\n const enabledPlugins = new Set<string>(\n Array.isArray((ctx as any).botConfig?.plugins)\n ? (ctx as any).botConfig.plugins\n : [],\n );\n const pluginMetadata = pluginManager\n .getAllMetadata()\n .filter((metadata) =>\n enabledPlugins.size > 0 ? enabledPlugins.has(metadata.name) : true,\n );\n\n const helpService = ctx.services?.help as HelpService | undefined;\n const aiService = ctx.services?.ai as AIService | undefined;\n\n if (helpService) {\n let helpCount = 0;\n for (const metadata of pluginMetadata) {\n if (!metadata.config.help) {\n continue;\n }\n helpService.registerHelp(metadata.name, metadata.config.help);\n helpCount += 1;\n }\n logger.info(`[plugin-artifacts] Registered ${helpCount} help manifest(s)`);\n }\n\n if (!aiService) {\n return;\n }\n\n let skillCount = 0;\n for (const metadata of pluginMetadata) {\n const skillsEntry = await resolveSkillsEntry(metadata.path);\n if (!skillsEntry) {\n continue;\n }\n\n try {\n const moduleExports = await import(toImportPath(skillsEntry));\n const skills = extractSkills(moduleExports);\n\n if (skills.length === 0) {\n logger.warn(\n `[plugin-artifacts] Plugin ${metadata.name} has ${path.basename(skillsEntry)} but exported no valid skill`,\n );\n continue;\n }\n\n for (const skill of skills) {\n aiService.registerSkill(skill);\n skillCount += 1;\n }\n } catch (error: any) {\n logger.error(\n `[plugin-artifacts] Failed to load skills for plugin ${metadata.name}: ${error?.message || error}`,\n );\n }\n }\n\n logger.info(`[plugin-artifacts] Registered ${skillCount} skill(s)`);\n}\n","/**\n * Service interface definitions for built-in services\n * These are used for type annotations in plugins\n */\n\n// ============ Core Service Interfaces ============\n\n// Config Service\nexport interface ConfigService {\n registerConfig(pluginName: string, configName: string, initialConfig: any): Promise<boolean>;\n updateConfig(pluginName: string, configName: string, updates: any): Promise<boolean>;\n getConfig(pluginName: string, configName: string): Promise<any>;\n getPluginConfigs(pluginName: string): Promise<Record<string, any>>;\n onConfigChange(pluginName: string, configName: string, callback: (newConfig: any) => void): () => void;\n}\n\n// Screenshot Service\nexport interface ScreenshotService {\n screenshot(html: string, options?: any): Promise<string>;\n screenshotMarkdown(markdownContent: string, options?: any): Promise<string>;\n screenshotFromUrl(url: string, options?: any): Promise<string>;\n cleanupTemp(olderThanMs?: number): Promise<number>;\n}\n\n// Help Service\nexport interface HelpService {\n registerHelp(pluginName: string, help: any): void;\n getHelp(pluginName: string): any;\n getAllHelp(): Map<string, any>;\n unregisterHelp(pluginName: string): void;\n}\n\n// WebUI Service\nexport interface WebUIService {\n getSettings(): { port: number; host: string; packageManager: string };\n}\n\n// ============ AI Service Types ============\n\nexport interface AITool {\n name: string;\n description: string;\n parameters: {\n type: \"object\";\n properties: Record<string, any>;\n required?: string[];\n };\n handler: (args: any, event?: any) => Promise<any> | any;\n}\n\nexport interface AISkill {\n name: string;\n description: string;\n permission?: \"owner\" | \"admin\" | \"member\";\n tools: AITool[];\n}\n\nexport interface TextMessage {\n role: \"system\" | \"user\" | \"assistant\";\n content: string;\n}\n\nexport interface MultimodalMessage {\n role: \"system\" | \"user\" | \"assistant\";\n content: string | MultimodalContentItem[];\n}\n\nexport interface ToolCallRecord {\n name: string;\n arguments: any;\n result: any;\n}\n\nexport interface SessionToolDefinition {\n name: string;\n tool: AITool;\n}\n\nexport interface CompleteOptions {\n model?: string;\n messages: any[];\n temperature?: number;\n max_tokens?: number;\n stream?: boolean;\n tools?: any[];\n executableTools?: SessionToolDefinition[];\n executableToolsProvider?: () => SessionToolDefinition[];\n maxIterations?: number;\n onTextDelta?: (delta: string) => void | Promise<void>;\n usageContext?: AIUsageContext;\n usageContextTokens?: number;\n usageBreakdown?: AIUsageFinalization[\"breakdown\"];\n}\n\nexport interface CompleteResponse {\n content: string | null;\n reasoning: string | null;\n toolCalls: Array<{ id: string; name: string; arguments: string }>;\n raw: any;\n turnMessages: any[];\n iterations?: number;\n allToolCalls?: ToolCallRecord[];\n}\n\nexport interface ChatRuntime {\n generateNotice(options: ChatRuntimeNoticeOptions): Promise<ChatRuntimeResult>;\n requestInformation(options: ChatRuntimeInformationRequestOptions): Promise<ChatRuntimeResult>;\n}\n\nexport const TOOL_RESULT_FOLLOWUP_KEY = \"__miokuFollowup\";\n\nexport interface ToolResultFollowup {\n text: string;\n images: Array<{\n url: string;\n detail?: \"auto\" | \"low\" | \"high\";\n }>;\n}\n\n// Permission role for skills\nexport type SkillPermissionRole = \"owner\" | \"admin\" | \"member\";\n\n// Multimodal content item\nexport interface MultimodalContentItem {\n type: \"text\" | \"image_url\";\n text?: string;\n image_url?: {\n url: string;\n detail?: \"auto\" | \"low\" | \"high\";\n };\n}\n\n// Chat runtime types\nexport interface ChatRuntimePromptInjection {\n content: string;\n title?: string;\n}\n\nexport interface ChatRuntimeGroupTarget {\n selfId: number;\n groupId: number;\n}\n\nexport interface ChatRuntimePrivateTarget {\n selfId: number;\n userId: number;\n}\n\nexport type ChatRuntimeSource =\n | { event: any }\n | ChatRuntimeGroupTarget\n | ChatRuntimePrivateTarget;\n\nexport type ChatRuntimeBaseOptions = ChatRuntimeSource & {\n targetMessage?: string;\n promptInjections?: ChatRuntimePromptInjection[];\n send?: boolean;\n};\n\nexport type ChatRuntimeNoticeOptions = ChatRuntimeBaseOptions & {\n instruction: string;\n};\n\nexport type ChatRuntimeInformationRequestOptions = ChatRuntimeBaseOptions & {\n task: string;\n schema: {\n type: \"object\";\n properties: Record<string, any>;\n required?: string[];\n };\n toolName?: string;\n toolDescription?: string;\n};\n\nexport interface ChatRuntimeCollectedInfo {\n data: any;\n isComplete?: boolean;\n confidence?: number;\n notes?: string;\n}\n\nexport type AIUsageRange = \"today\" | \"7d\" | \"30d\";\n\nexport interface AIUsageContext {\n usageId?: string;\n source?: string;\n botId?: number;\n groupId?: number;\n groupName?: string;\n userId?: number;\n userName?: string;\n sessionId?: string;\n}\n\nexport interface AIUsageBreakdown {\n systemPromptTokens?: number;\n chatHistoryTokens?: number;\n toolDefinitionTokens?: number;\n toolUseTokens?: number;\n otherContextTokens?: number;\n}\n\nexport interface AIUsageFinalization {\n sentUserMessages?: number;\n sentAssistantMessages?: number;\n breakdown?: AIUsageBreakdown;\n}\n\nexport interface AIUsageSummary {\n range: AIUsageRange;\n total: {\n requests: number;\n inputTokens: number;\n outputTokens: number;\n cacheWriteTokens: number;\n cacheReadTokens: number;\n totalTokens: number;\n };\n byBot: Array<{\n botId: number | null;\n requests: number;\n inputTokens: number;\n outputTokens: number;\n cacheWriteTokens: number;\n cacheReadTokens: number;\n totalTokens: number;\n }>;\n}\n\nexport interface ChatRuntimeResult {\n messages: string[];\n toolCalls: ToolCallRecord[];\n collectedInfo: ChatRuntimeCollectedInfo | null;\n pendingAt?: number[];\n pendingPoke?: number[];\n pendingQuote?: number;\n emojiPath?: string | null;\n protocolMessages?: any[];\n}\n\nexport interface LegacyChatRuntimeNoticeOptions {\n sessionId: string;\n groupId?: number;\n userId: number;\n message: string;\n replyContextType: string;\n}\n\nexport interface LegacyChatRuntimeInformationRequestOptions {\n sessionId: string;\n groupId?: number;\n userId: number;\n prompt: string;\n injectHistoryCount?: number;\n}\n\n// ============ AI Service Interfaces ============\n\nexport interface AIInstance {\n generateText(options: { prompt?: string; messages: TextMessage[]; model?: string; temperature?: number; max_tokens?: number }): Promise<string>;\n generateMultimodal(options: { prompt?: string; messages: MultimodalMessage[]; model?: string; temperature?: number; max_tokens?: number }): Promise<string>;\n complete(options: CompleteOptions): Promise<CompleteResponse>;\n generateWithTools(options: { prompt?: string; messages: TextMessage[] | MultimodalMessage[]; model?: string; temperature?: number; maxIterations?: number }): Promise<any>;\n setUsageContext?(context: AIUsageContext | undefined): void;\n withUsageContext?<T>(context: AIUsageContext | undefined, fn: () => Promise<T>): Promise<T>;\n registerPrompt(name: string, prompt: string): boolean;\n getPrompt(name: string): string | undefined;\n getAllPrompts(): Record<string, string>;\n removePrompt(name: string): boolean;\n}\n\nexport interface AIService {\n create(options: { name: string; apiUrl: string; apiKey: string; modelType: \"text\" | \"multimodal\"; model?: string }): Promise<AIInstance>;\n get(name: string): AIInstance | undefined;\n list(): string[];\n remove(name: string): boolean;\n setDefault(name: string): boolean;\n getDefault(): AIInstance | undefined;\n registerChatRuntime(runtime: any): boolean;\n getChatRuntime(): any;\n removeChatRuntime(): boolean;\n registerSkill(skill: AISkill): boolean;\n getSkill(skillName: string): AISkill | undefined;\n getAllSkills(): Map<string, AISkill>;\n removeSkill(skillName: string): boolean;\n getTool(toolName: string): AITool | undefined;\n getAllTools(): Map<string, AITool>;\n getUsageSummary?(options: { range: AIUsageRange; botId?: number }): AIUsageSummary;\n cleanupUsageStats?(retentionMs?: number): number;\n finalizeUsage?(usageId: string, finalization: AIUsageFinalization): boolean;\n}\n","/**\n * Data Directory Utilities for Mioku Plugins\n *\n * Provides consistent data path resolution that respects the project directory\n * (process.cwd()) rather than the package installation directory.\n */\n\nimport * as path from \"path\";\n\n/**\n * Get the data directory for a specific plugin\n * Returns: {cwd}/data/{pluginName}\n */\nexport function getPluginDataDir(pluginName: string): string {\n const dataDir = path.join(process.cwd(), \"data\", pluginName);\n return dataDir;\n}\n\n/**\n * Get the data directory for a service\n * Returns: {cwd}/data/{serviceName}\n */\nexport function getServiceDataDir(serviceName: string): string {\n const dataDir = path.join(process.cwd(), \"data\", serviceName);\n return dataDir;\n}\n\n/**\n * Get the main data directory\n * Returns: {cwd}/data\n */\nexport function getDataDir(): string {\n return path.join(process.cwd(), \"data\");\n}\n\n/**\n * Get the config directory for a plugin\n * Returns: {cwd}/config/{pluginName}\n */\nexport function getPluginConfigDir(pluginName: string): string {\n const configDir = path.join(process.cwd(), \"config\", pluginName);\n return configDir;\n}\n\n/**\n * Get the config directory for a service\n * Returns: {cwd}/config/{serviceName}\n */\nexport function getServiceConfigDir(serviceName: string): string {\n const configDir = path.join(process.cwd(), \"config\", serviceName);\n return configDir;\n}\n\n/**\n * Get the main config directory\n * Returns: {cwd}/config\n */\nexport function getConfigDir(): string {\n return path.join(process.cwd(), \"config\");\n}\n\n/**\n * Ensure a directory exists, creating it if necessary\n */\nexport function ensureDataDir(pluginName: string): string {\n const dir = getPluginDataDir(pluginName);\n const { existsSync, mkdirSync } = require(\"fs\");\n if (!existsSync(dir)) {\n mkdirSync(dir, { recursive: true });\n }\n return dir;\n}","/**\n * Plugin Runtime State Management\n *\n * Provides a way for plugins to store state that needs to persist\n * across the plugin lifecycle but should be isolated per plugin.\n */\n\ninterface PluginRuntimeState {\n [pluginName: string]: Record<string, any>;\n}\n\nconst runtimeState: PluginRuntimeState = {};\n\n/**\n * Get the runtime state for a plugin\n */\nexport function getPluginRuntimeState(pluginName: string): Record<string, any> {\n if (!runtimeState[pluginName]) {\n runtimeState[pluginName] = {};\n }\n return runtimeState[pluginName];\n}\n\n/**\n * Set/update the runtime state for a plugin\n */\nexport function setPluginRuntimeState(\n pluginName: string,\n state: Record<string, any>,\n): Record<string, any> {\n if (!runtimeState[pluginName]) {\n runtimeState[pluginName] = {};\n }\n Object.assign(runtimeState[pluginName], state);\n return runtimeState[pluginName];\n}\n\n/**\n * Reset the runtime state for a plugin\n */\nexport function resetPluginRuntimeState(pluginName: string): void {\n delete runtimeState[pluginName];\n}\n\n/**\n * Get all plugin runtime states (for debugging)\n */\nexport function getAllPluginRuntimeStates(): PluginRuntimeState {\n return { ...runtimeState };\n}","/**\n * Mioku - Plugin framework extended from mioki\n *\n * Main entry point for the mioku npm package\n */\n\nimport pluginManager from \"./core/plugin-manager\";\nimport serviceManager from \"./core/service-manager\";\nimport { registerPluginArtifacts } from \"./core/plugin-artifact-registry\";\nimport * as fs from \"fs\";\nimport * as path from \"path\";\nimport { existsSync, mkdirSync } from \"fs\";\nimport {\n DEFAULT_RUNTIME_PLUGINS_DIR,\n prepareRuntimePluginLinks,\n} from \"./core/plugin-linker\";\nimport { setMiokuLogger } from \"./core/logger\";\n\n// Re-export mioki types for convenience\nexport type { MiokiPlugin, MiokiContext } from \"mioki\";\n\nexport function definePlugin<T extends import(\"mioki\").MiokiPlugin>(\n plugin: T,\n): T {\n return plugin;\n}\n\n// Core functionality\nexport { default as pluginManager } from \"./core/plugin-manager\";\nexport { default as serviceManager } from \"./core/service-manager\";\nexport { registerPluginArtifacts } from \"./core/plugin-artifact-registry\";\n\n// Types from types.ts\nexport type {\n MiokuService,\n PluginMetadata,\n ServiceMetadata,\n PluginPackageConfig,\n PluginHelp,\n CommandRole,\n} from \"./types\";\n\n// Service types from service-types.ts\nexport type {\n ConfigService,\n ScreenshotService,\n HelpService,\n WebUIService,\n AITool,\n AISkill,\n AIInstance,\n AIService,\n ChatRuntime,\n TextMessage,\n MultimodalMessage,\n ToolCallRecord,\n CompleteOptions,\n CompleteResponse,\n SessionToolDefinition,\n SkillPermissionRole,\n MultimodalContentItem,\n ToolResultFollowup,\n ChatRuntimePromptInjection,\n ChatRuntimeGroupTarget,\n ChatRuntimePrivateTarget,\n ChatRuntimeSource,\n ChatRuntimeBaseOptions,\n ChatRuntimeNoticeOptions,\n ChatRuntimeInformationRequestOptions,\n ChatRuntimeCollectedInfo,\n ChatRuntimeResult,\n AIUsageRange,\n AIUsageContext,\n AIUsageBreakdown,\n AIUsageFinalization,\n AIUsageSummary,\n} from \"./service-types\";\n\nexport { TOOL_RESULT_FOLLOWUP_KEY } from \"./service-types\";\n\n/**\n * Start options for Mioku\n */\nexport interface MiokuStartOptions {\n cwd?: string;\n}\n\n/**\n * Start Mioku with plugin and service discovery\n */\nexport async function start(options: MiokuStartOptions = {}): Promise<void> {\n const { cwd = process.cwd() } = options;\n\n if (cwd) {\n process.chdir(cwd);\n }\n\n const { start: startMioki, logger, botConfig } = await import(\"mioki\");\n setMiokuLogger(logger);\n\n // Read mioku config from package.json (mioki field contains merged config)\n const packageJsonPath = path.join(process.cwd(), \"package.json\");\n let miokuConfig: any = {};\n if (fs.existsSync(packageJsonPath)) {\n const pkg = JSON.parse(fs.readFileSync(packageJsonPath, \"utf-8\"));\n // mioku-specific config lives in the same mioki field\n miokuConfig = pkg.mioki || {};\n }\n\n logger.info(\"こんにちは..\");\n logger.info(\"---------------------------------------\");\n logger.info(\"---------- Mioku 正在启动 ------------\");\n logger.info(\"---------------------------------------\");\n\n // Ensure required directories exist\n const requiredDirs = [\"data\", \"config\", \"temp\"];\n for (const dir of requiredDirs) {\n if (!existsSync(dir)) {\n mkdirSync(dir, { recursive: true });\n }\n }\n\n logger.info(\"O.o Miku 正在翻找插件..\");\n const discoveredPlugins = await pluginManager.discoverPlugins(miokuConfig);\n logger.info(`O.o 共发现 ${discoveredPlugins.length} 个插件: ${discoveredPlugins.map(p => p.name).join(\", \")}`);\n\n const runtimePluginsDir = path.resolve(\n process.cwd(),\n DEFAULT_RUNTIME_PLUGINS_DIR,\n );\n const linkedPluginNames = await prepareRuntimePluginLinks(\n discoveredPlugins,\n runtimePluginsDir,\n );\n botConfig.plugins_dir = DEFAULT_RUNTIME_PLUGINS_DIR;\n\n logger.info(\"o.O Miku 正在翻找服务..\");\n await serviceManager.discoverServices(miokuConfig);\n\n const requiredServices = pluginManager.collectRequiredServices();\n const missingServices =\n await serviceManager.checkMissingServices(requiredServices);\n\n if (missingServices.length > 0) {\n logger.warn(`发现缺失服务: ${missingServices.join(\", \")}`);\n }\n\n // Merge discovered plugin names into botConfig.plugins so mioki loads them\n const discoveredPluginNames = linkedPluginNames;\n for (const name of discoveredPluginNames) {\n if (!botConfig.plugins.includes(name)) {\n botConfig.plugins.push(name);\n }\n }\n\n await startMioki({ cwd });\n}\n\n// Version\nexport const version = \"1.0.0\";\n\n// Data path utilities\nexport {\n getDataDir,\n getPluginDataDir,\n getServiceDataDir,\n getConfigDir,\n getPluginConfigDir,\n getServiceConfigDir,\n ensureDataDir,\n} from \"./core/data-paths\";\n\n// Plugin runtime state\nexport {\n getPluginRuntimeState,\n setPluginRuntimeState,\n resetPluginRuntimeState,\n} from \"./core/plugin-runtime-state\";\n"],"mappings":"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"}
|
package/dist/index.d.cts
ADDED
|
@@ -0,0 +1,529 @@
|
|
|
1
|
+
import * as mioki0 from "mioki";
|
|
2
|
+
import { MiokiContext, MiokiContext as MiokiContext$1, MiokiPlugin } from "mioki";
|
|
3
|
+
|
|
4
|
+
//#region src/core/types.d.ts
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* 指令权限级别
|
|
8
|
+
* 主人 管理员 群主 群成员
|
|
9
|
+
*/
|
|
10
|
+
type CommandRole$1 = "master" | "admin" | "owner" | "member";
|
|
11
|
+
/**
|
|
12
|
+
* 插件帮助信息
|
|
13
|
+
*/
|
|
14
|
+
interface PluginHelp$1 {
|
|
15
|
+
title: string;
|
|
16
|
+
description: string;
|
|
17
|
+
commands: Array<{
|
|
18
|
+
cmd: string;
|
|
19
|
+
desc: string;
|
|
20
|
+
usage?: string;
|
|
21
|
+
role?: CommandRole$1;
|
|
22
|
+
}>;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* 插件包配置
|
|
26
|
+
* package.json 中的 mioku 字段
|
|
27
|
+
*/
|
|
28
|
+
interface PluginPackageConfig$1 {
|
|
29
|
+
services?: string[];
|
|
30
|
+
help?: PluginHelp$1;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Mioku 服务定义
|
|
34
|
+
*/
|
|
35
|
+
interface MiokuService$1 {
|
|
36
|
+
name: string;
|
|
37
|
+
version: string;
|
|
38
|
+
description?: string;
|
|
39
|
+
init(): Promise<void>;
|
|
40
|
+
api: Record<string, any>;
|
|
41
|
+
dispose?(): Promise<void>;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* 插件元数据
|
|
45
|
+
*/
|
|
46
|
+
interface PluginMetadata$1 {
|
|
47
|
+
name: string;
|
|
48
|
+
version: string;
|
|
49
|
+
description?: string;
|
|
50
|
+
path: string;
|
|
51
|
+
packageJson: any;
|
|
52
|
+
config: PluginPackageConfig$1;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* 服务元数据
|
|
56
|
+
*/
|
|
57
|
+
interface ServiceMetadata$1 {
|
|
58
|
+
name: string;
|
|
59
|
+
version: string;
|
|
60
|
+
description?: string;
|
|
61
|
+
path: string;
|
|
62
|
+
packageJson: any;
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=types.d.ts.map
|
|
65
|
+
//#endregion
|
|
66
|
+
//#region src/core/plugin-manager.d.ts
|
|
67
|
+
/**
|
|
68
|
+
* 插件管理器
|
|
69
|
+
*
|
|
70
|
+
* Discover and manage plugins from both local directories and node_modules.
|
|
71
|
+
*/
|
|
72
|
+
declare class PluginManager {
|
|
73
|
+
private pluginMetadata;
|
|
74
|
+
static getInstance(): PluginManager;
|
|
75
|
+
discoverPlugins(miokuConfig?: any): Promise<PluginMetadata$1[]>;
|
|
76
|
+
private discoverFromDir;
|
|
77
|
+
private discoverFromNodeModules;
|
|
78
|
+
private resolveDirectoryPath;
|
|
79
|
+
private loadPluginMetadata;
|
|
80
|
+
collectRequiredServices(): Set<string>;
|
|
81
|
+
getPluginMetadata(name: string): PluginMetadata$1 | undefined;
|
|
82
|
+
getAllMetadata(): PluginMetadata$1[];
|
|
83
|
+
reset(): void;
|
|
84
|
+
}
|
|
85
|
+
declare const _default: PluginManager;
|
|
86
|
+
//#endregion
|
|
87
|
+
//#region src/core/service-manager.d.ts
|
|
88
|
+
/**
|
|
89
|
+
* 服务管理器
|
|
90
|
+
*/
|
|
91
|
+
declare class ServiceManager {
|
|
92
|
+
private services;
|
|
93
|
+
private serviceMetadata;
|
|
94
|
+
private servicesDir;
|
|
95
|
+
static getInstance(): ServiceManager;
|
|
96
|
+
discoverServices(miokuConfig?: any): Promise<ServiceMetadata$1[]>;
|
|
97
|
+
private discoverFromDir;
|
|
98
|
+
private loadServiceMetadata;
|
|
99
|
+
/**
|
|
100
|
+
* Load built-in services from the package
|
|
101
|
+
*/
|
|
102
|
+
private loadBuiltinServices;
|
|
103
|
+
private discoverFromNodeModules;
|
|
104
|
+
checkMissingServices(requiredServices: Set<string>): Promise<string[]>;
|
|
105
|
+
loadAllServices(ctx: MiokiContext$1): Promise<void>;
|
|
106
|
+
private loadService;
|
|
107
|
+
/**
|
|
108
|
+
* Register a builtin service directly
|
|
109
|
+
*/
|
|
110
|
+
registerBuiltinService(name: string, service: MiokuService$1): void;
|
|
111
|
+
/**
|
|
112
|
+
* Get a loaded service
|
|
113
|
+
*/
|
|
114
|
+
getService(name: string): MiokuService$1 | undefined;
|
|
115
|
+
disposeAll(): Promise<void>;
|
|
116
|
+
reset(): void;
|
|
117
|
+
}
|
|
118
|
+
declare const _default$1: ServiceManager;
|
|
119
|
+
//#endregion
|
|
120
|
+
//#region src/core/plugin-artifact-registry.d.ts
|
|
121
|
+
/**
|
|
122
|
+
* Auto-register plugin help manifests and AI skills
|
|
123
|
+
*/
|
|
124
|
+
declare function registerPluginArtifacts(ctx: MiokiContext$1): Promise<void>;
|
|
125
|
+
//# sourceMappingURL=plugin-artifact-registry.d.ts.map
|
|
126
|
+
//#endregion
|
|
127
|
+
//#region src/types.d.ts
|
|
128
|
+
/**
|
|
129
|
+
* Mioku Service Definition
|
|
130
|
+
*/
|
|
131
|
+
interface MiokuService {
|
|
132
|
+
name: string;
|
|
133
|
+
version: string;
|
|
134
|
+
description?: string;
|
|
135
|
+
init(): Promise<void>;
|
|
136
|
+
api: Record<string, any>;
|
|
137
|
+
dispose?(): Promise<void>;
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* 插件元数据
|
|
141
|
+
*/
|
|
142
|
+
interface PluginMetadata {
|
|
143
|
+
name: string;
|
|
144
|
+
version: string;
|
|
145
|
+
description?: string;
|
|
146
|
+
path: string;
|
|
147
|
+
packageJson: any;
|
|
148
|
+
config: PluginPackageConfig;
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* 服务元数据
|
|
152
|
+
*/
|
|
153
|
+
interface ServiceMetadata {
|
|
154
|
+
name: string;
|
|
155
|
+
version: string;
|
|
156
|
+
description?: string;
|
|
157
|
+
path: string;
|
|
158
|
+
packageJson: any;
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* 插件包配置
|
|
162
|
+
* package.json 中的 mioku 字段
|
|
163
|
+
*/
|
|
164
|
+
interface PluginPackageConfig {
|
|
165
|
+
services?: string[];
|
|
166
|
+
help?: PluginHelp;
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* 插件帮助信息
|
|
170
|
+
*/
|
|
171
|
+
interface PluginHelp {
|
|
172
|
+
title: string;
|
|
173
|
+
description: string;
|
|
174
|
+
commands: Array<{
|
|
175
|
+
cmd: string;
|
|
176
|
+
desc: string;
|
|
177
|
+
usage?: string;
|
|
178
|
+
role?: CommandRole;
|
|
179
|
+
}>;
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* 指令权限级别
|
|
183
|
+
* 主人 管理员 群主 群成员
|
|
184
|
+
*/
|
|
185
|
+
type CommandRole = "master" | "admin" | "owner" | "member";
|
|
186
|
+
//# sourceMappingURL=types.d.ts.map
|
|
187
|
+
//#endregion
|
|
188
|
+
//#region src/service-types.d.ts
|
|
189
|
+
/**
|
|
190
|
+
* Service interface definitions for built-in services
|
|
191
|
+
* These are used for type annotations in plugins
|
|
192
|
+
*/
|
|
193
|
+
interface ConfigService {
|
|
194
|
+
registerConfig(pluginName: string, configName: string, initialConfig: any): Promise<boolean>;
|
|
195
|
+
updateConfig(pluginName: string, configName: string, updates: any): Promise<boolean>;
|
|
196
|
+
getConfig(pluginName: string, configName: string): Promise<any>;
|
|
197
|
+
getPluginConfigs(pluginName: string): Promise<Record<string, any>>;
|
|
198
|
+
onConfigChange(pluginName: string, configName: string, callback: (newConfig: any) => void): () => void;
|
|
199
|
+
}
|
|
200
|
+
interface ScreenshotService {
|
|
201
|
+
screenshot(html: string, options?: any): Promise<string>;
|
|
202
|
+
screenshotMarkdown(markdownContent: string, options?: any): Promise<string>;
|
|
203
|
+
screenshotFromUrl(url: string, options?: any): Promise<string>;
|
|
204
|
+
cleanupTemp(olderThanMs?: number): Promise<number>;
|
|
205
|
+
}
|
|
206
|
+
interface HelpService {
|
|
207
|
+
registerHelp(pluginName: string, help: any): void;
|
|
208
|
+
getHelp(pluginName: string): any;
|
|
209
|
+
getAllHelp(): Map<string, any>;
|
|
210
|
+
unregisterHelp(pluginName: string): void;
|
|
211
|
+
}
|
|
212
|
+
interface WebUIService {
|
|
213
|
+
getSettings(): {
|
|
214
|
+
port: number;
|
|
215
|
+
host: string;
|
|
216
|
+
packageManager: string;
|
|
217
|
+
};
|
|
218
|
+
}
|
|
219
|
+
interface AITool {
|
|
220
|
+
name: string;
|
|
221
|
+
description: string;
|
|
222
|
+
parameters: {
|
|
223
|
+
type: "object";
|
|
224
|
+
properties: Record<string, any>;
|
|
225
|
+
required?: string[];
|
|
226
|
+
};
|
|
227
|
+
handler: (args: any, event?: any) => Promise<any> | any;
|
|
228
|
+
}
|
|
229
|
+
interface AISkill {
|
|
230
|
+
name: string;
|
|
231
|
+
description: string;
|
|
232
|
+
permission?: "owner" | "admin" | "member";
|
|
233
|
+
tools: AITool[];
|
|
234
|
+
}
|
|
235
|
+
interface TextMessage {
|
|
236
|
+
role: "system" | "user" | "assistant";
|
|
237
|
+
content: string;
|
|
238
|
+
}
|
|
239
|
+
interface MultimodalMessage {
|
|
240
|
+
role: "system" | "user" | "assistant";
|
|
241
|
+
content: string | MultimodalContentItem[];
|
|
242
|
+
}
|
|
243
|
+
interface ToolCallRecord {
|
|
244
|
+
name: string;
|
|
245
|
+
arguments: any;
|
|
246
|
+
result: any;
|
|
247
|
+
}
|
|
248
|
+
interface SessionToolDefinition {
|
|
249
|
+
name: string;
|
|
250
|
+
tool: AITool;
|
|
251
|
+
}
|
|
252
|
+
interface CompleteOptions {
|
|
253
|
+
model?: string;
|
|
254
|
+
messages: any[];
|
|
255
|
+
temperature?: number;
|
|
256
|
+
max_tokens?: number;
|
|
257
|
+
stream?: boolean;
|
|
258
|
+
tools?: any[];
|
|
259
|
+
executableTools?: SessionToolDefinition[];
|
|
260
|
+
executableToolsProvider?: () => SessionToolDefinition[];
|
|
261
|
+
maxIterations?: number;
|
|
262
|
+
onTextDelta?: (delta: string) => void | Promise<void>;
|
|
263
|
+
usageContext?: AIUsageContext;
|
|
264
|
+
usageContextTokens?: number;
|
|
265
|
+
usageBreakdown?: AIUsageFinalization["breakdown"];
|
|
266
|
+
}
|
|
267
|
+
interface CompleteResponse {
|
|
268
|
+
content: string | null;
|
|
269
|
+
reasoning: string | null;
|
|
270
|
+
toolCalls: Array<{
|
|
271
|
+
id: string;
|
|
272
|
+
name: string;
|
|
273
|
+
arguments: string;
|
|
274
|
+
}>;
|
|
275
|
+
raw: any;
|
|
276
|
+
turnMessages: any[];
|
|
277
|
+
iterations?: number;
|
|
278
|
+
allToolCalls?: ToolCallRecord[];
|
|
279
|
+
}
|
|
280
|
+
interface ChatRuntime {
|
|
281
|
+
generateNotice(options: ChatRuntimeNoticeOptions): Promise<ChatRuntimeResult>;
|
|
282
|
+
requestInformation(options: ChatRuntimeInformationRequestOptions): Promise<ChatRuntimeResult>;
|
|
283
|
+
}
|
|
284
|
+
declare const TOOL_RESULT_FOLLOWUP_KEY = "__miokuFollowup";
|
|
285
|
+
interface ToolResultFollowup {
|
|
286
|
+
text: string;
|
|
287
|
+
images: Array<{
|
|
288
|
+
url: string;
|
|
289
|
+
detail?: "auto" | "low" | "high";
|
|
290
|
+
}>;
|
|
291
|
+
}
|
|
292
|
+
type SkillPermissionRole = "owner" | "admin" | "member";
|
|
293
|
+
interface MultimodalContentItem {
|
|
294
|
+
type: "text" | "image_url";
|
|
295
|
+
text?: string;
|
|
296
|
+
image_url?: {
|
|
297
|
+
url: string;
|
|
298
|
+
detail?: "auto" | "low" | "high";
|
|
299
|
+
};
|
|
300
|
+
}
|
|
301
|
+
interface ChatRuntimePromptInjection {
|
|
302
|
+
content: string;
|
|
303
|
+
title?: string;
|
|
304
|
+
}
|
|
305
|
+
interface ChatRuntimeGroupTarget {
|
|
306
|
+
selfId: number;
|
|
307
|
+
groupId: number;
|
|
308
|
+
}
|
|
309
|
+
interface ChatRuntimePrivateTarget {
|
|
310
|
+
selfId: number;
|
|
311
|
+
userId: number;
|
|
312
|
+
}
|
|
313
|
+
type ChatRuntimeSource = {
|
|
314
|
+
event: any;
|
|
315
|
+
} | ChatRuntimeGroupTarget | ChatRuntimePrivateTarget;
|
|
316
|
+
type ChatRuntimeBaseOptions = ChatRuntimeSource & {
|
|
317
|
+
targetMessage?: string;
|
|
318
|
+
promptInjections?: ChatRuntimePromptInjection[];
|
|
319
|
+
send?: boolean;
|
|
320
|
+
};
|
|
321
|
+
type ChatRuntimeNoticeOptions = ChatRuntimeBaseOptions & {
|
|
322
|
+
instruction: string;
|
|
323
|
+
};
|
|
324
|
+
type ChatRuntimeInformationRequestOptions = ChatRuntimeBaseOptions & {
|
|
325
|
+
task: string;
|
|
326
|
+
schema: {
|
|
327
|
+
type: "object";
|
|
328
|
+
properties: Record<string, any>;
|
|
329
|
+
required?: string[];
|
|
330
|
+
};
|
|
331
|
+
toolName?: string;
|
|
332
|
+
toolDescription?: string;
|
|
333
|
+
};
|
|
334
|
+
interface ChatRuntimeCollectedInfo {
|
|
335
|
+
data: any;
|
|
336
|
+
isComplete?: boolean;
|
|
337
|
+
confidence?: number;
|
|
338
|
+
notes?: string;
|
|
339
|
+
}
|
|
340
|
+
type AIUsageRange = "today" | "7d" | "30d";
|
|
341
|
+
interface AIUsageContext {
|
|
342
|
+
usageId?: string;
|
|
343
|
+
source?: string;
|
|
344
|
+
botId?: number;
|
|
345
|
+
groupId?: number;
|
|
346
|
+
groupName?: string;
|
|
347
|
+
userId?: number;
|
|
348
|
+
userName?: string;
|
|
349
|
+
sessionId?: string;
|
|
350
|
+
}
|
|
351
|
+
interface AIUsageBreakdown {
|
|
352
|
+
systemPromptTokens?: number;
|
|
353
|
+
chatHistoryTokens?: number;
|
|
354
|
+
toolDefinitionTokens?: number;
|
|
355
|
+
toolUseTokens?: number;
|
|
356
|
+
otherContextTokens?: number;
|
|
357
|
+
}
|
|
358
|
+
interface AIUsageFinalization {
|
|
359
|
+
sentUserMessages?: number;
|
|
360
|
+
sentAssistantMessages?: number;
|
|
361
|
+
breakdown?: AIUsageBreakdown;
|
|
362
|
+
}
|
|
363
|
+
interface AIUsageSummary {
|
|
364
|
+
range: AIUsageRange;
|
|
365
|
+
total: {
|
|
366
|
+
requests: number;
|
|
367
|
+
inputTokens: number;
|
|
368
|
+
outputTokens: number;
|
|
369
|
+
cacheWriteTokens: number;
|
|
370
|
+
cacheReadTokens: number;
|
|
371
|
+
totalTokens: number;
|
|
372
|
+
};
|
|
373
|
+
byBot: Array<{
|
|
374
|
+
botId: number | null;
|
|
375
|
+
requests: number;
|
|
376
|
+
inputTokens: number;
|
|
377
|
+
outputTokens: number;
|
|
378
|
+
cacheWriteTokens: number;
|
|
379
|
+
cacheReadTokens: number;
|
|
380
|
+
totalTokens: number;
|
|
381
|
+
}>;
|
|
382
|
+
}
|
|
383
|
+
interface ChatRuntimeResult {
|
|
384
|
+
messages: string[];
|
|
385
|
+
toolCalls: ToolCallRecord[];
|
|
386
|
+
collectedInfo: ChatRuntimeCollectedInfo | null;
|
|
387
|
+
pendingAt?: number[];
|
|
388
|
+
pendingPoke?: number[];
|
|
389
|
+
pendingQuote?: number;
|
|
390
|
+
emojiPath?: string | null;
|
|
391
|
+
protocolMessages?: any[];
|
|
392
|
+
}
|
|
393
|
+
interface AIInstance {
|
|
394
|
+
generateText(options: {
|
|
395
|
+
prompt?: string;
|
|
396
|
+
messages: TextMessage[];
|
|
397
|
+
model?: string;
|
|
398
|
+
temperature?: number;
|
|
399
|
+
max_tokens?: number;
|
|
400
|
+
}): Promise<string>;
|
|
401
|
+
generateMultimodal(options: {
|
|
402
|
+
prompt?: string;
|
|
403
|
+
messages: MultimodalMessage[];
|
|
404
|
+
model?: string;
|
|
405
|
+
temperature?: number;
|
|
406
|
+
max_tokens?: number;
|
|
407
|
+
}): Promise<string>;
|
|
408
|
+
complete(options: CompleteOptions): Promise<CompleteResponse>;
|
|
409
|
+
generateWithTools(options: {
|
|
410
|
+
prompt?: string;
|
|
411
|
+
messages: TextMessage[] | MultimodalMessage[];
|
|
412
|
+
model?: string;
|
|
413
|
+
temperature?: number;
|
|
414
|
+
maxIterations?: number;
|
|
415
|
+
}): Promise<any>;
|
|
416
|
+
setUsageContext?(context: AIUsageContext | undefined): void;
|
|
417
|
+
withUsageContext?<T>(context: AIUsageContext | undefined, fn: () => Promise<T>): Promise<T>;
|
|
418
|
+
registerPrompt(name: string, prompt: string): boolean;
|
|
419
|
+
getPrompt(name: string): string | undefined;
|
|
420
|
+
getAllPrompts(): Record<string, string>;
|
|
421
|
+
removePrompt(name: string): boolean;
|
|
422
|
+
}
|
|
423
|
+
interface AIService {
|
|
424
|
+
create(options: {
|
|
425
|
+
name: string;
|
|
426
|
+
apiUrl: string;
|
|
427
|
+
apiKey: string;
|
|
428
|
+
modelType: "text" | "multimodal";
|
|
429
|
+
model?: string;
|
|
430
|
+
}): Promise<AIInstance>;
|
|
431
|
+
get(name: string): AIInstance | undefined;
|
|
432
|
+
list(): string[];
|
|
433
|
+
remove(name: string): boolean;
|
|
434
|
+
setDefault(name: string): boolean;
|
|
435
|
+
getDefault(): AIInstance | undefined;
|
|
436
|
+
registerChatRuntime(runtime: any): boolean;
|
|
437
|
+
getChatRuntime(): any;
|
|
438
|
+
removeChatRuntime(): boolean;
|
|
439
|
+
registerSkill(skill: AISkill): boolean;
|
|
440
|
+
getSkill(skillName: string): AISkill | undefined;
|
|
441
|
+
getAllSkills(): Map<string, AISkill>;
|
|
442
|
+
removeSkill(skillName: string): boolean;
|
|
443
|
+
getTool(toolName: string): AITool | undefined;
|
|
444
|
+
getAllTools(): Map<string, AITool>;
|
|
445
|
+
getUsageSummary?(options: {
|
|
446
|
+
range: AIUsageRange;
|
|
447
|
+
botId?: number;
|
|
448
|
+
}): AIUsageSummary;
|
|
449
|
+
cleanupUsageStats?(retentionMs?: number): number;
|
|
450
|
+
finalizeUsage?(usageId: string, finalization: AIUsageFinalization): boolean;
|
|
451
|
+
}
|
|
452
|
+
//# sourceMappingURL=service-types.d.ts.map
|
|
453
|
+
//#endregion
|
|
454
|
+
//#region src/core/data-paths.d.ts
|
|
455
|
+
/**
|
|
456
|
+
* Data Directory Utilities for Mioku Plugins
|
|
457
|
+
*
|
|
458
|
+
* Provides consistent data path resolution that respects the project directory
|
|
459
|
+
* (process.cwd()) rather than the package installation directory.
|
|
460
|
+
*/
|
|
461
|
+
/**
|
|
462
|
+
* Get the data directory for a specific plugin
|
|
463
|
+
* Returns: {cwd}/data/{pluginName}
|
|
464
|
+
*/
|
|
465
|
+
declare function getPluginDataDir(pluginName: string): string;
|
|
466
|
+
/**
|
|
467
|
+
* Get the data directory for a service
|
|
468
|
+
* Returns: {cwd}/data/{serviceName}
|
|
469
|
+
*/
|
|
470
|
+
declare function getServiceDataDir(serviceName: string): string;
|
|
471
|
+
/**
|
|
472
|
+
* Get the main data directory
|
|
473
|
+
* Returns: {cwd}/data
|
|
474
|
+
*/
|
|
475
|
+
declare function getDataDir(): string;
|
|
476
|
+
/**
|
|
477
|
+
* Get the config directory for a plugin
|
|
478
|
+
* Returns: {cwd}/config/{pluginName}
|
|
479
|
+
*/
|
|
480
|
+
declare function getPluginConfigDir(pluginName: string): string;
|
|
481
|
+
/**
|
|
482
|
+
* Get the config directory for a service
|
|
483
|
+
* Returns: {cwd}/config/{serviceName}
|
|
484
|
+
*/
|
|
485
|
+
declare function getServiceConfigDir(serviceName: string): string;
|
|
486
|
+
/**
|
|
487
|
+
* Get the main config directory
|
|
488
|
+
* Returns: {cwd}/config
|
|
489
|
+
*/
|
|
490
|
+
declare function getConfigDir(): string;
|
|
491
|
+
/**
|
|
492
|
+
* Ensure a directory exists, creating it if necessary
|
|
493
|
+
*/
|
|
494
|
+
declare function ensureDataDir(pluginName: string): string;
|
|
495
|
+
//# sourceMappingURL=data-paths.d.ts.map
|
|
496
|
+
//#endregion
|
|
497
|
+
//#region src/core/plugin-runtime-state.d.ts
|
|
498
|
+
/**
|
|
499
|
+
* Get the runtime state for a plugin
|
|
500
|
+
*/
|
|
501
|
+
declare function getPluginRuntimeState(pluginName: string): Record<string, any>;
|
|
502
|
+
/**
|
|
503
|
+
* Set/update the runtime state for a plugin
|
|
504
|
+
*/
|
|
505
|
+
declare function setPluginRuntimeState(pluginName: string, state: Record<string, any>): Record<string, any>;
|
|
506
|
+
/**
|
|
507
|
+
* Reset the runtime state for a plugin
|
|
508
|
+
*/
|
|
509
|
+
declare function resetPluginRuntimeState(pluginName: string): void;
|
|
510
|
+
/**
|
|
511
|
+
* Get all plugin runtime states (for debugging)
|
|
512
|
+
*/
|
|
513
|
+
//#endregion
|
|
514
|
+
//#region src/index.d.ts
|
|
515
|
+
declare function definePlugin<T extends mioki0.MiokiPlugin>(plugin: T): T;
|
|
516
|
+
/**
|
|
517
|
+
* Start options for Mioku
|
|
518
|
+
*/
|
|
519
|
+
interface MiokuStartOptions {
|
|
520
|
+
cwd?: string;
|
|
521
|
+
}
|
|
522
|
+
/**
|
|
523
|
+
* Start Mioku with plugin and service discovery
|
|
524
|
+
*/
|
|
525
|
+
declare function start(options?: MiokuStartOptions): Promise<void>;
|
|
526
|
+
declare const version = "1.0.0";
|
|
527
|
+
//#endregion
|
|
528
|
+
export { type AIInstance, type AIService, type AISkill, type AITool, type AIUsageBreakdown, type AIUsageContext, type AIUsageFinalization, type AIUsageRange, type AIUsageSummary, type ChatRuntime, type ChatRuntimeBaseOptions, type ChatRuntimeCollectedInfo, type ChatRuntimeGroupTarget, type ChatRuntimeInformationRequestOptions, type ChatRuntimeNoticeOptions, type ChatRuntimePrivateTarget, type ChatRuntimePromptInjection, type ChatRuntimeResult, type ChatRuntimeSource, type CommandRole, type CompleteOptions, type CompleteResponse, type ConfigService, type HelpService, type MiokiContext, type MiokiPlugin, type MiokuService, MiokuStartOptions, type MultimodalContentItem, type MultimodalMessage, type PluginHelp, type PluginMetadata, type PluginPackageConfig, type ScreenshotService, type ServiceMetadata, type SessionToolDefinition, type SkillPermissionRole, TOOL_RESULT_FOLLOWUP_KEY, type TextMessage, type ToolCallRecord, type ToolResultFollowup, type WebUIService, definePlugin, ensureDataDir, getConfigDir, getDataDir, getPluginConfigDir, getPluginDataDir, getPluginRuntimeState, getServiceConfigDir, getServiceDataDir, _default as pluginManager, registerPluginArtifacts, resetPluginRuntimeState, _default$1 as serviceManager, setPluginRuntimeState, start, version };
|
|
529
|
+
//# sourceMappingURL=index.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.cts","names":[],"sources":["../src/core/types.ts","../src/core/plugin-manager.ts","../src/core/service-manager.ts","../src/core/plugin-artifact-registry.ts","../src/types.ts","../src/service-types.ts","../src/core/data-paths.ts","../src/core/plugin-runtime-state.ts","../src/index.ts"],"sourcesContent":[],"mappings":"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"}
|