@a1hvdy/cc-openclaw 0.18.1 → 0.19.0

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.
Files changed (76) hide show
  1. package/README.md +14 -0
  2. package/dist/src/channels/telegram/completion-summary.js +2 -24
  3. package/dist/src/channels/telegram/completion-summary.js.map +1 -1
  4. package/dist/src/channels/telegram/event-reducer.js +70 -16
  5. package/dist/src/channels/telegram/event-reducer.js.map +1 -1
  6. package/dist/src/channels/telegram/live-card.d.ts +7 -90
  7. package/dist/src/channels/telegram/live-card.js +25 -286
  8. package/dist/src/channels/telegram/live-card.js.map +1 -1
  9. package/dist/src/channels/telegram/tool-tracker.d.ts +2 -16
  10. package/dist/src/channels/telegram/tool-tracker.js +18 -81
  11. package/dist/src/channels/telegram/tool-tracker.js.map +1 -1
  12. package/dist/src/config/loader.js +0 -2
  13. package/dist/src/config/loader.js.map +1 -1
  14. package/dist/src/config/schema.d.ts +1 -20
  15. package/dist/src/config/schema.js +1 -12
  16. package/dist/src/config/schema.js.map +1 -1
  17. package/dist/src/constants.d.ts +1 -13
  18. package/dist/src/constants.js +1 -13
  19. package/dist/src/constants.js.map +1 -1
  20. package/dist/src/engines/heartbeat-guard.d.ts +91 -0
  21. package/dist/src/engines/heartbeat-guard.js +120 -0
  22. package/dist/src/engines/heartbeat-guard.js.map +1 -0
  23. package/dist/src/engines/index.d.ts +2 -0
  24. package/dist/src/engines/index.js +3 -0
  25. package/dist/src/engines/index.js.map +1 -1
  26. package/dist/src/engines/persistent-session.d.ts +9 -0
  27. package/dist/src/engines/persistent-session.js +39 -0
  28. package/dist/src/engines/persistent-session.js.map +1 -1
  29. package/dist/src/engines/subprocess-pool.d.ts +78 -0
  30. package/dist/src/engines/subprocess-pool.js +200 -0
  31. package/dist/src/engines/subprocess-pool.js.map +1 -0
  32. package/dist/src/lib/config.d.ts +0 -6
  33. package/dist/src/lib/config.js +0 -81
  34. package/dist/src/lib/config.js.map +1 -1
  35. package/dist/src/lib/cost-rollup.d.ts +36 -0
  36. package/dist/src/lib/cost-rollup.js +125 -0
  37. package/dist/src/lib/cost-rollup.js.map +1 -0
  38. package/dist/src/lib/sysprompt-strip.d.ts +0 -14
  39. package/dist/src/lib/sysprompt-strip.js +2 -79
  40. package/dist/src/lib/sysprompt-strip.js.map +1 -1
  41. package/dist/src/lib/trajectory.d.ts +10 -1
  42. package/dist/src/lib/trajectory.js +37 -6
  43. package/dist/src/lib/trajectory.js.map +1 -1
  44. package/dist/src/lifecycle/safe-restart.d.ts +99 -0
  45. package/dist/src/lifecycle/safe-restart.js +132 -0
  46. package/dist/src/lifecycle/safe-restart.js.map +1 -0
  47. package/dist/src/observability/event-bus.d.ts +21 -0
  48. package/dist/src/observability/event-bus.js.map +1 -1
  49. package/dist/src/openai-compat/non-streaming-handler.js +58 -38
  50. package/dist/src/openai-compat/non-streaming-handler.js.map +1 -1
  51. package/dist/src/openai-compat/openai-compat.js +0 -23
  52. package/dist/src/openai-compat/openai-compat.js.map +1 -1
  53. package/dist/src/openai-compat/response-formatter.d.ts +1 -6
  54. package/dist/src/openai-compat/response-formatter.js +2 -9
  55. package/dist/src/openai-compat/response-formatter.js.map +1 -1
  56. package/dist/src/openai-compat/streaming-handler.js +120 -35
  57. package/dist/src/openai-compat/streaming-handler.js.map +1 -1
  58. package/dist/src/patches/cache-parity-registry.d.ts +83 -0
  59. package/dist/src/patches/cache-parity-registry.js +151 -1
  60. package/dist/src/patches/cache-parity-registry.js.map +1 -1
  61. package/dist/src/patches/sysprompt-strip.spec.d.ts +33 -0
  62. package/dist/src/patches/sysprompt-strip.spec.js +53 -0
  63. package/dist/src/patches/sysprompt-strip.spec.js.map +1 -0
  64. package/dist/src/session/session-manager.d.ts +4 -8
  65. package/dist/src/session/session-manager.js +76 -86
  66. package/dist/src/session/session-manager.js.map +1 -1
  67. package/dist/src/session-bootstrap/cwd-patch.js +0 -35
  68. package/dist/src/session-bootstrap/cwd-patch.js.map +1 -1
  69. package/mcp-tools.json +1 -1
  70. package/package.json +1 -1
  71. package/dist/src/lib/turn-trace.d.ts +0 -34
  72. package/dist/src/lib/turn-trace.js +0 -75
  73. package/dist/src/lib/turn-trace.js.map +0 -1
  74. package/dist/src/openai-compat/insight-format.d.ts +0 -36
  75. package/dist/src/openai-compat/insight-format.js +0 -140
  76. 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 { getTtsAutoMode, isDoneBackstopEnabled } from '../lib/config.js';
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) {
@@ -70,6 +69,14 @@ userMessage, completionId, res, hasTools) {
70
69
  Connection: 'keep-alive',
71
70
  'X-Accel-Buffering': 'no',
72
71
  });
72
+ // v0.14.0 turn-trace probe: track wall-clock + accumulate streamed text
73
+ // for the final per-turn diagnostic emit. accumulatedText mirrors what
74
+ // the client actually received (text deltas only — tool_calls are tracked
75
+ // via toolCallsEmitted). Cheap O(N) string concat, capped by truncation
76
+ // at emit time so memory cost stays bounded.
77
+ const turnStartMs = Date.now();
78
+ let accumulatedText = '';
79
+ let doneBackstopFired = false;
73
80
  let clientDisconnected = false;
74
81
  res.on('close', () => {
75
82
  clientDisconnected = true;
@@ -136,6 +143,14 @@ userMessage, completionId, res, hasTools) {
136
143
  // result-fallback-classifier rejects as an "incomplete terminal response".
137
144
  // This flag drives a final-chunk backstop in each finalization branch.
138
145
  let streamedAnything = false;
146
+ // v0.16 task-006: streaming-path thinking-block surfacing. When the env
147
+ // flag OPENCLAW_THINKING_SURFACE is on, emit a synthetic SSE chunk per
148
+ // thinking delta with `delta.reasoning` (mirroring OpenAI o1/o3 streaming
149
+ // shape). Default OFF for privacy — without the flag, the onThinking
150
+ // callback is undefined and the engine never even fires the event
151
+ // (gated on listenerCount > 0 at emit time).
152
+ const surfaceThinking = getSurfaceThinkingEnabled();
153
+ let thinkingBuffer = '';
139
154
  try {
140
155
  reportStatus('thinking', 'Processing request...');
141
156
  await manager.sendMessage(sessionName, userMessage, {
@@ -173,6 +188,7 @@ userMessage, completionId, res, hasTools) {
173
188
  // between tool_use blocks, OpenClaw client handles that fine.
174
189
  if (chunk.length > 0)
175
190
  streamedAnything = true;
191
+ accumulatedText += chunk;
176
192
  writeSSE(JSON.stringify(formatCompletionChunk(completionId, model, { content: chunk }, null)));
177
193
  }
178
194
  else {
@@ -252,8 +268,38 @@ userMessage, completionId, res, hasTools) {
252
268
  }
253
269
  }
254
270
  },
271
+ // v0.16 task-006: thinking-delta surfacing. Subscribed only when the
272
+ // flag is on so the engine's listenerCount > 0 gate stays cheap when
273
+ // off. Each delta becomes a synthetic SSE chunk with `delta.reasoning`
274
+ // matching sse-translator.ts:170-176 (the unused createSseTranslator
275
+ // path) and the OpenAI o1/o3 streaming shape.
276
+ onThinking: surfaceThinking
277
+ ? (text) => {
278
+ if (!text)
279
+ return;
280
+ thinkingBuffer += text;
281
+ const chunk = {
282
+ id: completionId,
283
+ object: 'chat.completion.chunk',
284
+ created: Math.floor(Date.now() / 1000),
285
+ model,
286
+ choices: [{ index: 0, delta: { reasoning: text }, finish_reason: null }],
287
+ };
288
+ writeSSE(JSON.stringify(chunk));
289
+ }
290
+ : undefined,
255
291
  });
256
292
  reportStatus('idle', 'Ready');
293
+ // v0.16 task-006: thinking_block trajectory event with token-count metadata
294
+ // only (never raw text). Fires when buffer is non-empty regardless of
295
+ // whether the SSE chunks were emitted — observability is independent of
296
+ // the user-visible flag. Mirrors non-streaming-handler.ts:118-127.
297
+ if (thinkingBuffer.length > 0) {
298
+ emitTrajectory('thinking_block', {
299
+ excerpt_chars: thinkingBuffer.length,
300
+ tokens_approx: Math.ceil(thinkingBuffer.length / 4),
301
+ }, sessionName);
302
+ }
257
303
  // Get token usage for final chunk
258
304
  let usage;
259
305
  try {
@@ -272,28 +318,12 @@ userMessage, completionId, res, hasTools) {
272
318
  // chunk before the finish chunk so the upstream classifier sees a
273
319
  // payload. Skip when tool_calls were emitted — those are openai-spec
274
320
  // 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
321
  const noVisiblePayload = !streamedAnything && bufferedText.length === 0 && toolCallsEmitted === 0;
281
322
  if (noVisiblePayload) {
282
- const backstopEnabled = isDoneBackstopEnabled();
283
- emitTrajectory('false_done_backstop', {
284
- path: 'streaming',
285
- suppressed: !backstopEnabled,
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
- }
323
+ writeSSE(JSON.stringify(formatCompletionChunk(completionId, model, { content: 'Done.' }, null)));
324
+ streamedAnything = true;
325
+ doneBackstopFired = true;
326
+ accumulatedText += 'Done.';
297
327
  }
298
328
  // v0.10.3: voice-recovery emission. When voice intent was detected AND
299
329
  // chunks were buffered (not streamed), apply recovery to bufferedText
@@ -314,10 +344,7 @@ userMessage, completionId, res, hasTools) {
314
344
  });
315
345
  if (voiceIntent && !useToolStream && bufferedText) {
316
346
  const recovery = applyVoiceRecovery(userText, bufferedText);
317
- // v0.18 Slice 1: strip empty insights → strip greeting → normalize
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);
347
+ const finalText = recovery.text;
321
348
  _logVoiceDebug('streaming.recovery', {
322
349
  sessionName,
323
350
  recovered: recovery.recovered,
@@ -329,6 +356,10 @@ userMessage, completionId, res, hasTools) {
329
356
  if (recovery.recovered) {
330
357
  emitTrajectory('tool_use', { name: '_voice_recovery', inputKeys: [recovery.via] }, sessionName);
331
358
  }
359
+ // Voice-recovery REPLACES streamed text — overwrite accumulator so the
360
+ // turn-trace reflects what the client actually receives, not what was
361
+ // buffered pre-recovery.
362
+ accumulatedText = finalText;
332
363
  writeSSE(JSON.stringify(formatCompletionChunk(completionId, model, { content: finalText }, null)));
333
364
  const finalChunk = formatCompletionChunk(completionId, model, {}, 'stop');
334
365
  if (usage)
@@ -353,11 +384,8 @@ userMessage, completionId, res, hasTools) {
353
384
  if (parsed.toolCalls.length > 0) {
354
385
  // Emit text content if any
355
386
  if (parsed.textContent) {
356
- // v0.18 Slice 1: composite filter on the text portion of mixed
357
- // tool+text output. Greeting-strip is rare in this path but
358
- // the empty-insight pass still matters.
359
- const normalizedText = applyInsightAndGreetingFilters(parsed.textContent, sessionName);
360
- writeSSE(JSON.stringify(formatCompletionChunk(completionId, model, { content: normalizedText }, null)));
387
+ accumulatedText += parsed.textContent;
388
+ writeSSE(JSON.stringify(formatCompletionChunk(completionId, model, { content: parsed.textContent }, null)));
361
389
  }
362
390
  // Emit tool_call chunks
363
391
  for (let i = 0; i < parsed.toolCalls.length; i++) {
@@ -393,9 +421,8 @@ userMessage, completionId, res, hasTools) {
393
421
  }
394
422
  else {
395
423
  // No tool calls — emit buffered text as content
396
- // v0.18 Slice 1: composite filter (strip-empty → strip-greeting → normalize).
397
- const normalizedBuffered = applyInsightAndGreetingFilters(bufferedText, sessionName);
398
- writeSSE(JSON.stringify(formatCompletionChunk(completionId, model, { content: normalizedBuffered }, null)));
424
+ accumulatedText += bufferedText;
425
+ writeSSE(JSON.stringify(formatCompletionChunk(completionId, model, { content: bufferedText }, null)));
399
426
  const finalChunk = formatCompletionChunk(completionId, model, {}, 'stop');
400
427
  if (usage)
401
428
  finalChunk.usage = usage;
@@ -409,6 +436,34 @@ userMessage, completionId, res, hasTools) {
409
436
  finalChunk.usage = usage;
410
437
  writeSSE(JSON.stringify(finalChunk));
411
438
  }
439
+ // v0.14.0 turn-trace probe: emit per-turn diagnostic. No-op unless
440
+ // CC_OPENCLAW_TURN_TRACE=1 (or CC_OPENCLAW_TRAJECTORY=1) is set.
441
+ // Derive finishReason from the same logic the final-chunk branches use.
442
+ let traceFinishReason = 'stop';
443
+ if (useToolStream && toolCallsEmitted > 0)
444
+ traceFinishReason = 'tool_calls';
445
+ else if (hasTools && bufferedText) {
446
+ const parsed = parseToolCallsFromText(bufferedText);
447
+ if (parsed.toolCalls.length > 0)
448
+ traceFinishReason = 'tool_calls';
449
+ }
450
+ emitTurnTrace({
451
+ path: 'streaming',
452
+ model,
453
+ userTextPreview: userText.slice(0, 500),
454
+ userTextLen: userText.length,
455
+ hasTools,
456
+ useToolStream,
457
+ toolCallCount: toolCallsEmitted,
458
+ outputTextPreview: accumulatedText.slice(0, 500),
459
+ outputTextLen: accumulatedText.length,
460
+ finishReason: traceFinishReason,
461
+ doneBackstopFired,
462
+ voiceIntent,
463
+ tokensIn: usage?.prompt_tokens ?? 0,
464
+ tokensOut: usage?.completion_tokens ?? 0,
465
+ durationMs: Date.now() - turnStartMs,
466
+ }, sessionName);
412
467
  writeSSE('[DONE]');
413
468
  }
414
469
  catch (err) {
@@ -417,6 +472,36 @@ userMessage, completionId, res, hasTools) {
417
472
  formatError(err, { code: ERROR_CODES.SESSION_ERROR, sessionId: sessionName, details: { phase: 'handleStreaming' } });
418
473
  writeSSE(JSON.stringify({ error: { message: err.message, type: 'server_error' } }));
419
474
  writeSSE('[DONE]');
475
+ // v0.15.0 Slice 1: turn-trace probe now ALSO fires on error-exit so
476
+ // broken turns (claude CLI crash, timeout, stalled session kill) get
477
+ // captured in the same trajectory stream as successful turns. Without
478
+ // this, error turns vanish from the probe — exactly the 20:52–21:09
479
+ // UTC window of `version?` greeting-only requests on 2026-05-14 that
480
+ // had request_in events but no turn_complete.
481
+ try {
482
+ emitTurnTrace({
483
+ path: 'streaming',
484
+ model,
485
+ userTextPreview: userText.slice(0, 500),
486
+ userTextLen: userText.length,
487
+ hasTools,
488
+ useToolStream,
489
+ toolCallCount: toolCallsEmitted,
490
+ outputTextPreview: accumulatedText.slice(0, 500),
491
+ outputTextLen: accumulatedText.length,
492
+ finishReason: 'error',
493
+ doneBackstopFired,
494
+ voiceIntent,
495
+ tokensIn: 0,
496
+ tokensOut: 0,
497
+ durationMs: Date.now() - turnStartMs,
498
+ errorMessage: err.message,
499
+ errorName: err.name,
500
+ }, sessionName);
501
+ }
502
+ catch {
503
+ /* Probe must never throw inside catch — would mask the original error. */
504
+ }
420
505
  }
421
506
  finally {
422
507
  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
- return hash === hash2;
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;;;;;;;;;;;;;GAaG;AAQH,MAAM,CAAC,MAAM,uBAAuB,GAAiC;IACnE,EAAE,EAAE,uBAAuB;IAC3B,YAAY,EAAE,yBAAyB;IACvC,YAAY,EAAE,mCAAmC;IAEjD,KAAK,CAAC,OAAO;QACX,uEAAuE;QACvE,uEAAuE;QACvE,8DAA8D;QAC9D,MAAM,GAAG,GAAG,CAAC,MAAM,MAAM,CAAC,wBAAwB,CAAC,CAAY,CAAC;QAChE,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;YAC5C,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;QAClE,CAAC;QACD,OAAO,EAAE,MAAM,EAAE,GAA8B,EAAE,CAAC;IACpD,CAAC;IAED,aAAa,CAAC,MAAyB;QACrC,8DAA8D;QAC9D,qEAAqE;QACrE,sEAAsE;QACtE,gDAAgD;QAChD,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC;QAC1B,OAAO,CACL,OAAO,GAAG,CAAC,aAAa,KAAK,QAAQ;YACrC,OAAO,GAAG,CAAC,oBAAoB,KAAK,UAAU;YAC9C,OAAO,GAAG,CAAC,UAAU,KAAK,UAAU;YACpC,OAAO,GAAG,CAAC,gBAAgB,KAAK,UAAU;YAC1C,OAAO,GAAG,CAAC,YAAY,KAAK,UAAU,CACvC,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,MAAyB;QAC9C,uEAAuE;QACvE,sEAAsE;QACtE,wEAAwE;QACxE,qEAAqE;QACrE,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC;QAC1B,IAAI,OAAO,GAAG,CAAC,UAAU,KAAK,UAAU;YAAE,OAAO,KAAK,CAAC;QACvD,MAAM,IAAI,GAAI,GAAG,CAAC,UAAoC,CAAC,mBAAmB,CAAC,CAAC;QAC5E,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,KAAK,CAAC;QAChE,qDAAqD;QACrD,MAAM,KAAK,GAAI,GAAG,CAAC,UAAoC,CAAC,mBAAmB,CAAC,CAAC;QAC7E,OAAO,IAAI,KAAK,KAAK,CAAC;IACxB,CAAC;IAED,OAAO,CAAC,OAA0B;QAChC,6DAA6D;QAC7D,6DAA6D;IAC/D,CAAC;IAED,SAAS,CAAC,OAA0B;QAClC,2CAA2C;IAC7C,CAAC;CACF,CAAC"}
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 {};