@wishee-ai/openclaw-connector 1.0.2 → 1.0.3
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/connector.js +25 -5
- package/dist/connector.js.map +1 -1
- package/dist/task-correlation.js +39 -0
- package/dist/task-correlation.js.map +1 -0
- package/package.json +9 -7
package/dist/connector.js
CHANGED
|
@@ -12,6 +12,7 @@
|
|
|
12
12
|
import WebSocket from "ws";
|
|
13
13
|
import { loadOrCreateBinding, markBound, showBindingQR } from "./binding.js";
|
|
14
14
|
import { fetchTaskResult } from "./task-result.js";
|
|
15
|
+
import { RunCorrelator, isCompletionLifecycleEnd } from "./task-correlation.js";
|
|
15
16
|
// ── State ──────────────────────────────────────────────────────
|
|
16
17
|
let ws = null;
|
|
17
18
|
let closed = false;
|
|
@@ -21,6 +22,12 @@ let unsubAgentEvents = null;
|
|
|
21
22
|
let unsubTranscript = null;
|
|
22
23
|
let bindingState = null;
|
|
23
24
|
let pluginApi = null;
|
|
25
|
+
/**
|
|
26
|
+
* Maps a sessionKey to the runId the bridge originally dispatched. A
|
|
27
|
+
* `sessions_yield` ends the dispatched run and the real answer resumes under a
|
|
28
|
+
* new runId on the SAME session, so we report the result under the original.
|
|
29
|
+
*/
|
|
30
|
+
const correlator = new RunCorrelator();
|
|
24
31
|
// ── Public API ─────────────────────────────────────────────────
|
|
25
32
|
export async function startConnector(api, ctx) {
|
|
26
33
|
pluginApi = api;
|
|
@@ -33,11 +40,15 @@ export async function startConnector(api, ctx) {
|
|
|
33
40
|
}
|
|
34
41
|
// Subscribe to agent events
|
|
35
42
|
unsubAgentEvents = api.runtime.events.onAgentEvent((evt) => {
|
|
43
|
+
// A resumed turn (after sessions_yield) runs under a NEW runId on the same
|
|
44
|
+
// session; remap it back to the originally dispatched runId so the bridge
|
|
45
|
+
// can tie the result to the task it started.
|
|
46
|
+
const outboundRunId = correlator.resolve(evt.sessionKey, evt.runId);
|
|
36
47
|
sendEvent({
|
|
37
48
|
type: "event",
|
|
38
49
|
event: "agent",
|
|
39
50
|
payload: {
|
|
40
|
-
runId:
|
|
51
|
+
runId: outboundRunId,
|
|
41
52
|
stream: evt.stream,
|
|
42
53
|
data: evt.data,
|
|
43
54
|
ts: evt.ts,
|
|
@@ -45,12 +56,13 @@ export async function startConnector(api, ctx) {
|
|
|
45
56
|
sessionKey: evt.sessionKey,
|
|
46
57
|
},
|
|
47
58
|
});
|
|
48
|
-
//
|
|
49
|
-
|
|
59
|
+
// Fetch the task result only on a genuine completion. A yielded lifecycle
|
|
60
|
+
// end is a pause while a sub-agent runs — not a result.
|
|
61
|
+
if (isCompletionLifecycleEnd(evt.stream, evt.data)) {
|
|
50
62
|
const sessionKey = evt.sessionKey;
|
|
51
63
|
if (sessionKey) {
|
|
52
64
|
setTimeout(() => {
|
|
53
|
-
void fetchAndSendTaskResult(
|
|
65
|
+
void fetchAndSendTaskResult(outboundRunId, sessionKey, ctx.logger);
|
|
54
66
|
}, 500);
|
|
55
67
|
}
|
|
56
68
|
}
|
|
@@ -172,12 +184,16 @@ async function handleRpcRequest(req, logger) {
|
|
|
172
184
|
switch (method) {
|
|
173
185
|
case "chat.send": {
|
|
174
186
|
const p = params;
|
|
175
|
-
|
|
187
|
+
const runResult = await subagent.run({
|
|
176
188
|
sessionKey: p.sessionKey,
|
|
177
189
|
message: p.message,
|
|
178
190
|
deliver: p.deliver,
|
|
179
191
|
idempotencyKey: p.idempotencyKey,
|
|
180
192
|
});
|
|
193
|
+
// Remember which runId belongs to this session so a later resumed turn
|
|
194
|
+
// (different runId, same session) is reported under this one.
|
|
195
|
+
correlator.remember(p.sessionKey, runResult.runId);
|
|
196
|
+
result = runResult;
|
|
181
197
|
break;
|
|
182
198
|
}
|
|
183
199
|
case "chat.history": {
|
|
@@ -243,10 +259,14 @@ async function fetchAndSendTaskResult(runId, sessionKey, logger) {
|
|
|
243
259
|
const subagent = pluginApi?.runtime.subagent;
|
|
244
260
|
if (!subagent)
|
|
245
261
|
return;
|
|
262
|
+
// `runId` here is already the originally dispatched runId (resolved by the
|
|
263
|
+
// caller), so the task-result frame is reported under the task the bridge started.
|
|
246
264
|
const frame = await fetchTaskResult(subagent, runId, sessionKey, logger);
|
|
247
265
|
if (frame) {
|
|
248
266
|
sendEvent(frame);
|
|
249
267
|
logger.info(`[connector] Sent task-result for runId=${runId}`);
|
|
268
|
+
// The task is delivered; drop the mapping so the next dispatch starts clean.
|
|
269
|
+
correlator.forget(sessionKey);
|
|
250
270
|
}
|
|
251
271
|
}
|
|
252
272
|
//# sourceMappingURL=connector.js.map
|
package/dist/connector.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connector.js","sourceRoot":"","sources":["../src/connector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,SAAS,MAAM,IAAI,CAAC;AAC3B,OAAO,EAAE,mBAAmB,EAAE,SAAS,EAAE,aAAa,EAAqB,MAAM,cAAc,CAAC;AAChG,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"connector.js","sourceRoot":"","sources":["../src/connector.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Correlation helpers for the yield→resume task lifecycle.
|
|
3
|
+
*
|
|
4
|
+
* When the bridge dispatches a task via chat.send, the OpenClaw run adopts the
|
|
5
|
+
* idempotencyKey as its runId. If the orchestrator calls `sessions_yield`, that
|
|
6
|
+
* run ENDS (with `data.yielded === true`) and the real answer arrives later
|
|
7
|
+
* under a brand-new runId generated by the wake path. The only field stable
|
|
8
|
+
* across that boundary is the `sessionKey`, so we map sessionKey → the original
|
|
9
|
+
* dispatched runId and report the eventual result under it.
|
|
10
|
+
*/
|
|
11
|
+
export class RunCorrelator {
|
|
12
|
+
bySession = new Map();
|
|
13
|
+
/** Record the runId the bridge dispatched for a session. */
|
|
14
|
+
remember(sessionKey, runId) {
|
|
15
|
+
this.bySession.set(sessionKey, runId);
|
|
16
|
+
}
|
|
17
|
+
/** Map an event's session back to the original dispatched runId, else fall back. */
|
|
18
|
+
resolve(sessionKey, fallbackRunId) {
|
|
19
|
+
if (sessionKey && this.bySession.has(sessionKey)) {
|
|
20
|
+
return this.bySession.get(sessionKey);
|
|
21
|
+
}
|
|
22
|
+
return fallbackRunId;
|
|
23
|
+
}
|
|
24
|
+
forget(sessionKey) {
|
|
25
|
+
this.bySession.delete(sessionKey);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* A lifecycle "end" only means the task is DONE when it is not a yield.
|
|
30
|
+
* A yielded end is a pause while a spawned sub-agent runs — the real answer
|
|
31
|
+
* comes in a later resumed turn — so it must not trigger result delivery.
|
|
32
|
+
*/
|
|
33
|
+
export function isCompletionLifecycleEnd(stream, data) {
|
|
34
|
+
if (stream !== "lifecycle" || !data) {
|
|
35
|
+
return false;
|
|
36
|
+
}
|
|
37
|
+
return data.phase === "end" && data.yielded !== true;
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=task-correlation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task-correlation.js","sourceRoot":"","sources":["../src/task-correlation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,MAAM,OAAO,aAAa;IAChB,SAAS,GAAG,IAAI,GAAG,EAAkB,CAAC;IAE9C,4DAA4D;IAC5D,QAAQ,CAAC,UAAkB,EAAE,KAAa;QACxC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;IACxC,CAAC;IAED,oFAAoF;IACpF,OAAO,CAAC,UAA8B,EAAE,aAAqB;QAC3D,IAAI,UAAU,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;YACjD,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAE,CAAC;QACzC,CAAC;QACD,OAAO,aAAa,CAAC;IACvB,CAAC;IAED,MAAM,CAAC,UAAkB;QACvB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IACpC,CAAC;CACF;AAED;;;;GAIG;AACH,MAAM,UAAU,wBAAwB,CACtC,MAA0B,EAC1B,IAAyC;IAEzC,IAAI,MAAM,KAAK,WAAW,IAAI,CAAC,IAAI,EAAE,CAAC;QACpC,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,IAAI,CAAC,KAAK,KAAK,KAAK,IAAI,IAAI,CAAC,OAAO,KAAK,IAAI,CAAC;AACvD,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@wishee-ai/openclaw-connector",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.3",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Connect OpenClaw to the WISHEE bridge via reverse WebSocket",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -17,6 +17,7 @@
|
|
|
17
17
|
"clean": "rm -rf dist",
|
|
18
18
|
"prebuild": "npm run clean",
|
|
19
19
|
"build": "tsc",
|
|
20
|
+
"test": "vitest run",
|
|
20
21
|
"prepublishOnly": "npm run build"
|
|
21
22
|
},
|
|
22
23
|
"license": "MIT",
|
|
@@ -27,15 +28,16 @@
|
|
|
27
28
|
"bridge"
|
|
28
29
|
],
|
|
29
30
|
"dependencies": {
|
|
30
|
-
"
|
|
31
|
-
"
|
|
31
|
+
"qrcode-terminal": "^0.12.0",
|
|
32
|
+
"ws": "^8.18.0"
|
|
32
33
|
},
|
|
33
34
|
"devDependencies": {
|
|
34
|
-
"openclaw": "^2026.6.10",
|
|
35
|
-
"@types/ws": "^8.5.0",
|
|
36
|
-
"@types/qrcode-terminal": "^0.12.0",
|
|
37
35
|
"@types/node": "^22.0.0",
|
|
38
|
-
"
|
|
36
|
+
"@types/qrcode-terminal": "^0.12.0",
|
|
37
|
+
"@types/ws": "^8.5.0",
|
|
38
|
+
"openclaw": "^2026.6.10",
|
|
39
|
+
"typescript": "^5.7.0",
|
|
40
|
+
"vitest": "^4.1.9"
|
|
39
41
|
},
|
|
40
42
|
"peerDependencies": {
|
|
41
43
|
"openclaw": ">=2026.3.0"
|