@iflow-mcp/promptx
Version:
AI角色创建平台和智能工具开发平台,基于MCP协议提供专业AI能力注入
267 lines (266 loc) • 8.9 kB
JavaScript
;
var __create = Object.create;
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __getProtoOf = Object.getPrototypeOf;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __export = (target, all) => {
for (var name in all)
__defProp(target, name, { get: all[name], enumerable: true });
};
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames(from))
if (!__hasOwnProp.call(to, key) && key !== except)
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
}
return to;
};
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
// If the importer is in node compatibility mode or this is not an ESM
// file that has been converted to a CommonJS file using a Babel-
// compatible transform (i.e. "__esModule" has not been set), then set
// "default" to the CommonJS "module.exports" for node compatibility.
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
mod
));
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
// src/index.ts
var index_exports = {};
__export(index_exports, {
createLogger: () => createLogger,
debug: () => debug,
default: () => index_default,
error: () => error,
info: () => info,
log: () => log,
verbose: () => verbose,
warn: () => warn
});
module.exports = __toCommonJS(index_exports);
var import_pino = __toESM(require("pino"), 1);
var import_path = __toESM(require("path"), 1);
var import_os = __toESM(require("os"), 1);
var import_fs = __toESM(require("fs"), 1);
var defaultConfig = {
level: process.env.LOG_LEVEL || "info",
console: true,
file: {
dirname: import_path.default.join(import_os.default.homedir(), ".promptx", "logs")
},
colors: true
};
function getCallerInfo() {
const stack = new Error().stack || "";
const stackLines = stack.split("\n");
for (let i = 2; i < stackLines.length; i++) {
const line = stackLines[i];
if (line && !line.includes("node_modules/pino") && !line.includes("packages/logger") && !line.includes("@promptx/logger")) {
const match = line.match(/at\s+(?:.*?\s+)?\(?(.*?):(\d+):(\d+)\)?/);
if (match && match[1] && match[2]) {
const fullPath = match[1];
const lineNum = parseInt(match[2], 10);
let packageName = "app";
const packageMatch = fullPath.match(/packages\/([^\/]+)/) || fullPath.match(/@promptx\/([^\/]+)/);
if (packageMatch) {
packageName = `@promptx/${packageMatch[1]}`;
}
const filename = import_path.default.basename(fullPath);
return {
package: packageName,
file: filename,
line: lineNum
};
}
}
}
return { package: "app", file: "unknown", line: 0 };
}
function createLogger(config = {}) {
const finalConfig = { ...defaultConfig, ...config };
if (finalConfig.file) {
const fileConfig = typeof finalConfig.file === "object" ? finalConfig.file : {};
const logDir = fileConfig.dirname || import_path.default.join(import_os.default.homedir(), ".promptx", "logs");
if (!import_fs.default.existsSync(logDir)) {
import_fs.default.mkdirSync(logDir, { recursive: true });
}
}
const isElectron = process.versions && process.versions.electron;
if (isElectron || process.env.PROMPTX_NO_WORKERS === "true") {
if (finalConfig.file) {
const fileConfig = typeof finalConfig.file === "object" ? finalConfig.file : {};
const logDir = fileConfig.dirname || import_path.default.join(import_os.default.homedir(), ".promptx", "logs");
const today = (/* @__PURE__ */ new Date()).toISOString().split("T")[0];
const logPath = import_path.default.join(logDir, `promptx-${today}.log`);
const dest = import_pino.default.destination({
dest: logPath,
sync: true
// Use sync to avoid worker thread issues in Electron
});
return (0, import_pino.default)({
level: finalConfig.level || "info",
base: { pid: process.pid },
mixin: () => getCallerInfo(),
// Simple formatting without pino-pretty to avoid worker threads
formatters: {
level: (label) => {
return { level: label };
},
log: (obj) => {
const { package: pkg, file, line, ...rest } = obj;
return {
...rest,
location: pkg && file ? `${pkg} [${file}:${line}]` : void 0
};
}
}
}, dest);
} else {
return (0, import_pino.default)({
level: finalConfig.level || "info",
base: { pid: process.pid },
mixin: () => getCallerInfo(),
formatters: {
level: (label) => {
return { level: label };
},
log: (obj) => {
const { package: pkg, file, line, ...rest } = obj;
return {
...rest,
location: pkg && file ? `${pkg} [${file}:${line}]` : void 0
};
}
}
});
}
} else {
const targets = [];
if (finalConfig.console) {
targets.push({
target: "pino-pretty",
level: finalConfig.level,
options: {
// MCP stdio模式下禁用颜色,避免ANSI转义码
colorize: process.env.MCP_TRANSPORT === "stdio" ? false : finalConfig.colors,
translateTime: "SYS:yyyy-mm-dd HH:MM:ss.l",
ignore: "hostname,pid,package,file,line",
destination: 2,
// 输出到 stderr (fd 2) - MCP官方最佳实践
messageFormat: "{package} [{file}:{line}] {msg}"
}
});
}
if (finalConfig.file) {
const fileConfig = typeof finalConfig.file === "object" ? finalConfig.file : {};
const logDir = fileConfig.dirname || import_path.default.join(import_os.default.homedir(), ".promptx", "logs");
const today = (/* @__PURE__ */ new Date()).toISOString().split("T")[0];
targets.push({
target: "pino/file",
level: finalConfig.level,
options: {
destination: import_path.default.join(logDir, `promptx-${today}.log`)
}
});
targets.push({
target: "pino/file",
level: "error",
options: {
destination: import_path.default.join(logDir, `promptx-error-${today}.log`)
}
});
}
if (targets.length > 0) {
return (0, import_pino.default)({
level: finalConfig.level || "info",
base: { pid: process.pid },
mixin: () => getCallerInfo(),
transport: {
targets
}
});
}
}
return (0, import_pino.default)({
level: finalConfig.level || "info",
base: { pid: process.pid },
mixin: () => getCallerInfo()
});
}
var logger = createLogger();
var error = (msgOrObj, objOrMsg) => {
if (typeof msgOrObj === "string") {
if (objOrMsg && typeof objOrMsg === "object") {
logger.error(objOrMsg, msgOrObj);
} else {
logger.error(msgOrObj);
}
} else {
logger.error(msgOrObj, objOrMsg || "");
}
};
var warn = (msgOrObj, objOrMsg) => {
if (typeof msgOrObj === "string") {
if (objOrMsg && typeof objOrMsg === "object") {
logger.warn(objOrMsg, msgOrObj);
} else {
logger.warn(msgOrObj);
}
} else {
logger.warn(msgOrObj, objOrMsg || "");
}
};
var info = (msgOrObj, objOrMsg) => {
if (typeof msgOrObj === "string") {
if (objOrMsg && typeof objOrMsg === "object") {
logger.info(objOrMsg, msgOrObj);
} else {
logger.info(msgOrObj);
}
} else {
logger.info(msgOrObj, objOrMsg || "");
}
};
var debug = (msgOrObj, objOrMsg) => {
if (typeof msgOrObj === "string") {
if (objOrMsg && typeof objOrMsg === "object") {
logger.debug(objOrMsg, msgOrObj);
} else {
logger.debug(msgOrObj);
}
} else {
logger.debug(msgOrObj, objOrMsg || "");
}
};
var verbose = (msgOrObj, objOrMsg) => {
if (typeof msgOrObj === "string") {
if (objOrMsg && typeof objOrMsg === "object") {
logger.trace(objOrMsg, msgOrObj);
} else {
logger.trace(msgOrObj);
}
} else {
logger.trace(msgOrObj, objOrMsg || "");
}
};
var log = (level, msg, ...args) => {
const method = logger[level];
if (typeof method === "function") {
method(msg, ...args);
} else {
logger.info(msg, ...args);
}
};
var index_default = logger;
// Annotate the CommonJS export names for ESM import in node:
0 && (module.exports = {
createLogger,
debug,
error,
info,
log,
verbose,
warn
});
//# sourceMappingURL=index.cjs.map