@tencent-connect/dsh-qqbot 0.5.0 → 0.5.2

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.
Files changed (60) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/CHANGELOG_EN.md +18 -0
  3. package/README.md +12 -1
  4. package/dist/commands/help.d.ts +1 -1
  5. package/dist/commands/help.js +1 -1
  6. package/dist/config.d.ts +2 -0
  7. package/dist/config.d.ts.map +1 -1
  8. package/dist/config.js +10 -8
  9. package/dist/config.js.map +1 -1
  10. package/dist/gateway/bootstrap.d.ts.map +1 -1
  11. package/dist/gateway/bootstrap.js +17 -0
  12. package/dist/gateway/bootstrap.js.map +1 -1
  13. package/dist/index.d.ts +2 -1
  14. package/dist/index.d.ts.map +1 -1
  15. package/dist/index.js +41 -22
  16. package/dist/index.js.map +1 -1
  17. package/dist/setup/bind-routes.d.ts +78 -0
  18. package/dist/setup/bind-routes.d.ts.map +1 -0
  19. package/dist/setup/bind-routes.js +311 -0
  20. package/dist/setup/bind-routes.js.map +1 -0
  21. package/dist/setup/binding-service.d.ts +86 -0
  22. package/dist/setup/binding-service.d.ts.map +1 -0
  23. package/dist/setup/binding-service.js +175 -0
  24. package/dist/setup/binding-service.js.map +1 -0
  25. package/dist/setup/index.d.ts +50 -0
  26. package/dist/setup/index.d.ts.map +1 -0
  27. package/dist/setup/index.js +98 -0
  28. package/dist/setup/index.js.map +1 -0
  29. package/dist/setup/persist.d.ts +41 -0
  30. package/dist/setup/persist.d.ts.map +1 -0
  31. package/dist/setup/persist.js +201 -0
  32. package/dist/setup/persist.js.map +1 -0
  33. package/dist/setup/presenters.d.ts +40 -0
  34. package/dist/setup/presenters.d.ts.map +1 -0
  35. package/dist/setup/presenters.js +84 -0
  36. package/dist/setup/presenters.js.map +1 -0
  37. package/dist/setup/qr-svg.d.ts +8 -0
  38. package/dist/setup/qr-svg.d.ts.map +1 -0
  39. package/dist/setup/qr-svg.js +20 -0
  40. package/dist/setup/qr-svg.js.map +1 -0
  41. package/dist/shared/bind-protocol.d.ts +42 -0
  42. package/dist/shared/bind-protocol.d.ts.map +1 -0
  43. package/dist/shared/bind-protocol.js +19 -0
  44. package/dist/shared/bind-protocol.js.map +1 -0
  45. package/dist/shared/utils.d.ts +8 -3
  46. package/dist/shared/utils.d.ts.map +1 -1
  47. package/dist/shared/utils.js +45 -4
  48. package/dist/shared/utils.js.map +1 -1
  49. package/dist/transport/reply-limiter.d.ts +1 -1
  50. package/dist/transport/reply-limiter.js +1 -1
  51. package/lib/client.js +996 -0
  52. package/lib/client.js.map +1 -0
  53. package/package.json +26 -6
  54. package/pnpm-workspace.yaml +1 -0
  55. package/tsconfig.client.json +19 -0
  56. package/tsdown.client.config.ts +58 -0
  57. package/dist/setup.d.ts +0 -24
  58. package/dist/setup.d.ts.map +0 -1
  59. package/dist/setup.js +0 -170
  60. package/dist/setup.js.map +0 -1
@@ -3,7 +3,7 @@
3
3
  *
4
4
  * 纯函数与常量,供插件入口与其他模块复用。
5
5
  */
6
- import { readFileSync } from 'node:fs';
6
+ import { existsSync, readFileSync } from 'node:fs';
7
7
  import os from 'node:os';
8
8
  import { fileURLToPath } from 'node:url';
9
9
  import { basename, dirname, resolve } from 'node:path';
@@ -31,14 +31,32 @@ export function buildUserAgent() {
31
31
  return `dsh-qqbot/${PLUGIN_VERSION} (Node/${process.versions.node}; ${os.platform()})`;
32
32
  }
33
33
  /**
34
- * 从插件安装路径推导 profile 目录(node_modules 的父目录)
34
+ * 从插件安装路径推导 profile 目录
35
35
  *
36
- * 逐级向上查找名为 node_modules 的目录并返回其父目录。
37
- * 用 basename/dirname 而非字符串分隔符匹配,兼容 Windows(\)与 pnpm 嵌套结构。
36
+ * 主策略:逐级向上探测 profile 标志文件(cordis.patch.yml / pnpm-workspace.yaml)。
37
+ * Desktop profile 使用 pnpm workspace 布局(profiles/desktop/dependencies/
38
+ * node_modules/.pnpm/<pkg>/node_modules/...),插件嵌套于多级 node_modules,
39
+ * 仅按 node_modules 匹配会命中内层目录而返回错误位置。
40
+ *
41
+ * 兜底:无标志文件时沿用旧启发式(名为 node_modules 的目录的父目录),
42
+ * 覆盖 CLI profile 的浅层 npm 布局与未写入过 patch 的全新 profile。
38
43
  *
39
44
  * @param baseDir - 起始目录,缺省为插件根(可注入便于测试)
40
45
  */
41
46
  export function getProfileDir(baseDir = PLUGIN_ROOT) {
47
+ // 主策略:跨过 node_modules 边界后,优先命中 cordis.patch.yml(凭据写入
48
+ // 目标),其次 pnpm-workspace.yaml。跨越守卫是关键——插件包自身随包携带
49
+ // cordis.patch.yml(dsh.bundle.patch 分发物)、源码 checkout 根也有同名
50
+ // 仓库文件,二者都会让「从 PLUGIN_ROOT 起步的探测」命中插件自己;只有
51
+ // 位于 node_modules 之上的目录才可能是拥有该插件的 profile。
52
+ const byPatch = findProfileAncestor(baseDir, (dir) => existsSync(resolve(dir, 'cordis.patch.yml')) ? dir : null);
53
+ if (byPatch !== null)
54
+ return byPatch;
55
+ const byWorkspace = findProfileAncestor(baseDir, (dir) => existsSync(resolve(dir, 'pnpm-workspace.yaml')) ? dir : null);
56
+ if (byWorkspace !== null)
57
+ return byWorkspace;
58
+ // 兜底:npm 浅层布局 / 尚未写入任何标志文件的全新 profile
59
+ // (第一个 node_modules 目录的父目录,与旧版行为一致)
42
60
  let dir = baseDir;
43
61
  for (let i = 0; i < 32; i++) {
44
62
  if (basename(dir) === 'node_modules')
@@ -50,6 +68,29 @@ export function getProfileDir(baseDir = PLUGIN_ROOT) {
50
68
  }
51
69
  return null;
52
70
  }
71
+ /**
72
+ * 沿目录树向上探测 profile 候选:仅接受「已经跨过至少一个名为
73
+ * node_modules 的路径组件」之后命中的目录(兼容 Windows 分隔符与
74
+ * pnpm 嵌套结构;dev 源码 checkout 不跨边界 → 返回 null → 环境变量引导)。
75
+ */
76
+ function findProfileAncestor(baseDir, probe) {
77
+ let crossedNodeModules = false;
78
+ let dir = baseDir;
79
+ for (let i = 0; i < 32; i++) {
80
+ if (basename(dir) === 'node_modules')
81
+ crossedNodeModules = true;
82
+ if (crossedNodeModules) {
83
+ const hit = probe(dir);
84
+ if (hit !== null)
85
+ return hit;
86
+ }
87
+ const parent = dirname(dir);
88
+ if (parent === dir)
89
+ break;
90
+ dir = parent;
91
+ }
92
+ return null;
93
+ }
53
94
  /**
54
95
  * 解析环境变量占位配置
55
96
  */
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/shared/utils.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEvD,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AACtC,MAAM,WAAW,GAAG,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;AAEhD,sDAAsD;AACtD,MAAM,CAAC,MAAM,cAAc,GAAG,iBAAiB,EAAE,CAAC;AAElD,SAAS,iBAAiB;IACxB,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,OAAO,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;QACrD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAAyB,CAAC;QAC9E,OAAO,GAAG,CAAC,OAAO,IAAI,OAAO,CAAC;IAChC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,OAAO,CAAC;IACjB,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,cAAc;IAC5B,OAAO,aAAa,cAAc,UAAU,OAAO,CAAC,QAAQ,CAAC,IAAI,KAAK,EAAE,CAAC,QAAQ,EAAE,GAAG,CAAC;AACzF,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,aAAa,CAAC,UAAkB,WAAW;IACzD,IAAI,GAAG,GAAG,OAAO,CAAC;IAClB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;QAC5B,IAAI,QAAQ,CAAC,GAAG,CAAC,KAAK,cAAc;YAAE,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC;QAC1D,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;QAC5B,IAAI,MAAM,KAAK,GAAG;YAAE,MAAM;QAC1B,GAAG,GAAG,MAAM,CAAC;IACf,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,WAAmB,EAAE,MAAc;IAC5D,IAAI,WAAW,IAAI,WAAW,KAAK,cAAc,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;QAC5F,OAAO,WAAW,CAAC;IACrB,CAAC;IACD,OAAO,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;AACnC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,EAAW;IAC5C,IAAI,CAAC,EAAE;QAAE,OAAO,GAAG,CAAC;IACpB,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC;IAC7B,IAAI,IAAI,GAAG,MAAM;QAAE,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC;IAC1D,IAAI,IAAI,GAAG,SAAS;QAAE,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC;IAC/D,IAAI,IAAI,GAAG,UAAU;QAAE,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,SAAS,CAAC,KAAK,CAAC;IACnE,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,UAAU,CAAC,KAAK,CAAC;AAC/C,CAAC"}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/shared/utils.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  /**
2
- * 被动回复限额管理(参考 openclaw-qqbot 的 reply-limiter)。
2
+ * 被动回复限额管理。
3
3
  *
4
4
  * QQ Bot 被动回复有限额:同一条消息只能被动回复 N 次,超时后不能再被动回复。
5
5
  * 当限额耗尽或消息过期时,应降级为主动消息(proactive,不传 msgId)。
@@ -1,5 +1,5 @@
1
1
  /**
2
- * 被动回复限额管理(参考 openclaw-qqbot 的 reply-limiter)。
2
+ * 被动回复限额管理。
3
3
  *
4
4
  * QQ Bot 被动回复有限额:同一条消息只能被动回复 N 次,超时后不能再被动回复。
5
5
  * 当限额耗尽或消息过期时,应降级为主动消息(proactive,不传 msgId)。