@cecwxf/wtt 0.1.7 → 0.1.9
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/channel.d.ts +3 -0
- package/dist/channel.d.ts.map +1 -1
- package/dist/channel.js +429 -5
- package/dist/channel.js.map +1 -1
- package/dist/types.d.ts +3 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/dist/plugin-config.d.ts +0 -32
- package/dist/plugin-config.d.ts.map +0 -1
- package/dist/plugin-config.js +0 -268
- package/dist/plugin-config.js.map +0 -1
package/dist/plugin-config.js
DELETED
|
@@ -1,268 +0,0 @@
|
|
|
1
|
-
import { existsSync, readFileSync, statSync } from "node:fs";
|
|
2
|
-
import os from "node:os";
|
|
3
|
-
import path from "node:path";
|
|
4
|
-
const DEFAULT_ACCOUNT_ID = "default";
|
|
5
|
-
const DEFAULT_PLUGIN_CONFIG_RELATIVE = ".openclaw/wtt-plugin.json";
|
|
6
|
-
const CONFIG_ENV_KEY = "WTT_PLUGIN_CONFIG";
|
|
7
|
-
export const WTT_ACCOUNT_FIELD_NAMES = [
|
|
8
|
-
"enabled",
|
|
9
|
-
"name",
|
|
10
|
-
"cloudUrl",
|
|
11
|
-
"agentId",
|
|
12
|
-
"token",
|
|
13
|
-
"e2ePassword",
|
|
14
|
-
"inboundPollIntervalMs",
|
|
15
|
-
"inboundPollLimit",
|
|
16
|
-
"inboundDedupWindowMs",
|
|
17
|
-
"inboundDedupMaxEntries",
|
|
18
|
-
];
|
|
19
|
-
let pluginConfigCache;
|
|
20
|
-
function isRecord(value) {
|
|
21
|
-
return Boolean(value) && typeof value === "object" && !Array.isArray(value);
|
|
22
|
-
}
|
|
23
|
-
function hasMeaningfulAccountConfig(raw) {
|
|
24
|
-
if (!raw)
|
|
25
|
-
return false;
|
|
26
|
-
return Boolean(raw.agentId || raw.token || raw.cloudUrl || raw.name || raw.enabled !== undefined);
|
|
27
|
-
}
|
|
28
|
-
function pickAccountConfig(raw) {
|
|
29
|
-
if (!isRecord(raw))
|
|
30
|
-
return {};
|
|
31
|
-
const picked = {};
|
|
32
|
-
for (const field of WTT_ACCOUNT_FIELD_NAMES) {
|
|
33
|
-
if (Object.prototype.hasOwnProperty.call(raw, field)) {
|
|
34
|
-
picked[field] = raw[field];
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
return picked;
|
|
38
|
-
}
|
|
39
|
-
function trimOrUndefined(raw) {
|
|
40
|
-
if (typeof raw !== "string")
|
|
41
|
-
return undefined;
|
|
42
|
-
const trimmed = raw.trim();
|
|
43
|
-
return trimmed.length > 0 ? trimmed : undefined;
|
|
44
|
-
}
|
|
45
|
-
function expandHome(rawPath) {
|
|
46
|
-
const trimmed = rawPath.trim();
|
|
47
|
-
if (!trimmed.startsWith("~"))
|
|
48
|
-
return trimmed;
|
|
49
|
-
if (trimmed === "~")
|
|
50
|
-
return os.homedir();
|
|
51
|
-
if (trimmed.startsWith("~/"))
|
|
52
|
-
return path.join(os.homedir(), trimmed.slice(2));
|
|
53
|
-
return trimmed;
|
|
54
|
-
}
|
|
55
|
-
function resolvePluginConfigPath() {
|
|
56
|
-
const override = trimOrUndefined(process.env[CONFIG_ENV_KEY]);
|
|
57
|
-
if (override) {
|
|
58
|
-
return {
|
|
59
|
-
path: expandHome(override),
|
|
60
|
-
envOverride: true,
|
|
61
|
-
};
|
|
62
|
-
}
|
|
63
|
-
return {
|
|
64
|
-
path: path.join(os.homedir(), DEFAULT_PLUGIN_CONFIG_RELATIVE),
|
|
65
|
-
envOverride: false,
|
|
66
|
-
};
|
|
67
|
-
}
|
|
68
|
-
function createEmptySection() {
|
|
69
|
-
return {};
|
|
70
|
-
}
|
|
71
|
-
function normalizePluginConfigSection(raw) {
|
|
72
|
-
if (!isRecord(raw))
|
|
73
|
-
return createEmptySection();
|
|
74
|
-
const section = {
|
|
75
|
-
...pickAccountConfig(raw),
|
|
76
|
-
};
|
|
77
|
-
const defaultAccountId = trimOrUndefined(raw.defaultAccountId);
|
|
78
|
-
if (defaultAccountId)
|
|
79
|
-
section.defaultAccountId = defaultAccountId;
|
|
80
|
-
if (isRecord(raw.accounts)) {
|
|
81
|
-
const accounts = {};
|
|
82
|
-
for (const [accountId, accountRaw] of Object.entries(raw.accounts)) {
|
|
83
|
-
if (!accountId.trim())
|
|
84
|
-
continue;
|
|
85
|
-
if (!isRecord(accountRaw))
|
|
86
|
-
continue;
|
|
87
|
-
accounts[accountId] = pickAccountConfig(accountRaw);
|
|
88
|
-
}
|
|
89
|
-
if (Object.keys(accounts).length > 0) {
|
|
90
|
-
section.accounts = accounts;
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
return section;
|
|
94
|
-
}
|
|
95
|
-
function parsePluginConfigFile() {
|
|
96
|
-
const pathMeta = resolvePluginConfigPath();
|
|
97
|
-
const fallbackStatus = {
|
|
98
|
-
path: pathMeta.path,
|
|
99
|
-
envOverride: pathMeta.envOverride,
|
|
100
|
-
loaded: false,
|
|
101
|
-
exists: false,
|
|
102
|
-
defaultAccountId: DEFAULT_ACCOUNT_ID,
|
|
103
|
-
};
|
|
104
|
-
if (!existsSync(pathMeta.path)) {
|
|
105
|
-
return {
|
|
106
|
-
section: createEmptySection(),
|
|
107
|
-
fileStatus: fallbackStatus,
|
|
108
|
-
};
|
|
109
|
-
}
|
|
110
|
-
let stat;
|
|
111
|
-
try {
|
|
112
|
-
stat = statSync(pathMeta.path);
|
|
113
|
-
}
|
|
114
|
-
catch (err) {
|
|
115
|
-
const msg = err instanceof Error ? err.message : String(err);
|
|
116
|
-
return {
|
|
117
|
-
section: createEmptySection(),
|
|
118
|
-
fileStatus: {
|
|
119
|
-
...fallbackStatus,
|
|
120
|
-
exists: true,
|
|
121
|
-
error: `stat_failed: ${msg}`,
|
|
122
|
-
},
|
|
123
|
-
};
|
|
124
|
-
}
|
|
125
|
-
const cacheKey = `${pathMeta.path}|${pathMeta.envOverride ? "env" : "default"}`;
|
|
126
|
-
if (pluginConfigCache && pluginConfigCache.cacheKey === cacheKey && pluginConfigCache.mtimeMs === stat.mtimeMs) {
|
|
127
|
-
return pluginConfigCache.parsed;
|
|
128
|
-
}
|
|
129
|
-
try {
|
|
130
|
-
const raw = readFileSync(pathMeta.path, "utf8");
|
|
131
|
-
const parsed = normalizePluginConfigSection(JSON.parse(raw));
|
|
132
|
-
const defaultAccountId = trimOrUndefined(parsed.defaultAccountId) ?? DEFAULT_ACCOUNT_ID;
|
|
133
|
-
const result = {
|
|
134
|
-
section: parsed,
|
|
135
|
-
fileStatus: {
|
|
136
|
-
...fallbackStatus,
|
|
137
|
-
loaded: true,
|
|
138
|
-
exists: true,
|
|
139
|
-
defaultAccountId,
|
|
140
|
-
},
|
|
141
|
-
};
|
|
142
|
-
pluginConfigCache = {
|
|
143
|
-
cacheKey,
|
|
144
|
-
mtimeMs: stat.mtimeMs,
|
|
145
|
-
parsed: result,
|
|
146
|
-
};
|
|
147
|
-
return result;
|
|
148
|
-
}
|
|
149
|
-
catch (err) {
|
|
150
|
-
const msg = err instanceof Error ? err.message : String(err);
|
|
151
|
-
const result = {
|
|
152
|
-
section: createEmptySection(),
|
|
153
|
-
fileStatus: {
|
|
154
|
-
...fallbackStatus,
|
|
155
|
-
exists: true,
|
|
156
|
-
error: `parse_failed: ${msg}`,
|
|
157
|
-
},
|
|
158
|
-
};
|
|
159
|
-
pluginConfigCache = {
|
|
160
|
-
cacheKey,
|
|
161
|
-
mtimeMs: stat.mtimeMs,
|
|
162
|
-
parsed: result,
|
|
163
|
-
};
|
|
164
|
-
return result;
|
|
165
|
-
}
|
|
166
|
-
}
|
|
167
|
-
function extractAccountMap(section) {
|
|
168
|
-
const accountsFromConfig = section?.accounts ?? {};
|
|
169
|
-
const ids = Object.keys(accountsFromConfig);
|
|
170
|
-
if (ids.length > 0) {
|
|
171
|
-
return {
|
|
172
|
-
accounts: { ...accountsFromConfig },
|
|
173
|
-
sourceById: Object.fromEntries(ids.map((id) => [id, `accounts.${id}`])),
|
|
174
|
-
};
|
|
175
|
-
}
|
|
176
|
-
const { accounts: _accounts, defaultAccountId: _defaultAccountId, ...flat } = section ?? {};
|
|
177
|
-
if (hasMeaningfulAccountConfig(flat)) {
|
|
178
|
-
return {
|
|
179
|
-
accounts: {
|
|
180
|
-
[DEFAULT_ACCOUNT_ID]: flat,
|
|
181
|
-
},
|
|
182
|
-
sourceById: {
|
|
183
|
-
[DEFAULT_ACCOUNT_ID]: "flat",
|
|
184
|
-
},
|
|
185
|
-
};
|
|
186
|
-
}
|
|
187
|
-
return { accounts: {}, sourceById: {} };
|
|
188
|
-
}
|
|
189
|
-
function mergeAccount(base, overlay) {
|
|
190
|
-
return {
|
|
191
|
-
...(base ?? {}),
|
|
192
|
-
...(overlay ?? {}),
|
|
193
|
-
};
|
|
194
|
-
}
|
|
195
|
-
function resolveFieldSources(base, overlay) {
|
|
196
|
-
const sources = {};
|
|
197
|
-
for (const field of WTT_ACCOUNT_FIELD_NAMES) {
|
|
198
|
-
if (overlay && Object.prototype.hasOwnProperty.call(overlay, field)) {
|
|
199
|
-
sources[field] = "file";
|
|
200
|
-
continue;
|
|
201
|
-
}
|
|
202
|
-
if (base && Object.prototype.hasOwnProperty.call(base, field)) {
|
|
203
|
-
sources[field] = "openclaw";
|
|
204
|
-
}
|
|
205
|
-
}
|
|
206
|
-
return sources;
|
|
207
|
-
}
|
|
208
|
-
function toSourceLabel(prefix, source, accountId) {
|
|
209
|
-
if (source === "flat") {
|
|
210
|
-
return prefix === "openclaw" ? "channels.wtt" : `wtt-plugin.json(${accountId})`;
|
|
211
|
-
}
|
|
212
|
-
if (source.startsWith("accounts.")) {
|
|
213
|
-
const suffix = source.slice("accounts.".length);
|
|
214
|
-
return prefix === "openclaw"
|
|
215
|
-
? `channels.wtt.accounts.${suffix}`
|
|
216
|
-
: `wtt-plugin.json.accounts.${suffix}`;
|
|
217
|
-
}
|
|
218
|
-
return prefix;
|
|
219
|
-
}
|
|
220
|
-
function combineSourceLabel(baseLabel, fileLabel) {
|
|
221
|
-
if (baseLabel && fileLabel)
|
|
222
|
-
return `${baseLabel} + ${fileLabel}`;
|
|
223
|
-
return fileLabel ?? baseLabel ?? "runtime";
|
|
224
|
-
}
|
|
225
|
-
export function resolveEffectiveWTTConfig(cfg) {
|
|
226
|
-
const openclawSection = cfg?.channels?.wtt;
|
|
227
|
-
const { section: pluginSection, fileStatus } = parsePluginConfigFile();
|
|
228
|
-
const openclaw = extractAccountMap(openclawSection);
|
|
229
|
-
const plugin = extractAccountMap(pluginSection);
|
|
230
|
-
const defaultAccountId = trimOrUndefined(pluginSection.defaultAccountId) ?? DEFAULT_ACCOUNT_ID;
|
|
231
|
-
const mergedIds = new Set([
|
|
232
|
-
...Object.keys(openclaw.accounts),
|
|
233
|
-
...Object.keys(plugin.accounts),
|
|
234
|
-
]);
|
|
235
|
-
const accounts = {};
|
|
236
|
-
const accountSources = {};
|
|
237
|
-
const accountFieldSources = {};
|
|
238
|
-
for (const accountId of mergedIds) {
|
|
239
|
-
const base = openclaw.accounts[accountId];
|
|
240
|
-
const overlay = plugin.accounts[accountId];
|
|
241
|
-
accounts[accountId] = mergeAccount(base, overlay);
|
|
242
|
-
const baseLabel = base ? toSourceLabel("openclaw", openclaw.sourceById[accountId] ?? "", accountId) : undefined;
|
|
243
|
-
const fileLabel = overlay ? toSourceLabel("file", plugin.sourceById[accountId] ?? "", accountId) : undefined;
|
|
244
|
-
accountSources[accountId] = combineSourceLabel(baseLabel, fileLabel);
|
|
245
|
-
accountFieldSources[accountId] = resolveFieldSources(base, overlay);
|
|
246
|
-
}
|
|
247
|
-
// If file declares a default account via defaultAccountId but omits content,
|
|
248
|
-
// keep it discoverable as an account id placeholder for compatibility.
|
|
249
|
-
if (!accounts[defaultAccountId] && defaultAccountId === DEFAULT_ACCOUNT_ID && hasMeaningfulAccountConfig(pluginSection)) {
|
|
250
|
-
const { accounts: _accounts, defaultAccountId: _defaultAccountId, ...flat } = pluginSection;
|
|
251
|
-
accounts[defaultAccountId] = mergeAccount(openclaw.accounts[defaultAccountId], flat);
|
|
252
|
-
accountSources[defaultAccountId] = combineSourceLabel(openclaw.accounts[defaultAccountId]
|
|
253
|
-
? toSourceLabel("openclaw", openclaw.sourceById[defaultAccountId] ?? "", defaultAccountId)
|
|
254
|
-
: undefined, "wtt-plugin.json(default)");
|
|
255
|
-
accountFieldSources[defaultAccountId] = resolveFieldSources(openclaw.accounts[defaultAccountId], flat);
|
|
256
|
-
}
|
|
257
|
-
return {
|
|
258
|
-
defaultAccountId,
|
|
259
|
-
accounts,
|
|
260
|
-
accountSources,
|
|
261
|
-
accountFieldSources,
|
|
262
|
-
fileStatus,
|
|
263
|
-
};
|
|
264
|
-
}
|
|
265
|
-
export function resetPluginConfigCacheForTests() {
|
|
266
|
-
pluginConfigCache = undefined;
|
|
267
|
-
}
|
|
268
|
-
//# sourceMappingURL=plugin-config.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"plugin-config.js","sourceRoot":"","sources":["../src/plugin-config.ts"],"names":[],"mappings":"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"}
|