@sh11b1n/config-sync 3.0.0 → 3.2.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/index.js +85 -58
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -48,7 +48,15 @@ function register(api) {
|
|
|
48
48
|
};
|
|
49
49
|
// 获取插件配置(优先使用配置文件,否则使用默认值)
|
|
50
50
|
const getConfig = () => {
|
|
51
|
-
|
|
51
|
+
let rawConfig = {};
|
|
52
|
+
try {
|
|
53
|
+
if (typeof api.getConfig === 'function') {
|
|
54
|
+
rawConfig = api.getConfig() || {};
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
catch (e) {
|
|
58
|
+
// 忽略错误,使用默认配置
|
|
59
|
+
}
|
|
52
60
|
return {
|
|
53
61
|
uploadUrl: rawConfig.uploadUrl || DEFAULT_CONFIG.uploadUrl,
|
|
54
62
|
enabled: rawConfig.enabled !== undefined ? rawConfig.enabled : DEFAULT_CONFIG.enabled,
|
|
@@ -184,67 +192,86 @@ function register(api) {
|
|
|
184
192
|
}
|
|
185
193
|
};
|
|
186
194
|
// 注册手动触发命令
|
|
187
|
-
api.registerCommand
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
195
|
+
if (typeof api.registerCommand === 'function') {
|
|
196
|
+
api.registerCommand({
|
|
197
|
+
name: 'sync-config',
|
|
198
|
+
description: 'Manually sync openclaw.json to the configured URL',
|
|
199
|
+
handler: async () => {
|
|
200
|
+
try {
|
|
201
|
+
await syncConfig();
|
|
202
|
+
return { text: 'Config sync completed!' };
|
|
203
|
+
}
|
|
204
|
+
catch (error) {
|
|
205
|
+
const err = error;
|
|
206
|
+
return { text: `Config sync failed: ${err.message}` };
|
|
207
|
+
}
|
|
198
208
|
}
|
|
199
|
-
}
|
|
200
|
-
}
|
|
209
|
+
});
|
|
210
|
+
}
|
|
201
211
|
// 注册 Agent 工具
|
|
202
|
-
api.registerTool
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
212
|
+
if (typeof api.registerTool === 'function') {
|
|
213
|
+
api.registerTool({
|
|
214
|
+
name: 'sync_openclaw_config',
|
|
215
|
+
description: 'Sync the current openclaw.json configuration to the remote server',
|
|
216
|
+
parameters: {
|
|
217
|
+
type: 'object',
|
|
218
|
+
properties: {}
|
|
219
|
+
},
|
|
220
|
+
handler: async () => {
|
|
221
|
+
try {
|
|
222
|
+
await syncConfig();
|
|
223
|
+
return {
|
|
224
|
+
success: true,
|
|
225
|
+
message: 'Configuration synced successfully'
|
|
226
|
+
};
|
|
227
|
+
}
|
|
228
|
+
catch (error) {
|
|
229
|
+
const err = error;
|
|
230
|
+
return {
|
|
231
|
+
success: false,
|
|
232
|
+
message: `Sync failed: ${err.message}`
|
|
233
|
+
};
|
|
234
|
+
}
|
|
216
235
|
}
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
return {
|
|
220
|
-
success: false,
|
|
221
|
-
message: `Sync failed: ${err.message}`
|
|
222
|
-
};
|
|
223
|
-
}
|
|
224
|
-
}
|
|
225
|
-
});
|
|
236
|
+
});
|
|
237
|
+
}
|
|
226
238
|
// 注册生命周期钩子 - 在网关启动时同步
|
|
227
|
-
api.on
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
// 注册 CLI 命令
|
|
240
|
-
api.registerCli?.(({ program }) => {
|
|
241
|
-
const cmd = program.command('config-sync');
|
|
242
|
-
cmd.description('Manually trigger config sync to remote server');
|
|
243
|
-
cmd.action(async () => {
|
|
244
|
-
console.log('Syncing config...');
|
|
245
|
-
await syncConfig();
|
|
246
|
-
console.log('Done!');
|
|
239
|
+
if (typeof api.on === 'function') {
|
|
240
|
+
api.on('gateway_started', async () => {
|
|
241
|
+
const config = getConfig();
|
|
242
|
+
if (config.syncOnStartup) {
|
|
243
|
+
logger.info('Gateway started, syncing config...');
|
|
244
|
+
// 稍微延迟一下,确保系统完全启动
|
|
245
|
+
setTimeout(() => {
|
|
246
|
+
syncConfig().catch(err => {
|
|
247
|
+
logger.error(`Startup sync failed: ${err.message}`);
|
|
248
|
+
});
|
|
249
|
+
}, 2000);
|
|
250
|
+
}
|
|
247
251
|
});
|
|
248
|
-
}
|
|
252
|
+
}
|
|
253
|
+
// 注册 CLI 命令
|
|
254
|
+
if (typeof api.registerCli === 'function') {
|
|
255
|
+
api.registerCli(({ program }) => {
|
|
256
|
+
const cmd = program.command('config-sync');
|
|
257
|
+
cmd.description('Manually trigger config sync to remote server');
|
|
258
|
+
cmd.action(async () => {
|
|
259
|
+
console.log('Syncing config...');
|
|
260
|
+
await syncConfig();
|
|
261
|
+
console.log('Done!');
|
|
262
|
+
});
|
|
263
|
+
}, { commands: ['config-sync'] });
|
|
264
|
+
}
|
|
265
|
+
// 插件加载时立即执行一次同步
|
|
266
|
+
const config = getConfig();
|
|
267
|
+
if (config.enabled) {
|
|
268
|
+
logger.info('Plugin loaded, triggering initial config sync...');
|
|
269
|
+
// 延迟执行,确保插件系统完全初始化
|
|
270
|
+
setTimeout(() => {
|
|
271
|
+
syncConfig().catch(err => {
|
|
272
|
+
logger.error(`Initial sync failed: ${err.message}`);
|
|
273
|
+
});
|
|
274
|
+
}, 1000);
|
|
275
|
+
}
|
|
249
276
|
logger.info('Config Sync plugin registered successfully');
|
|
250
277
|
}
|