@meetlobster/openclaw-plugin 1.3.3 → 1.3.5
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/openclaw.plugin.json +136 -0
- package/dist/services/lobster-service.d.ts +0 -1
- package/dist/services/lobster-service.js +2 -97
- package/dist/services/lobster-service.js.map +1 -1
- package/dist/services/worker-spawn.d.ts +6 -0
- package/dist/services/worker-spawn.js +106 -0
- package/dist/services/worker-spawn.js.map +1 -0
- package/package.json +5 -24
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "lobster-external",
|
|
3
|
+
"name": "Lobster",
|
|
4
|
+
"version": "1.3.0",
|
|
5
|
+
"description": "External Lobster plugin for OpenClaw chat-native meetings",
|
|
6
|
+
"main": "./index.js",
|
|
7
|
+
"configSchema": {
|
|
8
|
+
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
9
|
+
"title": "LobsterOpenClawPluginConfig",
|
|
10
|
+
"type": "object",
|
|
11
|
+
"additionalProperties": false,
|
|
12
|
+
"properties": {
|
|
13
|
+
"workerBaseUrl": {
|
|
14
|
+
"type": "string",
|
|
15
|
+
"minLength": 1
|
|
16
|
+
},
|
|
17
|
+
"workerHost": {
|
|
18
|
+
"type": "string",
|
|
19
|
+
"minLength": 1
|
|
20
|
+
},
|
|
21
|
+
"workerPort": {
|
|
22
|
+
"type": "integer",
|
|
23
|
+
"minimum": 1,
|
|
24
|
+
"maximum": 65535
|
|
25
|
+
},
|
|
26
|
+
"adapterToken": {
|
|
27
|
+
"type": "string",
|
|
28
|
+
"minLength": 8
|
|
29
|
+
},
|
|
30
|
+
"workerEntry": {
|
|
31
|
+
"type": "string",
|
|
32
|
+
"minLength": 1
|
|
33
|
+
},
|
|
34
|
+
"autoSpawnWorker": {
|
|
35
|
+
"type": "boolean"
|
|
36
|
+
},
|
|
37
|
+
"hookUrl": {
|
|
38
|
+
"type": "string",
|
|
39
|
+
"minLength": 1
|
|
40
|
+
},
|
|
41
|
+
"hooksToken": {
|
|
42
|
+
"type": "string",
|
|
43
|
+
"minLength": 8
|
|
44
|
+
},
|
|
45
|
+
"recallSigningSecret": {
|
|
46
|
+
"type": "string",
|
|
47
|
+
"minLength": 8
|
|
48
|
+
},
|
|
49
|
+
"recallApiKey": {
|
|
50
|
+
"type": "string",
|
|
51
|
+
"minLength": 1
|
|
52
|
+
},
|
|
53
|
+
"recallApiBaseUrl": {
|
|
54
|
+
"type": "string",
|
|
55
|
+
"minLength": 1
|
|
56
|
+
},
|
|
57
|
+
"cloudflaredBinary": {
|
|
58
|
+
"type": "string",
|
|
59
|
+
"minLength": 1
|
|
60
|
+
},
|
|
61
|
+
"cloudflaredEnabled": {
|
|
62
|
+
"type": "boolean"
|
|
63
|
+
},
|
|
64
|
+
"transcriptQuietMs": {
|
|
65
|
+
"type": "integer",
|
|
66
|
+
"minimum": 1000
|
|
67
|
+
},
|
|
68
|
+
"defaultVisibilityMode": {
|
|
69
|
+
"type": "string",
|
|
70
|
+
"enum": [
|
|
71
|
+
"private",
|
|
72
|
+
"shared"
|
|
73
|
+
]
|
|
74
|
+
},
|
|
75
|
+
"ambiguityFallbackMode": {
|
|
76
|
+
"type": "string",
|
|
77
|
+
"enum": [
|
|
78
|
+
"private",
|
|
79
|
+
"shared"
|
|
80
|
+
]
|
|
81
|
+
},
|
|
82
|
+
"defaultBotName": {
|
|
83
|
+
"type": "string",
|
|
84
|
+
"minLength": 1
|
|
85
|
+
},
|
|
86
|
+
"intelligenceFlushMs": {
|
|
87
|
+
"type": "integer",
|
|
88
|
+
"minimum": 1000
|
|
89
|
+
},
|
|
90
|
+
"intelligenceMaxChunks": {
|
|
91
|
+
"type": "integer",
|
|
92
|
+
"minimum": 1
|
|
93
|
+
},
|
|
94
|
+
"intelligenceContextWindow": {
|
|
95
|
+
"type": "integer",
|
|
96
|
+
"minimum": 1
|
|
97
|
+
},
|
|
98
|
+
"workspaceDir": {
|
|
99
|
+
"type": "string"
|
|
100
|
+
},
|
|
101
|
+
"intelligenceTimeoutMs": {
|
|
102
|
+
"type": "integer",
|
|
103
|
+
"minimum": 1000
|
|
104
|
+
},
|
|
105
|
+
"intelligenceThinkLevel": {
|
|
106
|
+
"type": "string"
|
|
107
|
+
},
|
|
108
|
+
"useEmbeddedAgent": {
|
|
109
|
+
"type": "boolean"
|
|
110
|
+
},
|
|
111
|
+
"wakeMainSession": {
|
|
112
|
+
"type": "boolean"
|
|
113
|
+
}
|
|
114
|
+
},
|
|
115
|
+
"required": [
|
|
116
|
+
"adapterToken",
|
|
117
|
+
"hookUrl",
|
|
118
|
+
"hooksToken",
|
|
119
|
+
"recallSigningSecret"
|
|
120
|
+
]
|
|
121
|
+
},
|
|
122
|
+
"permissions": [
|
|
123
|
+
"commands",
|
|
124
|
+
"resources",
|
|
125
|
+
"rpc",
|
|
126
|
+
"services",
|
|
127
|
+
"network",
|
|
128
|
+
"process"
|
|
129
|
+
],
|
|
130
|
+
"commands": [
|
|
131
|
+
{
|
|
132
|
+
"name": "lobster",
|
|
133
|
+
"description": "Control Lobster meeting assistant"
|
|
134
|
+
}
|
|
135
|
+
]
|
|
136
|
+
}
|
|
@@ -1,12 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
3
|
exports.LobsterService = void 0;
|
|
7
|
-
const
|
|
8
|
-
const node_fs_1 = __importDefault(require("node:fs"));
|
|
9
|
-
const node_path_1 = __importDefault(require("node:path"));
|
|
4
|
+
const worker_spawn_1 = require("./worker-spawn");
|
|
10
5
|
const REQUEST_TIMEOUT_MS = 6000;
|
|
11
6
|
function sleep(ms) {
|
|
12
7
|
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
@@ -153,100 +148,10 @@ class LobsterService {
|
|
|
153
148
|
if (this.workerProcess && !this.workerProcess.killed) {
|
|
154
149
|
return;
|
|
155
150
|
}
|
|
156
|
-
|
|
157
|
-
host: this.config.workerHost,
|
|
158
|
-
port: this.config.workerPort,
|
|
159
|
-
adapterToken: this.config.adapterToken,
|
|
160
|
-
hookUrl: this.config.hookUrl,
|
|
161
|
-
hooksToken: this.config.hooksToken,
|
|
162
|
-
recallSigningSecret: this.config.recallSigningSecret,
|
|
163
|
-
recallApiKey: this.config.recallApiKey,
|
|
164
|
-
recallApiBaseUrl: this.config.recallApiBaseUrl,
|
|
165
|
-
sessionTokenTtlMs: 4 * 60 * 60 * 1000,
|
|
166
|
-
maxPayloadBytes: 256_000,
|
|
167
|
-
queueMax: 500,
|
|
168
|
-
maxEventsPerMinute: 180,
|
|
169
|
-
retryCount: 3,
|
|
170
|
-
retryBackoffMs: 500,
|
|
171
|
-
transcriptQuietMs: this.config.transcriptQuietMs,
|
|
172
|
-
cloudflaredBinary: this.config.cloudflaredBinary,
|
|
173
|
-
cloudflaredEnabled: this.config.cloudflaredEnabled,
|
|
174
|
-
cloudflaredTargetUrl: `http://${this.config.workerHost}:${this.config.workerPort}`,
|
|
175
|
-
defaultVisibilityMode: this.config.defaultVisibilityMode,
|
|
176
|
-
ambiguityFallbackMode: this.config.ambiguityFallbackMode,
|
|
177
|
-
defaultBotName: this.config.defaultBotName,
|
|
178
|
-
intelligenceFlushMs: this.config.intelligenceFlushMs,
|
|
179
|
-
intelligenceMaxChunks: this.config.intelligenceMaxChunks,
|
|
180
|
-
intelligenceContextWindow: this.config.intelligenceContextWindow,
|
|
181
|
-
workspaceDir: this.config.workspaceDir,
|
|
182
|
-
intelligenceTimeoutMs: this.config.intelligenceTimeoutMs,
|
|
183
|
-
intelligenceThinkLevel: this.config.intelligenceThinkLevel,
|
|
184
|
-
useEmbeddedAgent: this.config.useEmbeddedAgent,
|
|
185
|
-
wakeMainSession: this.config.wakeMainSession,
|
|
186
|
-
};
|
|
187
|
-
const workerEntry = node_path_1.default.resolve(this.config.workerEntry);
|
|
188
|
-
this.logger.info("Starting Lobster worker", { workerEntry });
|
|
189
|
-
const child = (0, node_child_process_1.spawn)(process.execPath, [workerEntry], {
|
|
190
|
-
env: {
|
|
191
|
-
...process.env,
|
|
192
|
-
LOBSTER_WORKER_CONFIG_JSON: JSON.stringify(workerConfig),
|
|
193
|
-
OPENCLAW_ROOT: process.env.OPENCLAW_ROOT ?? this.resolveOpenClawRoot(),
|
|
194
|
-
},
|
|
195
|
-
stdio: "pipe",
|
|
196
|
-
});
|
|
197
|
-
child.stdout.on("data", (chunk) => {
|
|
198
|
-
this.logger.info("[lobster-worker]" + String(chunk).trim());
|
|
199
|
-
});
|
|
200
|
-
child.stderr.on("data", (chunk) => {
|
|
201
|
-
this.logger.warn("[lobster-worker]" + String(chunk).trim());
|
|
202
|
-
});
|
|
203
|
-
child.on("exit", (code, signal) => {
|
|
204
|
-
this.logger.warn("Lobster worker exited", { code, signal });
|
|
151
|
+
this.workerProcess = (0, worker_spawn_1.spawnWorkerProcess)(this.config, this.logger, () => {
|
|
205
152
|
this.workerProcess = null;
|
|
206
153
|
this.started = false;
|
|
207
154
|
});
|
|
208
|
-
this.workerProcess = child;
|
|
209
|
-
}
|
|
210
|
-
resolveOpenClawRoot() {
|
|
211
|
-
// The plugin runs inside the OpenClaw gateway process.
|
|
212
|
-
// Traverse up from process.argv[1] (the openclaw binary entry) to find the package root.
|
|
213
|
-
// Resolve symlinks first — npm global installs create a symlink at /usr/bin/openclaw
|
|
214
|
-
// pointing to /usr/lib/node_modules/openclaw/openclaw.mjs.
|
|
215
|
-
const rawArgv1 = process.argv[1];
|
|
216
|
-
let resolvedArgv1;
|
|
217
|
-
if (rawArgv1) {
|
|
218
|
-
try {
|
|
219
|
-
resolvedArgv1 = node_fs_1.default.realpathSync(rawArgv1);
|
|
220
|
-
}
|
|
221
|
-
catch {
|
|
222
|
-
resolvedArgv1 = rawArgv1;
|
|
223
|
-
}
|
|
224
|
-
}
|
|
225
|
-
const candidates = [
|
|
226
|
-
resolvedArgv1 ? node_path_1.default.dirname(resolvedArgv1) : undefined,
|
|
227
|
-
rawArgv1 ? node_path_1.default.dirname(rawArgv1) : undefined,
|
|
228
|
-
process.cwd(),
|
|
229
|
-
__dirname,
|
|
230
|
-
].filter(Boolean);
|
|
231
|
-
for (const start of candidates) {
|
|
232
|
-
let dir = start;
|
|
233
|
-
for (;;) {
|
|
234
|
-
const pkgPath = node_path_1.default.join(dir, "package.json");
|
|
235
|
-
try {
|
|
236
|
-
if (node_fs_1.default.existsSync(pkgPath)) {
|
|
237
|
-
const pkg = JSON.parse(node_fs_1.default.readFileSync(pkgPath, "utf8"));
|
|
238
|
-
if (pkg.name === "openclaw")
|
|
239
|
-
return dir;
|
|
240
|
-
}
|
|
241
|
-
}
|
|
242
|
-
catch { /* ignore */ }
|
|
243
|
-
const parent = node_path_1.default.dirname(dir);
|
|
244
|
-
if (parent === dir)
|
|
245
|
-
break;
|
|
246
|
-
dir = parent;
|
|
247
|
-
}
|
|
248
|
-
}
|
|
249
|
-
return "";
|
|
250
155
|
}
|
|
251
156
|
async waitForHealth() {
|
|
252
157
|
const deadline = Date.now() + 12_000;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lobster-service.js","sourceRoot":"","sources":["../../services/lobster-service.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"lobster-service.js","sourceRoot":"","sources":["../../services/lobster-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { type ChildProcessWithoutNullStreams } from "node:child_process";
|
|
2
|
+
import type { WorkerConfig, PluginConfig } from "@meetlobster/shared";
|
|
3
|
+
import type { OpenClawLogger } from "../types/lobster";
|
|
4
|
+
export declare function buildWorkerConfig(config: PluginConfig): WorkerConfig;
|
|
5
|
+
export declare function resolveOpenClawRoot(): string;
|
|
6
|
+
export declare function spawnWorkerProcess(config: PluginConfig, logger: OpenClawLogger, onExit: () => void): ChildProcessWithoutNullStreams;
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.buildWorkerConfig = buildWorkerConfig;
|
|
7
|
+
exports.resolveOpenClawRoot = resolveOpenClawRoot;
|
|
8
|
+
exports.spawnWorkerProcess = spawnWorkerProcess;
|
|
9
|
+
const node_child_process_1 = require("node:child_process");
|
|
10
|
+
const node_fs_1 = __importDefault(require("node:fs"));
|
|
11
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
12
|
+
function buildWorkerConfig(config) {
|
|
13
|
+
return {
|
|
14
|
+
host: config.workerHost,
|
|
15
|
+
port: config.workerPort,
|
|
16
|
+
adapterToken: config.adapterToken,
|
|
17
|
+
hookUrl: config.hookUrl,
|
|
18
|
+
hooksToken: config.hooksToken,
|
|
19
|
+
recallSigningSecret: config.recallSigningSecret,
|
|
20
|
+
recallApiKey: config.recallApiKey,
|
|
21
|
+
recallApiBaseUrl: config.recallApiBaseUrl,
|
|
22
|
+
sessionTokenTtlMs: 4 * 60 * 60 * 1000,
|
|
23
|
+
maxPayloadBytes: 256_000,
|
|
24
|
+
queueMax: 500,
|
|
25
|
+
maxEventsPerMinute: 180,
|
|
26
|
+
retryCount: 3,
|
|
27
|
+
retryBackoffMs: 500,
|
|
28
|
+
transcriptQuietMs: config.transcriptQuietMs,
|
|
29
|
+
cloudflaredBinary: config.cloudflaredBinary,
|
|
30
|
+
cloudflaredEnabled: config.cloudflaredEnabled,
|
|
31
|
+
cloudflaredTargetUrl: `http://${config.workerHost}:${config.workerPort}`,
|
|
32
|
+
defaultVisibilityMode: config.defaultVisibilityMode,
|
|
33
|
+
ambiguityFallbackMode: config.ambiguityFallbackMode,
|
|
34
|
+
defaultBotName: config.defaultBotName,
|
|
35
|
+
intelligenceFlushMs: config.intelligenceFlushMs,
|
|
36
|
+
intelligenceMaxChunks: config.intelligenceMaxChunks,
|
|
37
|
+
intelligenceContextWindow: config.intelligenceContextWindow,
|
|
38
|
+
workspaceDir: config.workspaceDir,
|
|
39
|
+
intelligenceTimeoutMs: config.intelligenceTimeoutMs,
|
|
40
|
+
intelligenceThinkLevel: config.intelligenceThinkLevel,
|
|
41
|
+
useEmbeddedAgent: config.useEmbeddedAgent,
|
|
42
|
+
wakeMainSession: config.wakeMainSession,
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
function resolveOpenClawRoot() {
|
|
46
|
+
const rawArgv1 = process.argv[1];
|
|
47
|
+
let resolvedArgv1;
|
|
48
|
+
if (rawArgv1) {
|
|
49
|
+
try {
|
|
50
|
+
resolvedArgv1 = node_fs_1.default.realpathSync(rawArgv1);
|
|
51
|
+
}
|
|
52
|
+
catch {
|
|
53
|
+
resolvedArgv1 = rawArgv1;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
const candidates = [
|
|
57
|
+
resolvedArgv1 ? node_path_1.default.dirname(resolvedArgv1) : undefined,
|
|
58
|
+
rawArgv1 ? node_path_1.default.dirname(rawArgv1) : undefined,
|
|
59
|
+
process.cwd(),
|
|
60
|
+
__dirname,
|
|
61
|
+
].filter(Boolean);
|
|
62
|
+
for (const start of candidates) {
|
|
63
|
+
let dir = start;
|
|
64
|
+
for (;;) {
|
|
65
|
+
const pkgPath = node_path_1.default.join(dir, "package.json");
|
|
66
|
+
try {
|
|
67
|
+
if (node_fs_1.default.existsSync(pkgPath)) {
|
|
68
|
+
const pkg = JSON.parse(node_fs_1.default.readFileSync(pkgPath, "utf8"));
|
|
69
|
+
if (pkg.name === "openclaw")
|
|
70
|
+
return dir;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
catch { /* ignore */ }
|
|
74
|
+
const parent = node_path_1.default.dirname(dir);
|
|
75
|
+
if (parent === dir)
|
|
76
|
+
break;
|
|
77
|
+
dir = parent;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
return "";
|
|
81
|
+
}
|
|
82
|
+
function spawnWorkerProcess(config, logger, onExit) {
|
|
83
|
+
const workerConfig = buildWorkerConfig(config);
|
|
84
|
+
const workerEntry = node_path_1.default.resolve(config.workerEntry);
|
|
85
|
+
logger.info("Starting Lobster worker", { workerEntry });
|
|
86
|
+
const child = (0, node_child_process_1.spawn)(process.execPath, [workerEntry], {
|
|
87
|
+
env: {
|
|
88
|
+
...process.env,
|
|
89
|
+
LOBSTER_WORKER_CONFIG_JSON: JSON.stringify(workerConfig),
|
|
90
|
+
OPENCLAW_ROOT: process.env.OPENCLAW_ROOT ?? resolveOpenClawRoot(),
|
|
91
|
+
},
|
|
92
|
+
stdio: "pipe",
|
|
93
|
+
});
|
|
94
|
+
child.stdout.on("data", (chunk) => {
|
|
95
|
+
logger.info("[lobster-worker]" + String(chunk).trim());
|
|
96
|
+
});
|
|
97
|
+
child.stderr.on("data", (chunk) => {
|
|
98
|
+
logger.warn("[lobster-worker]" + String(chunk).trim());
|
|
99
|
+
});
|
|
100
|
+
child.on("exit", (code, signal) => {
|
|
101
|
+
logger.warn("Lobster worker exited", { code, signal });
|
|
102
|
+
onExit();
|
|
103
|
+
});
|
|
104
|
+
return child;
|
|
105
|
+
}
|
|
106
|
+
//# sourceMappingURL=worker-spawn.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worker-spawn.js","sourceRoot":"","sources":["../../services/worker-spawn.ts"],"names":[],"mappings":";;;;;AAMA,8CAgCC;AAED,kDAmCC;AAED,gDAgCC;AA7GD,2DAAgF;AAChF,sDAAyB;AACzB,0DAA6B;AAI7B,SAAgB,iBAAiB,CAAC,MAAoB;IACpD,OAAO;QACL,IAAI,EAAE,MAAM,CAAC,UAAU;QACvB,IAAI,EAAE,MAAM,CAAC,UAAU;QACvB,YAAY,EAAE,MAAM,CAAC,YAAY;QACjC,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,mBAAmB,EAAE,MAAM,CAAC,mBAAmB;QAC/C,YAAY,EAAE,MAAM,CAAC,YAAY;QACjC,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;QACzC,iBAAiB,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI;QACrC,eAAe,EAAE,OAAO;QACxB,QAAQ,EAAE,GAAG;QACb,kBAAkB,EAAE,GAAG;QACvB,UAAU,EAAE,CAAC;QACb,cAAc,EAAE,GAAG;QACnB,iBAAiB,EAAE,MAAM,CAAC,iBAAiB;QAC3C,iBAAiB,EAAE,MAAM,CAAC,iBAAiB;QAC3C,kBAAkB,EAAE,MAAM,CAAC,kBAAkB;QAC7C,oBAAoB,EAAE,UAAU,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,UAAU,EAAE;QACxE,qBAAqB,EAAE,MAAM,CAAC,qBAAqB;QACnD,qBAAqB,EAAE,MAAM,CAAC,qBAAqB;QACnD,cAAc,EAAE,MAAM,CAAC,cAAc;QACrC,mBAAmB,EAAE,MAAM,CAAC,mBAAmB;QAC/C,qBAAqB,EAAE,MAAM,CAAC,qBAAqB;QACnD,yBAAyB,EAAE,MAAM,CAAC,yBAAyB;QAC3D,YAAY,EAAE,MAAM,CAAC,YAAY;QACjC,qBAAqB,EAAE,MAAM,CAAC,qBAAqB;QACnD,sBAAsB,EAAE,MAAM,CAAC,sBAAsB;QACrD,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;QACzC,eAAe,EAAE,MAAM,CAAC,eAAe;KACxC,CAAC;AACJ,CAAC;AAED,SAAgB,mBAAmB;IACjC,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACjC,IAAI,aAAiC,CAAC;IACtC,IAAI,QAAQ,EAAE,CAAC;QACb,IAAI,CAAC;YACH,aAAa,GAAG,iBAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;QAC5C,CAAC;QAAC,MAAM,CAAC;YACP,aAAa,GAAG,QAAQ,CAAC;QAC3B,CAAC;IACH,CAAC;IAED,MAAM,UAAU,GAAG;QACjB,aAAa,CAAC,CAAC,CAAC,mBAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,SAAS;QACvD,QAAQ,CAAC,CAAC,CAAC,mBAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS;QAC7C,OAAO,CAAC,GAAG,EAAE;QACb,SAAS;KACV,CAAC,MAAM,CAAC,OAAO,CAAa,CAAC;IAE9B,KAAK,MAAM,KAAK,IAAI,UAAU,EAAE,CAAC;QAC/B,IAAI,GAAG,GAAG,KAAK,CAAC;QAChB,SAAS,CAAC;YACR,MAAM,OAAO,GAAG,mBAAI,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;YAC/C,IAAI,CAAC;gBACH,IAAI,iBAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;oBAC3B,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,iBAAE,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAAsB,CAAC;oBAC9E,IAAI,GAAG,CAAC,IAAI,KAAK,UAAU;wBAAE,OAAO,GAAG,CAAC;gBAC1C,CAAC;YACH,CAAC;YAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;YACxB,MAAM,MAAM,GAAG,mBAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YACjC,IAAI,MAAM,KAAK,GAAG;gBAAE,MAAM;YAC1B,GAAG,GAAG,MAAM,CAAC;QACf,CAAC;IACH,CAAC;IAED,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,SAAgB,kBAAkB,CAChC,MAAoB,EACpB,MAAsB,EACtB,MAAkB;IAElB,MAAM,YAAY,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAC/C,MAAM,WAAW,GAAG,mBAAI,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IACrD,MAAM,CAAC,IAAI,CAAC,yBAAyB,EAAE,EAAE,WAAW,EAAE,CAAC,CAAC;IAExD,MAAM,KAAK,GAAG,IAAA,0BAAK,EAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,WAAW,CAAC,EAAE;QACnD,GAAG,EAAE;YACH,GAAG,OAAO,CAAC,GAAG;YACd,0BAA0B,EAAE,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC;YACxD,aAAa,EAAE,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,mBAAmB,EAAE;SAClE;QACD,KAAK,EAAE,MAAM;KACd,CAAC,CAAC;IAEH,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAc,EAAE,EAAE;QACzC,MAAM,CAAC,IAAI,CAAC,kBAAkB,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;IAEH,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAc,EAAE,EAAE;QACzC,MAAM,CAAC,IAAI,CAAC,kBAAkB,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;IAEH,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAa,EAAE,MAAe,EAAE,EAAE;QAClD,MAAM,CAAC,IAAI,CAAC,uBAAuB,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;QACvD,MAAM,EAAE,CAAC;IACX,CAAC,CAAC,CAAC;IAEH,OAAO,KAAK,CAAC;AACf,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@meetlobster/openclaw-plugin",
|
|
3
|
-
"version": "1.3.
|
|
3
|
+
"version": "1.3.5",
|
|
4
4
|
"main": "dist/index.js",
|
|
5
5
|
"types": "dist/index.d.ts",
|
|
6
6
|
"files": [
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
"config.schema.json"
|
|
10
10
|
],
|
|
11
11
|
"scripts": {
|
|
12
|
-
"build": "rm -rf dist && tsc -p tsconfig.json",
|
|
12
|
+
"build": "rm -rf dist && tsc -p tsconfig.json && node scripts/sync-extensions.js",
|
|
13
13
|
"typecheck": "tsc -p tsconfig.json --noEmit",
|
|
14
14
|
"test": "vitest run"
|
|
15
15
|
},
|
|
@@ -18,28 +18,9 @@
|
|
|
18
18
|
"@meetlobster/worker": "^1.3.0"
|
|
19
19
|
},
|
|
20
20
|
"openclaw": {
|
|
21
|
-
"extensions":
|
|
22
|
-
"
|
|
23
|
-
|
|
24
|
-
"description": "External Lobster plugin for OpenClaw chat-native meetings",
|
|
25
|
-
"main": "dist/index.js",
|
|
26
|
-
"configSchema": "./config.schema.json",
|
|
27
|
-
"permissions": [
|
|
28
|
-
"commands",
|
|
29
|
-
"resources",
|
|
30
|
-
"rpc",
|
|
31
|
-
"services",
|
|
32
|
-
"network",
|
|
33
|
-
"process"
|
|
34
|
-
],
|
|
35
|
-
"commands": [
|
|
36
|
-
{
|
|
37
|
-
"name": "lobster",
|
|
38
|
-
"description": "Control Lobster meeting assistant"
|
|
39
|
-
}
|
|
40
|
-
]
|
|
41
|
-
}
|
|
42
|
-
}
|
|
21
|
+
"extensions": [
|
|
22
|
+
"dist/index.js"
|
|
23
|
+
]
|
|
43
24
|
},
|
|
44
25
|
"publishConfig": {
|
|
45
26
|
"access": "public"
|