@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.
- package/dist/account-inspect-api.d.ts +2 -0
- package/dist/account-inspect-api.js +4 -0
- package/dist/channel-plugin-api.d.ts +1 -0
- package/dist/channel-plugin-api.js +3 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.js +43 -0
- package/dist/monitor-api.d.ts +1 -0
- package/dist/monitor-api.js +1 -0
- package/dist/probe-api.d.ts +1 -0
- package/dist/probe-api.js +1 -0
- package/dist/runtime-setter-api.d.ts +1 -0
- package/dist/runtime-setter-api.js +2 -0
- package/dist/send-api.d.ts +1 -0
- package/dist/send-api.js +1 -0
- package/dist/src/account-inspect.d.ts +5 -0
- package/dist/src/account-inspect.js +9 -0
- package/dist/src/accounts.d.ts +12 -0
- package/dist/src/accounts.js +134 -0
- package/dist/src/bot.d.ts +15 -0
- package/dist/src/bot.js +355 -0
- package/dist/src/channel.d.ts +3 -0
- package/dist/src/channel.js +402 -0
- package/dist/src/client.d.ts +8 -0
- package/dist/src/client.js +49 -0
- package/dist/src/config-schema.d.ts +82 -0
- package/dist/src/config-schema.js +46 -0
- package/dist/src/media.d.ts +57 -0
- package/dist/src/media.js +140 -0
- package/dist/src/monitor.d.ts +9 -0
- package/dist/src/monitor.js +153 -0
- package/dist/src/outbound.d.ts +2 -0
- package/dist/src/outbound.js +34 -0
- package/dist/src/policy.d.ts +30 -0
- package/dist/src/policy.js +78 -0
- package/dist/src/probe.d.ts +10 -0
- package/dist/src/probe.js +56 -0
- package/dist/src/reply-dispatcher.d.ts +29 -0
- package/dist/src/reply-dispatcher.js +173 -0
- package/dist/src/runtime.d.ts +11 -0
- package/dist/src/runtime.js +6 -0
- package/dist/src/sdk-bridge.d.ts +21 -0
- package/dist/src/sdk-bridge.js +214 -0
- package/dist/src/send.d.ts +60 -0
- package/dist/src/send.js +317 -0
- package/dist/src/targets.d.ts +15 -0
- package/dist/src/targets.js +63 -0
- package/dist/src/types.d.ts +76 -0
- package/dist/src/types.js +1 -0
- package/dist/vitest.config.d.ts +8 -0
- package/dist/vitest.config.js +7 -0
- package/openclaw.plugin.json +116 -0
- package/package.json +18 -17
- package/skills/meet-emojis/SKILL.md +13 -15
- package/index.ts +0 -26
- package/src/accounts.ts +0 -182
- package/src/bot.ts +0 -418
- package/src/channel.ts +0 -396
- package/src/client.ts +0 -63
- package/src/config-schema.ts +0 -50
- package/src/media.ts +0 -198
- package/src/monitor.ts +0 -195
- package/src/outbound.ts +0 -43
- package/src/policy.ts +0 -131
- package/src/probe.ts +0 -75
- package/src/reply-dispatcher.ts +0 -207
- package/src/runtime.ts +0 -14
- package/src/sdk-bridge.ts +0 -268
- package/src/send.ts +0 -363
- package/src/targets.ts +0 -101
- package/src/types.ts +0 -96
package/package.json
CHANGED
|
@@ -1,25 +1,25 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@meet-im/meet",
|
|
3
|
-
"version": "
|
|
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": "
|
|
15
|
-
"
|
|
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
|
-
"
|
|
20
|
-
"
|
|
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.
|
|
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": "
|
|
59
|
-
"zod": "
|
|
58
|
+
"@meet-im/meet-bot-jssdk": "1.0.0",
|
|
59
|
+
"zod": "4.4.3"
|
|
60
60
|
},
|
|
61
61
|
"devDependencies": {
|
|
62
|
-
"@types/node": "
|
|
63
|
-
"@vitest/coverage-v8": "
|
|
64
|
-
"openclaw": "2026.
|
|
65
|
-
"tsx": "
|
|
66
|
-
"typescript": "
|
|
67
|
-
"
|
|
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": "
|
|
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
|
|
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
|
|
8
|
+
# Meet 表情使用指南
|
|
9
9
|
|
|
10
|
-
|
|
11
|
-
**在 Meet 渠道回复消息时,应主动使用表情来增强表达效果。** 表情可以让语气更友好、情感更明确。
|
|
10
|
+
Meet IM 使用微信风格表情,可在消息中自然添加表情来增强表达。
|
|
12
11
|
|
|
13
|
-
##
|
|
12
|
+
## 格式要求
|
|
14
13
|
|
|
15
|
-
|
|
14
|
+
**使用 `[名称]` 格式**,方括号不能省略:
|
|
16
15
|
|
|
17
16
|
```
|
|
18
|
-
|
|
19
|
-
|
|
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.
|
|
71
|
-
2.
|
|
72
|
-
3.
|
|
73
|
-
4.
|
|
74
|
-
5.
|
|
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
|
-
}
|