@h-ai/core 0.1.0-alpha.56 → 0.1.0-alpha.58

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/browser.js CHANGED
@@ -1,9 +1,9 @@
1
- import { __commonJS, __toESM, createCore, i18n, err, HaiCommonError, sanitize } from './chunk-MWGBPJOG.js';
2
- export { CoreConfigSchema, EnvSchema, HaiCommonError, HaiConfigError, IdConfigSchema, LogFormatSchema, LogLevelSchema, LoggingConfigSchema, err, ok } from './chunk-MWGBPJOG.js';
1
+ import { __commonJS, __toESM, createCore, i18n, err, HaiCommonError, sanitize } from './chunk-RXNSRXYF.js';
2
+ export { CoreConfigSchema, EnvSchema, HaiCommonError, HaiConfigError, IdConfigSchema, LogFormatSchema, LogLevelSchema, LoggingConfigSchema, err, ok } from './chunk-RXNSRXYF.js';
3
3
 
4
4
  // ../../node_modules/loglevel/lib/loglevel.js
5
5
  var require_loglevel = __commonJS({
6
- "../../node_modules/loglevel/lib/loglevel.js"(exports$1, module) {
6
+ "../../node_modules/loglevel/lib/loglevel.js"(exports, module) {
7
7
  (function(root, definition) {
8
8
  if (typeof define === "function" && define.amd) {
9
9
  define(definition);
@@ -12,7 +12,7 @@ var require_loglevel = __commonJS({
12
12
  } else {
13
13
  root.log = definition();
14
14
  }
15
- })(exports$1, function() {
15
+ })(exports, function() {
16
16
  var noop = function() {
17
17
  };
18
18
  var undefinedType = "undefined";
@@ -304,6 +304,8 @@ var config = {
304
304
  // src/functions/core-function-logger.browser.ts
305
305
  var import_loglevel = __toESM(require_loglevel(), 1);
306
306
  var globalLevel = "info";
307
+ var globalFormat = "pretty";
308
+ var globalRedact = [];
307
309
  var globalContext = {};
308
310
  var defaultLogger = null;
309
311
  var LEVEL_MAP = {
@@ -323,7 +325,10 @@ function configureLogger(config2) {
323
325
  if (config2.context) {
324
326
  globalContext = { ...globalContext, ...config2.context };
325
327
  }
326
- defaultLogger = null;
328
+ if (config2.format)
329
+ globalFormat = config2.format;
330
+ if (config2.redact)
331
+ globalRedact = [...config2.redact];
327
332
  }
328
333
  function setLogLevel(level) {
329
334
  globalLevel = level;
@@ -336,46 +341,72 @@ function sanitizeLogContext(ctx) {
336
341
  if (!ctx || Object.keys(ctx).length === 0) {
337
342
  return ctx;
338
343
  }
339
- return sanitize.sanitizeSensitiveFields(ctx);
344
+ const sanitized = sanitize.sanitizeSensitiveFields(ctx);
345
+ for (const path of globalRedact)
346
+ redactPath(sanitized, path.match(/\*|[^.[\]"']+/g) ?? []);
347
+ return sanitized;
340
348
  }
341
- function formatMessage(message, context) {
349
+ function redactPath(value, segments) {
350
+ if (!value || typeof value !== "object" || segments.length === 0)
351
+ return;
352
+ const record = value;
353
+ const [segment, ...rest] = segments;
354
+ const keys = segment === "*" ? Object.keys(record) : [segment];
355
+ for (const key of keys) {
356
+ if (!Object.hasOwn(record, key) || ["__proto__", "constructor", "prototype"].includes(key))
357
+ continue;
358
+ if (rest.length === 0)
359
+ record[key] = "[REDACTED]";
360
+ else redactPath(record[key], rest);
361
+ }
362
+ }
363
+ function formatMessage(message, context, format = globalFormat, level = "info") {
342
364
  const sanitizedContext = sanitizeLogContext(context);
365
+ if (format === "json")
366
+ return JSON.stringify({ ...sanitizedContext, level, msg: message });
343
367
  if (!sanitizedContext || Object.keys(sanitizedContext).length === 0) {
344
368
  return message;
345
369
  }
346
370
  return `${message} ${JSON.stringify(sanitizedContext)}`;
347
371
  }
348
- function wrapLoglevel(loggerInstance, baseContext) {
372
+ function wrapLoglevel(resolveLogger, resolveContext, resolveFormat) {
349
373
  return {
350
374
  trace(message, ctx) {
351
- loggerInstance.trace(formatMessage(message, { ...baseContext, ...ctx }));
375
+ resolveLogger().trace(formatMessage(message, { ...resolveContext(), ...ctx }, resolveFormat(), "trace"));
352
376
  },
353
377
  debug(message, ctx) {
354
- loggerInstance.debug(formatMessage(message, { ...baseContext, ...ctx }));
378
+ resolveLogger().debug(formatMessage(message, { ...resolveContext(), ...ctx }, resolveFormat(), "debug"));
355
379
  },
356
380
  info(message, ctx) {
357
- loggerInstance.info(formatMessage(message, { ...baseContext, ...ctx }));
381
+ resolveLogger().info(formatMessage(message, { ...resolveContext(), ...ctx }, resolveFormat(), "info"));
358
382
  },
359
383
  warn(message, ctx) {
360
- loggerInstance.warn(formatMessage(message, { ...baseContext, ...ctx }));
384
+ resolveLogger().warn(formatMessage(message, { ...resolveContext(), ...ctx }, resolveFormat(), "warn"));
361
385
  },
362
386
  error(message, ctx) {
363
- loggerInstance.error(formatMessage(message, { ...baseContext, ...ctx }));
387
+ resolveLogger().error(formatMessage(message, { ...resolveContext(), ...ctx }, resolveFormat(), "error"));
364
388
  },
365
389
  fatal(message, ctx) {
366
- loggerInstance.error(`[FATAL] ${formatMessage(message, { ...baseContext, ...ctx })}`);
390
+ const text = formatMessage(message, { ...resolveContext(), ...ctx }, resolveFormat(), "fatal");
391
+ resolveLogger().error(resolveFormat() === "json" ? text : `[FATAL] ${text}`);
367
392
  },
368
393
  child(childContext) {
369
- return wrapLoglevel(loggerInstance, { ...baseContext, ...childContext });
394
+ return wrapLoglevel(resolveLogger, () => ({ ...resolveContext(), ...childContext }), resolveFormat);
370
395
  }
371
396
  };
372
397
  }
373
398
  function createLogger(options = {}) {
374
- const { name, level, context } = options;
399
+ const { name, level, format } = options;
400
+ const context = { ...options.context };
375
401
  const loggerInstance = name ? import_loglevel.default.getLogger(name) : import_loglevel.default;
376
- const effectiveLevel = level ?? globalLevel;
377
- loggerInstance.setLevel(LEVEL_MAP[effectiveLevel]);
378
- return wrapLoglevel(loggerInstance, { ...globalContext, ...context });
402
+ const resolveLogger = () => {
403
+ const effectiveLevel = LEVEL_MAP[level ?? globalLevel];
404
+ if (loggerInstance.getLevel() !== import_loglevel.default.levels[String(effectiveLevel).toUpperCase()])
405
+ loggerInstance.setLevel(effectiveLevel);
406
+ return loggerInstance;
407
+ };
408
+ resolveLogger();
409
+ return wrapLoglevel(resolveLogger, () => ({ ...globalContext, ...context }), () => format ?? globalFormat);
379
410
  }
380
411
  function getLogger() {
381
412
  if (!defaultLogger) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../node_modules/loglevel/lib/loglevel.js","../src/functions/core-function-config.browser.ts","../src/functions/core-function-logger.browser.ts","../src/core-main.browser.ts"],"names":["exports","defaultLogger","getLogger","logger","config","log"],"mappings":"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","file":"browser.js","sourcesContent":["/*\n* loglevel - https://github.com/pimterry/loglevel\n*\n* Copyright (c) 2013 Tim Perry\n* Licensed under the MIT license.\n*/\n(function (root, definition) {\n \"use strict\";\n if (typeof define === 'function' && define.amd) {\n define(definition);\n } else if (typeof module === 'object' && module.exports) {\n module.exports = definition();\n } else {\n root.log = definition();\n }\n}(this, function () {\n \"use strict\";\n\n // Slightly dubious tricks to cut down minimized file size\n var noop = function() {};\n var undefinedType = \"undefined\";\n var isIE = (typeof window !== undefinedType) && (typeof window.navigator !== undefinedType) && (\n /Trident\\/|MSIE /.test(window.navigator.userAgent)\n );\n\n var logMethods = [\n \"trace\",\n \"debug\",\n \"info\",\n \"warn\",\n \"error\"\n ];\n\n var _loggersByName = {};\n var defaultLogger = null;\n\n // Cross-browser bind equivalent that works at least back to IE6\n function bindMethod(obj, methodName) {\n var method = obj[methodName];\n if (typeof method.bind === 'function') {\n return method.bind(obj);\n } else {\n try {\n return Function.prototype.bind.call(method, obj);\n } catch (e) {\n // Missing bind shim or IE8 + Modernizr, fallback to wrapping\n return function() {\n return Function.prototype.apply.apply(method, [obj, arguments]);\n };\n }\n }\n }\n\n // Trace() doesn't print the message in IE, so for that case we need to wrap it\n function traceForIE() {\n if (console.log) {\n if (console.log.apply) {\n console.log.apply(console, arguments);\n } else {\n // In old IE, native console methods themselves don't have apply().\n Function.prototype.apply.apply(console.log, [console, arguments]);\n }\n }\n if (console.trace) console.trace();\n }\n\n // Build the best logging method possible for this env\n // Wherever possible we want to bind, not wrap, to preserve stack traces\n function realMethod(methodName) {\n if (methodName === 'debug') {\n methodName = 'log';\n }\n\n if (typeof console === undefinedType) {\n return false; // No method possible, for now - fixed later by enableLoggingWhenConsoleArrives\n } else if (methodName === 'trace' && isIE) {\n return traceForIE;\n } else if (console[methodName] !== undefined) {\n return bindMethod(console, methodName);\n } else if (console.log !== undefined) {\n return bindMethod(console, 'log');\n } else {\n return noop;\n }\n }\n\n // These private functions always need `this` to be set properly\n\n function replaceLoggingMethods() {\n /*jshint validthis:true */\n var level = this.getLevel();\n\n // Replace the actual methods.\n for (var i = 0; i < logMethods.length; i++) {\n var methodName = logMethods[i];\n this[methodName] = (i < level) ?\n noop :\n this.methodFactory(methodName, level, this.name);\n }\n\n // Define log.log as an alias for log.debug\n this.log = this.debug;\n\n // Return any important warnings.\n if (typeof console === undefinedType && level < this.levels.SILENT) {\n return \"No console available for logging\";\n }\n }\n\n // In old IE versions, the console isn't present until you first open it.\n // We build realMethod() replacements here that regenerate logging methods\n function enableLoggingWhenConsoleArrives(methodName) {\n return function () {\n if (typeof console !== undefinedType) {\n replaceLoggingMethods.call(this);\n this[methodName].apply(this, arguments);\n }\n };\n }\n\n // By default, we use closely bound real methods wherever possible, and\n // otherwise we wait for a console to appear, and then try again.\n function defaultMethodFactory(methodName, _level, _loggerName) {\n /*jshint validthis:true */\n return realMethod(methodName) ||\n enableLoggingWhenConsoleArrives.apply(this, arguments);\n }\n\n function Logger(name, factory) {\n // Private instance variables.\n var self = this;\n /**\n * The level inherited from a parent logger (or a global default). We\n * cache this here rather than delegating to the parent so that it stays\n * in sync with the actual logging methods that we have installed (the\n * parent could change levels but we might not have rebuilt the loggers\n * in this child yet).\n * @type {number}\n */\n var inheritedLevel;\n /**\n * The default level for this logger, if any. If set, this overrides\n * `inheritedLevel`.\n * @type {number|null}\n */\n var defaultLevel;\n /**\n * A user-specific level for this logger. If set, this overrides\n * `defaultLevel`.\n * @type {number|null}\n */\n var userLevel;\n\n var storageKey = \"loglevel\";\n if (typeof name === \"string\") {\n storageKey += \":\" + name;\n } else if (typeof name === \"symbol\") {\n storageKey = undefined;\n }\n\n function persistLevelIfPossible(levelNum) {\n var levelName = (logMethods[levelNum] || 'silent').toUpperCase();\n\n if (typeof window === undefinedType || !storageKey) return;\n\n // Use localStorage if available\n try {\n window.localStorage[storageKey] = levelName;\n return;\n } catch (ignore) {}\n\n // Use session cookie as fallback\n try {\n window.document.cookie =\n encodeURIComponent(storageKey) + \"=\" + levelName + \";\";\n } catch (ignore) {}\n }\n\n function getPersistedLevel() {\n var storedLevel;\n\n if (typeof window === undefinedType || !storageKey) return;\n\n try {\n storedLevel = window.localStorage[storageKey];\n } catch (ignore) {}\n\n // Fallback to cookies if local storage gives us nothing\n if (typeof storedLevel === undefinedType) {\n try {\n var cookie = window.document.cookie;\n var cookieName = encodeURIComponent(storageKey);\n var location = cookie.indexOf(cookieName + \"=\");\n if (location !== -1) {\n storedLevel = /^([^;]+)/.exec(\n cookie.slice(location + cookieName.length + 1)\n )[1];\n }\n } catch (ignore) {}\n }\n\n // If the stored level is not valid, treat it as if nothing was stored.\n if (self.levels[storedLevel] === undefined) {\n storedLevel = undefined;\n }\n\n return storedLevel;\n }\n\n function clearPersistedLevel() {\n if (typeof window === undefinedType || !storageKey) return;\n\n // Use localStorage if available\n try {\n window.localStorage.removeItem(storageKey);\n } catch (ignore) {}\n\n // Use session cookie as fallback\n try {\n window.document.cookie =\n encodeURIComponent(storageKey) + \"=; expires=Thu, 01 Jan 1970 00:00:00 UTC\";\n } catch (ignore) {}\n }\n\n function normalizeLevel(input) {\n var level = input;\n if (typeof level === \"string\" && self.levels[level.toUpperCase()] !== undefined) {\n level = self.levels[level.toUpperCase()];\n }\n if (typeof level === \"number\" && level >= 0 && level <= self.levels.SILENT) {\n return level;\n } else {\n throw new TypeError(\"log.setLevel() called with invalid level: \" + input);\n }\n }\n\n /*\n *\n * Public logger API - see https://github.com/pimterry/loglevel for details\n *\n */\n\n self.name = name;\n\n self.levels = { \"TRACE\": 0, \"DEBUG\": 1, \"INFO\": 2, \"WARN\": 3,\n \"ERROR\": 4, \"SILENT\": 5};\n\n self.methodFactory = factory || defaultMethodFactory;\n\n self.getLevel = function () {\n if (userLevel != null) {\n return userLevel;\n } else if (defaultLevel != null) {\n return defaultLevel;\n } else {\n return inheritedLevel;\n }\n };\n\n self.setLevel = function (level, persist) {\n userLevel = normalizeLevel(level);\n if (persist !== false) { // defaults to true\n persistLevelIfPossible(userLevel);\n }\n\n // NOTE: in v2, this should call rebuild(), which updates children.\n return replaceLoggingMethods.call(self);\n };\n\n self.setDefaultLevel = function (level) {\n defaultLevel = normalizeLevel(level);\n if (!getPersistedLevel()) {\n self.setLevel(level, false);\n }\n };\n\n self.resetLevel = function () {\n userLevel = null;\n clearPersistedLevel();\n replaceLoggingMethods.call(self);\n };\n\n self.enableAll = function(persist) {\n self.setLevel(self.levels.TRACE, persist);\n };\n\n self.disableAll = function(persist) {\n self.setLevel(self.levels.SILENT, persist);\n };\n\n self.rebuild = function () {\n if (defaultLogger !== self) {\n inheritedLevel = normalizeLevel(defaultLogger.getLevel());\n }\n replaceLoggingMethods.call(self);\n\n if (defaultLogger === self) {\n for (var childName in _loggersByName) {\n _loggersByName[childName].rebuild();\n }\n }\n };\n\n // Initialize all the internal levels.\n inheritedLevel = normalizeLevel(\n defaultLogger ? defaultLogger.getLevel() : \"WARN\"\n );\n var initialLevel = getPersistedLevel();\n if (initialLevel != null) {\n userLevel = normalizeLevel(initialLevel);\n }\n replaceLoggingMethods.call(self);\n }\n\n /*\n *\n * Top-level API\n *\n */\n\n defaultLogger = new Logger();\n\n defaultLogger.getLogger = function getLogger(name) {\n if ((typeof name !== \"symbol\" && typeof name !== \"string\") || name === \"\") {\n throw new TypeError(\"You must supply a name when creating a logger.\");\n }\n\n var logger = _loggersByName[name];\n if (!logger) {\n logger = _loggersByName[name] = new Logger(\n name,\n defaultLogger.methodFactory\n );\n }\n return logger;\n };\n\n // Grab the current global log variable in case of overwrite\n var _log = (typeof window !== undefinedType) ? window.log : undefined;\n defaultLogger.noConflict = function() {\n if (typeof window !== undefinedType &&\n window.log === defaultLogger) {\n window.log = _log;\n }\n\n return defaultLogger;\n };\n\n defaultLogger.getLoggers = function getLoggers() {\n return _loggersByName;\n };\n\n // ES6 default export, for compatibility\n defaultLogger['default'] = defaultLogger;\n\n return defaultLogger;\n}));\n","/**\n * @h-ai/core — 配置管理(浏览器占位实现)\n *\n * 浏览器环境没有文件系统,不能加载 / 监听 YAML 配置文件。\n * 该实现保持 `core.config` API 形态与 Node.js 一致,但所有文件相关操作\n * 都返回明确的 SERVICE_UNAVAILABLE,避免运行时出现 `core.config` 为 undefined。\n * @module core-function-config.browser\n */\n\nimport type { ZodType } from 'zod'\nimport type { HaiError, HaiResult } from '../core-types.js'\nimport type { ConfigFn, WatchCallback } from './core-function-config.node.js'\nimport { err, HaiCommonError } from '../core-types.js'\nimport { i18n } from '../i18n/core-i18n-utils.js'\n\nfunction unsupported<T>(): HaiResult<T> {\n return err(\n HaiCommonError.SERVICE_UNAVAILABLE,\n i18n.coreM('core_configUnsupportedInBrowser'),\n )\n}\n\nfunction unsupportedError(): HaiError {\n const result = unsupported<never>()\n if (!result.success)\n return result.error\n throw new Error(i18n.coreM('core_configUnsupportedInBrowser'))\n}\n\n/** 浏览器端 config 占位对象,API 与 Node.js config 保持一致。 */\nexport const config: ConfigFn = {\n load<T>(_name: string, _filePath: string, _schema?: ZodType<T>): HaiResult<T> {\n return unsupported<T>()\n },\n\n validate<T>(_name: string, _schema: ZodType<T>): HaiResult<T> {\n return unsupported<T>()\n },\n\n get<T>(_name: string): T | undefined {\n return undefined\n },\n\n getOrThrow<T>(_name: string): T {\n throw new Error(i18n.coreM('core_configUnsupportedInBrowser'))\n },\n\n reload(_name: string): HaiResult<unknown> {\n return unsupported<unknown>()\n },\n\n has(_name: string): boolean {\n return false\n },\n\n clear(_name?: string): void {\n // 浏览器端无配置缓存,无需操作。\n },\n\n keys(): string[] {\n return []\n },\n\n watch<T = unknown>(_name: string, callback: WatchCallback<T>): () => void {\n callback(null, unsupportedError())\n return () => { }\n },\n\n unwatch(_name?: string): void {\n // 浏览器端无 watcher,无需操作。\n },\n\n isWatching(_name: string): boolean {\n return false\n },\n}\n\n/** config 子工具类型 */\nexport type BrowserConfigFn = typeof config\n","/**\n * @h-ai/core — Logger(浏览器版本,基于 loglevel)\n *\n * 提供统一的日志接口,浏览器环境使用 loglevel 实现。\n * @module core-function-logger.browser\n */\n\nimport type { LoggingConfig, LogLevel } from '../core-config.js'\nimport type { LogContext, Logger, LoggerFunctions, LoggerOptions } from '../core-types.js'\nimport log from 'loglevel'\nimport { sanitize as sanitizeUtils } from '../utils/core-util-sanitize.js'\n\n// ─── 全局配置 ───\n\n/** 全局日志级别(默认 'info') */\nlet globalLevel: LogLevel = 'info'\n\n/** 全局默认上下文(每条日志自动附带) */\nlet globalContext: Record<string, unknown> = {}\n\n/** 默认 Logger 单例缓存 */\nlet defaultLogger: Logger | null = null\n\n/**\n * LogLevel 到 loglevel 库级别的映射。\n *\n * loglevel 不支持 fatal,映射为 error。\n */\nconst LEVEL_MAP: Record<LogLevel, log.LogLevelDesc> = {\n trace: 'trace',\n debug: 'debug',\n info: 'info',\n warn: 'warn',\n error: 'error',\n fatal: 'error', // loglevel 没有 fatal\n}\n\n/**\n * 配置全局 Logger 选项。\n *\n * @param config - 日志配置\n *\n * @example\n * ```ts\n * logger.configureLogger({ level: 'debug' })\n * ```\n */\nfunction configureLogger(config: Partial<LoggingConfig>): void {\n if (config.level) {\n globalLevel = config.level\n log.setLevel(LEVEL_MAP[config.level])\n }\n if (config.context) {\n globalContext = { ...globalContext, ...config.context }\n }\n // 重置默认 logger 缓存,使下次 getLogger() 返回新配置的实例\n defaultLogger = null\n}\n\n/**\n * 设置全局日志级别。\n *\n * @param level - 日志级别\n *\n * @example\n * ```ts\n * logger.setLogLevel('warn')\n * ```\n */\nfunction setLogLevel(level: LogLevel): void {\n globalLevel = level\n log.setLevel(LEVEL_MAP[level])\n}\n\n/**\n * 获取当前全局日志级别。\n *\n * @example\n * ```ts\n * const level = logger.getLogLevel()\n * ```\n */\nfunction getLogLevel(): LogLevel {\n return globalLevel\n}\n\nfunction sanitizeLogContext(ctx?: LogContext): LogContext | undefined {\n if (!ctx || Object.keys(ctx).length === 0) {\n return ctx\n }\n\n return sanitizeUtils.sanitizeSensitiveFields(ctx) as LogContext\n}\n\n// ─── Logger 实现 ───\n\n/**\n * 格式化日志消息。\n *\n * 将消息文本与上下文拼接为单行输出(上下文序列化为 JSON)。\n *\n * @param message - 日志文本\n * @param context - 日志上下文(空对象时不输出)\n * @returns 格式化后的字符串\n */\nfunction formatMessage(message: string, context?: LogContext): string {\n const sanitizedContext = sanitizeLogContext(context)\n\n if (!sanitizedContext || Object.keys(sanitizedContext).length === 0) {\n return message\n }\n return `${message} ${JSON.stringify(sanitizedContext)}`\n}\n\n/**\n * 创建 Logger 包装。\n *\n * 将 loglevel 实例包装为统一 Logger 接口,自动合并基础上下文。\n *\n * @param loggerInstance - loglevel 实例\n * @param baseContext - 基础上下文(会与每次调用时的 ctx 合并)\n * @returns 统一 Logger 实例\n */\nfunction wrapLoglevel(loggerInstance: log.Logger, baseContext: Record<string, unknown>): Logger {\n return {\n trace(message: string, ctx?: LogContext) {\n loggerInstance.trace(formatMessage(message, { ...baseContext, ...ctx }))\n },\n debug(message: string, ctx?: LogContext) {\n loggerInstance.debug(formatMessage(message, { ...baseContext, ...ctx }))\n },\n info(message: string, ctx?: LogContext) {\n loggerInstance.info(formatMessage(message, { ...baseContext, ...ctx }))\n },\n warn(message: string, ctx?: LogContext) {\n loggerInstance.warn(formatMessage(message, { ...baseContext, ...ctx }))\n },\n error(message: string, ctx?: LogContext) {\n loggerInstance.error(formatMessage(message, { ...baseContext, ...ctx }))\n },\n fatal(message: string, ctx?: LogContext) {\n loggerInstance.error(`[FATAL] ${formatMessage(message, { ...baseContext, ...ctx })}`)\n },\n child(childContext: Record<string, unknown>): Logger {\n return wrapLoglevel(loggerInstance, { ...baseContext, ...childContext })\n },\n }\n}\n\n/**\n * 创建 Logger 实例。\n *\n * @param options - Logger 选项\n * @returns Logger 实例\n *\n * @example\n * ```ts\n * const appLogger = logger.createLogger({ name: 'web' })\n * appLogger.info('ready')\n * ```\n */\nfunction createLogger(options: LoggerOptions = {}): Logger {\n const { name, level, context } = options\n\n // 创建或获取 logger 实例\n const loggerInstance = name ? log.getLogger(name) : log\n\n // 设置级别\n const effectiveLevel = level ?? globalLevel\n loggerInstance.setLevel(LEVEL_MAP[effectiveLevel])\n\n return wrapLoglevel(loggerInstance, { ...globalContext, ...context })\n}\n\n// ─── 默认 Logger 实例 ───\n\n/**\n * 获取默认 Logger 实例(单例)。\n *\n * @example\n * ```ts\n * const defaultLogger = logger.getLogger()\n * ```\n */\nfunction getLogger(): Logger {\n if (!defaultLogger) {\n defaultLogger = createLogger()\n }\n return defaultLogger\n}\n\n// ─── 对外出口 ───\n\n/**\n * 浏览器 Logger 函数集合。\n *\n * @example\n * ```ts\n * logger.createLogger({ name: 'ui' }).info('boot')\n * ```\n */\nexport const logger: LoggerFunctions = {\n configureLogger,\n setLogLevel,\n getLogLevel,\n createLogger,\n getLogger,\n}\n","/**\n * @h-ai/core — Core 服务聚合(浏览器)\n *\n * 提供浏览器环境的 core 对象,聚合常用功能。 所有功能统一通过 core 对象访问(不含 config 能力)。\n * @module core-main.browser\n */\n\nimport type { CoreOptions } from './core-types.js'\nimport { createCore } from './core-main.js'\nimport { config } from './functions/core-function-config.browser.js'\nimport { logger } from './functions/core-function-logger.browser.js'\n\n// ─── Core 实例 ───\n\n/**\n * 创建 Browser 版本的 core 对象。\n *\n * @example\n * ```ts\n * import { core } from '@h-ai/core'\n * core.logger.info('ready')\n * ```\n */\nfunction createBrowserCore() {\n const baseCore = createCore({\n createLogger: logger.createLogger,\n getLogger: logger.getLogger,\n configureLogger: logger.configureLogger,\n setLogLevel: logger.setLogLevel,\n getLogLevel: logger.getLogLevel,\n })\n\n // 扩展 config 和 init 功能;浏览器端 config 为占位实现,返回明确不支持错误。\n return {\n ...baseCore,\n /** 配置管理(浏览器端不支持文件配置,方法返回 SERVICE_UNAVAILABLE) */\n config,\n /** 初始化 Core */\n init: initCore,\n }\n}\n\n/**\n * Core 服务对象 - 聚合常用功能(浏览器)。\n *\n * @example\n * ```ts\n * import { core } from '@h-ai/core'\n * core.logger.info('browser ready')\n * ```\n */\nexport const core = createBrowserCore()\n\n/**\n * 初始化 Core(内部实现,通过 core.init() 调用)。\n * 注意:浏览器环境不支持 config 和 watchConfig 选项。\n *\n * @param options - 初始化选项\n *\n * @example\n * ```ts\n * import { core } from '@h-ai/core'\n * core.init({ logging: { level: 'debug' } })\n * ```\n */\nfunction initCore(options: CoreOptions = {}): void {\n const logger = core.logger\n\n // 配置日志\n if (options.logging) {\n core.logger.configure(options.logging)\n }\n\n if (options.watchConfig) {\n logger.warn('[core] Browser does not support watchConfig option')\n }\n\n logger.info('[core] Initialized (browser mode)')\n}\n"]}
1
+ {"version":3,"sources":["../../../node_modules/loglevel/lib/loglevel.js","../src/functions/core-function-config.browser.ts","../src/functions/core-function-logger.browser.ts","../src/core-main.browser.ts"],"names":["defaultLogger","getLogger","logger","config","log"],"mappings":"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","file":"browser.js","sourcesContent":["/*\n* loglevel - https://github.com/pimterry/loglevel\n*\n* Copyright (c) 2013 Tim Perry\n* Licensed under the MIT license.\n*/\n(function (root, definition) {\n \"use strict\";\n if (typeof define === 'function' && define.amd) {\n define(definition);\n } else if (typeof module === 'object' && module.exports) {\n module.exports = definition();\n } else {\n root.log = definition();\n }\n}(this, function () {\n \"use strict\";\n\n // Slightly dubious tricks to cut down minimized file size\n var noop = function() {};\n var undefinedType = \"undefined\";\n var isIE = (typeof window !== undefinedType) && (typeof window.navigator !== undefinedType) && (\n /Trident\\/|MSIE /.test(window.navigator.userAgent)\n );\n\n var logMethods = [\n \"trace\",\n \"debug\",\n \"info\",\n \"warn\",\n \"error\"\n ];\n\n var _loggersByName = {};\n var defaultLogger = null;\n\n // Cross-browser bind equivalent that works at least back to IE6\n function bindMethod(obj, methodName) {\n var method = obj[methodName];\n if (typeof method.bind === 'function') {\n return method.bind(obj);\n } else {\n try {\n return Function.prototype.bind.call(method, obj);\n } catch (e) {\n // Missing bind shim or IE8 + Modernizr, fallback to wrapping\n return function() {\n return Function.prototype.apply.apply(method, [obj, arguments]);\n };\n }\n }\n }\n\n // Trace() doesn't print the message in IE, so for that case we need to wrap it\n function traceForIE() {\n if (console.log) {\n if (console.log.apply) {\n console.log.apply(console, arguments);\n } else {\n // In old IE, native console methods themselves don't have apply().\n Function.prototype.apply.apply(console.log, [console, arguments]);\n }\n }\n if (console.trace) console.trace();\n }\n\n // Build the best logging method possible for this env\n // Wherever possible we want to bind, not wrap, to preserve stack traces\n function realMethod(methodName) {\n if (methodName === 'debug') {\n methodName = 'log';\n }\n\n if (typeof console === undefinedType) {\n return false; // No method possible, for now - fixed later by enableLoggingWhenConsoleArrives\n } else if (methodName === 'trace' && isIE) {\n return traceForIE;\n } else if (console[methodName] !== undefined) {\n return bindMethod(console, methodName);\n } else if (console.log !== undefined) {\n return bindMethod(console, 'log');\n } else {\n return noop;\n }\n }\n\n // These private functions always need `this` to be set properly\n\n function replaceLoggingMethods() {\n /*jshint validthis:true */\n var level = this.getLevel();\n\n // Replace the actual methods.\n for (var i = 0; i < logMethods.length; i++) {\n var methodName = logMethods[i];\n this[methodName] = (i < level) ?\n noop :\n this.methodFactory(methodName, level, this.name);\n }\n\n // Define log.log as an alias for log.debug\n this.log = this.debug;\n\n // Return any important warnings.\n if (typeof console === undefinedType && level < this.levels.SILENT) {\n return \"No console available for logging\";\n }\n }\n\n // In old IE versions, the console isn't present until you first open it.\n // We build realMethod() replacements here that regenerate logging methods\n function enableLoggingWhenConsoleArrives(methodName) {\n return function () {\n if (typeof console !== undefinedType) {\n replaceLoggingMethods.call(this);\n this[methodName].apply(this, arguments);\n }\n };\n }\n\n // By default, we use closely bound real methods wherever possible, and\n // otherwise we wait for a console to appear, and then try again.\n function defaultMethodFactory(methodName, _level, _loggerName) {\n /*jshint validthis:true */\n return realMethod(methodName) ||\n enableLoggingWhenConsoleArrives.apply(this, arguments);\n }\n\n function Logger(name, factory) {\n // Private instance variables.\n var self = this;\n /**\n * The level inherited from a parent logger (or a global default). We\n * cache this here rather than delegating to the parent so that it stays\n * in sync with the actual logging methods that we have installed (the\n * parent could change levels but we might not have rebuilt the loggers\n * in this child yet).\n * @type {number}\n */\n var inheritedLevel;\n /**\n * The default level for this logger, if any. If set, this overrides\n * `inheritedLevel`.\n * @type {number|null}\n */\n var defaultLevel;\n /**\n * A user-specific level for this logger. If set, this overrides\n * `defaultLevel`.\n * @type {number|null}\n */\n var userLevel;\n\n var storageKey = \"loglevel\";\n if (typeof name === \"string\") {\n storageKey += \":\" + name;\n } else if (typeof name === \"symbol\") {\n storageKey = undefined;\n }\n\n function persistLevelIfPossible(levelNum) {\n var levelName = (logMethods[levelNum] || 'silent').toUpperCase();\n\n if (typeof window === undefinedType || !storageKey) return;\n\n // Use localStorage if available\n try {\n window.localStorage[storageKey] = levelName;\n return;\n } catch (ignore) {}\n\n // Use session cookie as fallback\n try {\n window.document.cookie =\n encodeURIComponent(storageKey) + \"=\" + levelName + \";\";\n } catch (ignore) {}\n }\n\n function getPersistedLevel() {\n var storedLevel;\n\n if (typeof window === undefinedType || !storageKey) return;\n\n try {\n storedLevel = window.localStorage[storageKey];\n } catch (ignore) {}\n\n // Fallback to cookies if local storage gives us nothing\n if (typeof storedLevel === undefinedType) {\n try {\n var cookie = window.document.cookie;\n var cookieName = encodeURIComponent(storageKey);\n var location = cookie.indexOf(cookieName + \"=\");\n if (location !== -1) {\n storedLevel = /^([^;]+)/.exec(\n cookie.slice(location + cookieName.length + 1)\n )[1];\n }\n } catch (ignore) {}\n }\n\n // If the stored level is not valid, treat it as if nothing was stored.\n if (self.levels[storedLevel] === undefined) {\n storedLevel = undefined;\n }\n\n return storedLevel;\n }\n\n function clearPersistedLevel() {\n if (typeof window === undefinedType || !storageKey) return;\n\n // Use localStorage if available\n try {\n window.localStorage.removeItem(storageKey);\n } catch (ignore) {}\n\n // Use session cookie as fallback\n try {\n window.document.cookie =\n encodeURIComponent(storageKey) + \"=; expires=Thu, 01 Jan 1970 00:00:00 UTC\";\n } catch (ignore) {}\n }\n\n function normalizeLevel(input) {\n var level = input;\n if (typeof level === \"string\" && self.levels[level.toUpperCase()] !== undefined) {\n level = self.levels[level.toUpperCase()];\n }\n if (typeof level === \"number\" && level >= 0 && level <= self.levels.SILENT) {\n return level;\n } else {\n throw new TypeError(\"log.setLevel() called with invalid level: \" + input);\n }\n }\n\n /*\n *\n * Public logger API - see https://github.com/pimterry/loglevel for details\n *\n */\n\n self.name = name;\n\n self.levels = { \"TRACE\": 0, \"DEBUG\": 1, \"INFO\": 2, \"WARN\": 3,\n \"ERROR\": 4, \"SILENT\": 5};\n\n self.methodFactory = factory || defaultMethodFactory;\n\n self.getLevel = function () {\n if (userLevel != null) {\n return userLevel;\n } else if (defaultLevel != null) {\n return defaultLevel;\n } else {\n return inheritedLevel;\n }\n };\n\n self.setLevel = function (level, persist) {\n userLevel = normalizeLevel(level);\n if (persist !== false) { // defaults to true\n persistLevelIfPossible(userLevel);\n }\n\n // NOTE: in v2, this should call rebuild(), which updates children.\n return replaceLoggingMethods.call(self);\n };\n\n self.setDefaultLevel = function (level) {\n defaultLevel = normalizeLevel(level);\n if (!getPersistedLevel()) {\n self.setLevel(level, false);\n }\n };\n\n self.resetLevel = function () {\n userLevel = null;\n clearPersistedLevel();\n replaceLoggingMethods.call(self);\n };\n\n self.enableAll = function(persist) {\n self.setLevel(self.levels.TRACE, persist);\n };\n\n self.disableAll = function(persist) {\n self.setLevel(self.levels.SILENT, persist);\n };\n\n self.rebuild = function () {\n if (defaultLogger !== self) {\n inheritedLevel = normalizeLevel(defaultLogger.getLevel());\n }\n replaceLoggingMethods.call(self);\n\n if (defaultLogger === self) {\n for (var childName in _loggersByName) {\n _loggersByName[childName].rebuild();\n }\n }\n };\n\n // Initialize all the internal levels.\n inheritedLevel = normalizeLevel(\n defaultLogger ? defaultLogger.getLevel() : \"WARN\"\n );\n var initialLevel = getPersistedLevel();\n if (initialLevel != null) {\n userLevel = normalizeLevel(initialLevel);\n }\n replaceLoggingMethods.call(self);\n }\n\n /*\n *\n * Top-level API\n *\n */\n\n defaultLogger = new Logger();\n\n defaultLogger.getLogger = function getLogger(name) {\n if ((typeof name !== \"symbol\" && typeof name !== \"string\") || name === \"\") {\n throw new TypeError(\"You must supply a name when creating a logger.\");\n }\n\n var logger = _loggersByName[name];\n if (!logger) {\n logger = _loggersByName[name] = new Logger(\n name,\n defaultLogger.methodFactory\n );\n }\n return logger;\n };\n\n // Grab the current global log variable in case of overwrite\n var _log = (typeof window !== undefinedType) ? window.log : undefined;\n defaultLogger.noConflict = function() {\n if (typeof window !== undefinedType &&\n window.log === defaultLogger) {\n window.log = _log;\n }\n\n return defaultLogger;\n };\n\n defaultLogger.getLoggers = function getLoggers() {\n return _loggersByName;\n };\n\n // ES6 default export, for compatibility\n defaultLogger['default'] = defaultLogger;\n\n return defaultLogger;\n}));\n","/**\n * @h-ai/core — 配置管理(浏览器占位实现)\n *\n * 浏览器环境没有文件系统,不能加载 / 监听 YAML 配置文件。\n * 该实现保持 `core.config` API 形态与 Node.js 一致,但所有文件相关操作\n * 都返回明确的 SERVICE_UNAVAILABLE,避免运行时出现 `core.config` 为 undefined。\n * @module core-function-config.browser\n */\n\nimport type { ZodType } from 'zod'\nimport type { HaiError, HaiResult } from '../core-types.js'\nimport type { ConfigFn, WatchCallback } from './core-function-config.node.js'\nimport { err, HaiCommonError } from '../core-types.js'\nimport { i18n } from '../i18n/core-i18n-utils.js'\n\nfunction unsupported<T>(): HaiResult<T> {\n return err(\n HaiCommonError.SERVICE_UNAVAILABLE,\n i18n.coreM('core_configUnsupportedInBrowser'),\n )\n}\n\nfunction unsupportedError(): HaiError {\n const result = unsupported<never>()\n if (!result.success)\n return result.error\n throw new Error(i18n.coreM('core_configUnsupportedInBrowser'))\n}\n\n/** 浏览器端 config 占位对象,API 与 Node.js config 保持一致。 */\nexport const config: ConfigFn = {\n load<T>(_name: string, _filePath: string, _schema?: ZodType<T>): HaiResult<T> {\n return unsupported<T>()\n },\n\n validate<T>(_name: string, _schema: ZodType<T>): HaiResult<T> {\n return unsupported<T>()\n },\n\n get<T>(_name: string): T | undefined {\n return undefined\n },\n\n getOrThrow<T>(_name: string): T {\n throw new Error(i18n.coreM('core_configUnsupportedInBrowser'))\n },\n\n reload(_name: string): HaiResult<unknown> {\n return unsupported<unknown>()\n },\n\n has(_name: string): boolean {\n return false\n },\n\n clear(_name?: string): void {\n // 浏览器端无配置缓存,无需操作。\n },\n\n keys(): string[] {\n return []\n },\n\n watch<T = unknown>(_name: string, callback: WatchCallback<T>): () => void {\n callback(null, unsupportedError())\n return () => { }\n },\n\n unwatch(_name?: string): void {\n // 浏览器端无 watcher,无需操作。\n },\n\n isWatching(_name: string): boolean {\n return false\n },\n}\n\n/** config 子工具类型 */\nexport type BrowserConfigFn = typeof config\n","/**\n * @h-ai/core — Logger(浏览器版本,基于 loglevel)\n *\n * 提供统一的日志接口,浏览器环境使用 loglevel 实现。\n * @module core-function-logger.browser\n */\n\nimport type { LogFormat, LoggingConfig, LogLevel } from '../core-config.js'\nimport type { LogContext, Logger, LoggerFunctions, LoggerOptions } from '../core-types.js'\nimport log from 'loglevel'\nimport { sanitize as sanitizeUtils } from '../utils/core-util-sanitize.js'\n\n// ─── 全局配置 ───\n\n/** 全局日志级别(默认 'info') */\nlet globalLevel: LogLevel = 'info'\n\n/** 浏览器默认可读输出;可配置 JSON 格式用于采集。 */\nlet globalFormat: LogFormat = 'pretty'\n\n/** 附加脱敏路径,与默认凭据脱敏同时生效。 */\nlet globalRedact: string[] = []\n\n/** 全局默认上下文(每条日志自动附带) */\nlet globalContext: Record<string, unknown> = {}\n\n/** 默认 Logger 单例缓存 */\nlet defaultLogger: Logger | null = null\n\n/**\n * LogLevel 到 loglevel 库级别的映射。\n *\n * loglevel 不支持 fatal,映射为 error。\n */\nconst LEVEL_MAP: Record<LogLevel, log.LogLevelDesc> = {\n trace: 'trace',\n debug: 'debug',\n info: 'info',\n warn: 'warn',\n error: 'error',\n fatal: 'error', // loglevel 没有 fatal\n}\n\n/**\n * 配置全局 Logger 选项。\n *\n * @param config - 日志配置\n *\n * @example\n * ```ts\n * logger.configureLogger({ level: 'debug' })\n * ```\n */\nfunction configureLogger(config: Partial<LoggingConfig>): void {\n if (config.level) {\n globalLevel = config.level\n log.setLevel(LEVEL_MAP[config.level])\n }\n if (config.context) {\n globalContext = { ...globalContext, ...config.context }\n }\n if (config.format)\n globalFormat = config.format\n if (config.redact)\n globalRedact = [...config.redact]\n}\n\n/**\n * 设置全局日志级别。\n *\n * @param level - 日志级别\n *\n * @example\n * ```ts\n * logger.setLogLevel('warn')\n * ```\n */\nfunction setLogLevel(level: LogLevel): void {\n globalLevel = level\n log.setLevel(LEVEL_MAP[level])\n}\n\n/**\n * 获取当前全局日志级别。\n *\n * @example\n * ```ts\n * const level = logger.getLogLevel()\n * ```\n */\nfunction getLogLevel(): LogLevel {\n return globalLevel\n}\n\nfunction sanitizeLogContext(ctx?: LogContext): LogContext | undefined {\n if (!ctx || Object.keys(ctx).length === 0) {\n return ctx\n }\n\n const sanitized = sanitizeUtils.sanitizeSensitiveFields(ctx)\n for (const path of globalRedact)\n redactPath(sanitized, path.match(/\\*|[^.[\\]\"']+/g) ?? [])\n return sanitized\n}\n\n/** 在已脱敏的副本上处理点/括号路径和通配符,不修改调用方原始对象。 */\nfunction redactPath(value: unknown, segments: string[]): void {\n if (!value || typeof value !== 'object' || segments.length === 0)\n return\n const record = value as Record<string, unknown>\n const [segment, ...rest] = segments\n const keys = segment === '*' ? Object.keys(record) : [segment!]\n for (const key of keys) {\n if (!Object.hasOwn(record, key) || ['__proto__', 'constructor', 'prototype'].includes(key))\n continue\n if (rest.length === 0)\n record[key] = '[REDACTED]'\n else redactPath(record[key], rest)\n }\n}\n\n// ─── Logger 实现 ───\n\n/**\n * 格式化日志消息。\n *\n * 将消息文本与上下文拼接为单行输出(上下文序列化为 JSON)。\n *\n * @param message - 日志文本\n * @param context - 日志上下文(空对象时不输出)\n * @returns 格式化后的字符串\n */\nfunction formatMessage(message: string, context?: LogContext, format: LogFormat = globalFormat, level: LogLevel = 'info'): string {\n const sanitizedContext = sanitizeLogContext(context)\n\n if (format === 'json')\n return JSON.stringify({ ...sanitizedContext, level, msg: message })\n\n if (!sanitizedContext || Object.keys(sanitizedContext).length === 0) {\n return message\n }\n return `${message} ${JSON.stringify(sanitizedContext)}`\n}\n\n/**\n * 创建 Logger 包装。\n *\n * 将 loglevel 实例包装为统一 Logger 接口,自动合并基础上下文。\n *\n * @param resolveLogger - 当前级别的 loglevel 实例\n * @param resolveContext - 当前基础上下文(会与每次调用时的 ctx 合并)\n * @param resolveFormat - 当前输出格式\n * @returns 统一 Logger 实例\n */\nfunction wrapLoglevel(resolveLogger: () => log.Logger, resolveContext: () => Record<string, unknown>, resolveFormat: () => LogFormat): Logger {\n return {\n trace(message: string, ctx?: LogContext) {\n resolveLogger().trace(formatMessage(message, { ...resolveContext(), ...ctx }, resolveFormat(), 'trace'))\n },\n debug(message: string, ctx?: LogContext) {\n resolveLogger().debug(formatMessage(message, { ...resolveContext(), ...ctx }, resolveFormat(), 'debug'))\n },\n info(message: string, ctx?: LogContext) {\n resolveLogger().info(formatMessage(message, { ...resolveContext(), ...ctx }, resolveFormat(), 'info'))\n },\n warn(message: string, ctx?: LogContext) {\n resolveLogger().warn(formatMessage(message, { ...resolveContext(), ...ctx }, resolveFormat(), 'warn'))\n },\n error(message: string, ctx?: LogContext) {\n resolveLogger().error(formatMessage(message, { ...resolveContext(), ...ctx }, resolveFormat(), 'error'))\n },\n fatal(message: string, ctx?: LogContext) {\n const text = formatMessage(message, { ...resolveContext(), ...ctx }, resolveFormat(), 'fatal')\n resolveLogger().error(resolveFormat() === 'json' ? text : `[FATAL] ${text}`)\n },\n child(childContext: Record<string, unknown>): Logger {\n return wrapLoglevel(resolveLogger, () => ({ ...resolveContext(), ...childContext }), resolveFormat)\n },\n }\n}\n\n/**\n * 创建 Logger 实例。\n *\n * @param options - Logger 选项\n * @returns Logger 实例\n *\n * @example\n * ```ts\n * const appLogger = logger.createLogger({ name: 'web' })\n * appLogger.info('ready')\n * ```\n */\nfunction createLogger(options: LoggerOptions = {}): Logger {\n const { name, level, format } = options\n const context = { ...options.context }\n\n // 创建或获取 logger 实例\n const loggerInstance = name ? log.getLogger(name) : log\n\n const resolveLogger = (): log.Logger => {\n const effectiveLevel = LEVEL_MAP[level ?? globalLevel]\n if (loggerInstance.getLevel() !== log.levels[String(effectiveLevel).toUpperCase() as keyof typeof log.levels])\n loggerInstance.setLevel(effectiveLevel)\n return loggerInstance\n }\n resolveLogger()\n return wrapLoglevel(resolveLogger, () => ({ ...globalContext, ...context }), () => format ?? globalFormat)\n}\n\n// ─── 默认 Logger 实例 ───\n\n/**\n * 获取默认 Logger 实例(单例)。\n *\n * @example\n * ```ts\n * const defaultLogger = logger.getLogger()\n * ```\n */\nfunction getLogger(): Logger {\n if (!defaultLogger) {\n defaultLogger = createLogger()\n }\n return defaultLogger\n}\n\n// ─── 对外出口 ───\n\n/**\n * 浏览器 Logger 函数集合。\n *\n * @example\n * ```ts\n * logger.createLogger({ name: 'ui' }).info('boot')\n * ```\n */\nexport const logger: LoggerFunctions = {\n configureLogger,\n setLogLevel,\n getLogLevel,\n createLogger,\n getLogger,\n}\n","/**\n * @h-ai/core — Core 服务聚合(浏览器)\n *\n * 提供浏览器环境的 core 对象,聚合常用功能。 所有功能统一通过 core 对象访问(不含 config 能力)。\n * @module core-main.browser\n */\n\nimport type { CoreOptions } from './core-types.js'\nimport { createCore } from './core-main.js'\nimport { config } from './functions/core-function-config.browser.js'\nimport { logger } from './functions/core-function-logger.browser.js'\n\n// ─── Core 实例 ───\n\n/**\n * 创建 Browser 版本的 core 对象。\n *\n * @example\n * ```ts\n * import { core } from '@h-ai/core'\n * core.logger.info('ready')\n * ```\n */\nfunction createBrowserCore() {\n const baseCore = createCore({\n createLogger: logger.createLogger,\n getLogger: logger.getLogger,\n configureLogger: logger.configureLogger,\n setLogLevel: logger.setLogLevel,\n getLogLevel: logger.getLogLevel,\n })\n\n // 扩展 config 和 init 功能;浏览器端 config 为占位实现,返回明确不支持错误。\n return {\n ...baseCore,\n /** 配置管理(浏览器端不支持文件配置,方法返回 SERVICE_UNAVAILABLE) */\n config,\n /** 初始化 Core */\n init: initCore,\n }\n}\n\n/**\n * Core 服务对象 - 聚合常用功能(浏览器)。\n *\n * @example\n * ```ts\n * import { core } from '@h-ai/core'\n * core.logger.info('browser ready')\n * ```\n */\nexport const core = createBrowserCore()\n\n/**\n * 初始化 Core(内部实现,通过 core.init() 调用)。\n * 注意:浏览器环境不支持 config 和 watchConfig 选项。\n *\n * @param options - 初始化选项\n *\n * @example\n * ```ts\n * import { core } from '@h-ai/core'\n * core.init({ logging: { level: 'debug' } })\n * ```\n */\nfunction initCore(options: CoreOptions = {}): void {\n const logger = core.logger\n\n // 配置日志\n if (options.logging) {\n core.logger.configure(options.logging)\n }\n\n if (options.watchConfig) {\n logger.warn('[core] Browser does not support watchConfig option')\n }\n\n logger.info('[core] Initialized (browser mode)')\n}\n"]}