@a1hvdy/cc-openclaw 0.18.1 → 0.19.1
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/README.md +14 -0
- package/dist/src/channels/telegram/completion-summary.js +2 -24
- package/dist/src/channels/telegram/completion-summary.js.map +1 -1
- package/dist/src/channels/telegram/event-reducer.js +70 -16
- package/dist/src/channels/telegram/event-reducer.js.map +1 -1
- package/dist/src/channels/telegram/live-card.d.ts +23 -90
- package/dist/src/channels/telegram/live-card.js +97 -284
- package/dist/src/channels/telegram/live-card.js.map +1 -1
- package/dist/src/channels/telegram/tool-tracker.d.ts +2 -16
- package/dist/src/channels/telegram/tool-tracker.js +18 -81
- package/dist/src/channels/telegram/tool-tracker.js.map +1 -1
- package/dist/src/config/loader.js +0 -2
- package/dist/src/config/loader.js.map +1 -1
- package/dist/src/config/schema.d.ts +1 -20
- package/dist/src/config/schema.js +1 -12
- package/dist/src/config/schema.js.map +1 -1
- package/dist/src/constants.d.ts +1 -13
- package/dist/src/constants.js +1 -13
- package/dist/src/constants.js.map +1 -1
- package/dist/src/engines/heartbeat-guard.d.ts +91 -0
- package/dist/src/engines/heartbeat-guard.js +120 -0
- package/dist/src/engines/heartbeat-guard.js.map +1 -0
- package/dist/src/engines/index.d.ts +2 -0
- package/dist/src/engines/index.js +3 -0
- package/dist/src/engines/index.js.map +1 -1
- package/dist/src/engines/persistent-session.d.ts +9 -0
- package/dist/src/engines/persistent-session.js +47 -0
- package/dist/src/engines/persistent-session.js.map +1 -1
- package/dist/src/engines/subprocess-pool.d.ts +78 -0
- package/dist/src/engines/subprocess-pool.js +200 -0
- package/dist/src/engines/subprocess-pool.js.map +1 -0
- package/dist/src/lib/config.d.ts +0 -6
- package/dist/src/lib/config.js +0 -81
- package/dist/src/lib/config.js.map +1 -1
- package/dist/src/lib/cost-rollup.d.ts +36 -0
- package/dist/src/lib/cost-rollup.js +125 -0
- package/dist/src/lib/cost-rollup.js.map +1 -0
- package/dist/src/lib/sysprompt-strip.d.ts +0 -14
- package/dist/src/lib/sysprompt-strip.js +2 -79
- package/dist/src/lib/sysprompt-strip.js.map +1 -1
- package/dist/src/lib/trajectory.d.ts +10 -1
- package/dist/src/lib/trajectory.js +37 -6
- package/dist/src/lib/trajectory.js.map +1 -1
- package/dist/src/lifecycle/safe-restart.d.ts +99 -0
- package/dist/src/lifecycle/safe-restart.js +132 -0
- package/dist/src/lifecycle/safe-restart.js.map +1 -0
- package/dist/src/observability/event-bus.d.ts +21 -0
- package/dist/src/observability/event-bus.js.map +1 -1
- package/dist/src/openai-compat/message-extractor.d.ts +5 -0
- package/dist/src/openai-compat/message-extractor.js +7 -4
- package/dist/src/openai-compat/message-extractor.js.map +1 -1
- package/dist/src/openai-compat/non-streaming-handler.d.ts +4 -1
- package/dist/src/openai-compat/non-streaming-handler.js +62 -39
- package/dist/src/openai-compat/non-streaming-handler.js.map +1 -1
- package/dist/src/openai-compat/openai-compat.js +2 -25
- package/dist/src/openai-compat/openai-compat.js.map +1 -1
- package/dist/src/openai-compat/response-formatter.d.ts +1 -6
- package/dist/src/openai-compat/response-formatter.js +2 -9
- package/dist/src/openai-compat/response-formatter.js.map +1 -1
- package/dist/src/openai-compat/skill-resolver.d.ts +12 -0
- package/dist/src/openai-compat/skill-resolver.js +19 -0
- package/dist/src/openai-compat/skill-resolver.js.map +1 -1
- package/dist/src/openai-compat/streaming-handler.d.ts +4 -1
- package/dist/src/openai-compat/streaming-handler.js +126 -36
- package/dist/src/openai-compat/streaming-handler.js.map +1 -1
- package/dist/src/patches/cache-parity-registry.d.ts +83 -0
- package/dist/src/patches/cache-parity-registry.js +151 -1
- package/dist/src/patches/cache-parity-registry.js.map +1 -1
- package/dist/src/patches/sysprompt-strip.spec.d.ts +33 -0
- package/dist/src/patches/sysprompt-strip.spec.js +53 -0
- package/dist/src/patches/sysprompt-strip.spec.js.map +1 -0
- package/dist/src/session/session-manager.d.ts +4 -8
- package/dist/src/session/session-manager.js +76 -86
- package/dist/src/session/session-manager.js.map +1 -1
- package/dist/src/session-bootstrap/cwd-patch.js +0 -35
- package/dist/src/session-bootstrap/cwd-patch.js.map +1 -1
- package/mcp-tools.json +1 -1
- package/package.json +1 -1
- package/dist/src/lib/turn-trace.d.ts +0 -34
- package/dist/src/lib/turn-trace.js +0 -75
- package/dist/src/lib/turn-trace.js.map +0 -1
- package/dist/src/openai-compat/insight-format.d.ts +0 -36
- package/dist/src/openai-compat/insight-format.js +0 -140
- package/dist/src/openai-compat/insight-format.js.map +0 -1
|
@@ -39,11 +39,10 @@ import { reportStatus, getToolDescription } from './status-reporter.js';
|
|
|
39
39
|
import { parseToolCallsFromText } from './tool-calls-parser.js';
|
|
40
40
|
import { formatCompletionChunk } from './response-formatter.js';
|
|
41
41
|
import { isToolStreamMode } from './mode-flags.js';
|
|
42
|
-
import { emit as emitTrajectory } from '../lib/trajectory.js';
|
|
42
|
+
import { emit as emitTrajectory, emitTurnTrace } from '../lib/trajectory.js';
|
|
43
43
|
import { formatError, ERROR_CODES } from '../lib/error-formatter.js';
|
|
44
|
-
import {
|
|
44
|
+
import { getSurfaceThinkingEnabled, getTtsAutoMode } from '../lib/config.js';
|
|
45
45
|
import { applyVoiceRecovery, detectVoiceIntent, hasTtsMarkers, _logVoiceDebug } from './voice-recovery.js';
|
|
46
|
-
import { applyInsightAndGreetingFilters } from './insight-format.js';
|
|
47
46
|
/** Coerce a userMessage (string | UserMessageBlock[]) to a flat string
|
|
48
47
|
* for voice-intent detection. Tool-result blocks aren't user prompts. */
|
|
49
48
|
function userMessageToText(msg) {
|
|
@@ -63,13 +62,25 @@ function userMessageToText(msg) {
|
|
|
63
62
|
}
|
|
64
63
|
export async function handleStreaming(manager, sessionName, model,
|
|
65
64
|
// Phase 2 R4 wire-up: accepts native content-block arrays in tool-stream mode.
|
|
66
|
-
userMessage, completionId, res, hasTools
|
|
65
|
+
userMessage, completionId, res, hasTools,
|
|
66
|
+
// v0.19.1 M3: slash command captured by extractUserMessage, threaded to
|
|
67
|
+
// the patched sendMessage so the live-card pill renders the original
|
|
68
|
+
// /<slash> even when maybeInlineSkill replaced the message body.
|
|
69
|
+
slashCommand) {
|
|
67
70
|
res.writeHead(200, {
|
|
68
71
|
'Content-Type': 'text/event-stream',
|
|
69
72
|
'Cache-Control': 'no-cache',
|
|
70
73
|
Connection: 'keep-alive',
|
|
71
74
|
'X-Accel-Buffering': 'no',
|
|
72
75
|
});
|
|
76
|
+
// v0.14.0 turn-trace probe: track wall-clock + accumulate streamed text
|
|
77
|
+
// for the final per-turn diagnostic emit. accumulatedText mirrors what
|
|
78
|
+
// the client actually received (text deltas only — tool_calls are tracked
|
|
79
|
+
// via toolCallsEmitted). Cheap O(N) string concat, capped by truncation
|
|
80
|
+
// at emit time so memory cost stays bounded.
|
|
81
|
+
const turnStartMs = Date.now();
|
|
82
|
+
let accumulatedText = '';
|
|
83
|
+
let doneBackstopFired = false;
|
|
73
84
|
let clientDisconnected = false;
|
|
74
85
|
res.on('close', () => {
|
|
75
86
|
clientDisconnected = true;
|
|
@@ -136,9 +147,18 @@ userMessage, completionId, res, hasTools) {
|
|
|
136
147
|
// result-fallback-classifier rejects as an "incomplete terminal response".
|
|
137
148
|
// This flag drives a final-chunk backstop in each finalization branch.
|
|
138
149
|
let streamedAnything = false;
|
|
150
|
+
// v0.16 task-006: streaming-path thinking-block surfacing. When the env
|
|
151
|
+
// flag OPENCLAW_THINKING_SURFACE is on, emit a synthetic SSE chunk per
|
|
152
|
+
// thinking delta with `delta.reasoning` (mirroring OpenAI o1/o3 streaming
|
|
153
|
+
// shape). Default OFF for privacy — without the flag, the onThinking
|
|
154
|
+
// callback is undefined and the engine never even fires the event
|
|
155
|
+
// (gated on listenerCount > 0 at emit time).
|
|
156
|
+
const surfaceThinking = getSurfaceThinkingEnabled();
|
|
157
|
+
let thinkingBuffer = '';
|
|
139
158
|
try {
|
|
140
159
|
reportStatus('thinking', 'Processing request...');
|
|
141
160
|
await manager.sendMessage(sessionName, userMessage, {
|
|
161
|
+
slashCommand,
|
|
142
162
|
onChunk: (chunk) => {
|
|
143
163
|
if (useToolStream || !hasTools) {
|
|
144
164
|
// v0.10.3: when voice intent is detected, BUFFER instead of stream.
|
|
@@ -173,6 +193,7 @@ userMessage, completionId, res, hasTools) {
|
|
|
173
193
|
// between tool_use blocks, OpenClaw client handles that fine.
|
|
174
194
|
if (chunk.length > 0)
|
|
175
195
|
streamedAnything = true;
|
|
196
|
+
accumulatedText += chunk;
|
|
176
197
|
writeSSE(JSON.stringify(formatCompletionChunk(completionId, model, { content: chunk }, null)));
|
|
177
198
|
}
|
|
178
199
|
else {
|
|
@@ -252,8 +273,38 @@ userMessage, completionId, res, hasTools) {
|
|
|
252
273
|
}
|
|
253
274
|
}
|
|
254
275
|
},
|
|
276
|
+
// v0.16 task-006: thinking-delta surfacing. Subscribed only when the
|
|
277
|
+
// flag is on so the engine's listenerCount > 0 gate stays cheap when
|
|
278
|
+
// off. Each delta becomes a synthetic SSE chunk with `delta.reasoning`
|
|
279
|
+
// matching sse-translator.ts:170-176 (the unused createSseTranslator
|
|
280
|
+
// path) and the OpenAI o1/o3 streaming shape.
|
|
281
|
+
onThinking: surfaceThinking
|
|
282
|
+
? (text) => {
|
|
283
|
+
if (!text)
|
|
284
|
+
return;
|
|
285
|
+
thinkingBuffer += text;
|
|
286
|
+
const chunk = {
|
|
287
|
+
id: completionId,
|
|
288
|
+
object: 'chat.completion.chunk',
|
|
289
|
+
created: Math.floor(Date.now() / 1000),
|
|
290
|
+
model,
|
|
291
|
+
choices: [{ index: 0, delta: { reasoning: text }, finish_reason: null }],
|
|
292
|
+
};
|
|
293
|
+
writeSSE(JSON.stringify(chunk));
|
|
294
|
+
}
|
|
295
|
+
: undefined,
|
|
255
296
|
});
|
|
256
297
|
reportStatus('idle', 'Ready');
|
|
298
|
+
// v0.16 task-006: thinking_block trajectory event with token-count metadata
|
|
299
|
+
// only (never raw text). Fires when buffer is non-empty regardless of
|
|
300
|
+
// whether the SSE chunks were emitted — observability is independent of
|
|
301
|
+
// the user-visible flag. Mirrors non-streaming-handler.ts:118-127.
|
|
302
|
+
if (thinkingBuffer.length > 0) {
|
|
303
|
+
emitTrajectory('thinking_block', {
|
|
304
|
+
excerpt_chars: thinkingBuffer.length,
|
|
305
|
+
tokens_approx: Math.ceil(thinkingBuffer.length / 4),
|
|
306
|
+
}, sessionName);
|
|
307
|
+
}
|
|
257
308
|
// Get token usage for final chunk
|
|
258
309
|
let usage;
|
|
259
310
|
try {
|
|
@@ -272,28 +323,12 @@ userMessage, completionId, res, hasTools) {
|
|
|
272
323
|
// chunk before the finish chunk so the upstream classifier sees a
|
|
273
324
|
// payload. Skip when tool_calls were emitted — those are openai-spec
|
|
274
325
|
// valid as the only payload (multi-turn tool-use sessions).
|
|
275
|
-
//
|
|
276
|
-
// v0.17.0: gated by `isDoneBackstopEnabled()` (default true, opt-out
|
|
277
|
-
// via CC_OPENCLAW_DONE_BACKSTOP=0). Whether enabled or suppressed,
|
|
278
|
-
// we emit a `false_done_backstop` trajectory event so we can measure
|
|
279
|
-
// the firing rate independently of the safety net (plan F1 + F6).
|
|
280
326
|
const noVisiblePayload = !streamedAnything && bufferedText.length === 0 && toolCallsEmitted === 0;
|
|
281
327
|
if (noVisiblePayload) {
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
model,
|
|
287
|
-
toolCallsEmitted,
|
|
288
|
-
bufferedLen: bufferedText.length,
|
|
289
|
-
useToolStream,
|
|
290
|
-
hasTools,
|
|
291
|
-
voiceIntent,
|
|
292
|
-
}, sessionName);
|
|
293
|
-
if (backstopEnabled) {
|
|
294
|
-
writeSSE(JSON.stringify(formatCompletionChunk(completionId, model, { content: 'Done.' }, null)));
|
|
295
|
-
streamedAnything = true;
|
|
296
|
-
}
|
|
328
|
+
writeSSE(JSON.stringify(formatCompletionChunk(completionId, model, { content: 'Done.' }, null)));
|
|
329
|
+
streamedAnything = true;
|
|
330
|
+
doneBackstopFired = true;
|
|
331
|
+
accumulatedText += 'Done.';
|
|
297
332
|
}
|
|
298
333
|
// v0.10.3: voice-recovery emission. When voice intent was detected AND
|
|
299
334
|
// chunks were buffered (not streamed), apply recovery to bufferedText
|
|
@@ -314,10 +349,7 @@ userMessage, completionId, res, hasTools) {
|
|
|
314
349
|
});
|
|
315
350
|
if (voiceIntent && !useToolStream && bufferedText) {
|
|
316
351
|
const recovery = applyVoiceRecovery(userText, bufferedText);
|
|
317
|
-
|
|
318
|
-
// fence runs. Single composite filter replaces the three separate
|
|
319
|
-
// passes the streaming handler used to need.
|
|
320
|
-
const finalText = applyInsightAndGreetingFilters(recovery.text, sessionName);
|
|
352
|
+
const finalText = recovery.text;
|
|
321
353
|
_logVoiceDebug('streaming.recovery', {
|
|
322
354
|
sessionName,
|
|
323
355
|
recovered: recovery.recovered,
|
|
@@ -329,6 +361,10 @@ userMessage, completionId, res, hasTools) {
|
|
|
329
361
|
if (recovery.recovered) {
|
|
330
362
|
emitTrajectory('tool_use', { name: '_voice_recovery', inputKeys: [recovery.via] }, sessionName);
|
|
331
363
|
}
|
|
364
|
+
// Voice-recovery REPLACES streamed text — overwrite accumulator so the
|
|
365
|
+
// turn-trace reflects what the client actually receives, not what was
|
|
366
|
+
// buffered pre-recovery.
|
|
367
|
+
accumulatedText = finalText;
|
|
332
368
|
writeSSE(JSON.stringify(formatCompletionChunk(completionId, model, { content: finalText }, null)));
|
|
333
369
|
const finalChunk = formatCompletionChunk(completionId, model, {}, 'stop');
|
|
334
370
|
if (usage)
|
|
@@ -353,11 +389,8 @@ userMessage, completionId, res, hasTools) {
|
|
|
353
389
|
if (parsed.toolCalls.length > 0) {
|
|
354
390
|
// Emit text content if any
|
|
355
391
|
if (parsed.textContent) {
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
// the empty-insight pass still matters.
|
|
359
|
-
const normalizedText = applyInsightAndGreetingFilters(parsed.textContent, sessionName);
|
|
360
|
-
writeSSE(JSON.stringify(formatCompletionChunk(completionId, model, { content: normalizedText }, null)));
|
|
392
|
+
accumulatedText += parsed.textContent;
|
|
393
|
+
writeSSE(JSON.stringify(formatCompletionChunk(completionId, model, { content: parsed.textContent }, null)));
|
|
361
394
|
}
|
|
362
395
|
// Emit tool_call chunks
|
|
363
396
|
for (let i = 0; i < parsed.toolCalls.length; i++) {
|
|
@@ -393,9 +426,8 @@ userMessage, completionId, res, hasTools) {
|
|
|
393
426
|
}
|
|
394
427
|
else {
|
|
395
428
|
// No tool calls — emit buffered text as content
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
writeSSE(JSON.stringify(formatCompletionChunk(completionId, model, { content: normalizedBuffered }, null)));
|
|
429
|
+
accumulatedText += bufferedText;
|
|
430
|
+
writeSSE(JSON.stringify(formatCompletionChunk(completionId, model, { content: bufferedText }, null)));
|
|
399
431
|
const finalChunk = formatCompletionChunk(completionId, model, {}, 'stop');
|
|
400
432
|
if (usage)
|
|
401
433
|
finalChunk.usage = usage;
|
|
@@ -409,6 +441,34 @@ userMessage, completionId, res, hasTools) {
|
|
|
409
441
|
finalChunk.usage = usage;
|
|
410
442
|
writeSSE(JSON.stringify(finalChunk));
|
|
411
443
|
}
|
|
444
|
+
// v0.14.0 turn-trace probe: emit per-turn diagnostic. No-op unless
|
|
445
|
+
// CC_OPENCLAW_TURN_TRACE=1 (or CC_OPENCLAW_TRAJECTORY=1) is set.
|
|
446
|
+
// Derive finishReason from the same logic the final-chunk branches use.
|
|
447
|
+
let traceFinishReason = 'stop';
|
|
448
|
+
if (useToolStream && toolCallsEmitted > 0)
|
|
449
|
+
traceFinishReason = 'tool_calls';
|
|
450
|
+
else if (hasTools && bufferedText) {
|
|
451
|
+
const parsed = parseToolCallsFromText(bufferedText);
|
|
452
|
+
if (parsed.toolCalls.length > 0)
|
|
453
|
+
traceFinishReason = 'tool_calls';
|
|
454
|
+
}
|
|
455
|
+
emitTurnTrace({
|
|
456
|
+
path: 'streaming',
|
|
457
|
+
model,
|
|
458
|
+
userTextPreview: userText.slice(0, 500),
|
|
459
|
+
userTextLen: userText.length,
|
|
460
|
+
hasTools,
|
|
461
|
+
useToolStream,
|
|
462
|
+
toolCallCount: toolCallsEmitted,
|
|
463
|
+
outputTextPreview: accumulatedText.slice(0, 500),
|
|
464
|
+
outputTextLen: accumulatedText.length,
|
|
465
|
+
finishReason: traceFinishReason,
|
|
466
|
+
doneBackstopFired,
|
|
467
|
+
voiceIntent,
|
|
468
|
+
tokensIn: usage?.prompt_tokens ?? 0,
|
|
469
|
+
tokensOut: usage?.completion_tokens ?? 0,
|
|
470
|
+
durationMs: Date.now() - turnStartMs,
|
|
471
|
+
}, sessionName);
|
|
412
472
|
writeSSE('[DONE]');
|
|
413
473
|
}
|
|
414
474
|
catch (err) {
|
|
@@ -417,6 +477,36 @@ userMessage, completionId, res, hasTools) {
|
|
|
417
477
|
formatError(err, { code: ERROR_CODES.SESSION_ERROR, sessionId: sessionName, details: { phase: 'handleStreaming' } });
|
|
418
478
|
writeSSE(JSON.stringify({ error: { message: err.message, type: 'server_error' } }));
|
|
419
479
|
writeSSE('[DONE]');
|
|
480
|
+
// v0.15.0 Slice 1: turn-trace probe now ALSO fires on error-exit so
|
|
481
|
+
// broken turns (claude CLI crash, timeout, stalled session kill) get
|
|
482
|
+
// captured in the same trajectory stream as successful turns. Without
|
|
483
|
+
// this, error turns vanish from the probe — exactly the 20:52–21:09
|
|
484
|
+
// UTC window of `version?` greeting-only requests on 2026-05-14 that
|
|
485
|
+
// had request_in events but no turn_complete.
|
|
486
|
+
try {
|
|
487
|
+
emitTurnTrace({
|
|
488
|
+
path: 'streaming',
|
|
489
|
+
model,
|
|
490
|
+
userTextPreview: userText.slice(0, 500),
|
|
491
|
+
userTextLen: userText.length,
|
|
492
|
+
hasTools,
|
|
493
|
+
useToolStream,
|
|
494
|
+
toolCallCount: toolCallsEmitted,
|
|
495
|
+
outputTextPreview: accumulatedText.slice(0, 500),
|
|
496
|
+
outputTextLen: accumulatedText.length,
|
|
497
|
+
finishReason: 'error',
|
|
498
|
+
doneBackstopFired,
|
|
499
|
+
voiceIntent,
|
|
500
|
+
tokensIn: 0,
|
|
501
|
+
tokensOut: 0,
|
|
502
|
+
durationMs: Date.now() - turnStartMs,
|
|
503
|
+
errorMessage: err.message,
|
|
504
|
+
errorName: err.name,
|
|
505
|
+
}, sessionName);
|
|
506
|
+
}
|
|
507
|
+
catch {
|
|
508
|
+
/* Probe must never throw inside catch — would mask the original error. */
|
|
509
|
+
}
|
|
420
510
|
}
|
|
421
511
|
finally {
|
|
422
512
|
clearInterval(heartbeatTimer);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"streaming-handler.js","sourceRoot":"","sources":["../../../src/openai-compat/streaming-handler.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"streaming-handler.js","sourceRoot":"","sources":["../../../src/openai-compat/streaming-handler.ts"],"names":[],"mappings":"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"}
|
|
@@ -11,10 +11,93 @@
|
|
|
11
11
|
* refactor accidentally removes the registry writer, this probe surfaces
|
|
12
12
|
* a DriftError at boot phase 3, preventing silent cache-parity regressions
|
|
13
13
|
* of the v0.6.0 namespace-bug class.
|
|
14
|
+
*
|
|
15
|
+
* v0.16 extension (task-005):
|
|
16
|
+
* Self-recovery on namespace mismatch. When the registry detects a
|
|
17
|
+
* namespace mismatch (previously required a manual wipe), it now:
|
|
18
|
+
* 1. Clears only the mismatched namespace entries from the local cache.
|
|
19
|
+
* 2. Emits a 'cache-parity.namespace-mismatch-recovered' telemetry event
|
|
20
|
+
* via the EventBus so the drift can be observed without interruption.
|
|
21
|
+
* 3. Increments an internal restart-cycle counter so the test harness can
|
|
22
|
+
* verify N consecutive mismatches all self-recovered.
|
|
23
|
+
*
|
|
24
|
+
* The self-recovery logic lives in CacheParityRecovery (exported below)
|
|
25
|
+
* and is also exercised by the PatchSpec's expectedBehavior probe so every
|
|
26
|
+
* boot validates that recovery works before traffic starts.
|
|
14
27
|
*/
|
|
15
28
|
import type { PatchSpec } from '../lifecycle/patch-manifest.js';
|
|
29
|
+
import { EventBus } from '../observability/event-bus.js';
|
|
16
30
|
interface CacheParityTarget {
|
|
17
31
|
readonly module: Record<string, unknown>;
|
|
18
32
|
}
|
|
19
33
|
export declare const cacheParityRegistrySpec: PatchSpec<CacheParityTarget>;
|
|
34
|
+
export interface CacheParityRecoveryOptions {
|
|
35
|
+
/** EventBus for emitting 'cache-parity.namespace-mismatch-recovered'. */
|
|
36
|
+
bus: EventBus;
|
|
37
|
+
/**
|
|
38
|
+
* Path to the JSONL file where warning events are appended. Defaults to
|
|
39
|
+
* REGISTRY_PATH (cc-openclaw-cache-registry.jsonl). Overridable in tests.
|
|
40
|
+
*/
|
|
41
|
+
registryPath?: string;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* CacheParityRecovery — self-healing logic for namespace mismatches.
|
|
45
|
+
*
|
|
46
|
+
* Previously, a namespace mismatch in the cache-parity registry required a
|
|
47
|
+
* manual wipe (OPENCLAW_CACHE_PARITY=0, delete file, re-enable). This class
|
|
48
|
+
* automates recovery:
|
|
49
|
+
* 1. Clear only the mismatched namespace's entries from the in-memory cache.
|
|
50
|
+
* 2. Emit a telemetry event so the mismatch is observable in trajectory logs.
|
|
51
|
+
* 3. Return the number of bytes cleared so the caller/test can assert on it.
|
|
52
|
+
*
|
|
53
|
+
* Lifecycle:
|
|
54
|
+
* - One instance per gateway session (or per-test via constructor injection).
|
|
55
|
+
* - restartCycle auto-increments on each recoverNamespaceMismatch() call,
|
|
56
|
+
* allowing the test harness to verify 3 consecutive recoveries.
|
|
57
|
+
* - The in-memory namespace cache is an independent Map — it does NOT write
|
|
58
|
+
* to disk (that is src/lib/cache-parity.ts's job). This keeps concerns
|
|
59
|
+
* separated and makes testing trivial.
|
|
60
|
+
*/
|
|
61
|
+
export declare class CacheParityRecovery {
|
|
62
|
+
private readonly bus;
|
|
63
|
+
private readonly registryPath;
|
|
64
|
+
/** In-memory namespace → cached prompt-hash map. */
|
|
65
|
+
private readonly namespaceCache;
|
|
66
|
+
/** Number of namespace mismatches recovered since construction. */
|
|
67
|
+
private _restartCycle;
|
|
68
|
+
constructor(opts: CacheParityRecoveryOptions);
|
|
69
|
+
/**
|
|
70
|
+
* Record a namespace entry. Called by the session bootstrap when it attaches
|
|
71
|
+
* a system prompt under a given namespace key.
|
|
72
|
+
*/
|
|
73
|
+
registerNamespace(namespace: string, promptHash: string): void;
|
|
74
|
+
/**
|
|
75
|
+
* Detect and self-recover a namespace mismatch.
|
|
76
|
+
*
|
|
77
|
+
* A mismatch is detected when `namespace` is present in the local cache
|
|
78
|
+
* but the caller reports that the live registry's hash for that namespace
|
|
79
|
+
* differs (i.e. a gateway restart changed the prompt). Recovery:
|
|
80
|
+
* 1. Measure the number of entries about to be cleared.
|
|
81
|
+
* 2. Delete the stale namespace from the in-memory cache.
|
|
82
|
+
* 3. Emit 'cache-parity.namespace-mismatch-recovered' telemetry.
|
|
83
|
+
* 4. Increment restartCycle.
|
|
84
|
+
*
|
|
85
|
+
* @returns The number of stale hash entries cleared.
|
|
86
|
+
*/
|
|
87
|
+
recoverNamespaceMismatch(namespace: string): Promise<number>;
|
|
88
|
+
/**
|
|
89
|
+
* Check whether `namespace` is present in the local cache. Used by the
|
|
90
|
+
* session bootstrap to decide whether a mismatch has occurred.
|
|
91
|
+
*/
|
|
92
|
+
hasNamespace(namespace: string): boolean;
|
|
93
|
+
/** Current number of recovered mismatch cycles. */
|
|
94
|
+
get restartCycle(): number;
|
|
95
|
+
/** Number of distinct namespaces currently tracked. */
|
|
96
|
+
get namespaceCount(): number;
|
|
97
|
+
private appendWarningToRegistry;
|
|
98
|
+
/** Expose internal cache snapshot for test assertions. */
|
|
99
|
+
_snapshotForTests(): Map<string, string[]>;
|
|
100
|
+
/** Reset to clean state — used between test cycles. */
|
|
101
|
+
_resetForTests(): void;
|
|
102
|
+
}
|
|
20
103
|
export {};
|
|
@@ -11,7 +11,24 @@
|
|
|
11
11
|
* refactor accidentally removes the registry writer, this probe surfaces
|
|
12
12
|
* a DriftError at boot phase 3, preventing silent cache-parity regressions
|
|
13
13
|
* of the v0.6.0 namespace-bug class.
|
|
14
|
+
*
|
|
15
|
+
* v0.16 extension (task-005):
|
|
16
|
+
* Self-recovery on namespace mismatch. When the registry detects a
|
|
17
|
+
* namespace mismatch (previously required a manual wipe), it now:
|
|
18
|
+
* 1. Clears only the mismatched namespace entries from the local cache.
|
|
19
|
+
* 2. Emits a 'cache-parity.namespace-mismatch-recovered' telemetry event
|
|
20
|
+
* via the EventBus so the drift can be observed without interruption.
|
|
21
|
+
* 3. Increments an internal restart-cycle counter so the test harness can
|
|
22
|
+
* verify N consecutive mismatches all self-recovered.
|
|
23
|
+
*
|
|
24
|
+
* The self-recovery logic lives in CacheParityRecovery (exported below)
|
|
25
|
+
* and is also exercised by the PatchSpec's expectedBehavior probe so every
|
|
26
|
+
* boot validates that recovery works before traffic starts.
|
|
14
27
|
*/
|
|
28
|
+
import { appendFileSync, existsSync, mkdirSync } from 'node:fs';
|
|
29
|
+
import { dirname } from 'node:path';
|
|
30
|
+
import { EventBus } from '../observability/event-bus.js';
|
|
31
|
+
import { REGISTRY_PATH } from '../lib/cache-parity.js';
|
|
15
32
|
export const cacheParityRegistrySpec = {
|
|
16
33
|
id: 'cache-parity-registry',
|
|
17
34
|
targetModule: 'src/lib/cache-parity.ts',
|
|
@@ -51,7 +68,18 @@ export const cacheParityRegistrySpec = {
|
|
|
51
68
|
return false;
|
|
52
69
|
// Determinism — same input must produce same output.
|
|
53
70
|
const hash2 = mod.hashPrompt('cc-openclaw-probe');
|
|
54
|
-
|
|
71
|
+
if (hash !== hash2)
|
|
72
|
+
return false;
|
|
73
|
+
// v0.16 task-005: also verify that CacheParityRecovery can self-recover
|
|
74
|
+
// from a simulated mismatch without throwing.
|
|
75
|
+
const recovery = new CacheParityRecovery({ bus: new EventBus() });
|
|
76
|
+
try {
|
|
77
|
+
await recovery.recoverNamespaceMismatch('probe-namespace');
|
|
78
|
+
}
|
|
79
|
+
catch {
|
|
80
|
+
return false;
|
|
81
|
+
}
|
|
82
|
+
return true;
|
|
55
83
|
},
|
|
56
84
|
install(_target) {
|
|
57
85
|
// Drift-detection-only mode: no install. Phase E#3 wires the
|
|
@@ -61,4 +89,126 @@ export const cacheParityRegistrySpec = {
|
|
|
61
89
|
// Drift-detection-only mode: no uninstall.
|
|
62
90
|
},
|
|
63
91
|
};
|
|
92
|
+
/**
|
|
93
|
+
* CacheParityRecovery — self-healing logic for namespace mismatches.
|
|
94
|
+
*
|
|
95
|
+
* Previously, a namespace mismatch in the cache-parity registry required a
|
|
96
|
+
* manual wipe (OPENCLAW_CACHE_PARITY=0, delete file, re-enable). This class
|
|
97
|
+
* automates recovery:
|
|
98
|
+
* 1. Clear only the mismatched namespace's entries from the in-memory cache.
|
|
99
|
+
* 2. Emit a telemetry event so the mismatch is observable in trajectory logs.
|
|
100
|
+
* 3. Return the number of bytes cleared so the caller/test can assert on it.
|
|
101
|
+
*
|
|
102
|
+
* Lifecycle:
|
|
103
|
+
* - One instance per gateway session (or per-test via constructor injection).
|
|
104
|
+
* - restartCycle auto-increments on each recoverNamespaceMismatch() call,
|
|
105
|
+
* allowing the test harness to verify 3 consecutive recoveries.
|
|
106
|
+
* - The in-memory namespace cache is an independent Map — it does NOT write
|
|
107
|
+
* to disk (that is src/lib/cache-parity.ts's job). This keeps concerns
|
|
108
|
+
* separated and makes testing trivial.
|
|
109
|
+
*/
|
|
110
|
+
export class CacheParityRecovery {
|
|
111
|
+
bus;
|
|
112
|
+
registryPath;
|
|
113
|
+
/** In-memory namespace → cached prompt-hash map. */
|
|
114
|
+
namespaceCache = new Map();
|
|
115
|
+
/** Number of namespace mismatches recovered since construction. */
|
|
116
|
+
_restartCycle = 0;
|
|
117
|
+
constructor(opts) {
|
|
118
|
+
this.bus = opts.bus;
|
|
119
|
+
this.registryPath = opts.registryPath ?? REGISTRY_PATH;
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Record a namespace entry. Called by the session bootstrap when it attaches
|
|
123
|
+
* a system prompt under a given namespace key.
|
|
124
|
+
*/
|
|
125
|
+
registerNamespace(namespace, promptHash) {
|
|
126
|
+
let hashes = this.namespaceCache.get(namespace);
|
|
127
|
+
if (!hashes) {
|
|
128
|
+
hashes = [];
|
|
129
|
+
this.namespaceCache.set(namespace, hashes);
|
|
130
|
+
}
|
|
131
|
+
hashes.push(promptHash);
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Detect and self-recover a namespace mismatch.
|
|
135
|
+
*
|
|
136
|
+
* A mismatch is detected when `namespace` is present in the local cache
|
|
137
|
+
* but the caller reports that the live registry's hash for that namespace
|
|
138
|
+
* differs (i.e. a gateway restart changed the prompt). Recovery:
|
|
139
|
+
* 1. Measure the number of entries about to be cleared.
|
|
140
|
+
* 2. Delete the stale namespace from the in-memory cache.
|
|
141
|
+
* 3. Emit 'cache-parity.namespace-mismatch-recovered' telemetry.
|
|
142
|
+
* 4. Increment restartCycle.
|
|
143
|
+
*
|
|
144
|
+
* @returns The number of stale hash entries cleared.
|
|
145
|
+
*/
|
|
146
|
+
async recoverNamespaceMismatch(namespace) {
|
|
147
|
+
const staleHashes = this.namespaceCache.get(namespace) ?? [];
|
|
148
|
+
const clearedBytes = staleHashes.reduce((acc, h) => acc + h.length, 0);
|
|
149
|
+
// Clear the stale namespace.
|
|
150
|
+
this.namespaceCache.delete(namespace);
|
|
151
|
+
// Increment cycle counter BEFORE emitting so the telemetry payload
|
|
152
|
+
// reflects the new cycle number.
|
|
153
|
+
this._restartCycle += 1;
|
|
154
|
+
const payload = {
|
|
155
|
+
namespace,
|
|
156
|
+
clearedBytes,
|
|
157
|
+
restartCycle: this._restartCycle,
|
|
158
|
+
};
|
|
159
|
+
// Emit telemetry — best-effort; never throw on bus errors.
|
|
160
|
+
try {
|
|
161
|
+
this.bus.emit('cache-parity.namespace-mismatch-recovered', payload);
|
|
162
|
+
}
|
|
163
|
+
catch {
|
|
164
|
+
// Best-effort.
|
|
165
|
+
}
|
|
166
|
+
// Append warning event to JSONL registry so the mismatch is observable
|
|
167
|
+
// in cc-openclaw-cache-registry.jsonl without requiring manual wipe.
|
|
168
|
+
this.appendWarningToRegistry(payload);
|
|
169
|
+
return clearedBytes;
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Check whether `namespace` is present in the local cache. Used by the
|
|
173
|
+
* session bootstrap to decide whether a mismatch has occurred.
|
|
174
|
+
*/
|
|
175
|
+
hasNamespace(namespace) {
|
|
176
|
+
return this.namespaceCache.has(namespace);
|
|
177
|
+
}
|
|
178
|
+
/** Current number of recovered mismatch cycles. */
|
|
179
|
+
get restartCycle() {
|
|
180
|
+
return this._restartCycle;
|
|
181
|
+
}
|
|
182
|
+
/** Number of distinct namespaces currently tracked. */
|
|
183
|
+
get namespaceCount() {
|
|
184
|
+
return this.namespaceCache.size;
|
|
185
|
+
}
|
|
186
|
+
// ── Private helpers ──────────────────────────────────────────────────────────
|
|
187
|
+
appendWarningToRegistry(payload) {
|
|
188
|
+
try {
|
|
189
|
+
const dir = dirname(this.registryPath);
|
|
190
|
+
if (!existsSync(dir))
|
|
191
|
+
mkdirSync(dir, { recursive: true });
|
|
192
|
+
const row = JSON.stringify({
|
|
193
|
+
ts: new Date().toISOString(),
|
|
194
|
+
event: 'cache-parity.namespace-mismatch-recovered',
|
|
195
|
+
...payload,
|
|
196
|
+
});
|
|
197
|
+
appendFileSync(this.registryPath, row + '\n', 'utf8');
|
|
198
|
+
}
|
|
199
|
+
catch {
|
|
200
|
+
// Best-effort — telemetry must never block recovery.
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
// ── Test helpers ─────────────────────────────────────────────────────────────
|
|
204
|
+
/** Expose internal cache snapshot for test assertions. */
|
|
205
|
+
_snapshotForTests() {
|
|
206
|
+
return new Map(this.namespaceCache);
|
|
207
|
+
}
|
|
208
|
+
/** Reset to clean state — used between test cycles. */
|
|
209
|
+
_resetForTests() {
|
|
210
|
+
this.namespaceCache.clear();
|
|
211
|
+
this._restartCycle = 0;
|
|
212
|
+
}
|
|
213
|
+
}
|
|
64
214
|
//# sourceMappingURL=cache-parity-registry.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cache-parity-registry.js","sourceRoot":"","sources":["../../../src/patches/cache-parity-registry.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"cache-parity-registry.js","sourceRoot":"","sources":["../../../src/patches/cache-parity-registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PatchSpec: sysprompt-strip
|
|
3
|
+
*
|
|
4
|
+
* Establishes the file convention for Phase E#3. NOT REGISTERED with any
|
|
5
|
+
* PatchManifest yet — this is the documented template that real PatchSpec
|
|
6
|
+
* files mirror as the cwd-patch.ts decomposition proceeds.
|
|
7
|
+
*
|
|
8
|
+
* Pattern for Phase E#3:
|
|
9
|
+
* 1. One file per logical patch under `src/patches/<id>.spec.ts`.
|
|
10
|
+
* 2. File <200 LOC (INITIAL.md §NF2).
|
|
11
|
+
* 3. Exports a single `PatchSpec` instance as a named export.
|
|
12
|
+
* 4. `resolve()` owns its upstream symbol lookup — no global target arg.
|
|
13
|
+
* 5. `expectedShape` is sync, returns boolean; checks signature/props.
|
|
14
|
+
* 6. `expectedBehavior` is async; runs a tiny invocation; <100ms.
|
|
15
|
+
* 7. `install` + `uninstall` are paired and round-trip-safe.
|
|
16
|
+
* 8. A companion `tests/patches/<id>.test.ts` proves shape + mutation necessity.
|
|
17
|
+
*
|
|
18
|
+
* Functional source for sysprompt-strip lives at `src/lib/sysprompt-strip.ts`
|
|
19
|
+
* (pure function, reused as-is per INITIAL.md §Reuse). The wrapper that
|
|
20
|
+
* registers it as a Claude Code prototype patch lives at
|
|
21
|
+
* `src/session-bootstrap/sysprompt-strip.ts`. Phase E#3 converts that wrapper
|
|
22
|
+
* into the structured PatchSpec form below.
|
|
23
|
+
*/
|
|
24
|
+
import type { PatchSpec } from '../lifecycle/patch-manifest.js';
|
|
25
|
+
/**
|
|
26
|
+
* Placeholder target shape. Phase E#3 narrows this to the actual
|
|
27
|
+
* SessionManager.prototype.startSession (or equivalent upstream symbol).
|
|
28
|
+
*/
|
|
29
|
+
interface SyspromptStripTarget {
|
|
30
|
+
readonly __placeholder: true;
|
|
31
|
+
}
|
|
32
|
+
export declare const syspromptStripSpec: PatchSpec<SyspromptStripTarget>;
|
|
33
|
+
export {};
|