@agentchatme/openclaw 0.6.15 → 0.6.17
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/CHANGELOG.md +14 -0
- package/dist/index.cjs +67 -26
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +67 -26
- package/dist/index.js.map +1 -1
- package/dist/setup-entry.cjs +67 -26
- package/dist/setup-entry.cjs.map +1 -1
- package/dist/setup-entry.js +67 -26
- package/dist/setup-entry.js.map +1 -1
- package/openclaw.plugin.json +7 -7
- package/package.json +14 -17
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,20 @@ this package adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm
|
|
|
7
7
|
|
|
8
8
|
This package is in pre-1.0 development.
|
|
9
9
|
|
|
10
|
+
## 0.6.17 — 2026-04-29
|
|
11
|
+
|
|
12
|
+
- Group chat: closed the same `recordInboundSession` gap that broke direct DMs in 0.6.13. Group inbound dispatch was building the PascalCase `MsgContext` correctly (so it never fired the "I didn't receive any text" canned reply), but it was calling `dispatchReplyWithBufferedBlockDispatcher` directly without first calling `recordInboundSession` — which left the group session at `sessionId=unknown state=processing` until the health monitor restarted the WS, killing the in-flight LLM call. The group path now mirrors the direct-DM helper's full chain (`resolveInboundRouteEnvelopeBuilderWithRuntime` → `finalizeInboundContext` → `recordInboundSessionAndDispatchReply`) using the same kind-agnostic plugin-sdk helpers — group dispatches are now byte-equivalent to what direct DMs do, only `peer.kind` and `ChatType` differ.
|
|
13
|
+
- Tests: regression guard in `tests/binding/inbound-bridge.test.ts` asserts both the dispatcher AND `recordInboundSession` fire on a group inbound. If either ever skips again the test fails loud.
|
|
14
|
+
|
|
15
|
+
## 0.6.16 — 2026-04-29
|
|
16
|
+
|
|
17
|
+
- WebSocket heartbeat tuned to industry-standard cadence: `ping.intervalMs` default 30000 → 45000, `ping.timeoutMs` default 10000 → 30000 (max raised 30000 → 60000). Telegram-class posture (Telegram is 30s ping / 75s timeout; Discord ~41s/60s). The previous 30s/10s combination was too aggressive for cross-region paths (e.g. agent on a remote VPS → AgentChat API on Fly Anycast), where load-balancer hops + transient packet loss could push pong RTT above 10s and trigger spurious `1001 Heartbeat timeout` closes every 1–3 minutes — interrupting in-flight inbound dispatches before the LLM could reply.
|
|
18
|
+
|
|
19
|
+
## 0.6.13 — 2026-04-29 · 0.6.14 — 2026-04-29 · 0.6.15 — 2026-04-29
|
|
20
|
+
|
|
21
|
+
- Inbound dispatch: switched direct-DM path to OpenClaw's `dispatchInboundDirectDmWithRuntime` helper (chains `routing.resolveAgentRoute → session.recordInboundSession → reply.dispatchReplyWithBufferedBlockDispatcher`). Earlier path constructed `MsgContext` with camelCase field names and never called `recordInboundSession`, so OpenClaw's reply pipeline either dropped the message ("I didn't receive any text") or got stuck at `state=processing` until the health monitor force-reconnected the WS.
|
|
22
|
+
- Channel lifecycle: `startAccount` now ends with `await waitUntilAbort(ctx.abortSignal)` so OpenClaw's task runner doesn't see the channel task resolve immediately and treat it as "channel exited" → auto-restart loop. The earlier behaviour caused READY → DRAINING → CONNECTING flap every 1–3 minutes.
|
|
23
|
+
|
|
10
24
|
## 0.6.12 — 2026-04-28
|
|
11
25
|
|
|
12
26
|
- Wizard: handle prompt headline restored to "Choose a handle (your @name on AgentChat)"; the format rules moved to the gray placeholder text inside the input box.
|
package/dist/index.cjs
CHANGED
|
@@ -11,6 +11,8 @@ var channelLifecycle = require('openclaw/plugin-sdk/channel-lifecycle');
|
|
|
11
11
|
var pino = require('pino');
|
|
12
12
|
var ws = require('ws');
|
|
13
13
|
var directDm = require('openclaw/plugin-sdk/direct-dm');
|
|
14
|
+
var inboundEnvelope = require('openclaw/plugin-sdk/inbound-envelope');
|
|
15
|
+
var inboundReplyDispatch = require('openclaw/plugin-sdk/inbound-reply-dispatch');
|
|
14
16
|
var agentchat = require('@agentchatme/agentchat');
|
|
15
17
|
var typebox = require('@sinclair/typebox');
|
|
16
18
|
|
|
@@ -868,8 +870,8 @@ var reconnectConfigSchema = zod.z.object({
|
|
|
868
870
|
jitterRatio: zod.z.number().min(0).max(1).default(0.2)
|
|
869
871
|
}).strict();
|
|
870
872
|
var pingConfigSchema = zod.z.object({
|
|
871
|
-
intervalMs: zod.z.number().int().min(5e3).max(12e4).default(
|
|
872
|
-
timeoutMs: zod.z.number().int().min(1e3).max(
|
|
873
|
+
intervalMs: zod.z.number().int().min(5e3).max(12e4).default(45e3),
|
|
874
|
+
timeoutMs: zod.z.number().int().min(1e3).max(6e4).default(3e4)
|
|
873
875
|
}).strict();
|
|
874
876
|
var outboundConfigSchema = zod.z.object({
|
|
875
877
|
maxInFlight: zod.z.number().int().min(1).max(1e4).default(256),
|
|
@@ -1863,7 +1865,7 @@ var CircuitBreaker = class {
|
|
|
1863
1865
|
};
|
|
1864
1866
|
|
|
1865
1867
|
// src/version.ts
|
|
1866
|
-
var PACKAGE_VERSION = "0.6.
|
|
1868
|
+
var PACKAGE_VERSION = "0.6.17";
|
|
1867
1869
|
|
|
1868
1870
|
// src/outbound.ts
|
|
1869
1871
|
var DEFAULT_RETRY_POLICY = {
|
|
@@ -2495,31 +2497,70 @@ async function handleMessage(deps, event) {
|
|
|
2495
2497
|
}
|
|
2496
2498
|
});
|
|
2497
2499
|
} else {
|
|
2498
|
-
const
|
|
2499
|
-
const
|
|
2500
|
-
|
|
2500
|
+
const ts = typeof event.createdAt === "number" ? event.createdAt : Date.parse(event.createdAt);
|
|
2501
|
+
const runtime = channelRuntime;
|
|
2502
|
+
const { route, buildEnvelope } = inboundEnvelope.resolveInboundRouteEnvelopeBuilderWithRuntime({
|
|
2501
2503
|
cfg: deps.gatewayCfg,
|
|
2502
|
-
|
|
2503
|
-
|
|
2504
|
-
|
|
2505
|
-
|
|
2506
|
-
|
|
2507
|
-
|
|
2508
|
-
|
|
2509
|
-
|
|
2510
|
-
|
|
2511
|
-
|
|
2512
|
-
|
|
2513
|
-
|
|
2514
|
-
|
|
2515
|
-
|
|
2516
|
-
|
|
2517
|
-
|
|
2518
|
-
|
|
2519
|
-
|
|
2520
|
-
|
|
2504
|
+
channel: "agentchat",
|
|
2505
|
+
accountId: deps.accountId,
|
|
2506
|
+
peer: { kind: "group", id: event.conversationId },
|
|
2507
|
+
runtime
|
|
2508
|
+
});
|
|
2509
|
+
const { storePath, body: envelopeBody } = buildEnvelope({
|
|
2510
|
+
channel: "AgentChat",
|
|
2511
|
+
from: conversationLabel,
|
|
2512
|
+
body,
|
|
2513
|
+
timestamp: ts
|
|
2514
|
+
});
|
|
2515
|
+
const finalize = channelRuntime.reply.finalizeInboundContext;
|
|
2516
|
+
const ctxPayload = finalize({
|
|
2517
|
+
Body: envelopeBody,
|
|
2518
|
+
BodyForAgent: body,
|
|
2519
|
+
RawBody: body,
|
|
2520
|
+
CommandBody: body,
|
|
2521
|
+
From: `@${senderHandle}`,
|
|
2522
|
+
To: `@${recipientHandle}`,
|
|
2523
|
+
SessionKey: route.sessionKey,
|
|
2524
|
+
AccountId: deps.accountId,
|
|
2525
|
+
ChatType: "group",
|
|
2526
|
+
ConversationLabel: conversationLabel,
|
|
2527
|
+
SenderId: senderHandle,
|
|
2528
|
+
Provider: "agentchat",
|
|
2529
|
+
Surface: "agentchat",
|
|
2530
|
+
MessageSid: event.messageId,
|
|
2531
|
+
MessageSidFull: event.messageId,
|
|
2532
|
+
Timestamp: ts,
|
|
2533
|
+
OriginatingChannel: "agentchat",
|
|
2534
|
+
OriginatingTo: `@${recipientHandle}`
|
|
2535
|
+
});
|
|
2536
|
+
const session = channelRuntime.session;
|
|
2537
|
+
await inboundReplyDispatch.recordInboundSessionAndDispatchReply({
|
|
2538
|
+
cfg: deps.gatewayCfg,
|
|
2539
|
+
channel: "agentchat",
|
|
2540
|
+
accountId: deps.accountId,
|
|
2541
|
+
agentId: route.agentId,
|
|
2542
|
+
routeSessionKey: route.sessionKey,
|
|
2543
|
+
storePath,
|
|
2544
|
+
ctxPayload,
|
|
2545
|
+
recordInboundSession: session.recordInboundSession,
|
|
2546
|
+
dispatchReplyWithBufferedBlockDispatcher: channelRuntime.reply.dispatchReplyWithBufferedBlockDispatcher,
|
|
2547
|
+
deliver: deliver2,
|
|
2548
|
+
onRecordError: (err3) => {
|
|
2549
|
+
deps.logger.error(
|
|
2550
|
+
{ err: err3 instanceof Error ? err3.message : String(err3), messageId: event.messageId },
|
|
2551
|
+
"recordInboundSession failed (group)"
|
|
2552
|
+
);
|
|
2521
2553
|
},
|
|
2522
|
-
|
|
2554
|
+
onDispatchError: (err3, info) => {
|
|
2555
|
+
deps.logger.error(
|
|
2556
|
+
{
|
|
2557
|
+
err: err3 instanceof Error ? err3.message : String(err3),
|
|
2558
|
+
messageId: event.messageId,
|
|
2559
|
+
kind: info.kind
|
|
2560
|
+
},
|
|
2561
|
+
"inbound dispatch failed (group)"
|
|
2562
|
+
);
|
|
2563
|
+
}
|
|
2523
2564
|
});
|
|
2524
2565
|
}
|
|
2525
2566
|
} catch (err3) {
|