@agentvault/agentvault 0.23.4 → 0.23.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.
@@ -107,6 +107,8 @@ declare function _buildRoomSenderId(roomId: string, senderDeviceId?: string, sen
107
107
  * `accountId` is intentionally unused for the room form; kept in the signature
108
108
  * for symmetry with the direct/A2A `To` shapes. */
109
109
  declare function _buildRoomTo(roomId: string, _accountId: string): string;
110
+ declare function _withSessionSerial<T>(key: string, fn: () => Promise<T>): Promise<T>;
111
+ declare function _withTurnTimeout<T>(ms: number, fn: () => Promise<T>): Promise<T>;
110
112
  /** Emit the full hierarchical span tree for a message lifecycle. */
111
113
  declare function _emitHierarchicalSpans(channel: any, opts: {
112
114
  traceId: string;
@@ -128,7 +130,7 @@ declare function _emitHierarchicalSpans(channel: any, opts: {
128
130
  status: "ok" | "error";
129
131
  statusMessage?: string;
130
132
  }): void;
131
- export { _parseMentions, _shouldProcessRoomMessage, _stripMentions, _stripThinkBlocks, _looksLikeReasoningLeak, _emitHierarchicalSpans, _resolveRoomIdentity, _buildRoomSenderId, _buildRoomTo };
133
+ export { _parseMentions, _shouldProcessRoomMessage, _stripMentions, _stripThinkBlocks, _looksLikeReasoningLeak, _emitHierarchicalSpans, _resolveRoomIdentity, _buildRoomSenderId, _buildRoomTo, _withSessionSerial, _withTurnTimeout };
132
134
  declare const _default: {
133
135
  id: string;
134
136
  name: string;
@@ -1 +1 @@
1
- {"version":3,"file":"openclaw-entry.d.ts","sourceRoot":"","sources":["../src/openclaw-entry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"openclaw-entry.d.ts","sourceRoot":"","sources":["../src/openclaw-entry.ts"],"names":[],"mappings":"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"}
@@ -49748,6 +49748,47 @@ async function _recallTeamMemory(query, limit = 5) {
49748
49748
  return "";
49749
49749
  }
49750
49750
  }
49751
+ var _sessionQueues = /* @__PURE__ */ new Map();
49752
+ function _withSessionSerial(key, fn) {
49753
+ const prev = _sessionQueues.get(key) ?? Promise.resolve();
49754
+ const run = prev.then(fn, fn);
49755
+ const tail = run.catch(() => {
49756
+ });
49757
+ _sessionQueues.set(key, tail);
49758
+ void tail.then(() => {
49759
+ if (_sessionQueues.get(key) === tail) _sessionQueues.delete(key);
49760
+ });
49761
+ return run;
49762
+ }
49763
+ var TURN_BUDGET_MS = 12e4;
49764
+ function _withTurnTimeout(ms, fn) {
49765
+ return new Promise((resolve2, reject) => {
49766
+ let settled = false;
49767
+ const timer = setTimeout(() => {
49768
+ if (settled) return;
49769
+ settled = true;
49770
+ reject(new Error(`turn exceeded ${ms}ms budget \u2014 releasing session lock`));
49771
+ }, ms);
49772
+ fn().then(
49773
+ (v2) => {
49774
+ if (!settled) {
49775
+ settled = true;
49776
+ clearTimeout(timer);
49777
+ resolve2(v2);
49778
+ }
49779
+ },
49780
+ // If we already timed out, swallow the late rejection here so the orphaned
49781
+ // turn never becomes an unhandled rejection.
49782
+ (e) => {
49783
+ if (!settled) {
49784
+ settled = true;
49785
+ clearTimeout(timer);
49786
+ reject(e);
49787
+ }
49788
+ }
49789
+ );
49790
+ });
49791
+ }
49751
49792
  async function handleInbound(params) {
49752
49793
  const { plaintext: rawPlaintext, metadata, channel, account, cfg } = params;
49753
49794
  const isRoomMessage = Boolean(metadata.roomId);
@@ -50092,143 +50133,146 @@ ${contextBody}`;
50092
50133
  ...attachmentFields,
50093
50134
  ...credentialFields
50094
50135
  });
50095
- await core.channel.session.recordInboundSession({
50096
- storePath,
50097
- sessionKey: ctxPayload.SessionKey ?? route.sessionKey,
50098
- ctx: ctxPayload,
50099
- onRecordError: (err) => {
50100
- core.error?.(`[AgentVault] session record failed: ${String(err)}`);
50101
- }
50102
- });
50103
- try {
50104
- await runWithTraceContext(
50105
- { traceId, parentSpanId: inferenceSpanId },
50106
- () => core.channel.reply.dispatchReplyWithBufferedBlockDispatcher({
50107
- ctx: ctxPayload,
50108
- cfg,
50109
- dispatcherOptions: {
50110
- deliver: async (payload) => {
50111
- if (payload.kind === "thinking" || payload.kind === "reasoning") return;
50112
- const text = (payload.text ?? "").trim();
50113
- if (!text) return;
50114
- {
50115
- const recoverable = _stripThinkBlocks(text);
50116
- if (recoverable && !_looksLikeReasoningLeak(recoverable)) lastFilteredText = recoverable;
50117
- }
50118
- if (_looksLikeReasoningLeak(text)) return;
50119
- const replyStart = Date.now();
50120
- replyCount++;
50121
- totalReplyChars += text.length;
50122
- if (!firstReplyTime) firstReplyTime = replyStart;
50123
- let replyTarget;
50124
- if (isA2AMessage) {
50125
- if (!_a2aCanReply(metadata.a2aChannelId)) {
50126
- console.warn(`[AgentVault] A2A reply suppressed (rate limit) for channel ${metadata.a2aChannelId?.slice(0, 8)}...`);
50127
- return;
50136
+ const _turnSessionKey = typeof route.sessionKey === "string" && route.sessionKey ? route.sessionKey : `__unkeyed__:${traceId}`;
50137
+ await _withSessionSerial(_turnSessionKey, () => _withTurnTimeout(TURN_BUDGET_MS, async () => {
50138
+ await core.channel.session.recordInboundSession({
50139
+ storePath,
50140
+ sessionKey: ctxPayload.SessionKey ?? route.sessionKey,
50141
+ ctx: ctxPayload,
50142
+ onRecordError: (err) => {
50143
+ core.error?.(`[AgentVault] session record failed: ${String(err)}`);
50144
+ }
50145
+ });
50146
+ try {
50147
+ await runWithTraceContext(
50148
+ { traceId, parentSpanId: inferenceSpanId },
50149
+ () => core.channel.reply.dispatchReplyWithBufferedBlockDispatcher({
50150
+ ctx: ctxPayload,
50151
+ cfg,
50152
+ dispatcherOptions: {
50153
+ deliver: async (payload) => {
50154
+ if (payload.kind === "thinking" || payload.kind === "reasoning") return;
50155
+ const text = (payload.text ?? "").trim();
50156
+ if (!text) return;
50157
+ {
50158
+ const recoverable = _stripThinkBlocks(text);
50159
+ if (recoverable && !_looksLikeReasoningLeak(recoverable)) lastFilteredText = recoverable;
50128
50160
  }
50129
- replyTarget = { kind: "a2a", hubAddress: metadata.fromHubAddress };
50130
- } else if (isRoomMessage) {
50131
- if (!_roomCanReply(metadata.roomId)) {
50132
- console.warn(`[AgentVault] Room reply suppressed (rate limit) for room ${metadata.roomId?.slice(0, 8)}...`);
50133
- return;
50161
+ if (_looksLikeReasoningLeak(text)) return;
50162
+ const replyStart = Date.now();
50163
+ replyCount++;
50164
+ totalReplyChars += text.length;
50165
+ if (!firstReplyTime) firstReplyTime = replyStart;
50166
+ let replyTarget;
50167
+ if (isA2AMessage) {
50168
+ if (!_a2aCanReply(metadata.a2aChannelId)) {
50169
+ console.warn(`[AgentVault] A2A reply suppressed (rate limit) for channel ${metadata.a2aChannelId?.slice(0, 8)}...`);
50170
+ return;
50171
+ }
50172
+ replyTarget = { kind: "a2a", hubAddress: metadata.fromHubAddress };
50173
+ } else if (isRoomMessage) {
50174
+ if (!_roomCanReply(metadata.roomId)) {
50175
+ console.warn(`[AgentVault] Room reply suppressed (rate limit) for room ${metadata.roomId?.slice(0, 8)}...`);
50176
+ return;
50177
+ }
50178
+ replyTarget = { kind: "room", roomId: metadata.roomId };
50179
+ } else {
50180
+ replyTarget = { kind: "owner" };
50134
50181
  }
50135
- replyTarget = { kind: "room", roomId: metadata.roomId };
50136
- } else {
50137
- replyTarget = { kind: "owner" };
50138
- }
50139
- await channel.deliver(replyTarget, { type: "text", text }, {
50140
- conversationId: metadata.conversationId,
50141
- topicId: metadata.topicId,
50142
- parentSpanId: inferenceSpanId,
50143
- metadata: isRoomMessage ? { content_length: text.length } : void 0
50144
- });
50145
- if (isA2AMessage) {
50146
- _a2aRecordReply(metadata.a2aChannelId);
50147
- }
50148
- if (isRoomMessage) {
50149
- _roomRecordReply(metadata.roomId);
50182
+ await channel.deliver(replyTarget, { type: "text", text }, {
50183
+ conversationId: metadata.conversationId,
50184
+ topicId: metadata.topicId,
50185
+ parentSpanId: inferenceSpanId,
50186
+ metadata: isRoomMessage ? { content_length: text.length } : void 0
50187
+ });
50188
+ if (isA2AMessage) {
50189
+ _a2aRecordReply(metadata.a2aChannelId);
50190
+ }
50191
+ if (isRoomMessage) {
50192
+ _roomRecordReply(metadata.roomId);
50193
+ }
50194
+ const replyEnd = Date.now();
50195
+ replySpans.push({ startTime: replyStart, endTime: replyEnd, chars: text.length, index: replyCount });
50196
+ },
50197
+ onError: (err, info) => {
50198
+ core.error?.(`[AgentVault] ${info?.kind ?? "reply"} error: ${String(err)}`);
50150
50199
  }
50151
- const replyEnd = Date.now();
50152
- replySpans.push({ startTime: replyStart, endTime: replyEnd, chars: text.length, index: replyCount });
50153
50200
  },
50154
- onError: (err, info) => {
50155
- core.error?.(`[AgentVault] ${info?.kind ?? "reply"} error: ${String(err)}`);
50156
- }
50157
- },
50158
- replyOptions: {}
50159
- })
50160
- );
50161
- if (replyCount === 0 && lastFilteredText) {
50162
- const canReply = isA2AMessage ? _a2aCanReply(metadata.a2aChannelId) : isRoomMessage ? _roomCanReply(metadata.roomId) : true;
50163
- if (canReply) {
50164
- const replyTarget = isA2AMessage ? { kind: "a2a", hubAddress: metadata.fromHubAddress } : isRoomMessage ? { kind: "room", roomId: metadata.roomId } : { kind: "owner" };
50165
- console.warn(
50166
- `[AgentVault] all reply blocks filtered as reasoning \u2014 delivering recovered fallback (${lastFilteredText.length} chars)`
50167
- );
50168
- await channel.deliver(replyTarget, { type: "text", text: lastFilteredText }, {
50169
- conversationId: metadata.conversationId,
50170
- topicId: metadata.topicId,
50171
- parentSpanId: inferenceSpanId,
50172
- metadata: isRoomMessage ? { content_length: lastFilteredText.length } : void 0
50173
- });
50174
- replyCount++;
50175
- totalReplyChars += lastFilteredText.length;
50176
- if (!firstReplyTime) firstReplyTime = Date.now();
50177
- if (isA2AMessage) _a2aRecordReply(metadata.a2aChannelId);
50178
- else if (isRoomMessage) _roomRecordReply(metadata.roomId);
50179
- } else {
50180
- console.warn("[AgentVault] reply blocks all filtered AND rate-limited \u2014 no fallback delivered");
50201
+ replyOptions: {}
50202
+ })
50203
+ );
50204
+ if (replyCount === 0 && lastFilteredText) {
50205
+ const canReply = isA2AMessage ? _a2aCanReply(metadata.a2aChannelId) : isRoomMessage ? _roomCanReply(metadata.roomId) : true;
50206
+ if (canReply) {
50207
+ const replyTarget = isA2AMessage ? { kind: "a2a", hubAddress: metadata.fromHubAddress } : isRoomMessage ? { kind: "room", roomId: metadata.roomId } : { kind: "owner" };
50208
+ console.warn(
50209
+ `[AgentVault] all reply blocks filtered as reasoning \u2014 delivering recovered fallback (${lastFilteredText.length} chars)`
50210
+ );
50211
+ await channel.deliver(replyTarget, { type: "text", text: lastFilteredText }, {
50212
+ conversationId: metadata.conversationId,
50213
+ topicId: metadata.topicId,
50214
+ parentSpanId: inferenceSpanId,
50215
+ metadata: isRoomMessage ? { content_length: lastFilteredText.length } : void 0
50216
+ });
50217
+ replyCount++;
50218
+ totalReplyChars += lastFilteredText.length;
50219
+ if (!firstReplyTime) firstReplyTime = Date.now();
50220
+ if (isA2AMessage) _a2aRecordReply(metadata.a2aChannelId);
50221
+ else if (isRoomMessage) _roomRecordReply(metadata.roomId);
50222
+ } else {
50223
+ console.warn("[AgentVault] reply blocks all filtered AND rate-limited \u2014 no fallback delivered");
50224
+ }
50225
+ } else if (replyCount === 0) {
50226
+ console.warn("[AgentVault] turn produced no deliverable reply (all blocks empty/filtered, nothing recoverable)");
50181
50227
  }
50182
- } else if (replyCount === 0) {
50183
- console.warn("[AgentVault] turn produced no deliverable reply (all blocks empty/filtered, nothing recoverable)");
50228
+ const endTime = Date.now();
50229
+ _emitHierarchicalSpans(channel, {
50230
+ traceId,
50231
+ rootSpanId,
50232
+ inferenceSpanId,
50233
+ startTime,
50234
+ endTime,
50235
+ firstReplyTime,
50236
+ replySpans,
50237
+ inputChars: plaintext.length,
50238
+ replyCount,
50239
+ totalReplyChars,
50240
+ isRoom: isRoomMessage,
50241
+ status: "ok"
50242
+ });
50243
+ } catch (err) {
50244
+ const endTime = Date.now();
50245
+ _emitHierarchicalSpans(channel, {
50246
+ traceId,
50247
+ rootSpanId,
50248
+ inferenceSpanId,
50249
+ startTime,
50250
+ endTime,
50251
+ firstReplyTime,
50252
+ replySpans,
50253
+ inputChars: plaintext.length,
50254
+ replyCount,
50255
+ totalReplyChars,
50256
+ isRoom: isRoomMessage,
50257
+ status: "error",
50258
+ statusMessage: String(err)
50259
+ });
50260
+ _emitChildSpan(channel, {
50261
+ traceId,
50262
+ parentSpanId: rootSpanId,
50263
+ name: "error",
50264
+ startTime: endTime,
50265
+ endTime,
50266
+ attributes: {
50267
+ "ai.agent.error.type": err?.constructor?.name ?? "Error",
50268
+ "ai.agent.error.message": String(err)
50269
+ },
50270
+ status: "error",
50271
+ statusMessage: String(err)
50272
+ });
50273
+ throw err;
50184
50274
  }
50185
- const endTime = Date.now();
50186
- _emitHierarchicalSpans(channel, {
50187
- traceId,
50188
- rootSpanId,
50189
- inferenceSpanId,
50190
- startTime,
50191
- endTime,
50192
- firstReplyTime,
50193
- replySpans,
50194
- inputChars: plaintext.length,
50195
- replyCount,
50196
- totalReplyChars,
50197
- isRoom: isRoomMessage,
50198
- status: "ok"
50199
- });
50200
- } catch (err) {
50201
- const endTime = Date.now();
50202
- _emitHierarchicalSpans(channel, {
50203
- traceId,
50204
- rootSpanId,
50205
- inferenceSpanId,
50206
- startTime,
50207
- endTime,
50208
- firstReplyTime,
50209
- replySpans,
50210
- inputChars: plaintext.length,
50211
- replyCount,
50212
- totalReplyChars,
50213
- isRoom: isRoomMessage,
50214
- status: "error",
50215
- statusMessage: String(err)
50216
- });
50217
- _emitChildSpan(channel, {
50218
- traceId,
50219
- parentSpanId: rootSpanId,
50220
- name: "error",
50221
- startTime: endTime,
50222
- endTime,
50223
- attributes: {
50224
- "ai.agent.error.type": err?.constructor?.name ?? "Error",
50225
- "ai.agent.error.message": String(err)
50226
- },
50227
- status: "error",
50228
- statusMessage: String(err)
50229
- });
50230
- throw err;
50231
- }
50275
+ }));
50232
50276
  }
50233
50277
  function _inferSpanType(name) {
50234
50278
  if (name === "error" || name.includes("error")) return "error";
@@ -51151,6 +51195,8 @@ export {
51151
51195
  _shouldProcessRoomMessage,
51152
51196
  _stripMentions,
51153
51197
  _stripThinkBlocks,
51198
+ _withSessionSerial,
51199
+ _withTurnTimeout,
51154
51200
  openclaw_entry_default as default,
51155
51201
  isUsingManagedRoutes
51156
51202
  };