karin-plugin-kkk 2.45.0-beta.1 → 2.45.0-beta.3

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/CHANGELOG.md CHANGED
@@ -2,6 +2,29 @@
2
2
 
3
3
  # Changelog
4
4
 
5
+ ## [2.45.0-beta.3](https://github.com/ikenxuan/karin-plugin-kkk/compare/v2.45.0-beta.2...v2.45.0-beta.3) (2026-10-06)
6
+
7
+
8
+ ### 🐛 错误修复
9
+
10
+ * 更新发布脚本以正确引用 package.json 文件 ([499ef1d](https://github.com/ikenxuan/karin-plugin-kkk/commit/499ef1d824a4b34b09101accd6988929569d0354))
11
+
12
+ ## [2.45.0-beta.2](https://github.com/ikenxuan/karin-plugin-kkk/compare/v2.45.0-beta.1...v2.45.0-beta.2) (2026-10-06)
13
+
14
+
15
+ ### 🐛 错误修复
16
+
17
+ * 添加 @clack/prompts 依赖并更新发版脚本以使用交互式版本选择 ([dd18fc2](https://github.com/ikenxuan/karin-plugin-kkk/commit/dd18fc23993d6b9ca6185cb4a75190a16f9c3dab))
18
+ * 移除不必要的 bumpp 依赖,并优化本地发版脚本 ([4123512](https://github.com/ikenxuan/karin-plugin-kkk/commit/4123512b404009daa34512cc57a375c3de0c8462))
19
+ * ci ([5767211](https://github.com/ikenxuan/karin-plugin-kkk/commit/57672119b6502ba9717eaf3a45dcf0b65ec9d36f))
20
+ * 规范化短哈希长度为 7 位,以避免构建指纹误判 ([de02dcc](https://github.com/ikenxuan/karin-plugin-kkk/commit/de02dcc39bf4d75178e21f2c947d827f43b11e14))
21
+ * ci ([d38ef28](https://github.com/ikenxuan/karin-plugin-kkk/commit/d38ef28a1c17717ea42341b10a6bcbf2b60849ae))
22
+ * ci ([c7ddce5](https://github.com/ikenxuan/karin-plugin-kkk/commit/c7ddce59ae8b60fc4c120b79cd3d191f96a69e1b))
23
+ * 回退版本号至 2.44.1,并修复 dry 模式下版本号验证逻辑 ([eabd9aa](https://github.com/ikenxuan/karin-plugin-kkk/commit/eabd9aa457d5ad098d7967304990ad8648073956))
24
+ * 优化版本比较逻辑,支持金丝雀用户的构建时间线判定 ([d811024](https://github.com/ikenxuan/karin-plugin-kkk/commit/d811024eeff8dfa28b70be7ecb0443011b2176e0))
25
+ * release 发布前剥离 devDeps,修复 GPR 报告步骤路径 ([2f02b22](https://github.com/ikenxuan/karin-plugin-kkk/commit/2f02b2294ade62b7b336363462e3cc8785d75217))
26
+ * 金丝雀用户的面板比较改为构建时间线判定 ([7aa712d](https://github.com/ikenxuan/karin-plugin-kkk/commit/7aa712dcf22113c58602629cec13115c62eefb9d))
27
+
5
28
  ## [2.45.0-beta.1](https://github.com/ikenxuan/karin-plugin-kkk/compare/v2.44.0...v2.45.0-beta.1) (2026-10-06)
6
29
 
7
30
 
@@ -1,10 +1,10 @@
1
1
  {
2
- "version": "2.45.0-beta.1",
3
- "buildTime": "2026-10-06T02:14:05.625Z",
4
- "buildTimestamp": 1791252845626,
2
+ "version": "2.45.0-beta.3",
3
+ "buildTime": "2026-10-06T06:00:56.704Z",
4
+ "buildTimestamp": 1791266456705,
5
5
  "name": "karin-plugin-kkk",
6
6
  "description": "Karin 的「抖音」「B 站」视频解析/动态推送插件",
7
7
  "homepage": "https://github.com/ikenxuan/karin-plugin-kkk",
8
- "commitHash": "292844e1ea45d460c6a677436ae4aa49655419c9",
9
- "shortCommitHash": "292844e1"
8
+ "commitHash": "030579c9a3c0615a5bb50526953874b9109ba9ad",
9
+ "shortCommitHash": "030579c9"
10
10
  }
@@ -24551,7 +24551,11 @@ var updateHelp_default = defineTemplate({
24551
24551
  text: "获取失败",
24552
24552
  active: false
24553
24553
  };
24554
- if (channel.status === "canary") return {
24554
+ if (channel.status === "canary") return channel.hasUpdate ? {
24555
+ dot: palette.success,
24556
+ text: "有新构建可升级",
24557
+ active: true
24558
+ } : {
24555
24559
  dot: palette.accentText,
24556
24560
  text: "main 分支构建",
24557
24561
  active: true
@@ -40435,6 +40439,8 @@ var UPDATE_MSGID_KEY = "kkk:update:msgid";
40435
40439
  */
40436
40440
  var Handler = async () => {
40437
40441
  const tags = ["latest", ...(Config.app.UpdateNotifyChannels?.length ? Config.app.UpdateNotifyChannels : ["stable"]).filter((c) => c !== "stable")];
40442
+ const installedIsCanary = parseReleaseChannel(Root.pluginVersion) === "Canary";
40443
+ const installedBuildTime = getBuildMetadata()?.buildTimestamp;
40438
40444
  const remotes = await Promise.all(tags.map(async (tag) => {
40439
40445
  try {
40440
40446
  return await getRemotePkgVersion(Root.pluginName, tag) || null;
@@ -40442,7 +40448,14 @@ var Handler = async () => {
40442
40448
  return null;
40443
40449
  }
40444
40450
  }));
40445
- const remote = [...new Set(remotes.filter((v) => !!v))].filter((v) => isSemverGreater(v, Root.pluginVersion)).sort((a, b) => isSemverGreater(b, a) ? 1 : -1)[0];
40451
+ const canaryInfo = installedIsCanary ? await fetchCanaryInfo() : null;
40452
+ const remote = [...new Set(remotes.filter((v) => !!v))].filter((version) => {
40453
+ if (installedIsCanary && installedBuildTime !== void 0) {
40454
+ const releaseNode = canaryInfo?.nodes.find((n) => n.message.includes(version));
40455
+ if (releaseNode) return releaseNode.time > installedBuildTime;
40456
+ }
40457
+ return isSemverGreater(version, Root.pluginVersion);
40458
+ }).sort((a, b) => isSemverGreater(b, a) ? 1 : -1)[0];
40446
40459
  if (!remote) return true;
40447
40460
  try {
40448
40461
  const lockedVersion = await db.get(UPDATE_LOCK_KEY);
@@ -40579,23 +40592,30 @@ var installAndRestart = async (e, version) => {
40579
40592
  };
40580
40593
  /** pkg.pr.new 仓库(金丝雀数据源,只跟踪 main 分支构建) */
40581
40594
  var PKG_PR_NEW_REPO = "ikenxuan/karin-plugin-kkk";
40582
- /** 拉取 pkg.pr.new 上 main 分支的最新金丝雀构建(失败返回 null,由调用方降级展示) */
40583
- var fetchLatestCanary = async () => {
40595
+ /** 拉取 pkg.pr.new 的发布历史与 main 分支最新构建(失败返回 null,由调用方降级展示) */
40596
+ var fetchCanaryInfo = async () => {
40584
40597
  try {
40585
40598
  const [owner, repo] = PKG_PR_NEW_REPO.split("/");
40586
40599
  const nodes = (await axios.get(`https://pkg.pr.new/api/repo/commits?owner=${owner}&repo=${repo}`, { timeout: 1e4 })).data?.target?.history?.nodes;
40587
40600
  if (!Array.isArray(nodes)) return null;
40588
- const node = nodes.find((n) => n.branch === "main" && n.statusCheckRollup?.contexts?.nodes?.some((c) => c.packages?.some((pkg) => pkg.installUrl)));
40589
- const pkg = node?.statusCheckRollup?.contexts?.nodes?.flatMap((c) => c.packages ?? []).find((p) => p.installUrl);
40590
- if (!node?.abbreviatedOid || !pkg?.installUrl) return null;
40601
+ const history = nodes.map((n) => ({
40602
+ sha: (n.abbreviatedOid ?? "").slice(0, 7),
40603
+ time: n.authoredDate ? new Date(n.authoredDate).getTime() : 0,
40604
+ message: n.message ?? ""
40605
+ }));
40606
+ const mainNode = nodes.find((n) => n.branch === "main" && n.statusCheckRollup?.contexts?.nodes?.some((c) => c.packages?.some((pkg) => pkg.installUrl)));
40607
+ const pkg = mainNode?.statusCheckRollup?.contexts?.nodes?.flatMap((c) => c.packages ?? []).find((p) => p.installUrl);
40608
+ if (!mainNode?.abbreviatedOid || !pkg?.installUrl) return null;
40591
40609
  return {
40592
- label: "金丝雀",
40593
- tag: "pkg.pr.new · main",
40594
- status: "canary",
40595
- version: node.abbreviatedOid.slice(0, 7),
40596
- installCommand: `pnpm add ${pkg.installUrl} -w`,
40597
- publishedAt: node.authoredDate,
40598
- commitMessage: node.message?.slice(0, 40)
40610
+ channel: {
40611
+ label: "金丝雀",
40612
+ tag: "pkg.pr.new · main",
40613
+ status: "canary",
40614
+ version: mainNode.abbreviatedOid.slice(0, 7),
40615
+ installCommand: `pnpm add ${pkg.installUrl} -w`,
40616
+ publishedAt: mainNode.authoredDate
40617
+ },
40618
+ nodes: history
40599
40619
  };
40600
40620
  } catch {
40601
40621
  return null;
@@ -40608,6 +40628,10 @@ var getUpdateHelpImage = async (e) => {
40608
40628
  if (status) try {
40609
40629
  distTags = JSON.parse(stdout.toString());
40610
40630
  } catch {}
40631
+ const canaryInfo = await fetchCanaryInfo();
40632
+ const installedIsCanary = parseReleaseChannel(Root.pluginVersion) === "Canary";
40633
+ const build = getBuildMetadata();
40634
+ const installedBuildTime = build?.buildTimestamp;
40611
40635
  const channels = [
40612
40636
  {
40613
40637
  label: "正式版",
@@ -40634,6 +40658,15 @@ var getUpdateHelpImage = async (e) => {
40634
40658
  ...def,
40635
40659
  status: "missing"
40636
40660
  };
40661
+ if (installedIsCanary && installedBuildTime !== void 0) {
40662
+ const releaseNode = canaryInfo?.nodes.find((n) => n.message.includes(version));
40663
+ if (releaseNode) return {
40664
+ ...def,
40665
+ status: "ok",
40666
+ version,
40667
+ hasUpdate: releaseNode.time > installedBuildTime
40668
+ };
40669
+ }
40637
40670
  return {
40638
40671
  ...def,
40639
40672
  status: "ok",
@@ -40641,11 +40674,14 @@ var getUpdateHelpImage = async (e) => {
40641
40674
  hasUpdate: isSemverGreater(version, Root.pluginVersion)
40642
40675
  };
40643
40676
  });
40644
- channels.push(await fetchLatestCanary() ?? {
40677
+ const canaryChannel = canaryInfo?.channel ?? {
40645
40678
  label: "金丝雀",
40646
40679
  tag: "pkg.pr.new · main",
40647
40680
  status: "error"
40648
- });
40681
+ };
40682
+ const installedSha = (build?.shortCommitHash ?? "").slice(0, 7);
40683
+ if (installedIsCanary && canaryChannel.status === "canary" && installedSha) canaryChannel.hasUpdate = installedSha !== canaryChannel.version;
40684
+ channels.push(canaryChannel);
40649
40685
  return await Render(e, "other/updateHelp", {
40650
40686
  currentVersion: Root.pluginVersion,
40651
40687
  currentChannel: RELEASE_CHANNEL_LABEL[parseReleaseChannel(Root.pluginVersion)],
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "karin-plugin-kkk",
3
- "version": "2.45.0-beta.1",
3
+ "version": "2.45.0-beta.3",
4
4
  "description": "Karin 的「抖音」「B 站」视频解析/动态推送插件",
5
5
  "keywords": [
6
6
  "karin",
@@ -57,47 +57,6 @@
57
57
  "access": "public",
58
58
  "registry": "https://registry.npmjs.org"
59
59
  },
60
- "dependencies": {
61
- "@ikenxuan/qrcode": "1.5.0",
62
- "@lobehub/webfont-geist-mono": "^1.0.0",
63
- "@lobehub/webfont-harmony-sans-sc": "^1.0.0",
64
- "emoji-datasource-apple": "16.0.0"
65
- },
66
- "devDependencies": {
67
- "@heroui/react": "3.2.5",
68
- "@icons-pack/react-simple-icons": "^13.15.1",
69
- "@ikenxuan/amagi": "7.0.0-beta.7",
70
- "@karinjs/adapter-qqbot": "3.3.0",
71
- "@karinjs/plugin-adapter-milky": "^1.3.3",
72
- "@karinjs/plugin-basic": "1.4.13",
73
- "@karinjs/plugin-ffmpeg": "^0.1.3",
74
- "@karinjs/plugin-shotium": "^0.3.2",
75
- "@karinjs/template-react": "^0.2.0",
76
- "@kkk/richtext": "0.1.0",
77
- "@outpacelabs/avatars": "^0.6.0",
78
- "@phosphor-icons/react": "^2.1.10",
79
- "@thesvg/icons": "^3.3.7",
80
- "@types/heic-decode": "^2.0.0",
81
- "@types/react": "19.3.0",
82
- "@types/react-dom": "19.3.0",
83
- "clsx": "^2.1.1",
84
- "date-fns": "^4.4.0",
85
- "echarts": "^6.1.0",
86
- "heic-decode": "^2.1.0",
87
- "highlight.js": "^11.12.0",
88
- "jpeg-js": "^0.4.4",
89
- "lucide-react": "^1.46.0",
90
- "react": "^19.3.0",
91
- "react-dom": "^19.3.0",
92
- "react-icons": "^5.7.0",
93
- "react-markdown": "^10.1.0",
94
- "rehype-highlight": "^7.0.2",
95
- "tailwind-merge": "3.7.0",
96
- "vitest": "^5.0.1"
97
- },
98
- "engines": {
99
- "node": ">=18.0.0"
100
- },
101
60
  "karin": {
102
61
  "engines": ">=1.14.0",
103
62
  "main": "src/index.ts",
@@ -118,17 +77,14 @@
118
77
  "web": "./lib/web.config.js",
119
78
  "ts-web": "./src/web.config.ts"
120
79
  },
121
- "timestamp": "2026-10-06T01:55:55.084Z",
122
- "scripts": {
123
- "build": "cross-env NODE_ENV=production vite build",
124
- "build:check": "ktr sync && tsc --noEmit && pnpm build",
125
- "dev": "ktr sync && cross-env EBV_FILE=\"development.env\" node --import tsx src/app.ts --trace-deprecation",
126
- "template": "ktr sync && ktr dev",
127
- "typecheck": "ktr sync && tsc --noEmit",
128
- "gen:emoji": "node scripts/gen-emoji-assets.mjs",
129
- "pub": "npm publish --access public",
130
- "sort": "sort-package-json",
131
- "sync": "curl -X PUT \"https://registry-direct.npmmirror.com/-/package/karin-plugin-kkk/syncs\"",
132
- "watch": "ktr sync && cross-env EBV_FILE=\"development.env\" tsx watch --include \"src/**/*.ts\" --include \"ktr/**/*.ts\" --include \"ktr/**/*.tsx\" src/app.ts --trace-deprecation"
80
+ "dependencies": {
81
+ "@ikenxuan/qrcode": "1.5.0",
82
+ "@lobehub/webfont-geist-mono": "^1.0.0",
83
+ "@lobehub/webfont-harmony-sans-sc": "^1.0.0",
84
+ "emoji-datasource-apple": "16.0.0"
85
+ },
86
+ "timestamp": "2026-10-06T05:59:30.186Z",
87
+ "engines": {
88
+ "node": ">=18.0.0"
133
89
  }
134
90
  }