karin-plugin-kkk 2.39.0 → 2.40.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -4,7 +4,7 @@ import "node:module";
4
4
  import fs from "node:fs";
5
5
  import path, { resolve } from "node:path";
6
6
  import URL$2, { fileURLToPath } from "node:url";
7
- import karin, { BOT_CONNECT, app, authMiddleware, checkPkgUpdate, checkPort, common, config, createBadRequestResponse, createNotFoundResponse, createServerErrorResponse, createSuccessResponse, db, defineConfig, ffmpeg, ffprobe, hooks, karin as karin$1, karinPathHtml, karinPathTemp, logger, logger as logger$1, logs, mkdirSync, parseChangelog, range, render, restart, segment, updatePkg, watch } from "node-karin";
7
+ import karin, { BOT_CONNECT, app, authMiddleware, checkPkgUpdate, checkPort, common, config, createBadRequestResponse, createNotFoundResponse, createServerErrorResponse, createSuccessResponse, db, defineConfig, ffmpeg, ffprobe, hooks, isDocker, karin as karin$1, karinPathHtml, karinPathTemp, logger, logger as logger$1, logs, mkdirSync, parseChangelog, range, render, restart, segment, updatePkg, watch } from "node-karin";
8
8
  import { EventEmitter } from "node:events";
9
9
  import crypto, { createCipheriv, createHash, randomBytes, randomUUID } from "node:crypto";
10
10
  import axios, { AxiosError } from "node-karin/axios";
@@ -12983,7 +12983,7 @@ function processLocalImageFile(filePath) {
12983
12983
  //#region ../template/src/dev/preview/utils/time.ts
12984
12984
  var import_react = /* @__PURE__ */ __toESM(require_react(), 1);
12985
12985
  var import_server_node = require_server_node();
12986
- var formatDuration$2 = (ms) => {
12986
+ var formatDuration$3 = (ms) => {
12987
12987
  const totalSeconds = Math.max(Math.floor(ms / 1e3), 0);
12988
12988
  const hours = Math.floor(totalSeconds / 3600);
12989
12989
  const minutes = Math.floor(totalSeconds % 3600 / 60);
@@ -13007,7 +13007,7 @@ var buildStatus = (state) => {
13007
13007
  statusText: `文件 ${filePath} 将在未知时间后删除`,
13008
13008
  countdownText: "--:--"
13009
13009
  };
13010
- const countdownText = formatDuration$2(state.remainingMs);
13010
+ const countdownText = formatDuration$3(state.remainingMs);
13011
13011
  return {
13012
13012
  statusText: `文件 ${filePath} 将在 ${countdownText} 后删除`,
13013
13013
  countdownText
@@ -22870,7 +22870,7 @@ var formatCount = (count) => {
22870
22870
  * 格式化视频时长显示 (如: 6:20)
22871
22871
  * @param milliseconds 毫秒数
22872
22872
  */
22873
- var formatDuration$1 = (milliseconds) => {
22873
+ var formatDuration$2 = (milliseconds) => {
22874
22874
  const seconds = Math.floor(milliseconds / 1e3);
22875
22875
  return `${Math.floor(seconds / 60)}:${(seconds % 60).toString().padStart(2, "0")}`;
22876
22876
  };
@@ -22906,7 +22906,7 @@ var VideoCard = ({ video }) => {
22906
22906
  }),
22907
22907
  video.is_video && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
22908
22908
  className: "absolute bottom-4 right-4 px-8 py-3 rounded-2xl text-4xl bg-white/50 text-black backdrop-blur-xs shadow-lg",
22909
- children: formatDuration$1(video.duration)
22909
+ children: formatDuration$2(video.duration)
22910
22910
  }),
22911
22911
  video.music && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
22912
22912
  className: "absolute bottom-4 left-4 flex items-center gap-2 px-6 py-3 rounded-2xl text-xl bg-white/50 text-black backdrop-blur-xs shadow-lg",
@@ -23119,7 +23119,7 @@ var getTitleClassName = (titleLength) => {
23119
23119
  if (titleLength > 48) return "text-[54px] leading-[1.26]";
23120
23120
  return "text-[62px] leading-tight";
23121
23121
  };
23122
- function formatDuration(duration) {
23122
+ function formatDuration$1(duration) {
23123
23123
  if (typeof duration !== "number" || !Number.isFinite(duration) || duration < 0) return void 0;
23124
23124
  const totalSeconds = Math.floor(duration / 1e3);
23125
23125
  const hours = Math.floor(totalSeconds / 3600);
@@ -23245,7 +23245,7 @@ var DouyinPosterHeader = ({ data }) => {
23245
23245
  };
23246
23246
  var DouyinVideoCover = ({ data }) => {
23247
23247
  const { image_url, music, duration } = data;
23248
- const durationText = formatDuration(duration);
23248
+ const durationText = formatDuration$1(duration);
23249
23249
  return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("section", {
23250
23250
  className: "relative -mx-20 mt-12 overflow-visible",
23251
23251
  children: [
@@ -27707,6 +27707,478 @@ var QrLogin = import_react.memo((props) => {
27707
27707
  });
27708
27708
  QrLogin.displayName = "QrLogin";
27709
27709
  //#endregion
27710
+ //#region ../template/src/components/platforms/other/runtime.tsx
27711
+ /**
27712
+ * `#kkk版本` 运行环境诊断海报。
27713
+ *
27714
+ * 面向手机端看图场景:整幅统一底色 + 多色弥散光 + 高对比离散噪点层,内容单列纵向排布、
27715
+ * 不使用卡片容器,靠大留白与字号层级分区,超大实心版本号作为第一视觉中心。
27716
+ * 深色主题为紫罗兰 → 品红 → 琥珀橙弥散;浅色主题为 #271151 / #9754c7 / #deacf5 同色系紫,避免多色对撞。
27717
+ */
27718
+ var RuntimeReport = import_react.memo((props) => {
27719
+ const { data } = props;
27720
+ const isDark = data.useDarkTheme ?? false;
27721
+ const releaseLabel = data.identity.releaseType.toLowerCase() === "stable" ? "正式版" : data.identity.releaseType.toLowerCase() === "preview" ? "预览版" : data.identity.releaseType;
27722
+ const buildStatus = data.build.state === "matched" ? {
27723
+ label: "构建信息一致",
27724
+ icon: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(CircleCheck, { className: "h-8 w-8" }),
27725
+ color: "#22c55e"
27726
+ } : data.build.state === "mismatched" ? {
27727
+ label: "构建信息不一致",
27728
+ icon: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(TriangleAlert, { className: "h-8 w-8" }),
27729
+ color: "#f59e0b"
27730
+ } : {
27731
+ label: "未找到构建信息",
27732
+ icon: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(TriangleAlert, { className: "h-8 w-8" }),
27733
+ color: "#94a3b8"
27734
+ };
27735
+ const palette = isDark ? {
27736
+ background: "#0d0a1c",
27737
+ glowPrimary: "rgba(139, 92, 246, 0.34)",
27738
+ glowSecondary: "rgba(217, 70, 239, 0.22)",
27739
+ glowWarm: "rgba(251, 146, 60, 0.20)",
27740
+ versionGlow: "radial-gradient(ellipse at center, rgba(167, 139, 250, 0.30) 0%, rgba(240, 171, 252, 0.15) 50%, transparent 75%)",
27741
+ versionInk: "#f6f3ff",
27742
+ versionAccent: "#fdba74",
27743
+ accentText: "#c4b5fd",
27744
+ pillBg: "rgba(139, 92, 246, 0.12)",
27745
+ pillBorder: "rgba(196, 181, 253, 0.35)",
27746
+ pillText: "#c4b5fd",
27747
+ statusDot: "linear-gradient(112deg, #c4b5fd 0%, #f0abfc 48%, #fdba74 100%)",
27748
+ dotGlow: "0 0 28px rgba(192, 132, 252, 0.85)",
27749
+ barAccent: "linear-gradient(112deg, #c4b5fd 0%, #f0abfc 48%, #fdba74 100%)",
27750
+ meterGradient: "linear-gradient(112deg, #c4b5fd 0%, #f0abfc 48%, #fdba74 100%)",
27751
+ bgWord: "#ede9fe",
27752
+ noteHeading: "#f5f3ff",
27753
+ noteBody: "rgba(240, 237, 255, 0.72)",
27754
+ noteStrong: "#ffffff",
27755
+ noteCodeBg: "rgba(139, 92, 246, 0.16)",
27756
+ noteCodeText: "#c4b5fd",
27757
+ noteLink: "#c4b5fd",
27758
+ noteBulletClass: "before:bg-violet-400/70",
27759
+ warnText: "#fbbf24",
27760
+ noiseOpacity: .16
27761
+ } : {
27762
+ background: "#f7f1fe",
27763
+ glowPrimary: "rgba(151, 84, 199, 0.30)",
27764
+ glowSecondary: "rgba(222, 172, 245, 0.55)",
27765
+ glowWarm: "rgba(250, 211, 22, 0.38)",
27766
+ versionGlow: "radial-gradient(ellipse at center, rgba(222, 172, 245, 0.50) 0%, rgba(250, 211, 22, 0.16) 55%, transparent 78%)",
27767
+ versionInk: "#271151",
27768
+ versionAccent: "#9754c7",
27769
+ accentText: "#9754c7",
27770
+ pillBg: "rgba(151, 84, 199, 0.10)",
27771
+ pillBorder: "rgba(151, 84, 199, 0.30)",
27772
+ pillText: "#7a3db0",
27773
+ statusDot: "#9754c7",
27774
+ dotGlow: "0 0 26px rgba(151, 84, 199, 0.55)",
27775
+ barAccent: "linear-gradient(90deg, #271151 0%, #9754c7 100%)",
27776
+ meterGradient: "linear-gradient(90deg, #271151 0%, #9754c7 100%)",
27777
+ bgWord: "#271151",
27778
+ noteHeading: "#271151",
27779
+ noteBody: "rgba(39, 17, 81, 0.70)",
27780
+ noteStrong: "#271151",
27781
+ noteCodeBg: "rgba(151, 84, 199, 0.10)",
27782
+ noteCodeText: "#7a3db0",
27783
+ noteLink: "#7a3db0",
27784
+ noteBulletClass: "before:bg-[#9754c7]/70",
27785
+ warnText: "#8a5a06",
27786
+ noiseOpacity: .12
27787
+ };
27788
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(DefaultLayout, {
27789
+ ...props,
27790
+ className: "relative min-h-[1820px] overflow-hidden",
27791
+ style: { backgroundColor: palette.background },
27792
+ children: [
27793
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
27794
+ className: "pointer-events-none absolute inset-0 z-0 overflow-hidden",
27795
+ children: [
27796
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
27797
+ className: "absolute -left-[520px] -top-[480px] h-[1350px] w-[1500px] rounded-full blur-[230px]",
27798
+ style: { background: `radial-gradient(ellipse at center, ${palette.glowPrimary} 0%, transparent 70%)` }
27799
+ }),
27800
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
27801
+ className: "absolute -right-[520px] top-[32%] h-[1250px] w-[1200px] rounded-full blur-[240px]",
27802
+ style: { background: `radial-gradient(ellipse at center, ${palette.glowSecondary} 0%, transparent 72%)` }
27803
+ }),
27804
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
27805
+ className: "absolute -bottom-[480px] -left-[320px] h-[1150px] w-[1350px] rounded-full blur-[260px]",
27806
+ style: { background: `radial-gradient(ellipse at center, ${palette.glowWarm} 0%, transparent 72%)` }
27807
+ }),
27808
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
27809
+ className: "absolute -bottom-[360px] -right-[420px] h-[900px] w-[1000px] rounded-full blur-[240px]",
27810
+ style: { background: `radial-gradient(ellipse at center, ${palette.glowPrimary} 0%, transparent 72%)` }
27811
+ }),
27812
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
27813
+ className: "absolute -right-16 top-[110px] select-none text-[240px] font-black leading-none tracking-[-0.06em] opacity-[0.03]",
27814
+ style: { color: palette.bgWord },
27815
+ children: "RUNTIME"
27816
+ })
27817
+ ]
27818
+ }),
27819
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
27820
+ className: "pointer-events-none absolute inset-0 z-0",
27821
+ style: { opacity: palette.noiseOpacity },
27822
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("svg", {
27823
+ className: "h-full w-full",
27824
+ xmlns: "http://www.w3.org/2000/svg",
27825
+ children: [/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("filter", {
27826
+ id: "runtimeReportNoise",
27827
+ x: "0%",
27828
+ y: "0%",
27829
+ width: "100%",
27830
+ height: "100%",
27831
+ children: [
27832
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("feTurbulence", {
27833
+ type: "fractalNoise",
27834
+ baseFrequency: "0.8",
27835
+ numOctaves: "1",
27836
+ stitchTiles: "stitch",
27837
+ result: "noise"
27838
+ }),
27839
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("feColorMatrix", {
27840
+ type: "saturate",
27841
+ values: "0",
27842
+ result: "gray"
27843
+ }),
27844
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("feComponentTransfer", { children: [
27845
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("feFuncR", {
27846
+ type: "discrete",
27847
+ tableValues: "0 1"
27848
+ }),
27849
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("feFuncG", {
27850
+ type: "discrete",
27851
+ tableValues: "0 1"
27852
+ }),
27853
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("feFuncB", {
27854
+ type: "discrete",
27855
+ tableValues: "0 1"
27856
+ })
27857
+ ] })
27858
+ ]
27859
+ }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("rect", {
27860
+ width: "100%",
27861
+ height: "100%",
27862
+ filter: "url(#runtimeReportNoise)"
27863
+ })]
27864
+ })
27865
+ }),
27866
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("main", {
27867
+ className: "relative z-10 px-[88px] pb-[64px] pt-[80px]",
27868
+ children: [
27869
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("header", {
27870
+ className: "relative",
27871
+ children: [
27872
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
27873
+ className: "flex items-center justify-between gap-12",
27874
+ children: [/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
27875
+ className: "flex items-center gap-4",
27876
+ children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
27877
+ className: "h-3.5 w-3.5 rounded-full",
27878
+ style: {
27879
+ background: palette.statusDot,
27880
+ boxShadow: palette.dotGlow
27881
+ }
27882
+ }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
27883
+ className: "text-[24px] font-bold tracking-[0.28em] text-foreground/44",
27884
+ children: "运行诊断 · RUNTIME REPORT"
27885
+ })]
27886
+ }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
27887
+ className: "whitespace-nowrap rounded-full border px-6 py-2 text-[22px] font-black tracking-[0.14em]",
27888
+ style: {
27889
+ borderColor: palette.pillBorder,
27890
+ background: palette.pillBg,
27891
+ color: palette.pillText
27892
+ },
27893
+ children: releaseLabel
27894
+ })]
27895
+ }),
27896
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
27897
+ className: "mt-[76px]",
27898
+ children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("h1", {
27899
+ className: "whitespace-nowrap text-[136px] font-black leading-none tracking-[-0.05em] text-foreground",
27900
+ children: "运行环境"
27901
+ }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", {
27902
+ className: "mt-8 whitespace-nowrap text-[32px] font-semibold text-foreground/48",
27903
+ children: "插件、框架与本地宿主的精简诊断快照"
27904
+ })]
27905
+ }),
27906
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
27907
+ className: "relative mt-[92px]",
27908
+ children: [
27909
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
27910
+ className: "pointer-events-none absolute -left-16 -top-24 h-[420px] w-[820px] rounded-full blur-[150px]",
27911
+ style: { background: palette.versionGlow }
27912
+ }),
27913
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
27914
+ className: "relative text-[24px] font-bold tracking-[0.2em] text-foreground/36",
27915
+ children: "插件版本"
27916
+ }),
27917
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
27918
+ className: "relative mt-5 whitespace-nowrap font-mono text-[200px] font-black leading-none tracking-[-0.08em]",
27919
+ children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
27920
+ className: "mr-4 text-[64px]",
27921
+ style: { color: palette.versionAccent },
27922
+ children: "v"
27923
+ }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
27924
+ style: { color: palette.versionInk },
27925
+ children: data.identity.pluginVersion
27926
+ })]
27927
+ }),
27928
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
27929
+ className: "relative mt-8 flex items-center gap-4",
27930
+ children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
27931
+ className: "whitespace-nowrap font-mono text-[26px] font-bold text-foreground/46",
27932
+ children: data.identity.pluginName
27933
+ }), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", {
27934
+ className: "flex items-center gap-3 whitespace-nowrap rounded-full border px-5 py-1.5 text-[24px] font-bold",
27935
+ style: {
27936
+ color: buildStatus.color,
27937
+ borderColor: `${buildStatus.color}55`,
27938
+ background: `${buildStatus.color}14`
27939
+ },
27940
+ children: [buildStatus.icon, buildStatus.label]
27941
+ })]
27942
+ }),
27943
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
27944
+ className: "relative mt-[44px] whitespace-nowrap font-mono text-[22px] font-semibold text-foreground/28",
27945
+ children: [
27946
+ "构建 ",
27947
+ data.build.shortCommitHash ?? "未知",
27948
+ " · ",
27949
+ data.build.buildTime ?? "时间未知"
27950
+ ]
27951
+ })
27952
+ ]
27953
+ })
27954
+ ]
27955
+ }),
27956
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("section", {
27957
+ className: "relative mt-[120px]",
27958
+ children: [/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
27959
+ className: "relative flex items-center gap-5",
27960
+ children: [
27961
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
27962
+ className: "h-3 w-3 rounded-full",
27963
+ style: { background: palette.statusDot }
27964
+ }),
27965
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
27966
+ className: "text-[24px] font-black tracking-[0.28em]",
27967
+ style: { color: palette.accentText },
27968
+ children: "环境摘要"
27969
+ }),
27970
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
27971
+ className: "ml-2 h-2 w-[88px] rounded-full",
27972
+ style: { background: palette.barAccent }
27973
+ })
27974
+ ]
27975
+ }), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
27976
+ className: "relative mt-[64px] grid grid-cols-2 gap-x-[72px] gap-y-[64px]",
27977
+ children: [
27978
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { children: [
27979
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
27980
+ className: "text-[22px] font-bold tracking-[0.18em] text-foreground/36",
27981
+ children: "操作系统"
27982
+ }),
27983
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
27984
+ className: "mt-3 truncate whitespace-nowrap text-[48px] font-black tracking-[-0.02em] text-foreground",
27985
+ children: data.runtime.os
27986
+ }),
27987
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
27988
+ className: "mt-4 whitespace-nowrap font-mono text-[26px] font-bold text-foreground/42",
27989
+ children: [
27990
+ data.runtime.platform,
27991
+ " · ",
27992
+ data.runtime.arch
27993
+ ]
27994
+ })
27995
+ ] }),
27996
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { children: [
27997
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
27998
+ className: "text-[22px] font-bold tracking-[0.18em] text-foreground/36",
27999
+ children: "当前适配器"
28000
+ }),
28001
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
28002
+ className: "mt-3 truncate whitespace-nowrap text-[48px] font-black tracking-[-0.02em] text-foreground",
28003
+ children: data.adapter.name
28004
+ }),
28005
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
28006
+ className: "mt-4 whitespace-nowrap font-mono text-[27px] font-black",
28007
+ style: { color: palette.accentText },
28008
+ children: ["v", data.adapter.version]
28009
+ })
28010
+ ] }),
28011
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
28012
+ className: "text-[22px] font-bold tracking-[0.18em] text-foreground/36",
28013
+ children: "Karin 版本"
28014
+ }), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
28015
+ className: "mt-3 whitespace-nowrap font-mono text-[48px] font-black leading-none tracking-[-0.02em] text-foreground",
28016
+ children: ["v", data.identity.karinVersion]
28017
+ })] }),
28018
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
28019
+ className: "text-[22px] font-bold tracking-[0.18em] text-foreground/36",
28020
+ children: "Node.js 版本"
28021
+ }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
28022
+ className: "mt-3 whitespace-nowrap font-mono text-[48px] font-black leading-none tracking-[-0.02em]",
28023
+ style: { color: palette.accentText },
28024
+ children: data.runtime.nodeVersion
28025
+ })] }),
28026
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { children: [
28027
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
28028
+ className: "text-[22px] font-bold tracking-[0.18em] text-foreground/36",
28029
+ children: "内存占用"
28030
+ }),
28031
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
28032
+ className: "mt-3 flex items-end gap-5",
28033
+ children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
28034
+ className: "whitespace-nowrap font-mono text-[72px] font-black leading-none tracking-[-0.04em] text-foreground",
28035
+ children: data.resources.memoryUsagePercent
28036
+ }), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", {
28037
+ className: "whitespace-nowrap pb-2 font-mono text-[24px] font-bold text-foreground/40",
28038
+ children: [
28039
+ data.resources.usedMemory,
28040
+ " / ",
28041
+ data.resources.totalMemory
28042
+ ]
28043
+ })]
28044
+ }),
28045
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
28046
+ className: "mt-5 h-[12px] w-full max-w-[420px] overflow-hidden rounded-full bg-foreground/8",
28047
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
28048
+ className: "h-full rounded-full",
28049
+ style: {
28050
+ width: data.resources.memoryUsagePercent,
28051
+ background: palette.meterGradient
28052
+ }
28053
+ })
28054
+ })
28055
+ ] }),
28056
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { children: [
28057
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
28058
+ className: "text-[22px] font-bold tracking-[0.18em] text-foreground/36",
28059
+ children: "处理器"
28060
+ }),
28061
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
28062
+ className: "mt-3 line-clamp-2 break-words text-[32px] font-black leading-[1.4] text-foreground/78",
28063
+ children: data.resources.cpuModel
28064
+ }),
28065
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
28066
+ className: "mt-4 whitespace-nowrap font-mono text-[24px] font-bold text-foreground/40",
28067
+ children: [data.resources.cpuCores, " 核心"]
28068
+ })
28069
+ ] })
28070
+ ]
28071
+ })]
28072
+ }),
28073
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("section", {
28074
+ className: "relative mt-[130px]",
28075
+ children: [
28076
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
28077
+ className: "relative flex items-center gap-5",
28078
+ children: [
28079
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
28080
+ className: "h-3 w-3 rounded-full",
28081
+ style: { background: palette.statusDot }
28082
+ }),
28083
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
28084
+ className: "text-[24px] font-black tracking-[0.28em]",
28085
+ style: { color: palette.accentText },
28086
+ children: "仅展示当前版本"
28087
+ }),
28088
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
28089
+ className: "ml-2 h-2 w-[88px] rounded-full",
28090
+ style: { background: palette.barAccent }
28091
+ })
28092
+ ]
28093
+ }),
28094
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("h2", {
28095
+ className: "mt-7 text-[76px] font-black leading-none",
28096
+ style: { color: palette.noteStrong },
28097
+ children: "本版变更"
28098
+ }),
28099
+ data.releaseNotes.available ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
28100
+ className: "runtime-release-notes relative mt-[60px]",
28101
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Markdown, {
28102
+ components: {
28103
+ h2: ({ children }) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)("h2", {
28104
+ className: "mb-11 whitespace-nowrap text-[48px] font-black leading-tight",
28105
+ style: { color: palette.noteStrong },
28106
+ children
28107
+ }),
28108
+ h3: ({ children }) => /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("h3", {
28109
+ className: "mb-5 mt-10 flex items-center gap-5 whitespace-nowrap text-[36px] font-black leading-tight",
28110
+ style: { color: palette.noteHeading },
28111
+ children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
28112
+ className: "h-2.5 w-12 shrink-0 rounded-full",
28113
+ style: { background: palette.barAccent }
28114
+ }), children]
28115
+ }),
28116
+ p: ({ children }) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", {
28117
+ className: "mb-6 text-[32px] leading-[1.7]",
28118
+ style: { color: palette.noteBody },
28119
+ children
28120
+ }),
28121
+ ul: ({ children }) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)("ul", {
28122
+ className: "mb-8 space-y-5 pl-10",
28123
+ children
28124
+ }),
28125
+ ol: ({ children }) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)("ol", {
28126
+ className: "mb-8 list-decimal space-y-5 pl-12",
28127
+ children
28128
+ }),
28129
+ li: ({ children }) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)("li", {
28130
+ className: `relative break-words text-[32px] font-semibold leading-[1.65] before:absolute before:-left-8 before:top-[0.74em] before:h-2.5 before:w-2.5 before:rounded-full ${palette.noteBulletClass}`,
28131
+ style: { color: palette.noteBody },
28132
+ children
28133
+ }),
28134
+ strong: ({ children }) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)("strong", {
28135
+ className: "font-black",
28136
+ style: { color: palette.noteStrong },
28137
+ children
28138
+ }),
28139
+ code: ({ children }) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)("code", {
28140
+ className: "break-all rounded-lg px-3 py-1 font-mono text-[0.88em] font-bold",
28141
+ style: {
28142
+ background: palette.noteCodeBg,
28143
+ color: palette.noteCodeText
28144
+ },
28145
+ children
28146
+ }),
28147
+ a: ({ children }) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
28148
+ className: "font-bold",
28149
+ style: { color: palette.noteLink },
28150
+ children
28151
+ })
28152
+ },
28153
+ children: data.releaseNotes.markdown
28154
+ })
28155
+ }) : /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
28156
+ className: "relative mt-[60px] flex items-start gap-6",
28157
+ style: { color: palette.warnText },
28158
+ children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(TriangleAlert, { className: "mt-1 h-11 w-11 shrink-0" }), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
28159
+ className: "text-[34px] font-black",
28160
+ children: "当前构建没有可用的变更日志"
28161
+ }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
28162
+ className: "mt-3 text-[27px] font-semibold leading-[1.55] opacity-70",
28163
+ children: "环境摘要仍可正常用于问题定位。"
28164
+ })] })]
28165
+ })
28166
+ ]
28167
+ }),
28168
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("footer", {
28169
+ className: "mt-[80px] flex items-end justify-between gap-12 whitespace-nowrap text-[22px] font-semibold text-foreground/32",
28170
+ children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { children: "仅包含经过脱敏的本地运行信息" }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
28171
+ className: "font-mono",
28172
+ children: data.snapshotAt
28173
+ })]
28174
+ })
28175
+ ]
28176
+ })
28177
+ ]
28178
+ });
28179
+ });
28180
+ RuntimeReport.displayName = "RuntimeReport";
28181
+ //#endregion
27710
28182
  //#region ../template/src/components/platforms/other/VersionWarning.tsx
27711
28183
  var VersionWarning = (props) => {
27712
28184
  const isDark = props.data.useDarkTheme;
@@ -29091,6 +29563,14 @@ var baseComponentConfigs = [
29091
29563
  componentPath: "platforms/other/changelog",
29092
29564
  exportName: "changelog"
29093
29565
  },
29566
+ {
29567
+ id: "runtime",
29568
+ name: "运行环境诊断",
29569
+ description: "KKK插件运行环境诊断页面",
29570
+ enabled: true,
29571
+ componentPath: "platforms/other/runtime",
29572
+ exportName: "RuntimeReport"
29573
+ },
29094
29574
  {
29095
29575
  id: "version_warning",
29096
29576
  name: "版本警告",
@@ -29290,6 +29770,7 @@ var componentConfigs = baseComponentConfigs.map((basePlatform) => {
29290
29770
  case "help": return createComponentConfig(baseComponent, { component: Help });
29291
29771
  case "handlerError": return createComponentConfig(baseComponent, { component: handlerError });
29292
29772
  case "changelog": return createComponentConfig(baseComponent, { component: Changelog });
29773
+ case "runtime": return createComponentConfig(baseComponent, { component: RuntimeReport });
29293
29774
  case "version_warning": return createComponentConfig(baseComponent, { component: VersionWarning });
29294
29775
  case "qrlogin": return createComponentConfig(baseComponent, { component: QrLogin });
29295
29776
  case "live-photo-tip": return createComponentConfig(baseComponent, { component: LivePhotoTip });
@@ -41823,6 +42304,127 @@ var removeOldFiles = (dir, beforeTimestamp) => {
41823
42304
  return deletedCount;
41824
42305
  };
41825
42306
  //#endregion
42307
+ //#region src/module/utils/runtime-report.ts
42308
+ /**
42309
+ * 将秒数格式化为适合诊断海报展示的紧凑时长。
42310
+ *
42311
+ * @param seconds 原始秒数
42312
+ * @returns 例如 `2天 6小时 18分钟`
42313
+ */
42314
+ var formatDuration = (seconds) => {
42315
+ if (!Number.isFinite(seconds) || seconds < 0) return "未知";
42316
+ const totalMinutes = Math.floor(seconds / 60);
42317
+ const days = Math.floor(totalMinutes / 1440);
42318
+ const hours = Math.floor(totalMinutes % 1440 / 60);
42319
+ const minutes = totalMinutes % 60;
42320
+ if (days > 0) return `${days}天 ${hours}小时 ${minutes}分钟`;
42321
+ if (hours > 0) return `${hours}小时 ${minutes}分钟`;
42322
+ if (minutes > 0) return `${minutes}分钟`;
42323
+ return `${Math.floor(seconds)}秒`;
42324
+ };
42325
+ /**
42326
+ * 从随包发布的 CHANGELOG 中提取指定数量的本地版本记录。
42327
+ * 读取失败时返回空字符串,让调用方决定降级展示或抛出错误。
42328
+ *
42329
+ * @param length 需要提取的版本数量
42330
+ */
42331
+ var getLocalChangelog = (length) => {
42332
+ try {
42333
+ const changelogPath = path.join(Root.pluginPath, "CHANGELOG.md");
42334
+ const changelogContent = fs.readFileSync(changelogPath, "utf8");
42335
+ return logs({
42336
+ version: Root.pluginVersion,
42337
+ data: changelogContent,
42338
+ length
42339
+ });
42340
+ } catch {
42341
+ return "";
42342
+ }
42343
+ };
42344
+ /**
42345
+ * 采集 `#kkk版本` 使用的安全运行环境快照。
42346
+ *
42347
+ * 不采集账号、主机名、用户目录、网络地址、环境变量内容、启动参数或适配器鉴权信息,
42348
+ * 保证该命令在群聊中触发时不会把机器身份和凭据写入图片。
42349
+ *
42350
+ * @param event 当前消息事件
42351
+ */
42352
+ var collectRuntimeReport = (event) => {
42353
+ const packageMetadata = Root.pkg;
42354
+ const adapter = event.bot.adapter;
42355
+ const cpus = os.cpus();
42356
+ const memory = process.memoryUsage();
42357
+ const totalMemory = os.totalmem();
42358
+ const usedMemory = Math.max(0, totalMemory - os.freemem());
42359
+ const buildMetadata = getBuildMetadata();
42360
+ const currentChangelog = getLocalChangelog(1);
42361
+ const renderScale = Math.min(2, Math.max(.5, Number(Config.app.renderScale) / 100));
42362
+ const buildState = !buildMetadata ? "unavailable" : buildMetadata.version === Root.pluginVersion ? "matched" : "mismatched";
42363
+ return {
42364
+ snapshotAt: new Intl.DateTimeFormat("zh-CN", {
42365
+ year: "numeric",
42366
+ month: "2-digit",
42367
+ day: "2-digit",
42368
+ hour: "2-digit",
42369
+ minute: "2-digit",
42370
+ second: "2-digit",
42371
+ hour12: false
42372
+ }).format(/* @__PURE__ */ new Date()),
42373
+ identity: {
42374
+ pluginName: Root.pluginName,
42375
+ pluginVersion: Root.pluginVersion,
42376
+ karinVersion: Root.karinVersion || "未知",
42377
+ releaseType: /^\d+\.\d+\.\d+$/.test(Root.pluginVersion) ? "Stable" : "Preview",
42378
+ requiredNodeVersion: packageMetadata.engines?.node ?? "未声明",
42379
+ requiredKarinVersion: packageMetadata.karin?.engines ?? packageMetadata.engines?.karin ?? "未声明"
42380
+ },
42381
+ build: {
42382
+ state: buildState,
42383
+ version: buildMetadata?.version,
42384
+ buildTime: buildMetadata?.buildTime ? formatBuildTime(buildMetadata.buildTime) : void 0,
42385
+ shortCommitHash: buildMetadata?.shortCommitHash
42386
+ },
42387
+ runtime: {
42388
+ nodeVersion: process.version,
42389
+ nodeEnv: process.env.NODE_ENV ?? "未设置",
42390
+ os: `${os.type()} ${os.release()}`,
42391
+ platform: os.platform(),
42392
+ arch: os.arch(),
42393
+ timezone: Intl.DateTimeFormat().resolvedOptions().timeZone || "未知",
42394
+ container: isDocker,
42395
+ systemUptime: formatDuration(os.uptime()),
42396
+ processUptime: formatDuration(process.uptime())
42397
+ },
42398
+ adapter: {
42399
+ name: adapter.name || "未知",
42400
+ version: adapter.version || "未知",
42401
+ platform: String(adapter.platform || "未知"),
42402
+ protocol: String(adapter.protocol || "未知"),
42403
+ standard: String(adapter.standard || "未知"),
42404
+ communication: String(adapter.communication || "未知"),
42405
+ connectedFor: formatDuration(Math.max(0, (Date.now() - adapter.connectTime) / 1e3))
42406
+ },
42407
+ renderer: {
42408
+ scale: `${renderScale.toFixed(2)}x`,
42409
+ timeout: `${Config.app.RenderWaitTime}秒`,
42410
+ multiPage: Config.app.multiPageRender && adapter.protocol !== "qqbot"
42411
+ },
42412
+ resources: {
42413
+ cpuModel: cpus[0]?.model?.trim() || "未知处理器",
42414
+ cpuCores: cpus.length,
42415
+ totalMemory: formatBytes(totalMemory),
42416
+ usedMemory: formatBytes(usedMemory),
42417
+ memoryUsagePercent: totalMemory > 0 ? `${(usedMemory / totalMemory * 100).toFixed(1)}%` : "未知",
42418
+ processRss: formatBytes(memory.rss),
42419
+ heapUsed: formatBytes(memory.heapUsed)
42420
+ },
42421
+ releaseNotes: {
42422
+ markdown: currentChangelog,
42423
+ available: currentChangelog.length > 0
42424
+ }
42425
+ };
42426
+ };
42427
+ //#endregion
41826
42428
  //#region src/apps/help.ts
41827
42429
  var HELP_MENU_CONFIG = [
41828
42430
  {
@@ -41927,8 +42529,13 @@ var HELP_MENU_CONFIG = [
41927
42529
  {
41928
42530
  title: "其他",
41929
42531
  items: [{
42532
+ title: "#kkk版本",
42533
+ description: "查看插件、Karin、Node.js、适配器与系统资源等运行环境诊断信息",
42534
+ icon: "ph:monitor-fill",
42535
+ roles: ["member", "master"]
42536
+ }, {
41930
42537
  title: "「#kkk更新日志」「#kkk更新」",
41931
- description: "字面意思~",
42538
+ description: "查看更新日志或执行插件更新",
41932
42539
  icon: "ph:arrows-clockwise-fill",
41933
42540
  roles: ["master"]
41934
42541
  }]
@@ -41977,22 +42584,25 @@ var handleHelp = wrapWithErrorHandler(async (e) => {
41977
42584
  return true;
41978
42585
  }, { businessName: "KKK帮助" });
41979
42586
  var handleVersion = wrapWithErrorHandler(async (e) => {
41980
- const changelogContent = fs.readFileSync(Root.pluginPath + "/CHANGELOG.md", "utf8");
42587
+ const img = await Render(e, "other/runtime", collectRuntimeReport(e));
42588
+ await e.reply(img);
42589
+ return true;
42590
+ }, { businessName: "KKK版本" });
42591
+ var handleChangelog = wrapWithErrorHandler(async (e) => {
42592
+ const forwardLogs = getLocalChangelog(10);
42593
+ if (!forwardLogs) throw new Error("当前构建未携带可用的 CHANGELOG.md");
41981
42594
  const img = await Render(e, "other/changelog", {
41982
- markdown: logs({
41983
- version: Root.pluginVersion,
41984
- data: changelogContent,
41985
- length: 10
41986
- }),
42595
+ markdown: forwardLogs,
41987
42596
  Tip: false,
41988
42597
  localVersion: "",
41989
42598
  remoteVersion: ""
41990
42599
  });
41991
- e.reply(img);
42600
+ await e.reply(img);
41992
42601
  return true;
41993
- }, { businessName: "KKK版本" });
42602
+ }, { businessName: "KKK更新日志" });
41994
42603
  var help = karin.command(/^#?kkk帮助$/, handleHelp, { name: "kkk-帮助" });
41995
- var version = karin.command(/^#?kkk(版本|更新日志)$/, handleVersion, { name: "kkk-版本" });
42604
+ var version = karin.command(/^#?kkk版本$/, handleVersion, { name: "kkk-版本" });
42605
+ var changelog = karin.command(/^#?kkk更新日志$/, handleChangelog, { name: "kkk-更新日志" });
41996
42606
  //#endregion
41997
42607
  //#region src/apps/push.ts
41998
42608
  var handleDouyinPush = wrapWithErrorHandler(async () => {
@@ -43638,7 +44248,7 @@ app$1.use(ASSETS_PREFIX, staticRouter);
43638
44248
  app.use(KKK_PREFIX, app$1);
43639
44249
  //#endregion
43640
44250
  //#region src/setup.ts
43641
- var requireVersion = "1.16.2";
44251
+ var requireVersion = "1.16.3";
43642
44252
  if (process.env.NODE_ENV !== "development" && isSemverGreater(requireVersion, Root.karinVersion)) {
43643
44253
  const msg = `[karin-plugin-kkk] 插件构建时的 karin 版本 (${requireVersion}) 高于当前运行版本 (${Root.karinVersion}),可能会出现兼容性问题!`;
43644
44254
  logger.warn(msg);
@@ -43682,4 +44292,4 @@ mkdirSync(`${karinPathBase}/${Root.pluginName}/data`);
43682
44292
  mkdirSync(Common.tempDri.images);
43683
44293
  mkdirSync(Common.tempDri.video);
43684
44294
  //#endregion
43685
- export { createLineBreakNode as $, xiaohongshuSign as $n, emitLogDebug as $r, CommentType as $t, template_default as A, getHeadersAndData as An, BilibiliBv2AvParamsSchema as Ar, KuaishouApiRoutes as At, DouyinDBBase as B, douyinApiUrls as Bn, BilibiliQrcodeParamsSchema as Br, DouyinInternalMethods as Bt, help as C, qtparam as Cn, BilibiliApplyCaptchaParamsSchema as Cr, CreateApp as Ct, removeOldFiles as D, logger$2 as Dn, BilibiliAv2BvParamsSchema as Dr, BilibiliMethodMapping as Dt, dylogin as E, logMiddleware as En, BilibiliArticleParamsSchema as Er, BilibiliApiRoutes as Et, getBilibiliDB as F, kuaishouFetcher$1 as Fn, BilibiliDynamicParamsSchema as Fr, getEnglishMethodName as Ft, createAtNode as G, createSuccessResponse$1 as Gn, BilibiliVideoDownloadParamsSchema as Gr, MethodMaps as Gt, reactServerRender as H, bilibiliFetcher$1 as Hn, BilibiliUserParamsSchema as Hr, KuaishouFetcherMethods as Ht, getDouyinDB as I, kuaishouSign as In, BilibiliEmojiParamsSchema as Ir, BilibiliFetcherMethods as It, createEmojiNode as J, validateKuaishouParams as Jn, emitApiError as Jr, XiaohongshuMethodToFetcher as Jt, createBlockquoteNode as K, validateBilibiliParams as Kn, BilibiliVideoParamsSchema as Kr, XiaohongshuFetcherMethods as Kt, getStatisticsDB as L, kuaishouApiUrls as Ln, BilibiliLiveParamsSchema as Lr, BilibiliInternalMethods as Lt, bilibiliDBInstance as M, createBoundXiaohongshuFetcher as Mn, BilibiliCommentParamsSchema as Mr, XiaohongshuApiRoutes as Mt, cleanOldDynamicCache as N, xiaohongshuFetcher$1 as Nn, BilibiliCommentReplyParamsSchema as Nr, XiaohongshuMethodMapping as Nt, task as O, fetchData as On, BilibiliBangumiInfoParamsSchema as Or, DouyinApiRoutes as Ot, douyinDBInstance as P, createBoundKuaishouFetcher as Pn, BilibiliDanmakuParamsSchema as Pr, getApiRoute as Pt, createImageNode as Q, xiaohongshuApiUrls as Qn, emitLog as Qr, MajorType as Qt, initAllDatabases as R, douyinFetcher$1 as Rn, BilibiliLoginParamsSchema as Rr, BilibiliMethodToFetcher as Rt, setdyPush as S, bv2av as Sn, DouyinWorkParamsSchema as Sr, softFetch as St, biLogin as T, initLogger as Tn, BilibiliArticleInfoParamsSchema as Tr, amagiClient$1 as Tt, renderVideoPreviewPage as U, createBoundBilibiliFetcher as Un, BilibiliValidateCaptchaParamsSchema as Ur, KuaishouInternalMethods as Ut, BilibiliDBBase as V, douyinSign as Vn, BilibiliQrcodeStatusParamsSchema as Vr, DouyinMethodToFetcher as Vt, renderRichTextToReact as W, createErrorResponse as Wn, BilibiliValidationSchemas as Wr, KuaishouMethodToFetcher as Wt, createHeadingNode as X, XiaohongshuMethodRoutes as Xn, emitHttpRequest as Xr, DynamicType as Xt, createHashtagNode as Y, validateXiaohongshuParams as Yn, emitApiSuccess as Yr, toFetcherMethod as Yt, createHorizontalRuleNode as Z, XiaohongshuValidationSchemas as Zn, emitHttpResponse as Zr, AdditionalType as Zt, douyinPush as _, handleError as _n, DouyinQrcodeParamsSchema as _r, SOFT_ERROR_CODES as _t, bilibiliAPP as a, emitNetworkRetry as ai, kuaishouUtils as an, KuaishouUserWorkListParamsSchema as ar, createParagraphNode as at, globalIgnore as b, parseDmSegMobileReply as bn, DouyinUserParamsSchema as br, kuaishouFetcher as bt, prefix as c, bilibiliApiUrls as ci, kuaishou$1 as cn, DouyinCommentParamsSchema as cr, createTextNode as ct, globalStatistics as d, getKuaishouData as di, createBoundDouyinApi as dn, DouyinEmojiListParamsSchema as dr, createVoteNode as dt, emitLogError as ei, createAmagiClient as en, KuaishouCommentParamsSchema as er, createLinkCardNode as et, groupStatistics as f, Root as fi, douyin$1 as fn, DouyinEmojiProParamsSchema as fr, createWebLinkNode as ft, changeBotID as g, ValidationError as gn, DouyinMusicParamsSchema as gr, AmagiError as gt, bilibiliPushList as h, ApiError as hn, DouyinMethodRoutes as hr, AmagiBase as ht, update as i, emitNetworkError as ii, xiaohongshu$1 as in, KuaishouUserProfileParamsSchema as ir, createMentionNode as it, webConfig as j, isNetworkErrorResult as jn, BilibiliColumnInfoParamsSchema as jr, KuaishouMethodMapping as jt, testWrapWithErrorHandler as k, fetchResponse as kn, BilibiliBangumiStreamParamsSchema as kr, DouyinMethodMapping as kt, xiaohongshuAPP as l, getBilibiliData as li, douyinUtils as ln, DouyinCommentReplyParamsSchema as lr, createTopicNode as lt, bilibiliPush as m, createBilibiliRoutes as mn, DouyinLiveRoomParamsSchema as mr, normalizeRichTextNodes as mt, kkkUpdateCommand as n, emitLogMark as ni, createXiaohongshuRoutes as nn, KuaishouLiveRoomInfoParamsSchema as nr, createListNode as nt, douyinAPP as o, bilibili$1 as oi, createKuaishouRoutes as on, KuaishouValidationSchemas as or, createRichTextDocument as ot, qrLogin as p, bilibiliUtils as pn, DouyinHotWordsParamsSchema as pr, extractRichTextPlainText as pt, createCodeBlockNode as q, validateDouyinParams as qn, amagiEvents as qr, XiaohongshuInternalMethods as qt, kkkUpdateTest as r, emitLogWarn as ri, createBoundXiaohongshuApi as rn, KuaishouMethodRoutes as rr, createLotteryNode as rt, kuaishouAPP as s, createBoundBilibiliApi as si, createBoundKuaishouApi as sn, KuaishouVideoParamsSchema as sr, createSearchKeywordNode as st, kkkUpdate as t, emitLogInfo as ti, xiaohongshuUtils as tn, KuaishouEmojiParamsSchema as tr, createListItemNode as tt, testPush as u, getDouyinData as ui, createDouyinRoutes as un, DouyinDanmakuParamsSchema as ur, createViewPictureNode as ut, douyinPushList as v, bilibiliErrorCodeMap as vn, DouyinSearchParamsSchema as vr, bilibiliFetcher as vt, version as w, httpLogger as wn, BilibiliArticleCardParamsSchema as wr, amagi as wt, setbiliPush as x, av2bv as xn, DouyinValidationSchemas as xr, reloadAmagiConfig as xt, forcePush as y, wbi_sign as yn, DouyinUserListParamsSchema as yr, douyinFetcher as yt, StatisticsDBBase as z, createBoundDouyinFetcher as zn, BilibiliMethodRoutes as zr, DouyinFetcherMethods as zt };
44295
+ export { createImageNode as $, xiaohongshuApiUrls as $n, emitLog as $r, MajorType as $t, testWrapWithErrorHandler as A, fetchResponse as An, BilibiliBangumiStreamParamsSchema as Ar, DouyinMethodMapping as At, StatisticsDBBase as B, createBoundDouyinFetcher as Bn, BilibiliMethodRoutes as Br, DouyinFetcherMethods as Bt, changelog as C, bv2av as Cn, DouyinWorkParamsSchema as Cr, softFetch as Ct, dylogin as D, logMiddleware as Dn, BilibiliArticleParamsSchema as Dr, BilibiliApiRoutes as Dt, biLogin as E, initLogger as En, BilibiliArticleInfoParamsSchema as Er, amagiClient$1 as Et, douyinDBInstance as F, createBoundKuaishouFetcher as Fn, BilibiliDanmakuParamsSchema as Fr, getApiRoute as Ft, renderRichTextToReact as G, createErrorResponse as Gn, BilibiliValidationSchemas as Gr, KuaishouMethodToFetcher as Gt, BilibiliDBBase as H, douyinSign as Hn, BilibiliQrcodeStatusParamsSchema as Hr, DouyinMethodToFetcher as Ht, getBilibiliDB as I, kuaishouFetcher$1 as In, BilibiliDynamicParamsSchema as Ir, getEnglishMethodName as It, createCodeBlockNode as J, validateDouyinParams as Jn, amagiEvents as Jr, XiaohongshuInternalMethods as Jt, createAtNode as K, createSuccessResponse$1 as Kn, BilibiliVideoDownloadParamsSchema as Kr, MethodMaps as Kt, getDouyinDB as L, kuaishouSign as Ln, BilibiliEmojiParamsSchema as Lr, BilibiliFetcherMethods as Lt, webConfig as M, isNetworkErrorResult as Mn, BilibiliColumnInfoParamsSchema as Mr, KuaishouMethodMapping as Mt, bilibiliDBInstance as N, createBoundXiaohongshuFetcher as Nn, BilibiliCommentParamsSchema as Nr, XiaohongshuApiRoutes as Nt, removeOldFiles as O, logger$2 as On, BilibiliAv2BvParamsSchema as Or, BilibiliMethodMapping as Ot, cleanOldDynamicCache as P, xiaohongshuFetcher$1 as Pn, BilibiliCommentReplyParamsSchema as Pr, XiaohongshuMethodMapping as Pt, createHorizontalRuleNode as Q, XiaohongshuValidationSchemas as Qn, emitHttpResponse as Qr, AdditionalType as Qt, getStatisticsDB as R, kuaishouApiUrls as Rn, BilibiliLiveParamsSchema as Rr, BilibiliInternalMethods as Rt, setdyPush as S, av2bv as Sn, DouyinValidationSchemas as Sr, reloadAmagiConfig as St, version as T, httpLogger as Tn, BilibiliArticleCardParamsSchema as Tr, amagi as Tt, reactServerRender as U, bilibiliFetcher$1 as Un, BilibiliUserParamsSchema as Ur, KuaishouFetcherMethods as Ut, DouyinDBBase as V, douyinApiUrls as Vn, BilibiliQrcodeParamsSchema as Vr, DouyinInternalMethods as Vt, renderVideoPreviewPage as W, createBoundBilibiliFetcher as Wn, BilibiliValidateCaptchaParamsSchema as Wr, KuaishouInternalMethods as Wt, createHashtagNode as X, validateXiaohongshuParams as Xn, emitApiSuccess as Xr, toFetcherMethod as Xt, createEmojiNode as Y, validateKuaishouParams as Yn, emitApiError as Yr, XiaohongshuMethodToFetcher as Yt, createHeadingNode as Z, XiaohongshuMethodRoutes as Zn, emitHttpRequest as Zr, DynamicType as Zt, douyinPush as _, ValidationError as _n, DouyinMusicParamsSchema as _r, AmagiError as _t, bilibiliAPP as a, emitNetworkError as ai, xiaohongshu$1 as an, KuaishouUserProfileParamsSchema as ar, createMentionNode as at, globalIgnore as b, wbi_sign as bn, DouyinUserListParamsSchema as br, douyinFetcher as bt, prefix as c, createBoundBilibiliApi as ci, createBoundKuaishouApi as cn, KuaishouVideoParamsSchema as cr, createSearchKeywordNode as ct, globalStatistics as d, getDouyinData as di, createDouyinRoutes as dn, DouyinDanmakuParamsSchema as dr, createViewPictureNode as dt, emitLogDebug as ei, CommentType as en, xiaohongshuSign as er, createLineBreakNode as et, groupStatistics as f, getKuaishouData as fi, createBoundDouyinApi as fn, DouyinEmojiListParamsSchema as fr, createVoteNode as ft, changeBotID as g, ApiError as gn, DouyinMethodRoutes as gr, AmagiBase as gt, bilibiliPushList as h, createBilibiliRoutes as hn, DouyinLiveRoomParamsSchema as hr, normalizeRichTextNodes as ht, update as i, emitLogWarn as ii, createBoundXiaohongshuApi as in, KuaishouMethodRoutes as ir, createLotteryNode as it, template_default as j, getHeadersAndData as jn, BilibiliBv2AvParamsSchema as jr, KuaishouApiRoutes as jt, task as k, fetchData as kn, BilibiliBangumiInfoParamsSchema as kr, DouyinApiRoutes as kt, xiaohongshuAPP as l, bilibiliApiUrls as li, kuaishou$1 as ln, DouyinCommentParamsSchema as lr, createTextNode as lt, bilibiliPush as m, bilibiliUtils as mn, DouyinHotWordsParamsSchema as mr, extractRichTextPlainText as mt, kkkUpdateCommand as n, emitLogInfo as ni, xiaohongshuUtils as nn, KuaishouEmojiParamsSchema as nr, createListItemNode as nt, douyinAPP as o, emitNetworkRetry as oi, kuaishouUtils as on, KuaishouUserWorkListParamsSchema as or, createParagraphNode as ot, qrLogin as p, Root as pi, douyin$1 as pn, DouyinEmojiProParamsSchema as pr, createWebLinkNode as pt, createBlockquoteNode as q, validateBilibiliParams as qn, BilibiliVideoParamsSchema as qr, XiaohongshuFetcherMethods as qt, kkkUpdateTest as r, emitLogMark as ri, createXiaohongshuRoutes as rn, KuaishouLiveRoomInfoParamsSchema as rr, createListNode as rt, kuaishouAPP as s, bilibili$1 as si, createKuaishouRoutes as sn, KuaishouValidationSchemas as sr, createRichTextDocument as st, kkkUpdate as t, emitLogError as ti, createAmagiClient as tn, KuaishouCommentParamsSchema as tr, createLinkCardNode as tt, testPush as u, getBilibiliData as ui, douyinUtils as un, DouyinCommentReplyParamsSchema as ur, createTopicNode as ut, douyinPushList as v, handleError as vn, DouyinQrcodeParamsSchema as vr, SOFT_ERROR_CODES as vt, help as w, qtparam as wn, BilibiliApplyCaptchaParamsSchema as wr, CreateApp as wt, setbiliPush as x, parseDmSegMobileReply as xn, DouyinUserParamsSchema as xr, kuaishouFetcher as xt, forcePush as y, bilibiliErrorCodeMap as yn, DouyinSearchParamsSchema as yr, bilibiliFetcher as yt, initAllDatabases as z, douyinFetcher$1 as zn, BilibiliLoginParamsSchema as zr, BilibiliMethodToFetcher as zt };