@meet-im/meet 2.0.5 → 3.0.0-beta.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.
Files changed (70) hide show
  1. package/dist/account-inspect-api.d.ts +2 -0
  2. package/dist/account-inspect-api.js +4 -0
  3. package/dist/channel-plugin-api.d.ts +1 -0
  4. package/dist/channel-plugin-api.js +3 -0
  5. package/dist/index.d.ts +14 -0
  6. package/dist/index.js +43 -0
  7. package/dist/monitor-api.d.ts +1 -0
  8. package/dist/monitor-api.js +1 -0
  9. package/dist/probe-api.d.ts +1 -0
  10. package/dist/probe-api.js +1 -0
  11. package/dist/runtime-setter-api.d.ts +1 -0
  12. package/dist/runtime-setter-api.js +2 -0
  13. package/dist/send-api.d.ts +1 -0
  14. package/dist/send-api.js +1 -0
  15. package/dist/src/account-inspect.d.ts +5 -0
  16. package/dist/src/account-inspect.js +9 -0
  17. package/dist/src/accounts.d.ts +12 -0
  18. package/dist/src/accounts.js +134 -0
  19. package/dist/src/bot.d.ts +15 -0
  20. package/dist/src/bot.js +355 -0
  21. package/dist/src/channel.d.ts +3 -0
  22. package/dist/src/channel.js +402 -0
  23. package/dist/src/client.d.ts +8 -0
  24. package/dist/src/client.js +49 -0
  25. package/dist/src/config-schema.d.ts +82 -0
  26. package/dist/src/config-schema.js +46 -0
  27. package/dist/src/media.d.ts +57 -0
  28. package/dist/src/media.js +140 -0
  29. package/dist/src/monitor.d.ts +9 -0
  30. package/dist/src/monitor.js +153 -0
  31. package/dist/src/outbound.d.ts +2 -0
  32. package/dist/src/outbound.js +34 -0
  33. package/dist/src/policy.d.ts +30 -0
  34. package/dist/src/policy.js +78 -0
  35. package/dist/src/probe.d.ts +10 -0
  36. package/dist/src/probe.js +56 -0
  37. package/dist/src/reply-dispatcher.d.ts +29 -0
  38. package/dist/src/reply-dispatcher.js +173 -0
  39. package/dist/src/runtime.d.ts +11 -0
  40. package/dist/src/runtime.js +6 -0
  41. package/dist/src/sdk-bridge.d.ts +21 -0
  42. package/dist/src/sdk-bridge.js +214 -0
  43. package/dist/src/send.d.ts +60 -0
  44. package/dist/src/send.js +317 -0
  45. package/dist/src/targets.d.ts +15 -0
  46. package/dist/src/targets.js +63 -0
  47. package/dist/src/types.d.ts +76 -0
  48. package/dist/src/types.js +1 -0
  49. package/dist/vitest.config.d.ts +8 -0
  50. package/dist/vitest.config.js +7 -0
  51. package/openclaw.plugin.json +116 -0
  52. package/package.json +18 -17
  53. package/skills/meet-emojis/SKILL.md +13 -15
  54. package/index.ts +0 -26
  55. package/src/accounts.ts +0 -182
  56. package/src/bot.ts +0 -418
  57. package/src/channel.ts +0 -396
  58. package/src/client.ts +0 -63
  59. package/src/config-schema.ts +0 -50
  60. package/src/media.ts +0 -198
  61. package/src/monitor.ts +0 -195
  62. package/src/outbound.ts +0 -43
  63. package/src/policy.ts +0 -131
  64. package/src/probe.ts +0 -75
  65. package/src/reply-dispatcher.ts +0 -207
  66. package/src/runtime.ts +0 -14
  67. package/src/sdk-bridge.ts +0 -268
  68. package/src/send.ts +0 -363
  69. package/src/targets.ts +0 -101
  70. package/src/types.ts +0 -96
package/package.json CHANGED
@@ -1,25 +1,25 @@
1
1
  {
2
2
  "name": "@meet-im/meet",
3
- "version": "2.0.5",
3
+ "version": "3.0.0-beta.0",
4
4
  "type": "module",
5
5
  "description": "OpenClaw Meet channel plugin",
6
6
  "scripts": {
7
7
  "dev": "tsx watch src/index.ts",
8
8
  "build": "tsc",
9
+ "clean": "tsc --build --clean",
9
10
  "typecheck": "tsc --noEmit",
10
11
  "test:unit": "vitest run",
11
12
  "test:unit:watch": "vitest",
12
13
  "test:coverage": "vitest run --coverage",
13
14
  "ci:check": "npx tsc --noEmit && npm run test:coverage",
14
- "pack": "pnpm pack && node scripts/pack.js",
15
- "publish": "npm publish --registry https://registry.npmjs.org --access public"
15
+ "pack": "npm pack && node scripts/pack.js",
16
+ "release": "npm publish --registry https://registry.npmjs.org --access public",
17
+ "prepack": "npm run build"
16
18
  },
17
19
  "license": "MIT",
18
20
  "files": [
19
- "index.ts",
20
- "src/**/*.ts",
21
- "!src/**/__tests__/**",
22
- "!src/**/*.test.ts",
21
+ "dist/**/*.js",
22
+ "dist/**/*.d.ts",
23
23
  "skills",
24
24
  "openclaw.plugin.json"
25
25
  ],
@@ -36,7 +36,7 @@
36
36
  ],
37
37
  "openclaw": {
38
38
  "extensions": [
39
- "./index.ts"
39
+ "./dist/index.js"
40
40
  ],
41
41
  "channel": {
42
42
  "id": "meet",
@@ -55,19 +55,20 @@
55
55
  }
56
56
  },
57
57
  "dependencies": {
58
- "@meet-im/meet-bot-jssdk": "^1.0.0",
59
- "zod": "3.23.8"
58
+ "@meet-im/meet-bot-jssdk": "1.0.0",
59
+ "zod": "4.4.3"
60
60
  },
61
61
  "devDependencies": {
62
- "@types/node": "^22.0.0",
63
- "@vitest/coverage-v8": "^2.1.8",
64
- "openclaw": "2026.3.23",
65
- "tsx": "^4.21.0",
66
- "typescript": "^5.7.0",
67
- "vitest": "^2.1.8"
62
+ "@types/node": "25.6.0",
63
+ "@vitest/coverage-v8": "4.1.5",
64
+ "openclaw": "2026.5.7",
65
+ "tsx": "4.21.0",
66
+ "typescript": "6.0.3",
67
+ "vite": "6.4.2",
68
+ "vitest": "4.1.5"
68
69
  },
69
70
  "peerDependencies": {
70
- "openclaw": ">=2026.3.23"
71
+ "openclaw": "2026.5.7"
71
72
  },
72
73
  "publishConfig": {
73
74
  "access": "public"
@@ -1,23 +1,21 @@
1
1
  ---
2
2
  name: meet-emojis
3
- description: "Meet 微信风格表情。激活当在 Meet 渠道回复消息时,主动使用 [名称] 格式添加表情,如 [微笑]、[OK]、[666]。让回复更生动友好。支持中英文表情名称,如找不到匹配表情可使用 Unicode emoji。"
3
+ description: "Meet 微信风格表情格式。使用 [名称] 格式,如 [微笑]、[OK]、[666]。支持中英文,也可用 Unicode emoji。"
4
4
  metadata: { "openclaw": { "emoji": "😊", "requires": { "config": ["channels.meet"] } } }
5
5
  allowed-tools: ["message"]
6
6
  ---
7
7
 
8
- # Meet Emojis
8
+ # Meet 表情使用指南
9
9
 
10
- Meet IM 消息中使用微信风格的表情符号,让回复更生动友好。## 主动使用
11
- **在 Meet 渠道回复消息时,应主动使用表情来增强表达效果。** 表情可以让语气更友好、情感更明确。
10
+ Meet IM 使用微信风格表情,可在消息中自然添加表情来增强表达。
12
11
 
13
- ## 基本格式
12
+ ## 格式要求
14
13
 
15
- 使用 `[名称]` 格式插入表情:
14
+ **使用 `[名称]` 格式**,方括号不能省略:
16
15
 
17
16
  ```
18
- 好的,我来处理[微笑]
19
- 没问题[OK]
20
- 太棒了[666]
17
+ 正确:好的,我来处理[微笑]
18
+ 错误:好的,我来处理微笑 ← 缺少方括号
21
19
  ```
22
20
 
23
21
  ## 常用表情
@@ -65,13 +63,13 @@ allowed-tools: ["message"]
65
63
  好的,有问题随时联系[再见]
66
64
  ```
67
65
 
68
- ## 注意事项
66
+ ## 使用提示
69
67
 
70
- 1. **优先使用技能表情**:优先使用本文档中的 `[名称]` 格式表情;如果找不到匹配的表情,可以直接使用 Unicode emoji(如 😊👍❤️)
71
- 2. **格式要求**:必须是 `[名称]` 格式,方括号不能省略
72
- 3. **名称匹配**:使用简体中文名称或英文名称均可
73
- 4. **大小写**:英文名称区分大小写,如 `[OK]` 而非 `[ok]`
74
- 5. **适度使用**:每条消息建议不超过 2-3 个表情
68
+ 1. **格式**:`[名称]` 格式,方括号不可缺少
69
+ 2. **名称**:简体中文或英文均可,如 `[微笑]` 或 `[Smile]`
70
+ 3. **大小写**:英文首字母大写,如 `[OK]` 而非 `[ok]`
71
+ 4. **后备**:找不到匹配的表情可用 Unicode emoji(😊👍❤️)
72
+ 5. **自然使用**:在合适的场景自然添加,无需每条消息都加
75
73
 
76
74
  ## 完整表情列表
77
75
 
package/index.ts DELETED
@@ -1,26 +0,0 @@
1
- import type { OpenClawPluginApi } from "openclaw/plugin-sdk";
2
- import { emptyPluginConfigSchema } from "openclaw/plugin-sdk";
3
- import { meetPlugin } from "./src/channel.js";
4
- import { setMeetRuntime } from "./src/runtime.js";
5
-
6
- export { monitorMeetProvider } from "./src/monitor.js";
7
- export {
8
- sendMessageMeet,
9
- sendMediaMeet,
10
- resolveMeetMedia,
11
- } from "./src/send.js";
12
- export { probeMeet, clearProbeCache } from "./src/probe.js";
13
- export { meetPlugin } from "./src/channel.js";
14
-
15
- const plugin = {
16
- id: "meet",
17
- name: "Meet",
18
- description: "Meet channel plugin",
19
- configSchema: emptyPluginConfigSchema(),
20
- register(api: OpenClawPluginApi) {
21
- setMeetRuntime(api.runtime);
22
- api.registerChannel({ plugin: meetPlugin });
23
- },
24
- };
25
-
26
- export default plugin;
package/src/accounts.ts DELETED
@@ -1,182 +0,0 @@
1
- import {
2
- DEFAULT_ACCOUNT_ID,
3
- normalizeAccountId,
4
- } from "openclaw/plugin-sdk/account-id"
5
- import { createAccountListHelpers } from "openclaw/plugin-sdk/account-helpers"
6
- import type { ClawdbotConfig } from "openclaw/plugin-sdk"
7
- import type { MeetConfig, MeetAccountConfig, ResolvedMeetAccount } from "./types.js"
8
-
9
- const { listAccountIds: listNestedAccountIds, resolveDefaultAccountId: resolveNestedDefaultAccountId } = createAccountListHelpers("meet")
10
-
11
- const MEET_PREFIX = "meet."
12
-
13
- export function getFlatAccountKey(accountId: string): string {
14
- return `${MEET_PREFIX}${accountId}`
15
- }
16
-
17
- function listFlatAccountIds(cfg: ClawdbotConfig): string[] {
18
- const channels = cfg.channels
19
- if (!channels || typeof channels !== "object") {
20
- return []
21
- }
22
- const ids: string[] = []
23
- for (const key of Object.keys(channels)) {
24
- if (key.startsWith(MEET_PREFIX)) {
25
- const accountId = key.slice(MEET_PREFIX.length)
26
- if (accountId) {
27
- ids.push(accountId)
28
- }
29
- }
30
- }
31
- return ids
32
- }
33
-
34
- function resolveFlatAccountConfig(
35
- cfg: ClawdbotConfig,
36
- accountId: string,
37
- ): MeetAccountConfig | undefined {
38
- const key = `${MEET_PREFIX}${accountId}`
39
- const config = cfg.channels?.[key]
40
- if (!config || typeof config !== "object") {
41
- return undefined
42
- }
43
- return config as MeetAccountConfig
44
- }
45
-
46
- function listMeetAccountIds(cfg: ClawdbotConfig): string[] {
47
- const nestedIds = listNestedAccountIds(cfg)
48
- const flatIds = listFlatAccountIds(cfg)
49
-
50
- if (flatIds.length > 0) {
51
- const filteredNestedIds = nestedIds.filter(id => id !== DEFAULT_ACCOUNT_ID)
52
- const allIds = new Set([...filteredNestedIds, ...flatIds])
53
- return [...allIds].sort((a, b) => a.localeCompare(b))
54
- }
55
-
56
- if (nestedIds.length === 0) {
57
- return [DEFAULT_ACCOUNT_ID]
58
- }
59
- return nestedIds
60
- }
61
-
62
- function resolveDefaultMeetAccountId(cfg: ClawdbotConfig): string {
63
- const flatIds = listFlatAccountIds(cfg)
64
- if (flatIds.length > 0) {
65
- const nestedDefault = resolveNestedDefaultAccountId(cfg)
66
- if (nestedDefault !== DEFAULT_ACCOUNT_ID && flatIds.includes(nestedDefault)) {
67
- return nestedDefault
68
- }
69
- return flatIds[0] ?? DEFAULT_ACCOUNT_ID
70
- }
71
- return resolveNestedDefaultAccountId(cfg)
72
- }
73
-
74
- export { listMeetAccountIds, resolveDefaultMeetAccountId }
75
-
76
- export function isFlatAccountConfig(cfg: ClawdbotConfig, accountId: string): boolean {
77
- if (accountId === DEFAULT_ACCOUNT_ID) {
78
- return false
79
- }
80
- return resolveFlatAccountConfig(cfg, accountId) !== undefined
81
- }
82
-
83
- function resolveAccountConfig(
84
- cfg: ClawdbotConfig,
85
- accountId: string,
86
- ): MeetAccountConfig | undefined {
87
- const nestedConfig = (() => {
88
- const accounts = (cfg.channels?.meet as MeetConfig | undefined)?.accounts
89
- if (!accounts || typeof accounts !== "object") {
90
- return undefined
91
- }
92
- return accounts[accountId] as MeetAccountConfig | undefined
93
- })()
94
- if (nestedConfig) {
95
- return nestedConfig
96
- }
97
- return resolveFlatAccountConfig(cfg, accountId)
98
- }
99
-
100
- function mergeMeetAccountConfig(
101
- cfg: ClawdbotConfig,
102
- accountId: string,
103
- ): MeetConfig {
104
- const meetCfg = cfg.channels?.meet as MeetConfig | undefined
105
- const { accounts: _ignored, ...base } = meetCfg ?? {}
106
- const account = resolveAccountConfig(cfg, accountId) ?? {}
107
-
108
- const baseGroups = (base as MeetConfig).groups ?? {}
109
- const accountGroups = (account as MeetConfig).groups ?? {}
110
- const mergedGroups = { ...baseGroups, ...accountGroups }
111
-
112
- return {
113
- ...base,
114
- ...account,
115
- groups: Object.keys(mergedGroups).length > 0 ? mergedGroups : undefined,
116
- } as MeetConfig
117
- }
118
-
119
- function resolveMeetToken(
120
- cfg: ClawdbotConfig,
121
- accountId: string,
122
- ): {
123
- token: string
124
- endpoint: string
125
- source: "env" | "config" | "none"
126
- } {
127
- const merged = mergeMeetAccountConfig(cfg, accountId)
128
-
129
- const configToken = merged.token || merged.apiToken
130
- if (configToken) {
131
- return {
132
- token: configToken,
133
- endpoint: merged.apiEndpoint ?? process.env.MEET_API_ENDPOINT ?? "https://staging-meet-api.miyachat.com",
134
- source: "config",
135
- }
136
- }
137
-
138
- const envToken = process.env.MEET_API_TOKEN
139
- if (envToken) {
140
- return {
141
- token: envToken,
142
- endpoint: merged.apiEndpoint ?? process.env.MEET_API_ENDPOINT ?? "https://staging-meet-api.miyachat.com",
143
- source: "env",
144
- }
145
- }
146
-
147
- return {
148
- token: "",
149
- endpoint: "",
150
- source: "none",
151
- }
152
- }
153
-
154
- export function resolveMeetAccount(params: {
155
- cfg: ClawdbotConfig
156
- accountId?: string | null
157
- }): ResolvedMeetAccount {
158
- const accountId = normalizeAccountId(params.accountId)
159
- const baseEnabled = params.cfg.channels?.meet?.enabled !== false
160
- const merged = mergeMeetAccountConfig(params.cfg, accountId)
161
- const accountEnabled = merged.enabled !== false
162
- const enabled = baseEnabled && accountEnabled
163
- const tokenResolution = resolveMeetToken(params.cfg, accountId)
164
-
165
- return {
166
- accountId,
167
- enabled,
168
- configured: tokenResolution.source !== "none",
169
- name: (merged as MeetAccountConfig).name?.trim() || undefined,
170
- apiEndpoint: tokenResolution.endpoint,
171
- apiToken: tokenResolution.token,
172
- config: merged,
173
- }
174
- }
175
-
176
- export function listEnabledMeetAccounts(
177
- cfg: ClawdbotConfig,
178
- ): ResolvedMeetAccount[] {
179
- return listMeetAccountIds(cfg)
180
- .map((accountId) => resolveMeetAccount({ cfg, accountId }))
181
- .filter((account) => account.enabled && account.configured)
182
- }