mioku 0.9.7 → 0.9.8

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.
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","names":["fallbackLogger: MiokuLogger","activeLogger: MiokuLogger","logger: MiokuLogger | undefined","logger","logger: MiokuLogger","filePath: string","p: string","dir: string","results: DiscoveredModule[]","entries: import(\"fs\").Dirent[]","prefix: string","entryPath: string","linkPath: string","targetPath: string","runtimePluginsDir: string","metadata: PluginMetadata","plugins: PluginMetadata[]","linkedNames: string[]","store","key: string","factory: () => T","prefix: string","obj: Record<string, unknown>","allowed: Set<string>","value: unknown","pluginName: string","commands: PluginHelp[\"commands\"]","hooks: AccessHook[]","raw: unknown","config: PluginPackageConfig","miokuConfig: MiokuRuntimeConfig","name: string","pluginPath: string","packageJson: PackageJsonLike | null","config: PluginPackageConfig","miokuConfig: MiokuRuntimeConfig","name: string","servicePath: string","packageJson: PackageJsonLike","required: Set<string>","missing: string[]","ctx: MiokiContext","metadata: ServiceMetadata","service: MiokuService","miokuConfig: MiokuRuntimeConfig","botConfig: BotConfigLike","linkedPluginNames: string[]","deps: BootstrapDeps","botConfig","id: string","ctx: MiokiContext","ref: ServiceRef<T>","keywords: unknown","ctx: MiokiContext","botConfig","serviceName: string","configName: string","defaults: Record<string, unknown>","value: Record<string, unknown>","result: Record<string, Record<string, unknown>>","role: unknown","pluginName: string","serviceName: string","name: string","initial: T","next: T","state: T","plugin: T","options: MiokuStartOptions","logger","signal: string","version: string"],"sources":["../src/core/logger.ts","../src/core/module-scanner.ts","../src/core/plugin-linker.ts","../src/core/registry.ts","../src/core/plugin-manifest.ts","../src/core/plugin-manager.ts","../src/core/service-manager.ts","../src/core/bootstrap.ts","../src/core/service.ts","../src/core/services.ts","../src/core/plugin-artifact-registry.ts","../src/core/service-config.ts","../src/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 { pathToFileURL } from \"node:url\";\n\nexport interface DiscoveredModule {\n name: string;\n path: string;\n}\n\nexport async function pathExists(filePath: string): Promise<boolean> {\n try {\n await fs.access(filePath);\n return true;\n } catch {\n return false;\n }\n}\n\nexport async function resolveRealpath(p: string): Promise<string> {\n try {\n return await fs.realpath(p);\n } catch {\n return p;\n }\n}\n\n// Windows requires file:// URLs for absolute paths in dynamic import().\n// pathToFileURL also percent-encodes spaces and non-ASCII segments, which a\n// hand-rolled string replace leaves broken (e.g. \"C:\\用户\\my bot\").\nexport function toImportPath(filePath: string): string {\n if (process.platform === \"win32\") {\n return pathToFileURL(filePath).href;\n }\n return filePath;\n}\n\nexport async function scanLocalDir(dir: string): Promise<DiscoveredModule[]> {\n const results: DiscoveredModule[] = [];\n if (!(await pathExists(dir))) return results;\n\n let entries: import(\"fs\").Dirent[];\n try {\n entries = await fs.readdir(dir, { withFileTypes: true });\n } catch {\n return results;\n }\n\n for (const entry of entries) {\n const entryPath = path.join(dir, entry.name);\n try {\n const stat = await fs.stat(entryPath);\n if (!stat.isDirectory()) continue;\n } catch {\n continue;\n }\n results.push({ name: entry.name, path: await resolveRealpath(entryPath) });\n }\n return results;\n}\n\nexport async function scanNodeModules(prefix: string): Promise<DiscoveredModule[]> {\n const results: DiscoveredModule[] = [];\n const nodeModulesPath = path.resolve(process.cwd(), \"node_modules\");\n if (!(await pathExists(nodeModulesPath))) return results;\n\n let entries: import(\"fs\").Dirent[];\n try {\n entries = await fs.readdir(nodeModulesPath, { withFileTypes: true });\n } catch {\n return results;\n }\n\n // Don't filter by isDirectory(): node_modules entries are often symlinks\n // into the workspace, and Dirent.isDirectory() returns false for symlinks.\n for (const entry of entries) {\n if (!entry.name.startsWith(prefix)) continue;\n const name = entry.name.slice(prefix.length);\n const fullPath = path.join(nodeModulesPath, entry.name);\n results.push({ name, path: await resolveRealpath(fullPath) });\n }\n return results;\n}\n","import * as fs from \"fs/promises\";\nimport * as path from \"path\";\nimport type { PluginMetadata } from \"../types\";\nimport { logger } from \"./logger\";\nimport { pathExists } from \"./module-scanner\";\n\nexport const DEFAULT_RUNTIME_PLUGINS_DIR = \".mioku/plugins\";\n\ntype SymlinkState = \"ok\" | \"blocked\" | \"removed\";\n\nasync function removeIfBrokenSymlink(entryPath: string): Promise<SymlinkState> {\n let stat;\n try {\n stat = await fs.lstat(entryPath);\n } catch {\n return \"removed\";\n }\n if (!stat.isSymbolicLink()) return \"blocked\";\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 return path.relative(path.dirname(linkPath), targetPath) || \".\";\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) return true;\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 // Junctions on Windows don't require admin rights; relative dir symlinks elsewhere.\n if (process.platform === \"win32\") {\n await fs.symlink(targetPath, linkPath, \"junction\");\n } else {\n await fs.symlink(relativeSymlinkTarget(linkPath, targetPath), linkPath, \"dir\");\n }\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((p) => p.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 if ((await removeIfBrokenSymlink(entryPath)) !== \"ok\") continue;\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 return linkedNames;\n}\n","// Framework singletons are stashed on globalThis so they survive jiti's\n// moduleCache-off re-evaluation (mioki loads plugins via jiti). Callers that\n// live in the normally-cached `mioku` dist could use a plain module-level\n// const, but the global indirection keeps things stable if a plugin ever\n// re-imports the framework through jiti.\n\nconst STORE_SYMBOL = Symbol.for(\"mioku.globalStore\");\ntype GlobalStore = Record<string, unknown>;\n\nfunction store(): GlobalStore {\n const g = globalThis as unknown as Record<symbol, GlobalStore>;\n if (!g[STORE_SYMBOL]) g[STORE_SYMBOL] = {};\n return g[STORE_SYMBOL]!;\n}\n\nexport function getOrCreate<T>(key: string, factory: () => T): T {\n const s = store();\n if (s[key] === undefined) s[key] = factory();\n return s[key] as T;\n}\n","import { logger } from \"./logger\";\nimport type {\n AccessHook,\n PluginHelp,\n PluginPackageConfig,\n} from \"../types\";\n\nconst PLUGIN_CONFIG_KEYS = new Set([\n \"services\",\n \"help\",\n \"accessHooks\",\n]);\n\nconst ACCESS_HOOK_KEYS = new Set([\n \"id\",\n \"match\",\n \"event\",\n \"description\",\n]);\n\nconst HELP_COMMAND_KEYS = new Set([\"cmd\", \"desc\", \"usage\", \"role\"]);\n\nfunction warnUnknownFields(\n prefix: string,\n obj: Record<string, unknown>,\n allowed: Set<string>,\n): void {\n for (const key of Object.keys(obj)) {\n if (!allowed.has(key)) {\n logger.warn(`[plugin-manifest] ${prefix} 含未知字段 \"${key}\"(将被忽略)`);\n }\n }\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n return value !== null && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction validateHelp(value: unknown, pluginName: string): PluginHelp | undefined {\n if (value === undefined) return undefined;\n if (!isPlainObject(value)) {\n logger.warn(`[plugin-manifest] ${pluginName}.help 必须是对象,已忽略`);\n return undefined;\n }\n warnUnknownFields(`${pluginName}.help`, value, HELP_COMMAND_KEYS);\n\n const title = String(value.title ?? \"\").trim();\n const description = String(value.description ?? \"\").trim();\n const rawCommands = value.commands;\n\n if (!title) {\n logger.warn(`[plugin-manifest] ${pluginName}.help.title 缺失或为空`);\n }\n if (!description) {\n logger.warn(`[plugin-manifest] ${pluginName}.help.description 缺失或为空`);\n }\n if (!Array.isArray(rawCommands)) {\n logger.warn(`[plugin-manifest] ${pluginName}.help.commands 必须是数组`);\n return { title, description, commands: [] };\n }\n\n const commands: PluginHelp[\"commands\"] = [];\n for (const cmd of rawCommands) {\n if (!isPlainObject(cmd)) {\n logger.warn(`[plugin-manifest] ${pluginName}.help.commands 项不是对象`);\n continue;\n }\n warnUnknownFields(\n `${pluginName}.help.commands[]`,\n cmd,\n HELP_COMMAND_KEYS,\n );\n const cmdName = String(cmd.cmd ?? \"\").trim();\n const desc = String(cmd.desc ?? \"\").trim();\n if (!cmdName || !desc) {\n logger.warn(\n `[plugin-manifest] ${pluginName}.help.commands 项缺少 cmd 或 desc`,\n );\n continue;\n }\n commands.push({\n cmd: cmdName,\n desc,\n usage: typeof cmd.usage === \"string\" ? cmd.usage : undefined,\n role: typeof cmd.role === \"string\" ? (cmd.role as never) : undefined,\n });\n }\n\n return { title, description, commands };\n}\n\nfunction validateAccessHooks(\n value: unknown,\n pluginName: string,\n): AccessHook[] | undefined {\n if (value === undefined) return undefined;\n if (!Array.isArray(value)) {\n logger.warn(`[plugin-manifest] ${pluginName}.accessHooks 必须是数组`);\n return undefined;\n }\n\n const hooks: AccessHook[] = [];\n for (const hook of value) {\n if (!isPlainObject(hook)) {\n logger.warn(`[plugin-manifest] ${pluginName}.accessHooks 项不是对象`);\n continue;\n }\n warnUnknownFields(\n `${pluginName}.accessHooks[]`,\n hook,\n ACCESS_HOOK_KEYS,\n );\n const id = String(hook.id ?? \"\").trim();\n if (!id) {\n logger.warn(\n `[plugin-manifest] ${pluginName}.accessHooks 项缺少 id,已忽略`,\n );\n continue;\n }\n hooks.push({\n id,\n match: typeof hook.match === \"string\" ? hook.match : undefined,\n event: typeof hook.event === \"string\" ? hook.event : undefined,\n description:\n typeof hook.description === \"string\" ? hook.description : undefined,\n });\n }\n return hooks;\n}\n\nexport function validatePluginPackageConfig(\n raw: unknown,\n pluginName: string,\n): PluginPackageConfig {\n const config: PluginPackageConfig = {};\n\n if (raw === undefined || raw === null) {\n return config;\n }\n if (!isPlainObject(raw)) {\n logger.warn(\n `[plugin-manifest] ${pluginName} 的 mioku 字段必须是对象,已使用空配置`,\n );\n return config;\n }\n\n warnUnknownFields(`${pluginName}.mioku`, raw, PLUGIN_CONFIG_KEYS);\n\n if (raw.services !== undefined) {\n if (Array.isArray(raw.services)) {\n const services = raw.services.filter(\n (s): s is string => typeof s === \"string\" && s.length > 0,\n );\n const dropped = raw.services.length - services.length;\n if (dropped > 0) {\n logger.warn(\n `[plugin-manifest] ${pluginName}.services 丢弃 ${dropped} 个非字符串项`,\n );\n }\n config.services = services;\n } else {\n logger.warn(`[plugin-manifest] ${pluginName}.services 必须是字符串数组`);\n }\n }\n\n const help = validateHelp(raw.help, pluginName);\n if (help) config.help = help;\n\n const hooks = validateAccessHooks(raw.accessHooks, pluginName);\n if (hooks) config.accessHooks = hooks;\n\n return config;\n}","import * as fs from \"fs/promises\";\nimport * as path from \"path\";\nimport { mkdirSync } from \"fs\";\nimport type {\n MiokuRuntimeConfig,\n PackageJsonLike,\n PluginMetadata,\n PluginPackageConfig,\n} from \"../types\";\nimport { DEFAULT_RUNTIME_PLUGINS_DIR } from \"./plugin-linker\";\nimport { logger } from \"./logger\";\nimport {\n scanLocalDir,\n scanNodeModules,\n pathExists,\n resolveRealpath,\n} from \"./module-scanner\";\nimport { getOrCreate } from \"./registry\";\nimport { validatePluginPackageConfig } from \"./plugin-manifest\";\n\nconst PLUGIN_PREFIX = \"mioku-plugin-\";\n\nexport class PluginManager {\n private plugins = new Map<string, PluginMetadata>();\n\n static getInstance(): PluginManager {\n return getOrCreate(\"plugin-manager\", () => new PluginManager());\n }\n\n async discoverPlugins(miokuConfig: MiokuRuntimeConfig = {}): Promise<PluginMetadata[]> {\n const configuredDir = miokuConfig.plugins_dir;\n const pluginsDir =\n configuredDir && configuredDir !== DEFAULT_RUNTIME_PLUGINS_DIR\n ? path.resolve(process.cwd(), configuredDir)\n : path.resolve(process.cwd(), \"plugins\");\n\n this.plugins.clear();\n\n if (!(await pathExists(pluginsDir))) {\n mkdirSync(pluginsDir, { recursive: true });\n }\n\n const local = await scanLocalDir(pluginsDir);\n for (const { name, path: p } of local) {\n const metadata = await this.loadPluginMetadata(name, p);\n if (metadata) this.plugins.set(metadata.name, metadata);\n }\n\n const external = await scanNodeModules(PLUGIN_PREFIX);\n for (const { name, path: p } of external) {\n const metadata = await this.loadPluginMetadata(name, p);\n if (metadata) this.plugins.set(metadata.name, metadata);\n }\n\n logger.info(`O.o 发现了 ${this.plugins.size} 个插件`);\n return [...this.plugins.values()];\n }\n\n private async loadPluginMetadata(\n name: string,\n pluginPath: string,\n ): Promise<PluginMetadata | null> {\n const resolvedPath = await resolveRealpath(pluginPath);\n let packageJson: PackageJsonLike | null = null;\n try {\n packageJson = JSON.parse(\n await fs.readFile(path.join(resolvedPath, \"package.json\"), \"utf-8\"),\n );\n } catch (error) {\n logger.warn(`[plugin-manager] 读取 ${name} 的 package.json 失败: ${error}`);\n }\n\nconst config: PluginPackageConfig = validatePluginPackageConfig(\n packageJson?.mioku,\n name,\n );\n return {\n name,\n version: packageJson?.version ?? \"0.0.0\",\n description: packageJson?.description,\n path: resolvedPath,\n packageJson: packageJson ?? {},\n config,\n };\n }\n\n collectRequiredServices(): Set<string> {\n const services = new Set<string>();\n for (const metadata of this.plugins.values()) {\n for (const service of metadata.config.services ?? []) services.add(service);\n }\n return services;\n }\n\n getPluginMetadata(name: string): PluginMetadata | undefined {\n return this.plugins.get(name);\n }\n\n getAllMetadata(): PluginMetadata[] {\n return [...this.plugins.values()];\n }\n\n reset(): void {\n this.plugins.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 {\n MiokuRuntimeConfig,\n PackageJsonLike,\n ServiceMetadata,\n MiokuService,\n} from \"../types\";\nimport { logger } from \"./logger\";\nimport {\n scanLocalDir,\n scanNodeModules,\n pathExists,\n toImportPath,\n} from \"./module-scanner\";\nimport { getOrCreate } from \"./registry\";\n\nconst SERVICE_PREFIX = \"mioku-service-\";\n\nexport class ServiceManager {\n private services = new Map<string, MiokuService>();\n private serviceMetadata = new Map<string, ServiceMetadata>();\n\n static getInstance(): ServiceManager {\n return getOrCreate(\"service-manager\", () => new ServiceManager());\n }\n\n async discoverServices(miokuConfig: MiokuRuntimeConfig = {}): Promise<ServiceMetadata[]> {\n const servicesDir = miokuConfig.services_dir\n ? path.resolve(process.cwd(), miokuConfig.services_dir)\n : path.resolve(process.cwd(), \"services\");\n\n this.serviceMetadata.clear();\n\n if (existsSync(servicesDir)) {\n const local = await scanLocalDir(servicesDir);\n for (const { name, path: p } of local) {\n const metadata = await this.loadServiceMetadata(name, p);\n if (metadata) this.serviceMetadata.set(name, metadata);\n }\n } else {\n mkdirSync(servicesDir, { recursive: true });\n }\n\n const external = await scanNodeModules(SERVICE_PREFIX);\n for (const { name, path: p } of external) {\n const metadata = await this.loadServiceMetadata(name, p);\n if (metadata) this.serviceMetadata.set(name, metadata);\n }\n\n logger.info(`o.O 发现了 ${this.serviceMetadata.size} 个服务`);\n return [...this.serviceMetadata.values()];\n }\n\n private async loadServiceMetadata(\n name: string,\n servicePath: string,\n ): Promise<ServiceMetadata | null> {\n const packageJsonPath = path.join(servicePath, \"package.json\");\n if (!(await pathExists(packageJsonPath))) return null;\n\n try {\n const packageJson: PackageJsonLike = JSON.parse(\n await fs.readFile(packageJsonPath, \"utf-8\"),\n );\n return {\n name,\n version: packageJson.version ?? \"0.0.0\",\n description: packageJson.description,\n path: servicePath,\n packageJson,\n };\n } catch (error) {\n logger.warn(`[service-manager] 解析服务 ${name} 失败: ${error}`);\n return null;\n }\n }\n\n async checkMissingServices(required: Set<string>): Promise<string[]> {\n const missing: string[] = [];\n for (const name of required) {\n if (!this.serviceMetadata.has(name)) missing.push(name);\n }\n return missing;\n }\n\n async loadAllServices(ctx: MiokiContext): Promise<void> {\n const all = [...this.serviceMetadata.values()];\n logger.info(`O.o 准备加载 ${all.length} 个服务...`);\n for (const metadata of all) {\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 tsEntry = path.join(metadata.path, \"index.ts\");\n const jsEntry = path.join(metadata.path, \"index.js\");\n const entry = (await pathExists(tsEntry))\n ? tsEntry\n : (await pathExists(jsEntry))\n ? jsEntry\n : null;\n if (!entry) {\n logger.error(`[service-manager] 服务 ${metadata.name} 入口丢失`);\n return false;\n }\n\n const serviceModule = await import(toImportPath(entry));\n const service: MiokuService = serviceModule.default ?? serviceModule;\n if (!service || typeof service.init !== \"function\") {\n logger.warn(`[service-manager] 服务 ${metadata.name} 无效:缺少 init()`);\n return false;\n }\n\n await service.init();\n if (service.api) {\n ctx.services[metadata.name] = service.api;\n }\n this.services.set(metadata.name, service);\n return true;\n } catch (error) {\n logger.error(`[service-manager] 加载服务 ${metadata.name} 失败: ${error}`);\n return false;\n }\n }\n\n registerBuiltinService(name: string, service: MiokuService): void {\n this.services.set(name, service);\n }\n\n getService(name: string): MiokuService | undefined {\n return this.services.get(name);\n }\n\n async disposeAll(): Promise<void> {\n for (const [, service] of this.services) {\n 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 { existsSync, mkdirSync } from \"fs\";\nimport type { MiokuRuntimeConfig } from \"../types\";\nimport pluginManager from \"./plugin-manager\";\nimport serviceManager from \"./service-manager\";\nimport {\n prepareRuntimePluginLinks,\n DEFAULT_RUNTIME_PLUGINS_DIR,\n} from \"./plugin-linker\";\nimport { logger } from \"./logger\";\n\ninterface BotConfigLike {\n plugins: string[];\n plugins_dir?: string;\n}\n\nexport interface BootstrapDeps {\n cwd: string;\n botConfig: BotConfigLike;\n startMioki: (opts: { cwd: string }) => Promise<void>;\n}\n\nexport async function readMiokuConfig(): Promise<MiokuRuntimeConfig> {\n const packageJsonPath = path.join(process.cwd(), \"package.json\");\n try {\n const pkg = JSON.parse(await fs.readFile(packageJsonPath, \"utf-8\"));\n return (pkg.mioki ?? {}) as MiokuRuntimeConfig;\n } catch {\n return {};\n }\n}\n\nfunction ensureRuntimeDirectories(): void {\n for (const dir of [\"data\", \"config\", \"temp\"]) {\n if (!existsSync(dir)) mkdirSync(dir, { recursive: true });\n }\n}\n\nasync function discoverAndLinkPlugins(\n miokuConfig: MiokuRuntimeConfig,\n): Promise<string[]> {\n logger.info(\"O.o Miku 正在翻找插件..\");\n const discovered = await pluginManager.discoverPlugins(miokuConfig);\n logger.info(\n `O.o 共发现 ${discovered.length} 个插件: ${discovered.map((p) => p.name).join(\", \")}`,\n );\n const runtimePluginsDir = path.resolve(\n process.cwd(),\n DEFAULT_RUNTIME_PLUGINS_DIR,\n );\n return prepareRuntimePluginLinks(discovered, runtimePluginsDir);\n}\n\nasync function discoverAndValidateServices(\n miokuConfig: MiokuRuntimeConfig,\n): Promise<void> {\n logger.info(\"o.O Miku 正在翻找服务..\");\n await serviceManager.discoverServices(miokuConfig);\n const requiredServices = pluginManager.collectRequiredServices();\n const missing = await serviceManager.checkMissingServices(requiredServices);\n if (missing.length > 0) logger.warn(`发现缺失服务: ${missing.join(\", \")}`);\n}\n\nfunction applyPluginAllowlist(\n miokuConfig: MiokuRuntimeConfig,\n botConfig: BotConfigLike,\n linkedPluginNames: string[],\n): void {\n botConfig.plugins_dir = DEFAULT_RUNTIME_PLUGINS_DIR;\n // Respect an explicit plugins list; only auto-load when undefined.\n if (miokuConfig.plugins !== undefined) return;\n for (const name of linkedPluginNames) {\n if (!botConfig.plugins.includes(name)) botConfig.plugins.push(name);\n }\n}\n\nexport async function bootstrapMioku(deps: BootstrapDeps): Promise<void> {\n const { cwd, botConfig, startMioki } = deps;\n const miokuConfig = await readMiokuConfig();\n ensureRuntimeDirectories();\n const linkedPluginNames = await discoverAndLinkPlugins(miokuConfig);\n await discoverAndValidateServices(miokuConfig);\n applyPluginAllowlist(miokuConfig, botConfig, linkedPluginNames);\n await startMioki({ cwd });\n}\n","import type { MiokiContext } from \"mioki\";\n\nexport interface ServiceRef<T> {\n readonly id: string;\n}\n\nexport function defineService<T>(id: string): ServiceRef<T> {\n return { id };\n}\n\nexport function getService<T>(\n ctx: MiokiContext,\n ref: ServiceRef<T>,\n): T | undefined {\n return ctx.services[ref.id] as T | undefined;\n}\n\nexport function requireService<T>(\n ctx: MiokiContext,\n ref: ServiceRef<T>,\n): T {\n const svc = ctx.services[ref.id] as T | undefined;\n if (svc === undefined) {\n throw new Error(\n `[mioku] required service \"${ref.id}\" is not available`,\n );\n }\n return svc;\n}\n\nexport function hasService<T>(\n ctx: MiokiContext,\n ref: ServiceRef<T>,\n): boolean {\n return ctx.services[ref.id] !== undefined;\n}","import type {\n AIService,\n ConfigService,\n ScreenshotService,\n HelpService,\n} from \"../types\";\nimport { defineService } from \"./service\";\n\nexport const Services = {\n AI: defineService<AIService>(\"ai\"),\n Config: defineService<ConfigService>(\"config\"),\n Screenshot: defineService<ScreenshotService>(\"screenshot\"),\n Help: defineService<HelpService>(\"help\"),\n} as const;\n\nexport type BuiltinServiceRef =\n | typeof Services.AI\n | typeof Services.Config\n | typeof Services.Screenshot\n | typeof Services.Help;","import type { MiokiContext } from \"mioki\";\nimport { botConfig } from \"mioki\";\nimport { getService } from \"./service\";\nimport { Services } from \"./services\";\nimport pluginManager from \"./plugin-manager\";\nimport { logger } from \"./logger\";\n\nfunction hasPublicKeyword(keywords: unknown): boolean {\n return Array.isArray(keywords) && keywords.includes(\"mioku\");\n}\n\nexport async function registerPluginArtifacts(ctx: MiokiContext): Promise<void> {\n const enabledPlugins = new Set<string>(botConfig.plugins ?? []);\n const pluginMetadata = pluginManager.getAllMetadata().filter((metadata) =>\n enabledPlugins.size > 0 ? enabledPlugins.has(metadata.name) : true,\n );\n\n const helpService = getService(ctx, Services.Help);\n if (!helpService) return;\n\n let helpCount = 0;\n for (const metadata of pluginMetadata) {\n if (!metadata.config.help) continue;\n if (!hasPublicKeyword(metadata.packageJson?.keywords)) continue;\n helpService.registerHelp(metadata.name, metadata.config.help);\n helpCount += 1;\n }\n logger.info(`[plugin-artifacts] Registered ${helpCount} help manifest(s)`);\n}\n","import * as fs from \"fs/promises\";\nimport * as path from \"path\";\nimport { existsSync, mkdirSync } from \"fs\";\nimport { logger } from \"./logger\";\n\nconst SERVICE_CONFIG_ROOT = \"service\";\n\nfunction resolveConfigDir(serviceName: string): string {\n return path.join(process.cwd(), \"config\", SERVICE_CONFIG_ROOT, serviceName);\n}\n\nfunction resolveConfigPath(serviceName: string, configName: string): string {\n return path.join(resolveConfigDir(serviceName), `${configName}.json`);\n}\n\nfunction ensureDir(serviceName: string): void {\n const dir = resolveConfigDir(serviceName);\n if (!existsSync(dir)) mkdirSync(dir, { recursive: true });\n}\n\nexport async function registerServiceConfig(\n serviceName: string,\n configName: string,\n defaults: Record<string, unknown>,\n): Promise<void> {\n ensureDir(serviceName);\n const configPath = resolveConfigPath(serviceName, configName);\n if (!existsSync(configPath)) {\n await fs.writeFile(configPath, JSON.stringify(defaults, null, 2), \"utf-8\");\n }\n}\n\nexport async function getServiceConfig(\n serviceName: string,\n configName: string,\n): Promise<Record<string, unknown>> {\n const configPath = resolveConfigPath(serviceName, configName);\n try {\n return JSON.parse(await fs.readFile(configPath, \"utf-8\"));\n } catch (error) {\n if (!existsSync(configPath)) return {};\n logger.warn(`[service-config] 读取 ${serviceName}/${configName} 失败: ${error}`);\n return {};\n }\n}\n\nexport async function updateServiceConfig(\n serviceName: string,\n configName: string,\n value: Record<string, unknown>,\n): Promise<void> {\n ensureDir(serviceName);\n await fs.writeFile(\n resolveConfigPath(serviceName, configName),\n JSON.stringify(value, null, 2),\n \"utf-8\",\n );\n}\n\nexport async function getServiceConfigs(\n serviceName: string,\n): Promise<Record<string, Record<string, unknown>>> {\n const dir = resolveConfigDir(serviceName);\n if (!existsSync(dir)) return {};\n\n const result: Record<string, Record<string, unknown>> = {};\n const files = (await fs.readdir(dir)).filter((name) => name.endsWith(\".json\"));\n for (const file of files) {\n try {\n result[path.basename(file, \".json\")] = JSON.parse(\n await fs.readFile(path.join(dir, file), \"utf-8\"),\n );\n } catch (error) {\n logger.warn(`[service-config] 读取 ${serviceName}/${file} 失败: ${error}`);\n }\n }\n return result;\n}\n\nexport async function deleteServiceConfig(\n serviceName: string,\n configName: string,\n): Promise<boolean> {\n const configPath = resolveConfigPath(serviceName, configName);\n if (!existsSync(configPath)) return false;\n await fs.unlink(configPath);\n return true;\n}\n","// Mioku framework types — single source of truth for the public API surface.\n\n// ---------- framework ----------\n\nexport interface MiokuService {\n name: string;\n version: string;\n description?: string;\n init(): Promise<void>;\n api: Record<string, any>;\n dispose?(): Promise<void>;\n}\n\nexport interface MiokuRuntimeConfig {\n plugins?: string[];\n plugins_dir?: string;\n services_dir?: string;\n [key: string]: unknown;\n}\n\nexport interface PackageJsonLike {\n name?: string;\n version?: string;\n description?: string;\n keywords?: string[];\n mioki?: MiokuRuntimeConfig;\n mioku?: PluginPackageConfig;\n dependencies?: Record<string, string>;\n}\n\nexport interface PluginMetadata {\n name: string;\n version: string;\n description?: string;\n path: string;\n packageJson: PackageJsonLike;\n config: PluginPackageConfig;\n}\n\nexport interface ServiceMetadata {\n name: string;\n version: string;\n description?: string;\n path: string;\n packageJson: PackageJsonLike;\n}\n\n// ---------- plugin package config ----------\n\nexport interface PluginPackageConfig {\n services?: string[];\n help?: PluginHelp;\n accessHooks?: AccessHook[];\n}\n\nexport interface PluginHelp {\n title: string;\n description: string;\n commands: Array<{\n cmd: string;\n desc: string;\n usage?: string;\n role?: CommandRole;\n }>;\n}\n\nexport type CommandRole = \"master\" | \"admin\" | \"owner\" | \"member\";\n\n/**\n * - `\"master\"`:仅 bot 主人可触发\n * - `\"owner\"`:legacy alias\n * - `\"admin\"`:bot 主人或管理员\n * - `\"member\"`:群内任意成员\n *\n */\nexport type SkillPermissionRole = \"master\" | \"owner\" | \"admin\" | \"member\";\n\nexport function normalizeSkillPermissionRole(\n role: unknown,\n): SkillPermissionRole {\n const normalized = String(role ?? \"\")\n .trim()\n .toLowerCase();\n if (\n normalized === \"master\" ||\n normalized === \"owner\" ||\n normalized === \"admin\" ||\n normalized === \"member\"\n ) {\n return normalized as SkillPermissionRole;\n }\n return \"member\";\n}\n\nexport interface AccessHook {\n id: string;\n match?: string;\n event?: string;\n description?: string;\n}\n\nexport type AccessAction = \"allow\" | \"block\";\n\nexport interface AccessRuleEntry {\n action: AccessAction;\n}\n\nexport interface AccessScopeConfig {\n plugins?: Record<string, AccessRuleEntry>;\n commands?: Record<string, Record<string, AccessRuleEntry>>;\n}\n\nexport interface AccessControlConfig {\n version: 1;\n global: AccessScopeConfig;\n groups: Record<string, AccessScopeConfig>;\n users: Record<string, AccessScopeConfig>;\n}\n\n// ---------- built-in service contracts ----------\n\nexport interface ConfigService {\n registerConfig(\n pluginName: string,\n configName: string,\n initialConfig: any,\n ): Promise<boolean>;\n updateConfig(\n pluginName: string,\n configName: string,\n updates: any,\n ): Promise<boolean>;\n getConfig(pluginName: string, configName: string): Promise<any>;\n getPluginConfigs(pluginName: string): Promise<Record<string, any>>;\n onConfigChange(\n pluginName: string,\n configName: string,\n callback: (newConfig: any) => void,\n ): () => void;\n}\n\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\nexport interface HelpService {\n registerHelp(pluginName: string, help: PluginHelp): void;\n getHelp(pluginName: string): PluginHelp | undefined;\n getAllHelp(): Map<string, PluginHelp>;\n unregisterHelp(pluginName: string): boolean;\n}\n\nexport interface WebUIService {\n getSettings(): { port: number; host: string; packageManager: string };\n}\n\n// ---------- AI service ----------\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?: SkillPermissionRole;\n tools: AITool[];\n}\n\nexport interface TextMessage {\n role: \"system\" | \"user\" | \"assistant\";\n content: string;\n}\n\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\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 type AIProtocol =\n | \"openai-chat\"\n | \"openai-response\"\n | \"anthropic\"\n | \"gemini\";\n\nexport type AIModelCapability = \"text\" | \"vision\" | \"tool-use\" | \"reasoning\";\n\nexport type AIModelRole = \"main\" | \"working\" | \"vision\";\n\nexport interface AIProviderConfig {\n id: string;\n name: string;\n protocol: AIProtocol;\n apiUrl: string;\n apiKey: string;\n enabled: boolean;\n headers?: Record<string, string>;\n}\n\nexport interface AIModelDescriptor {\n id: string;\n providerId: string;\n modelId: string;\n name: string;\n capabilities: AIModelCapability[];\n contextWindow?: number;\n maxOutputTokens?: number;\n isCustom?: boolean;\n}\n\nexport interface AIInstanceInfo {\n name: string;\n providerId: string;\n modelId: string;\n role?: AIModelRole;\n}\n\nexport interface AIInstance {\n generateText(options: {\n prompt?: string;\n messages: TextMessage[];\n model?: string;\n temperature?: number;\n max_tokens?: number;\n }): Promise<string>;\n generateMultimodal(options: {\n prompt?: string;\n messages: MultimodalMessage[];\n model?: string;\n temperature?: number;\n max_tokens?: number;\n }): Promise<string>;\n complete(options: CompleteOptions): Promise<CompleteResponse>;\n generateWithTools(options: {\n prompt?: string;\n messages: TextMessage[] | MultimodalMessage[];\n model?: string;\n temperature?: number;\n maxIterations?: number;\n }): Promise<any>;\n setUsageContext?(context: AIUsageContext | undefined): void;\n withUsageContext?<T>(\n context: AIUsageContext | undefined,\n fn: () => Promise<T>,\n ): 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: {\n name: string;\n apiUrl: string;\n apiKey: string;\n modelType: \"text\" | \"multimodal\";\n model?: string;\n }): Promise<AIInstance>;\n createInstance?(options: {\n name: string;\n providerId: string;\n modelId: string;\n role?: AIModelRole;\n }): Promise<AIInstance>;\n get(name: string): AIInstance | undefined;\n list(): string[];\n listInstances?(): AIInstanceInfo[];\n remove(name: string): boolean;\n setDefault(name: string): boolean;\n getDefault(): AIInstance | undefined;\n listProviders?(): AIProviderConfig[];\n getProvider?(id: string): AIProviderConfig | undefined;\n createProvider?(\n input: Omit<AIProviderConfig, \"id\"> & { id?: string },\n ): Promise<AIProviderConfig>;\n updateProvider?(\n id: string,\n input: Partial<AIProviderConfig>,\n ): Promise<AIProviderConfig>;\n removeProvider?(id: string): boolean;\n testProvider?(\n id: string,\n ): Promise<{ ok: boolean; error?: string; models?: AIModelDescriptor[] }>;\n listModels?(providerId?: string): AIModelDescriptor[];\n refreshModels?(providerId: string): Promise<AIModelDescriptor[]>;\n registerCustomModel?(input: {\n providerId: string;\n modelId: string;\n name?: string;\n capabilities?: AIModelCapability[];\n }): AIModelDescriptor;\n removeCustomModel?(modelFullId: string): boolean;\n getRoleBindings?(): Record<AIModelRole, string | undefined>;\n setRoleBinding?(role: AIModelRole, modelFullId: string | undefined): boolean;\n getInstanceByRole?(role: AIModelRole): 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: {\n range: AIUsageRange;\n botId?: number;\n }): AIUsageSummary;\n cleanupUsageStats?(retentionMs?: number): number;\n finalizeUsage?(usageId: string, finalization: AIUsageFinalization): boolean;\n}\n\n// ---------- chat runtime ----------\n\nexport interface ChatRuntime {\n generateNotice(options: ChatRuntimeNoticeOptions): Promise<ChatRuntimeResult>;\n requestInformation(\n options: ChatRuntimeInformationRequestOptions,\n ): Promise<ChatRuntimeResult>;\n}\n\nexport const TOOL_RESULT_FOLLOWUP_KEY = \"__miokuFollowup\";\n\nexport interface ToolResultFollowup {\n text: string;\n images?: Array<{ url: string; detail?: \"auto\" | \"low\" | \"high\" }>;\n videos?: Array<{ url: string; detail?: \"auto\" | \"low\" | \"high\" }>;\n}\n\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 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\n// ---------- usage tracking ----------\n\nexport type AIUsageRange = \"today\" | \"7d\" | \"30d\";\n\nexport type AIUsageScope = \"all\" | \"bot\";\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 AIUsageBotOption {\n botId: number;\n label: string;\n}\n\nexport interface AIUsageSummary {\n generatedAt: number;\n range: AIUsageRange;\n scope: AIUsageScope;\n botId?: number;\n bots: AIUsageBotOption[];\n totals: {\n requests: number;\n successfulRequests: number;\n failedRequests: number;\n userMessages: number;\n assistantMessages: number;\n systemMessages: number;\n toolMessages: number;\n sentUserMessages: number;\n sentAssistantMessages: number;\n inputTokens: number;\n outputTokens: number;\n systemPromptTokens: number;\n totalTokens: number;\n cacheWriteTokens: number;\n cacheReadTokens: number;\n toolDefinitionTokens: number;\n toolUseTokens: number;\n chatHistoryTokens: number;\n otherContextTokens: number;\n durationMs: number;\n toolCalls: number;\n };\n rates: {\n throughputTokPerMin: number;\n averageTokensPerUserMessage: number;\n averageTokensPerSentMessage: number;\n errorRate: number;\n cacheHitRate: number;\n };\n toolRanking: Array<{ name: string; count: number }>;\n groupRanking: Array<{\n groupId: number;\n groupName: string;\n requests: number;\n totalTokens: number;\n userMessages: number;\n assistantMessages: number;\n errorRate: number;\n }>;\n tokenFlow: Array<{\n name: \"输入\" | \"输出\" | \"缓存写入\" | \"缓存读取\";\n value: number;\n }>;\n tokenCategories: Array<{\n name: \"系统提示词\" | \"工具定义\" | \"工具使用\" | \"聊天上下文\" | \"其他上下文\";\n value: number;\n }>;\n dailyActivity: Array<{\n day: string;\n requests: number;\n userMessages: number;\n assistantMessages: number;\n totalTokens: number;\n inputTokens: number;\n cacheReadTokens: number;\n throughputTokPerMin: number;\n averageTokensPerUserMessage: number;\n averageTokensPerSentMessage: number;\n errorRate: number;\n cacheHitRate: number;\n }>;\n hourlyActivity: Array<{\n hour: string;\n requests: number;\n userMessages: number;\n assistantMessages: number;\n totalTokens: number;\n inputTokens: number;\n cacheReadTokens: number;\n throughputTokPerMin: number;\n averageTokensPerUserMessage: number;\n averageTokensPerSentMessage: number;\n errorRate: number;\n cacheHitRate: number;\n }>;\n}\n","import * as path from \"path\";\nimport { existsSync, mkdirSync } from \"fs\";\n\nexport function getPluginDataDir(pluginName: string): string {\n return path.join(process.cwd(), \"data\", pluginName);\n}\n\nexport function getServiceDataDir(serviceName: string): string {\n return path.join(process.cwd(), \"data\", serviceName);\n}\n\nexport function getDataDir(): string {\n return path.join(process.cwd(), \"data\");\n}\n\nexport function getPluginConfigDir(pluginName: string): string {\n return path.join(process.cwd(), \"config\", pluginName);\n}\n\nexport function getServiceConfigDir(serviceName: string): string {\n return path.join(process.cwd(), \"config\", \"service\", serviceName);\n}\n\nexport function getConfigDir(): string {\n return path.join(process.cwd(), \"config\");\n}\n\nexport function ensureDataDir(pluginName: string): string {\n const dir = getPluginDataDir(pluginName);\n if (!existsSync(dir)) mkdirSync(dir, { recursive: true });\n return dir;\n}\n","import { getOrCreate } from \"./registry\";\n\nconst store = getOrCreate<Record<string, unknown>>(\n \"plugin-runtime-state\",\n () => ({}),\n);\n\nexport interface PluginStateRef<T> {\n readonly name: string;\n get(): T;\n set(next: T): void;\n reset(): void;\n}\n\nexport function defineState<T>(name: string, initial: T): PluginStateRef<T> {\n return {\n name,\n get(): T {\n const current = store[name];\n return (current === undefined ? initial : current) as T;\n },\n set(next: T): void {\n store[name] = next;\n },\n reset(): void {\n delete store[name];\n },\n };\n}\n\nexport function hasPluginState(name: string): boolean {\n return store[name] !== undefined;\n}\n\nexport function getPluginRuntimeState<T = Record<string, any>>(\n name: string,\n): T {\n if (!store[name]) store[name] = {};\n return store[name] as T;\n}\n\nexport function setPluginRuntimeState<T>(name: string, state: T): void {\n store[name] = state;\n}\n\nexport function resetPluginRuntimeState(name: string): void {\n delete store[name];\n}\n\nexport function getAllPluginRuntimeStates(): Record<string, unknown> {\n return { ...store };\n}","import * as fs from \"fs\";\nimport * as path from \"path\";\nimport { fileURLToPath } from \"url\";\nimport { bootstrapMioku } from \"./core/bootstrap\";\nimport { setMiokuLogger } from \"./core/logger\";\nimport { default as serviceManager } from \"./core/service-manager\";\n\nexport type { MiokiPlugin, MiokiContext } from \"mioki\";\nexport type { EventMap } from \"napcat-sdk\";\n\nexport function definePlugin<T extends import(\"mioki\").MiokiPlugin>(\n plugin: T,\n): T {\n return plugin;\n}\n\nexport { default as pluginManager } from \"./core/plugin-manager\";\nexport { default as serviceManager } from \"./core/service-manager\";\nexport { registerPluginArtifacts } from \"./core/plugin-artifact-registry\";\n\nexport {\n registerServiceConfig,\n getServiceConfig,\n updateServiceConfig,\n getServiceConfigs,\n deleteServiceConfig,\n} from \"./core/service-config\";\n\nexport type {\n MiokuService,\n MiokuRuntimeConfig,\n PackageJsonLike,\n PluginMetadata,\n ServiceMetadata,\n PluginPackageConfig,\n PluginHelp,\n CommandRole,\n AccessHook,\n AccessAction,\n AccessRuleEntry,\n AccessScopeConfig,\n AccessControlConfig,\n ConfigService,\n ScreenshotService,\n HelpService,\n WebUIService,\n AITool,\n AISkill,\n AIInstance,\n AIService,\n AIProtocol,\n AIModelCapability,\n AIModelRole,\n AIProviderConfig,\n AIModelDescriptor,\n AIInstanceInfo,\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 AIUsageScope,\n AIUsageBotOption,\n AIUsageContext,\n AIUsageBreakdown,\n AIUsageFinalization,\n AIUsageSummary,\n} from \"./types\";\n\nexport {\n TOOL_RESULT_FOLLOWUP_KEY,\n normalizeSkillPermissionRole,\n} from \"./types\";\n\nexport {\n defineService,\n getService,\n requireService,\n hasService,\n} from \"./core/service\";\nexport type { ServiceRef } from \"./core/service\";\nexport { Services } from \"./core/services\";\nexport type { BuiltinServiceRef } from \"./core/services\";\n\nexport interface MiokuStartOptions {\n cwd?: string;\n}\n\nexport async function start(options: MiokuStartOptions = {}): Promise<void> {\n const { cwd = process.cwd() } = options;\n if (cwd) process.chdir(cwd);\n\n const { start: startMioki, logger, botConfig } = await import(\"mioki\");\n setMiokuLogger(logger);\n\n let shuttingDown = false;\n const shutdown = async (signal: string) => {\n if (shuttingDown) return;\n shuttingDown = true;\n logger.info(`收到 ${signal} 信号,正在关闭服务...`);\n const timer = setTimeout(() => {\n logger.error(\"服务关闭超时,强制退出\");\n process.exit(1);\n }, 15_000);\n timer.unref();\n await serviceManager.disposeAll();\n clearTimeout(timer);\n logger.info(\"Mioku 服务已完全关闭\");\n process.exit(0);\n };\n\n process.on(\"SIGINT\", () => shutdown(\"SIGINT\"));\n process.on(\"SIGTERM\", () => shutdown(\"SIGTERM\"));\n\n logger.info(\"こんにちは..\");\n logger.info(\"---------------------------------------\");\n logger.info(\"---------- Mioku 正在启动 ------------\");\n logger.info(\"---------------------------------------\");\n\n await bootstrapMioku({ cwd, botConfig, startMioki });\n}\n\nfunction readVersion(): string {\n try {\n const here = path.dirname(fileURLToPath(import.meta.url));\n const pkgPath = path.join(here, \"..\", \"package.json\");\n return JSON.parse(fs.readFileSync(pkgPath, \"utf-8\")).version ?? \"0.0.0\";\n } catch {\n return \"0.0.0\";\n }\n}\n\nexport const version: string = readVersion();\n\nexport {\n getDataDir,\n getPluginDataDir,\n getServiceDataDir,\n getConfigDir,\n getPluginConfigDir,\n getServiceConfigDir,\n ensureDataDir,\n} from \"./core/data-paths\";\n\nexport {\n defineState,\n hasPluginState,\n getPluginRuntimeState,\n setPluginRuntimeState,\n resetPluginRuntimeState,\n getAllPluginRuntimeStates,\n} from \"./core/plugin-runtime-state\";\nexport type { PluginStateRef } from \"./core/plugin-runtime-state\";\n\nexport {\n resolveCommand,\n commandExists,\n buildSpawnPlan,\n runCommand,\n runCommandInherit,\n} from \"./core/exec\";\n\nexport type { RunCommandResult, SpawnPlan } from \"./core/exec\";\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs","names":["fallbackLogger: MiokuLogger","activeLogger: MiokuLogger","logger: MiokuLogger | undefined","logger","logger: MiokuLogger","filePath: string","p: string","dir: string","results: DiscoveredModule[]","entries: import(\"fs\").Dirent[]","prefix: string","entryPath: string","linkPath: string","targetPath: string","runtimePluginsDir: string","metadata: PluginMetadata","plugins: PluginMetadata[]","linkedNames: string[]","store","key: string","factory: () => T","prefix: string","obj: Record<string, unknown>","allowed: Set<string>","value: unknown","pluginName: string","commands: PluginHelp[\"commands\"]","hooks: AccessHook[]","raw: unknown","config: PluginPackageConfig","miokuConfig: MiokuRuntimeConfig","name: string","pluginPath: string","packageJson: PackageJsonLike | null","config: PluginPackageConfig","miokuConfig: MiokuRuntimeConfig","name: string","servicePath: string","packageJson: PackageJsonLike","required: Set<string>","missing: string[]","ctx: MiokiContext","metadata: ServiceMetadata","service: MiokuService","miokuConfig: MiokuRuntimeConfig","botConfig: BotConfigLike","linkedPluginNames: string[]","deps: BootstrapDeps","botConfig","id: string","ctx: MiokiContext","ref: ServiceRef<T>","keywords: unknown","ctx: MiokiContext","botConfig","serviceName: string","configName: string","defaults: Record<string, unknown>","value: Record<string, unknown>","result: Record<string, Record<string, unknown>>","role: unknown","pluginName: string","serviceName: string","name: string","initial: T","next: T","state: T","plugin: T","options: MiokuStartOptions","logger","signal: string","version: string"],"sources":["../src/core/logger.ts","../src/core/module-scanner.ts","../src/core/plugin-linker.ts","../src/core/registry.ts","../src/core/plugin-manifest.ts","../src/core/plugin-manager.ts","../src/core/service-manager.ts","../src/core/bootstrap.ts","../src/core/service.ts","../src/core/services.ts","../src/core/plugin-artifact-registry.ts","../src/core/service-config.ts","../src/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 { pathToFileURL } from \"node:url\";\n\nexport interface DiscoveredModule {\n name: string;\n path: string;\n}\n\nexport async function pathExists(filePath: string): Promise<boolean> {\n try {\n await fs.access(filePath);\n return true;\n } catch {\n return false;\n }\n}\n\nexport async function resolveRealpath(p: string): Promise<string> {\n try {\n return await fs.realpath(p);\n } catch {\n return p;\n }\n}\n\n// Windows requires file:// URLs for absolute paths in dynamic import().\n// pathToFileURL also percent-encodes spaces and non-ASCII segments, which a\n// hand-rolled string replace leaves broken (e.g. \"C:\\用户\\my bot\").\nexport function toImportPath(filePath: string): string {\n if (process.platform === \"win32\") {\n return pathToFileURL(filePath).href;\n }\n return filePath;\n}\n\nexport async function scanLocalDir(dir: string): Promise<DiscoveredModule[]> {\n const results: DiscoveredModule[] = [];\n if (!(await pathExists(dir))) return results;\n\n let entries: import(\"fs\").Dirent[];\n try {\n entries = await fs.readdir(dir, { withFileTypes: true });\n } catch {\n return results;\n }\n\n for (const entry of entries) {\n const entryPath = path.join(dir, entry.name);\n try {\n const stat = await fs.stat(entryPath);\n if (!stat.isDirectory()) continue;\n } catch {\n continue;\n }\n results.push({ name: entry.name, path: await resolveRealpath(entryPath) });\n }\n return results;\n}\n\nexport async function scanNodeModules(prefix: string): Promise<DiscoveredModule[]> {\n const results: DiscoveredModule[] = [];\n const nodeModulesPath = path.resolve(process.cwd(), \"node_modules\");\n if (!(await pathExists(nodeModulesPath))) return results;\n\n let entries: import(\"fs\").Dirent[];\n try {\n entries = await fs.readdir(nodeModulesPath, { withFileTypes: true });\n } catch {\n return results;\n }\n\n // Don't filter by isDirectory(): node_modules entries are often symlinks\n // into the workspace, and Dirent.isDirectory() returns false for symlinks.\n for (const entry of entries) {\n if (!entry.name.startsWith(prefix)) continue;\n const name = entry.name.slice(prefix.length);\n const fullPath = path.join(nodeModulesPath, entry.name);\n results.push({ name, path: await resolveRealpath(fullPath) });\n }\n return results;\n}\n","import * as fs from \"fs/promises\";\nimport * as path from \"path\";\nimport type { PluginMetadata } from \"../types\";\nimport { logger } from \"./logger\";\nimport { pathExists } from \"./module-scanner\";\n\nexport const DEFAULT_RUNTIME_PLUGINS_DIR = \".mioku/plugins\";\n\ntype SymlinkState = \"ok\" | \"blocked\" | \"removed\";\n\nasync function removeIfBrokenSymlink(entryPath: string): Promise<SymlinkState> {\n let stat;\n try {\n stat = await fs.lstat(entryPath);\n } catch {\n return \"removed\";\n }\n if (!stat.isSymbolicLink()) return \"blocked\";\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 return path.relative(path.dirname(linkPath), targetPath) || \".\";\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) return true;\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 // Junctions on Windows don't require admin rights; relative dir symlinks elsewhere.\n if (process.platform === \"win32\") {\n await fs.symlink(targetPath, linkPath, \"junction\");\n } else {\n await fs.symlink(relativeSymlinkTarget(linkPath, targetPath), linkPath, \"dir\");\n }\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((p) => p.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 if ((await removeIfBrokenSymlink(entryPath)) !== \"ok\") continue;\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 return linkedNames;\n}\n","// Framework singletons are stashed on globalThis so they survive jiti's\n// moduleCache-off re-evaluation (mioki loads plugins via jiti). Callers that\n// live in the normally-cached `mioku` dist could use a plain module-level\n// const, but the global indirection keeps things stable if a plugin ever\n// re-imports the framework through jiti.\n\nconst STORE_SYMBOL = Symbol.for(\"mioku.globalStore\");\ntype GlobalStore = Record<string, unknown>;\n\nfunction store(): GlobalStore {\n const g = globalThis as unknown as Record<symbol, GlobalStore>;\n if (!g[STORE_SYMBOL]) g[STORE_SYMBOL] = {};\n return g[STORE_SYMBOL]!;\n}\n\nexport function getOrCreate<T>(key: string, factory: () => T): T {\n const s = store();\n if (s[key] === undefined) s[key] = factory();\n return s[key] as T;\n}\n","import { logger } from \"./logger\";\nimport type {\n AccessHook,\n PluginHelp,\n PluginPackageConfig,\n} from \"../types\";\n\nconst PLUGIN_CONFIG_KEYS = new Set([\n \"services\",\n \"help\",\n \"accessHooks\",\n]);\n\nconst ACCESS_HOOK_KEYS = new Set([\n \"id\",\n \"match\",\n \"event\",\n \"description\",\n]);\n\nconst HELP_COMMAND_KEYS = new Set([\"cmd\", \"desc\", \"usage\", \"role\"]);\n\nfunction warnUnknownFields(\n prefix: string,\n obj: Record<string, unknown>,\n allowed: Set<string>,\n): void {\n for (const key of Object.keys(obj)) {\n if (!allowed.has(key)) {\n logger.warn(`[plugin-manifest] ${prefix} 含未知字段 \"${key}\"(将被忽略)`);\n }\n }\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n return value !== null && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction validateHelp(value: unknown, pluginName: string): PluginHelp | undefined {\n if (value === undefined) return undefined;\n if (!isPlainObject(value)) {\n logger.warn(`[plugin-manifest] ${pluginName}.help 必须是对象,已忽略`);\n return undefined;\n }\n warnUnknownFields(`${pluginName}.help`, value, HELP_COMMAND_KEYS);\n\n const title = String(value.title ?? \"\").trim();\n const description = String(value.description ?? \"\").trim();\n const rawCommands = value.commands;\n\n if (!title) {\n logger.warn(`[plugin-manifest] ${pluginName}.help.title 缺失或为空`);\n }\n if (!description) {\n logger.warn(`[plugin-manifest] ${pluginName}.help.description 缺失或为空`);\n }\n if (!Array.isArray(rawCommands)) {\n logger.warn(`[plugin-manifest] ${pluginName}.help.commands 必须是数组`);\n return { title, description, commands: [] };\n }\n\n const commands: PluginHelp[\"commands\"] = [];\n for (const cmd of rawCommands) {\n if (!isPlainObject(cmd)) {\n logger.warn(`[plugin-manifest] ${pluginName}.help.commands 项不是对象`);\n continue;\n }\n warnUnknownFields(\n `${pluginName}.help.commands[]`,\n cmd,\n HELP_COMMAND_KEYS,\n );\n const cmdName = String(cmd.cmd ?? \"\").trim();\n const desc = String(cmd.desc ?? \"\").trim();\n if (!cmdName || !desc) {\n logger.warn(\n `[plugin-manifest] ${pluginName}.help.commands 项缺少 cmd 或 desc`,\n );\n continue;\n }\n commands.push({\n cmd: cmdName,\n desc,\n usage: typeof cmd.usage === \"string\" ? cmd.usage : undefined,\n role: typeof cmd.role === \"string\" ? (cmd.role as never) : undefined,\n });\n }\n\n return { title, description, commands };\n}\n\nfunction validateAccessHooks(\n value: unknown,\n pluginName: string,\n): AccessHook[] | undefined {\n if (value === undefined) return undefined;\n if (!Array.isArray(value)) {\n logger.warn(`[plugin-manifest] ${pluginName}.accessHooks 必须是数组`);\n return undefined;\n }\n\n const hooks: AccessHook[] = [];\n for (const hook of value) {\n if (!isPlainObject(hook)) {\n logger.warn(`[plugin-manifest] ${pluginName}.accessHooks 项不是对象`);\n continue;\n }\n warnUnknownFields(\n `${pluginName}.accessHooks[]`,\n hook,\n ACCESS_HOOK_KEYS,\n );\n const id = String(hook.id ?? \"\").trim();\n if (!id) {\n logger.warn(\n `[plugin-manifest] ${pluginName}.accessHooks 项缺少 id,已忽略`,\n );\n continue;\n }\n hooks.push({\n id,\n match: typeof hook.match === \"string\" ? hook.match : undefined,\n event: typeof hook.event === \"string\" ? hook.event : undefined,\n description:\n typeof hook.description === \"string\" ? hook.description : undefined,\n });\n }\n return hooks;\n}\n\nexport function validatePluginPackageConfig(\n raw: unknown,\n pluginName: string,\n): PluginPackageConfig {\n const config: PluginPackageConfig = {};\n\n if (raw === undefined || raw === null) {\n return config;\n }\n if (!isPlainObject(raw)) {\n logger.warn(\n `[plugin-manifest] ${pluginName} 的 mioku 字段必须是对象,已使用空配置`,\n );\n return config;\n }\n\n warnUnknownFields(`${pluginName}.mioku`, raw, PLUGIN_CONFIG_KEYS);\n\n if (raw.services !== undefined) {\n if (Array.isArray(raw.services)) {\n const services = raw.services.filter(\n (s): s is string => typeof s === \"string\" && s.length > 0,\n );\n const dropped = raw.services.length - services.length;\n if (dropped > 0) {\n logger.warn(\n `[plugin-manifest] ${pluginName}.services 丢弃 ${dropped} 个非字符串项`,\n );\n }\n config.services = services;\n } else {\n logger.warn(`[plugin-manifest] ${pluginName}.services 必须是字符串数组`);\n }\n }\n\n const help = validateHelp(raw.help, pluginName);\n if (help) config.help = help;\n\n const hooks = validateAccessHooks(raw.accessHooks, pluginName);\n if (hooks) config.accessHooks = hooks;\n\n return config;\n}","import * as fs from \"fs/promises\";\nimport * as path from \"path\";\nimport { mkdirSync } from \"fs\";\nimport type {\n MiokuRuntimeConfig,\n PackageJsonLike,\n PluginMetadata,\n PluginPackageConfig,\n} from \"../types\";\nimport { DEFAULT_RUNTIME_PLUGINS_DIR } from \"./plugin-linker\";\nimport { logger } from \"./logger\";\nimport {\n scanLocalDir,\n scanNodeModules,\n pathExists,\n resolveRealpath,\n} from \"./module-scanner\";\nimport { getOrCreate } from \"./registry\";\nimport { validatePluginPackageConfig } from \"./plugin-manifest\";\n\nconst PLUGIN_PREFIX = \"mioku-plugin-\";\n\nexport class PluginManager {\n private plugins = new Map<string, PluginMetadata>();\n\n static getInstance(): PluginManager {\n return getOrCreate(\"plugin-manager\", () => new PluginManager());\n }\n\n async discoverPlugins(miokuConfig: MiokuRuntimeConfig = {}): Promise<PluginMetadata[]> {\n const configuredDir = miokuConfig.plugins_dir;\n const pluginsDir =\n configuredDir && configuredDir !== DEFAULT_RUNTIME_PLUGINS_DIR\n ? path.resolve(process.cwd(), configuredDir)\n : path.resolve(process.cwd(), \"plugins\");\n\n this.plugins.clear();\n\n if (!(await pathExists(pluginsDir))) {\n mkdirSync(pluginsDir, { recursive: true });\n }\n\n const local = await scanLocalDir(pluginsDir);\n for (const { name, path: p } of local) {\n const metadata = await this.loadPluginMetadata(name, p);\n if (metadata) this.plugins.set(metadata.name, metadata);\n }\n\n const external = await scanNodeModules(PLUGIN_PREFIX);\n for (const { name, path: p } of external) {\n const metadata = await this.loadPluginMetadata(name, p);\n if (metadata) this.plugins.set(metadata.name, metadata);\n }\n\n logger.info(`O.o 发现了 ${this.plugins.size} 个插件`);\n return [...this.plugins.values()];\n }\n\n private async loadPluginMetadata(\n name: string,\n pluginPath: string,\n ): Promise<PluginMetadata | null> {\n const resolvedPath = await resolveRealpath(pluginPath);\n let packageJson: PackageJsonLike | null = null;\n try {\n packageJson = JSON.parse(\n await fs.readFile(path.join(resolvedPath, \"package.json\"), \"utf-8\"),\n );\n } catch (error) {\n logger.warn(`[plugin-manager] 读取 ${name} 的 package.json 失败: ${error}`);\n }\n\nconst config: PluginPackageConfig = validatePluginPackageConfig(\n packageJson?.mioku,\n name,\n );\n return {\n name,\n version: packageJson?.version ?? \"0.0.0\",\n description: packageJson?.description,\n path: resolvedPath,\n packageJson: packageJson ?? {},\n config,\n };\n }\n\n collectRequiredServices(): Set<string> {\n const services = new Set<string>();\n for (const metadata of this.plugins.values()) {\n for (const service of metadata.config.services ?? []) services.add(service);\n }\n return services;\n }\n\n getPluginMetadata(name: string): PluginMetadata | undefined {\n return this.plugins.get(name);\n }\n\n getAllMetadata(): PluginMetadata[] {\n return [...this.plugins.values()];\n }\n\n reset(): void {\n this.plugins.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 {\n MiokuRuntimeConfig,\n PackageJsonLike,\n ServiceMetadata,\n MiokuService,\n} from \"../types\";\nimport { logger } from \"./logger\";\nimport {\n scanLocalDir,\n scanNodeModules,\n pathExists,\n toImportPath,\n} from \"./module-scanner\";\nimport { getOrCreate } from \"./registry\";\n\nconst SERVICE_PREFIX = \"mioku-service-\";\n\nexport class ServiceManager {\n private services = new Map<string, MiokuService>();\n private serviceMetadata = new Map<string, ServiceMetadata>();\n\n static getInstance(): ServiceManager {\n return getOrCreate(\"service-manager\", () => new ServiceManager());\n }\n\n async discoverServices(miokuConfig: MiokuRuntimeConfig = {}): Promise<ServiceMetadata[]> {\n const servicesDir = miokuConfig.services_dir\n ? path.resolve(process.cwd(), miokuConfig.services_dir)\n : path.resolve(process.cwd(), \"services\");\n\n this.serviceMetadata.clear();\n\n if (existsSync(servicesDir)) {\n const local = await scanLocalDir(servicesDir);\n for (const { name, path: p } of local) {\n const metadata = await this.loadServiceMetadata(name, p);\n if (metadata) this.serviceMetadata.set(name, metadata);\n }\n } else {\n mkdirSync(servicesDir, { recursive: true });\n }\n\n const external = await scanNodeModules(SERVICE_PREFIX);\n for (const { name, path: p } of external) {\n const metadata = await this.loadServiceMetadata(name, p);\n if (metadata) this.serviceMetadata.set(name, metadata);\n }\n\n logger.info(`o.O 发现了 ${this.serviceMetadata.size} 个服务`);\n return [...this.serviceMetadata.values()];\n }\n\n private async loadServiceMetadata(\n name: string,\n servicePath: string,\n ): Promise<ServiceMetadata | null> {\n const packageJsonPath = path.join(servicePath, \"package.json\");\n if (!(await pathExists(packageJsonPath))) return null;\n\n try {\n const packageJson: PackageJsonLike = JSON.parse(\n await fs.readFile(packageJsonPath, \"utf-8\"),\n );\n return {\n name,\n version: packageJson.version ?? \"0.0.0\",\n description: packageJson.description,\n path: servicePath,\n packageJson,\n };\n } catch (error) {\n logger.warn(`[service-manager] 解析服务 ${name} 失败: ${error}`);\n return null;\n }\n }\n\n async checkMissingServices(required: Set<string>): Promise<string[]> {\n const missing: string[] = [];\n for (const name of required) {\n if (!this.serviceMetadata.has(name)) missing.push(name);\n }\n return missing;\n }\n\n async loadAllServices(ctx: MiokiContext): Promise<void> {\n const all = [...this.serviceMetadata.values()];\n logger.info(`O.o 准备加载 ${all.length} 个服务...`);\n for (const metadata of all) {\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 tsEntry = path.join(metadata.path, \"index.ts\");\n const jsEntry = path.join(metadata.path, \"index.js\");\n const entry = (await pathExists(tsEntry))\n ? tsEntry\n : (await pathExists(jsEntry))\n ? jsEntry\n : null;\n if (!entry) {\n logger.error(`[service-manager] 服务 ${metadata.name} 入口丢失`);\n return false;\n }\n\n const serviceModule = await import(toImportPath(entry));\n const service: MiokuService = serviceModule.default ?? serviceModule;\n if (!service || typeof service.init !== \"function\") {\n logger.warn(`[service-manager] 服务 ${metadata.name} 无效:缺少 init()`);\n return false;\n }\n\n await service.init();\n if (service.api) {\n ctx.services[metadata.name] = service.api;\n }\n this.services.set(metadata.name, service);\n return true;\n } catch (error) {\n logger.error(`[service-manager] 加载服务 ${metadata.name} 失败: ${error}`);\n return false;\n }\n }\n\n registerBuiltinService(name: string, service: MiokuService): void {\n this.services.set(name, service);\n }\n\n getService(name: string): MiokuService | undefined {\n return this.services.get(name);\n }\n\n async disposeAll(): Promise<void> {\n for (const [, service] of this.services) {\n 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 { existsSync, mkdirSync } from \"fs\";\nimport type { MiokuRuntimeConfig } from \"../types\";\nimport pluginManager from \"./plugin-manager\";\nimport serviceManager from \"./service-manager\";\nimport {\n prepareRuntimePluginLinks,\n DEFAULT_RUNTIME_PLUGINS_DIR,\n} from \"./plugin-linker\";\nimport { logger } from \"./logger\";\n\ninterface BotConfigLike {\n plugins: string[];\n plugins_dir?: string;\n}\n\nexport interface BootstrapDeps {\n cwd: string;\n botConfig: BotConfigLike;\n startMioki: (opts: { cwd: string }) => Promise<void>;\n}\n\nexport async function readMiokuConfig(): Promise<MiokuRuntimeConfig> {\n const packageJsonPath = path.join(process.cwd(), \"package.json\");\n try {\n const pkg = JSON.parse(await fs.readFile(packageJsonPath, \"utf-8\"));\n return (pkg.mioki ?? {}) as MiokuRuntimeConfig;\n } catch {\n return {};\n }\n}\n\nfunction ensureRuntimeDirectories(): void {\n for (const dir of [\"data\", \"config\", \"temp\"]) {\n if (!existsSync(dir)) mkdirSync(dir, { recursive: true });\n }\n}\n\nasync function discoverAndLinkPlugins(\n miokuConfig: MiokuRuntimeConfig,\n): Promise<string[]> {\n logger.info(\"O.o Miku 正在翻找插件..\");\n const discovered = await pluginManager.discoverPlugins(miokuConfig);\n logger.info(\n `O.o 共发现 ${discovered.length} 个插件: ${discovered.map((p) => p.name).join(\", \")}`,\n );\n const runtimePluginsDir = path.resolve(\n process.cwd(),\n DEFAULT_RUNTIME_PLUGINS_DIR,\n );\n return prepareRuntimePluginLinks(discovered, runtimePluginsDir);\n}\n\nasync function discoverAndValidateServices(\n miokuConfig: MiokuRuntimeConfig,\n): Promise<void> {\n logger.info(\"o.O Miku 正在翻找服务..\");\n await serviceManager.discoverServices(miokuConfig);\n const requiredServices = pluginManager.collectRequiredServices();\n const missing = await serviceManager.checkMissingServices(requiredServices);\n if (missing.length > 0) logger.warn(`发现缺失服务: ${missing.join(\", \")}`);\n}\n\nfunction applyPluginAllowlist(\n miokuConfig: MiokuRuntimeConfig,\n botConfig: BotConfigLike,\n linkedPluginNames: string[],\n): void {\n botConfig.plugins_dir = DEFAULT_RUNTIME_PLUGINS_DIR;\n // Respect an explicit plugins list; only auto-load when undefined.\n if (miokuConfig.plugins !== undefined) return;\n for (const name of linkedPluginNames) {\n if (!botConfig.plugins.includes(name)) botConfig.plugins.push(name);\n }\n}\n\nexport async function bootstrapMioku(deps: BootstrapDeps): Promise<void> {\n const { cwd, botConfig, startMioki } = deps;\n const miokuConfig = await readMiokuConfig();\n ensureRuntimeDirectories();\n const linkedPluginNames = await discoverAndLinkPlugins(miokuConfig);\n await discoverAndValidateServices(miokuConfig);\n applyPluginAllowlist(miokuConfig, botConfig, linkedPluginNames);\n await startMioki({ cwd });\n}\n","import type { MiokiContext } from \"mioki\";\n\nexport interface ServiceRef<T> {\n readonly id: string;\n}\n\nexport function defineService<T>(id: string): ServiceRef<T> {\n return { id };\n}\n\nexport function getService<T>(\n ctx: MiokiContext,\n ref: ServiceRef<T>,\n): T | undefined {\n return ctx.services[ref.id] as T | undefined;\n}\n\nexport function requireService<T>(\n ctx: MiokiContext,\n ref: ServiceRef<T>,\n): T {\n const svc = ctx.services[ref.id] as T | undefined;\n if (svc === undefined) {\n throw new Error(\n `[mioku] required service \"${ref.id}\" is not available`,\n );\n }\n return svc;\n}\n\nexport function hasService<T>(\n ctx: MiokiContext,\n ref: ServiceRef<T>,\n): boolean {\n return ctx.services[ref.id] !== undefined;\n}","import type {\n AIService,\n ConfigService,\n ScreenshotService,\n HelpService,\n} from \"../types\";\nimport { defineService } from \"./service\";\n\nexport const Services = {\n AI: defineService<AIService>(\"ai\"),\n Config: defineService<ConfigService>(\"config\"),\n Screenshot: defineService<ScreenshotService>(\"screenshot\"),\n Help: defineService<HelpService>(\"help\"),\n} as const;\n\nexport type BuiltinServiceRef =\n | typeof Services.AI\n | typeof Services.Config\n | typeof Services.Screenshot\n | typeof Services.Help;","import type { MiokiContext } from \"mioki\";\nimport { botConfig } from \"mioki\";\nimport { getService } from \"./service\";\nimport { Services } from \"./services\";\nimport pluginManager from \"./plugin-manager\";\nimport { logger } from \"./logger\";\n\nfunction hasPublicKeyword(keywords: unknown): boolean {\n return Array.isArray(keywords) && keywords.includes(\"mioku\");\n}\n\nexport async function registerPluginArtifacts(ctx: MiokiContext): Promise<void> {\n const enabledPlugins = new Set<string>(botConfig.plugins ?? []);\n const pluginMetadata = pluginManager.getAllMetadata().filter((metadata) =>\n enabledPlugins.size > 0 ? enabledPlugins.has(metadata.name) : true,\n );\n\n const helpService = getService(ctx, Services.Help);\n if (!helpService) return;\n\n let helpCount = 0;\n for (const metadata of pluginMetadata) {\n if (!metadata.config.help) continue;\n if (!hasPublicKeyword(metadata.packageJson?.keywords)) continue;\n helpService.registerHelp(metadata.name, metadata.config.help);\n helpCount += 1;\n }\n logger.info(`[plugin-artifacts] Registered ${helpCount} help manifest(s)`);\n}\n","import * as fs from \"fs/promises\";\nimport * as path from \"path\";\nimport { existsSync, mkdirSync } from \"fs\";\nimport { logger } from \"./logger\";\n\nconst SERVICE_CONFIG_ROOT = \"service\";\n\nfunction resolveConfigDir(serviceName: string): string {\n return path.join(process.cwd(), \"config\", SERVICE_CONFIG_ROOT, serviceName);\n}\n\nfunction resolveConfigPath(serviceName: string, configName: string): string {\n return path.join(resolveConfigDir(serviceName), `${configName}.json`);\n}\n\nfunction ensureDir(serviceName: string): void {\n const dir = resolveConfigDir(serviceName);\n if (!existsSync(dir)) mkdirSync(dir, { recursive: true });\n}\n\nexport async function registerServiceConfig(\n serviceName: string,\n configName: string,\n defaults: Record<string, unknown>,\n): Promise<void> {\n ensureDir(serviceName);\n const configPath = resolveConfigPath(serviceName, configName);\n if (!existsSync(configPath)) {\n await fs.writeFile(configPath, JSON.stringify(defaults, null, 2), \"utf-8\");\n }\n}\n\nexport async function getServiceConfig(\n serviceName: string,\n configName: string,\n): Promise<Record<string, unknown>> {\n const configPath = resolveConfigPath(serviceName, configName);\n try {\n return JSON.parse(await fs.readFile(configPath, \"utf-8\"));\n } catch (error) {\n if (!existsSync(configPath)) return {};\n logger.warn(`[service-config] 读取 ${serviceName}/${configName} 失败: ${error}`);\n return {};\n }\n}\n\nexport async function updateServiceConfig(\n serviceName: string,\n configName: string,\n value: Record<string, unknown>,\n): Promise<void> {\n ensureDir(serviceName);\n await fs.writeFile(\n resolveConfigPath(serviceName, configName),\n JSON.stringify(value, null, 2),\n \"utf-8\",\n );\n}\n\nexport async function getServiceConfigs(\n serviceName: string,\n): Promise<Record<string, Record<string, unknown>>> {\n const dir = resolveConfigDir(serviceName);\n if (!existsSync(dir)) return {};\n\n const result: Record<string, Record<string, unknown>> = {};\n const files = (await fs.readdir(dir)).filter((name) => name.endsWith(\".json\"));\n for (const file of files) {\n try {\n result[path.basename(file, \".json\")] = JSON.parse(\n await fs.readFile(path.join(dir, file), \"utf-8\"),\n );\n } catch (error) {\n logger.warn(`[service-config] 读取 ${serviceName}/${file} 失败: ${error}`);\n }\n }\n return result;\n}\n\nexport async function deleteServiceConfig(\n serviceName: string,\n configName: string,\n): Promise<boolean> {\n const configPath = resolveConfigPath(serviceName, configName);\n if (!existsSync(configPath)) return false;\n await fs.unlink(configPath);\n return true;\n}\n","// Mioku framework types — single source of truth for the public API surface.\n\n// ---------- framework ----------\n\nexport interface MiokuService {\n name: string;\n version: string;\n description?: string;\n init(): Promise<void>;\n api: Record<string, any>;\n dispose?(): Promise<void>;\n}\n\nexport interface MiokuRuntimeConfig {\n plugins?: string[];\n plugins_dir?: string;\n services_dir?: string;\n [key: string]: unknown;\n}\n\nexport interface PackageJsonLike {\n name?: string;\n version?: string;\n description?: string;\n keywords?: string[];\n mioki?: MiokuRuntimeConfig;\n mioku?: PluginPackageConfig;\n dependencies?: Record<string, string>;\n}\n\nexport interface PluginMetadata {\n name: string;\n version: string;\n description?: string;\n path: string;\n packageJson: PackageJsonLike;\n config: PluginPackageConfig;\n}\n\nexport interface ServiceMetadata {\n name: string;\n version: string;\n description?: string;\n path: string;\n packageJson: PackageJsonLike;\n}\n\n// ---------- plugin package config ----------\n\nexport interface PluginPackageConfig {\n services?: string[];\n help?: PluginHelp;\n accessHooks?: AccessHook[];\n}\n\nexport interface PluginHelp {\n title: string;\n description: string;\n commands: Array<{\n cmd: string;\n desc: string;\n usage?: string;\n role?: CommandRole;\n }>;\n}\n\nexport type CommandRole = \"master\" | \"admin\" | \"owner\" | \"member\";\n\n/**\n * - `\"master\"`:仅 bot 主人可触发\n * - `\"owner\"`:legacy alias\n * - `\"admin\"`:bot 主人或管理员\n * - `\"member\"`:群内任意成员\n *\n */\nexport type SkillPermissionRole = \"master\" | \"owner\" | \"admin\" | \"member\";\n\nexport function normalizeSkillPermissionRole(\n role: unknown,\n): SkillPermissionRole {\n const normalized = String(role ?? \"\")\n .trim()\n .toLowerCase();\n if (\n normalized === \"master\" ||\n normalized === \"owner\" ||\n normalized === \"admin\" ||\n normalized === \"member\"\n ) {\n return normalized as SkillPermissionRole;\n }\n return \"member\";\n}\n\nexport interface AccessHook {\n id: string;\n match?: string;\n event?: string;\n description?: string;\n}\n\nexport type AccessAction = \"allow\" | \"block\";\n\nexport interface AccessRuleEntry {\n action: AccessAction;\n}\n\nexport interface AccessScopeConfig {\n plugins?: Record<string, AccessRuleEntry>;\n commands?: Record<string, Record<string, AccessRuleEntry>>;\n}\n\nexport interface AccessControlConfig {\n version: 1;\n global: AccessScopeConfig;\n groups: Record<string, AccessScopeConfig>;\n users: Record<string, AccessScopeConfig>;\n}\n\n// ---------- built-in service contracts ----------\n\nexport interface ConfigService {\n registerConfig(\n pluginName: string,\n configName: string,\n initialConfig: any,\n ): Promise<boolean>;\n updateConfig(\n pluginName: string,\n configName: string,\n updates: any,\n ): Promise<boolean>;\n getConfig(pluginName: string, configName: string): Promise<any>;\n getPluginConfigs(pluginName: string): Promise<Record<string, any>>;\n onConfigChange(\n pluginName: string,\n configName: string,\n callback: (newConfig: any) => void,\n ): () => void;\n}\n\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\nexport interface HelpService {\n registerHelp(pluginName: string, help: PluginHelp): void;\n getHelp(pluginName: string): PluginHelp | undefined;\n getAllHelp(): Map<string, PluginHelp>;\n unregisterHelp(pluginName: string): boolean;\n}\n\nexport interface WebUIService {\n getSettings(): { port: number; host: string; packageManager: string };\n}\n\n// ---------- AI service ----------\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?: SkillPermissionRole;\n tools: AITool[];\n}\n\nexport interface TextMessage {\n role: \"system\" | \"user\" | \"assistant\";\n content: string;\n}\n\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\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 type AIProtocol =\n | \"openai-chat\"\n | \"openai-response\"\n | \"anthropic\"\n | \"gemini\";\n\nexport type AIModelCapability = \"text\" | \"vision\" | \"tool-use\" | \"reasoning\";\n\nexport type AIModelRole = \"main\" | \"working\" | \"vision\";\n\nexport interface AIProviderConfig {\n id: string;\n name: string;\n protocol: AIProtocol;\n apiUrl: string;\n apiKey: string;\n enabled: boolean;\n headers?: Record<string, string>;\n}\n\nexport interface AIModelDescriptor {\n id: string;\n providerId: string;\n modelId: string;\n name: string;\n capabilities: AIModelCapability[];\n contextWindow?: number;\n maxOutputTokens?: number;\n isCustom?: boolean;\n}\n\nexport interface AIInstanceInfo {\n name: string;\n providerId: string;\n modelId: string;\n role?: AIModelRole;\n}\n\nexport interface AIInstance {\n generateText(options: {\n prompt?: string;\n messages: TextMessage[];\n model?: string;\n temperature?: number;\n max_tokens?: number;\n }): Promise<string>;\n generateMultimodal(options: {\n prompt?: string;\n messages: MultimodalMessage[];\n model?: string;\n temperature?: number;\n max_tokens?: number;\n }): Promise<string>;\n complete(options: CompleteOptions): Promise<CompleteResponse>;\n generateWithTools(options: {\n prompt?: string;\n messages: TextMessage[] | MultimodalMessage[];\n model?: string;\n temperature?: number;\n maxIterations?: number;\n }): Promise<any>;\n setUsageContext?(context: AIUsageContext | undefined): void;\n withUsageContext?<T>(\n context: AIUsageContext | undefined,\n fn: () => Promise<T>,\n ): 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: {\n name: string;\n apiUrl: string;\n apiKey: string;\n modelType: \"text\" | \"multimodal\";\n model?: string;\n }): Promise<AIInstance>;\n createInstance?(options: {\n name: string;\n providerId: string;\n modelId: string;\n role?: AIModelRole;\n }): Promise<AIInstance>;\n get(name: string): AIInstance | undefined;\n list(): string[];\n listInstances?(): AIInstanceInfo[];\n remove(name: string): boolean;\n setDefault(name: string): boolean;\n getDefault(): AIInstance | undefined;\n listProviders?(): AIProviderConfig[];\n getProvider?(id: string): AIProviderConfig | undefined;\n createProvider?(\n input: Omit<AIProviderConfig, \"id\"> & { id?: string },\n ): Promise<AIProviderConfig>;\n updateProvider?(\n id: string,\n input: Partial<AIProviderConfig>,\n ): Promise<AIProviderConfig>;\n removeProvider?(id: string): boolean;\n testProvider?(\n id: string,\n ): Promise<{ ok: boolean; error?: string; models?: AIModelDescriptor[] }>;\n listModels?(providerId?: string): AIModelDescriptor[];\n refreshModels?(providerId: string): Promise<AIModelDescriptor[]>;\n registerCustomModel?(input: {\n providerId: string;\n modelId: string;\n name?: string;\n capabilities?: AIModelCapability[];\n }): AIModelDescriptor;\n removeCustomModel?(modelFullId: string): boolean;\n getRoleBindings?(): Record<AIModelRole, string | undefined>;\n setRoleBinding?(role: AIModelRole, modelFullId: string | undefined): boolean;\n getInstanceByRole?(role: AIModelRole): AIInstance | undefined;\n setMainFallbackChain?(modelFullIds: string[]): void;\n getMainFallbackChain?(): string[];\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: {\n range: AIUsageRange;\n botId?: number;\n }): AIUsageSummary;\n cleanupUsageStats?(retentionMs?: number): number;\n finalizeUsage?(usageId: string, finalization: AIUsageFinalization): boolean;\n}\n\n// ---------- chat runtime ----------\n\nexport interface ChatRuntime {\n generateNotice(options: ChatRuntimeNoticeOptions): Promise<ChatRuntimeResult>;\n requestInformation(\n options: ChatRuntimeInformationRequestOptions,\n ): Promise<ChatRuntimeResult>;\n}\n\nexport const TOOL_RESULT_FOLLOWUP_KEY = \"__miokuFollowup\";\n\nexport interface ToolResultFollowup {\n text: string;\n images?: Array<{ url: string; detail?: \"auto\" | \"low\" | \"high\" }>;\n videos?: Array<{ url: string; detail?: \"auto\" | \"low\" | \"high\" }>;\n}\n\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 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\n// ---------- usage tracking ----------\n\nexport type AIUsageRange = \"today\" | \"7d\" | \"30d\";\n\nexport type AIUsageScope = \"all\" | \"bot\";\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 fallbackUsed?: boolean;\n fallbackFrom?: 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 AIUsageBotOption {\n botId: number;\n label: string;\n}\n\nexport interface AIUsageSummary {\n generatedAt: number;\n range: AIUsageRange;\n scope: AIUsageScope;\n botId?: number;\n bots: AIUsageBotOption[];\n totals: {\n requests: number;\n successfulRequests: number;\n failedRequests: number;\n userMessages: number;\n assistantMessages: number;\n systemMessages: number;\n toolMessages: number;\n sentUserMessages: number;\n sentAssistantMessages: number;\n inputTokens: number;\n outputTokens: number;\n systemPromptTokens: number;\n totalTokens: number;\n cacheWriteTokens: number;\n cacheReadTokens: number;\n toolDefinitionTokens: number;\n toolUseTokens: number;\n chatHistoryTokens: number;\n otherContextTokens: number;\n durationMs: number;\n toolCalls: number;\n };\n rates: {\n throughputTokPerMin: number;\n averageTokensPerUserMessage: number;\n averageTokensPerSentMessage: number;\n errorRate: number;\n cacheHitRate: number;\n };\n toolRanking: Array<{ name: string; count: number }>;\n groupRanking: Array<{\n groupId: number;\n groupName: string;\n requests: number;\n totalTokens: number;\n userMessages: number;\n assistantMessages: number;\n errorRate: number;\n }>;\n tokenFlow: Array<{\n name: \"输入\" | \"输出\" | \"缓存写入\" | \"缓存读取\";\n value: number;\n }>;\n tokenCategories: Array<{\n name: \"系统提示词\" | \"工具定义\" | \"工具使用\" | \"聊天上下文\" | \"其他上下文\";\n value: number;\n }>;\n dailyActivity: Array<{\n day: string;\n requests: number;\n userMessages: number;\n assistantMessages: number;\n totalTokens: number;\n inputTokens: number;\n cacheReadTokens: number;\n throughputTokPerMin: number;\n averageTokensPerUserMessage: number;\n averageTokensPerSentMessage: number;\n errorRate: number;\n cacheHitRate: number;\n }>;\n hourlyActivity: Array<{\n hour: string;\n requests: number;\n userMessages: number;\n assistantMessages: number;\n totalTokens: number;\n inputTokens: number;\n cacheReadTokens: number;\n throughputTokPerMin: number;\n averageTokensPerUserMessage: number;\n averageTokensPerSentMessage: number;\n errorRate: number;\n cacheHitRate: number;\n }>;\n}\n","import * as path from \"path\";\nimport { existsSync, mkdirSync } from \"fs\";\n\nexport function getPluginDataDir(pluginName: string): string {\n return path.join(process.cwd(), \"data\", pluginName);\n}\n\nexport function getServiceDataDir(serviceName: string): string {\n return path.join(process.cwd(), \"data\", serviceName);\n}\n\nexport function getDataDir(): string {\n return path.join(process.cwd(), \"data\");\n}\n\nexport function getPluginConfigDir(pluginName: string): string {\n return path.join(process.cwd(), \"config\", pluginName);\n}\n\nexport function getServiceConfigDir(serviceName: string): string {\n return path.join(process.cwd(), \"config\", \"service\", serviceName);\n}\n\nexport function getConfigDir(): string {\n return path.join(process.cwd(), \"config\");\n}\n\nexport function ensureDataDir(pluginName: string): string {\n const dir = getPluginDataDir(pluginName);\n if (!existsSync(dir)) mkdirSync(dir, { recursive: true });\n return dir;\n}\n","import { getOrCreate } from \"./registry\";\n\nconst store = getOrCreate<Record<string, unknown>>(\n \"plugin-runtime-state\",\n () => ({}),\n);\n\nexport interface PluginStateRef<T> {\n readonly name: string;\n get(): T;\n set(next: T): void;\n reset(): void;\n}\n\nexport function defineState<T>(name: string, initial: T): PluginStateRef<T> {\n return {\n name,\n get(): T {\n const current = store[name];\n return (current === undefined ? initial : current) as T;\n },\n set(next: T): void {\n store[name] = next;\n },\n reset(): void {\n delete store[name];\n },\n };\n}\n\nexport function hasPluginState(name: string): boolean {\n return store[name] !== undefined;\n}\n\nexport function getPluginRuntimeState<T = Record<string, any>>(\n name: string,\n): T {\n if (!store[name]) store[name] = {};\n return store[name] as T;\n}\n\nexport function setPluginRuntimeState<T>(name: string, state: T): void {\n store[name] = state;\n}\n\nexport function resetPluginRuntimeState(name: string): void {\n delete store[name];\n}\n\nexport function getAllPluginRuntimeStates(): Record<string, unknown> {\n return { ...store };\n}","import * as fs from \"fs\";\nimport * as path from \"path\";\nimport { fileURLToPath } from \"url\";\nimport { bootstrapMioku } from \"./core/bootstrap\";\nimport { setMiokuLogger } from \"./core/logger\";\nimport { default as serviceManager } from \"./core/service-manager\";\n\nexport type { MiokiPlugin, MiokiContext } from \"mioki\";\nexport type { EventMap } from \"napcat-sdk\";\n\nexport function definePlugin<T extends import(\"mioki\").MiokiPlugin>(\n plugin: T,\n): T {\n return plugin;\n}\n\nexport { default as pluginManager } from \"./core/plugin-manager\";\nexport { default as serviceManager } from \"./core/service-manager\";\nexport { registerPluginArtifacts } from \"./core/plugin-artifact-registry\";\n\nexport {\n registerServiceConfig,\n getServiceConfig,\n updateServiceConfig,\n getServiceConfigs,\n deleteServiceConfig,\n} from \"./core/service-config\";\n\nexport type {\n MiokuService,\n MiokuRuntimeConfig,\n PackageJsonLike,\n PluginMetadata,\n ServiceMetadata,\n PluginPackageConfig,\n PluginHelp,\n CommandRole,\n AccessHook,\n AccessAction,\n AccessRuleEntry,\n AccessScopeConfig,\n AccessControlConfig,\n ConfigService,\n ScreenshotService,\n HelpService,\n WebUIService,\n AITool,\n AISkill,\n AIInstance,\n AIService,\n AIProtocol,\n AIModelCapability,\n AIModelRole,\n AIProviderConfig,\n AIModelDescriptor,\n AIInstanceInfo,\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 AIUsageScope,\n AIUsageBotOption,\n AIUsageContext,\n AIUsageBreakdown,\n AIUsageFinalization,\n AIUsageSummary,\n} from \"./types\";\n\nexport {\n TOOL_RESULT_FOLLOWUP_KEY,\n normalizeSkillPermissionRole,\n} from \"./types\";\n\nexport {\n defineService,\n getService,\n requireService,\n hasService,\n} from \"./core/service\";\nexport type { ServiceRef } from \"./core/service\";\nexport { Services } from \"./core/services\";\nexport type { BuiltinServiceRef } from \"./core/services\";\n\nexport interface MiokuStartOptions {\n cwd?: string;\n}\n\nexport async function start(options: MiokuStartOptions = {}): Promise<void> {\n const { cwd = process.cwd() } = options;\n if (cwd) process.chdir(cwd);\n\n const { start: startMioki, logger, botConfig } = await import(\"mioki\");\n setMiokuLogger(logger);\n\n let shuttingDown = false;\n const shutdown = async (signal: string) => {\n if (shuttingDown) return;\n shuttingDown = true;\n logger.info(`收到 ${signal} 信号,正在关闭服务...`);\n const timer = setTimeout(() => {\n logger.error(\"服务关闭超时,强制退出\");\n process.exit(1);\n }, 15_000);\n timer.unref();\n await serviceManager.disposeAll();\n clearTimeout(timer);\n logger.info(\"Mioku 服务已完全关闭\");\n process.exit(0);\n };\n\n process.on(\"SIGINT\", () => shutdown(\"SIGINT\"));\n process.on(\"SIGTERM\", () => shutdown(\"SIGTERM\"));\n\n logger.info(\"こんにちは..\");\n logger.info(\"---------------------------------------\");\n logger.info(\"---------- Mioku 正在启动 ------------\");\n logger.info(\"---------------------------------------\");\n\n await bootstrapMioku({ cwd, botConfig, startMioki });\n}\n\nfunction readVersion(): string {\n try {\n const here = path.dirname(fileURLToPath(import.meta.url));\n const pkgPath = path.join(here, \"..\", \"package.json\");\n return JSON.parse(fs.readFileSync(pkgPath, \"utf-8\")).version ?? \"0.0.0\";\n } catch {\n return \"0.0.0\";\n }\n}\n\nexport const version: string = readVersion();\n\nexport {\n getDataDir,\n getPluginDataDir,\n getServiceDataDir,\n getConfigDir,\n getPluginConfigDir,\n getServiceConfigDir,\n ensureDataDir,\n} from \"./core/data-paths\";\n\nexport {\n defineState,\n hasPluginState,\n getPluginRuntimeState,\n setPluginRuntimeState,\n resetPluginRuntimeState,\n getAllPluginRuntimeStates,\n} from \"./core/plugin-runtime-state\";\nexport type { PluginStateRef } from \"./core/plugin-runtime-state\";\n\nexport {\n resolveCommand,\n commandExists,\n buildSpawnPlan,\n runCommand,\n runCommandInherit,\n} from \"./core/exec\";\n\nexport type { RunCommandResult, SpawnPlan } from \"./core/exec\";\n"],"mappings":"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"}
package/dist/index.d.cts CHANGED
@@ -283,6 +283,8 @@ interface AIService {
283
283
  getRoleBindings?(): Record<AIModelRole, string | undefined>;
284
284
  setRoleBinding?(role: AIModelRole, modelFullId: string | undefined): boolean;
285
285
  getInstanceByRole?(role: AIModelRole): AIInstance | undefined;
286
+ setMainFallbackChain?(modelFullIds: string[]): void;
287
+ getMainFallbackChain?(): string[];
286
288
  registerChatRuntime(runtime: any): boolean;
287
289
  getChatRuntime(): any;
288
290
  removeChatRuntime(): boolean;
@@ -375,6 +377,8 @@ interface AIUsageContext {
375
377
  userId?: number;
376
378
  userName?: string;
377
379
  sessionId?: string;
380
+ fallbackUsed?: boolean;
381
+ fallbackFrom?: string;
378
382
  }
379
383
  interface AIUsageBreakdown {
380
384
  systemPromptTokens?: number;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.cts","names":[],"sources":["../src/types.ts","../src/core/plugin-manager.ts","../src/core/service-manager.ts","../src/core/plugin-artifact-registry.ts","../src/core/service-config.ts","../src/core/service.ts","../src/core/services.ts","../src/core/data-paths.ts","../src/core/plugin-runtime-state.ts","../src/core/exec.ts","../src/index.ts"],"sourcesContent":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.cts","names":[],"sources":["../src/types.ts","../src/core/plugin-manager.ts","../src/core/service-manager.ts","../src/core/plugin-artifact-registry.ts","../src/core/service-config.ts","../src/core/service.ts","../src/core/services.ts","../src/core/data-paths.ts","../src/core/plugin-runtime-state.ts","../src/core/exec.ts","../src/index.ts"],"sourcesContent":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -283,6 +283,8 @@ interface AIService {
283
283
  getRoleBindings?(): Record<AIModelRole, string | undefined>;
284
284
  setRoleBinding?(role: AIModelRole, modelFullId: string | undefined): boolean;
285
285
  getInstanceByRole?(role: AIModelRole): AIInstance | undefined;
286
+ setMainFallbackChain?(modelFullIds: string[]): void;
287
+ getMainFallbackChain?(): string[];
286
288
  registerChatRuntime(runtime: any): boolean;
287
289
  getChatRuntime(): any;
288
290
  removeChatRuntime(): boolean;
@@ -375,6 +377,8 @@ interface AIUsageContext {
375
377
  userId?: number;
376
378
  userName?: string;
377
379
  sessionId?: string;
380
+ fallbackUsed?: boolean;
381
+ fallbackFrom?: string;
378
382
  }
379
383
  interface AIUsageBreakdown {
380
384
  systemPromptTokens?: number;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","names":[],"sources":["../src/types.ts","../src/core/plugin-manager.ts","../src/core/service-manager.ts","../src/core/plugin-artifact-registry.ts","../src/core/service-config.ts","../src/core/service.ts","../src/core/services.ts","../src/core/data-paths.ts","../src/core/plugin-runtime-state.ts","../src/core/exec.ts","../src/index.ts"],"sourcesContent":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../src/types.ts","../src/core/plugin-manager.ts","../src/core/service-manager.ts","../src/core/plugin-artifact-registry.ts","../src/core/service-config.ts","../src/core/service.ts","../src/core/services.ts","../src/core/data-paths.ts","../src/core/plugin-runtime-state.ts","../src/core/exec.ts","../src/index.ts"],"sourcesContent":[],"mappings":"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"}