@a1hvdy/cc-openclaw 0.17.0 → 0.18.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.
Files changed (73) hide show
  1. package/README.md +0 -14
  2. package/dist/src/channels/telegram/completion-summary.js +24 -2
  3. package/dist/src/channels/telegram/completion-summary.js.map +1 -1
  4. package/dist/src/channels/telegram/event-reducer.js +15 -3
  5. package/dist/src/channels/telegram/event-reducer.js.map +1 -1
  6. package/dist/src/channels/telegram/live-card.d.ts +90 -7
  7. package/dist/src/channels/telegram/live-card.js +286 -25
  8. package/dist/src/channels/telegram/live-card.js.map +1 -1
  9. package/dist/src/channels/telegram/tool-tracker.d.ts +16 -2
  10. package/dist/src/channels/telegram/tool-tracker.js +81 -18
  11. package/dist/src/channels/telegram/tool-tracker.js.map +1 -1
  12. package/dist/src/config/loader.js +2 -0
  13. package/dist/src/config/loader.js.map +1 -1
  14. package/dist/src/config/schema.d.ts +20 -1
  15. package/dist/src/config/schema.js +12 -1
  16. package/dist/src/config/schema.js.map +1 -1
  17. package/dist/src/constants.d.ts +13 -1
  18. package/dist/src/constants.js +13 -1
  19. package/dist/src/constants.js.map +1 -1
  20. package/dist/src/engines/index.d.ts +0 -2
  21. package/dist/src/engines/index.js +0 -3
  22. package/dist/src/engines/index.js.map +1 -1
  23. package/dist/src/engines/persistent-session.d.ts +0 -9
  24. package/dist/src/engines/persistent-session.js +0 -39
  25. package/dist/src/engines/persistent-session.js.map +1 -1
  26. package/dist/src/lib/config.d.ts +6 -0
  27. package/dist/src/lib/config.js +81 -0
  28. package/dist/src/lib/config.js.map +1 -1
  29. package/dist/src/lib/sysprompt-strip.d.ts +14 -0
  30. package/dist/src/lib/sysprompt-strip.js +79 -2
  31. package/dist/src/lib/sysprompt-strip.js.map +1 -1
  32. package/dist/src/lib/trajectory.d.ts +1 -10
  33. package/dist/src/lib/trajectory.js +6 -37
  34. package/dist/src/lib/trajectory.js.map +1 -1
  35. package/dist/src/lib/turn-trace.d.ts +34 -0
  36. package/dist/src/lib/turn-trace.js +75 -0
  37. package/dist/src/lib/turn-trace.js.map +1 -0
  38. package/dist/src/observability/event-bus.d.ts +0 -21
  39. package/dist/src/observability/event-bus.js.map +1 -1
  40. package/dist/src/openai-compat/insight-format.d.ts +36 -0
  41. package/dist/src/openai-compat/insight-format.js +140 -0
  42. package/dist/src/openai-compat/insight-format.js.map +1 -0
  43. package/dist/src/openai-compat/non-streaming-handler.js +38 -58
  44. package/dist/src/openai-compat/non-streaming-handler.js.map +1 -1
  45. package/dist/src/openai-compat/openai-compat.js +23 -0
  46. package/dist/src/openai-compat/openai-compat.js.map +1 -1
  47. package/dist/src/openai-compat/response-formatter.d.ts +6 -1
  48. package/dist/src/openai-compat/response-formatter.js +9 -2
  49. package/dist/src/openai-compat/response-formatter.js.map +1 -1
  50. package/dist/src/openai-compat/streaming-handler.js +35 -120
  51. package/dist/src/openai-compat/streaming-handler.js.map +1 -1
  52. package/dist/src/patches/cache-parity-registry.d.ts +0 -83
  53. package/dist/src/patches/cache-parity-registry.js +1 -151
  54. package/dist/src/patches/cache-parity-registry.js.map +1 -1
  55. package/dist/src/session/session-manager.d.ts +8 -4
  56. package/dist/src/session/session-manager.js +86 -76
  57. package/dist/src/session/session-manager.js.map +1 -1
  58. package/dist/src/session-bootstrap/cwd-patch.js +35 -0
  59. package/dist/src/session-bootstrap/cwd-patch.js.map +1 -1
  60. package/mcp-tools.json +1 -1
  61. package/package.json +1 -1
  62. package/dist/src/engines/heartbeat-guard.d.ts +0 -91
  63. package/dist/src/engines/heartbeat-guard.js +0 -120
  64. package/dist/src/engines/heartbeat-guard.js.map +0 -1
  65. package/dist/src/engines/subprocess-pool.d.ts +0 -78
  66. package/dist/src/engines/subprocess-pool.js +0 -200
  67. package/dist/src/engines/subprocess-pool.js.map +0 -1
  68. package/dist/src/lib/cost-rollup.d.ts +0 -36
  69. package/dist/src/lib/cost-rollup.js +0 -125
  70. package/dist/src/lib/cost-rollup.js.map +0 -1
  71. package/dist/src/lifecycle/safe-restart.d.ts +0 -99
  72. package/dist/src/lifecycle/safe-restart.js +0 -132
  73. package/dist/src/lifecycle/safe-restart.js.map +0 -1
@@ -1,99 +0,0 @@
1
- /**
2
- * safe-restart — in-process gateway restart that preserves the current
3
- * Telegram session.
4
- *
5
- * Pre-Execution Decision (PRP_v2 §Pre-Execution Decisions, locked):
6
- * Path: --safe-current-session flag (in-process).
7
- * Rationale: avoids tmux zombie risk (Risk Register row 3); cleaner state
8
- * model; tmux-detach remains available as a secondary path (v0.17 deferred).
9
- *
10
- * Usage (programmatic):
11
- * const restart = new SafeRestart({ sessionId: 'my-session' });
12
- * const result = await restart.run();
13
- *
14
- * Usage (CLI flag):
15
- * cc-openclaw --safe-current-session [--session-id <id>]
16
- * Parsed in src/cli/index.ts and forwarded here.
17
- *
18
- * Self-survival contract:
19
- * When OpenClaw triggers a gateway restart while a Telegram session is
20
- * active, the session must NOT fire a sub-agent "self-survival" turn. This
21
- * module registers a SIGTERM handler that:
22
- * 1. Flushes in-flight state (EventBus drain-wait up to FLUSH_TIMEOUT_MS).
23
- * 2. Marks the named session as restart-pending in the session registry.
24
- * 3. Emits a 'safe-restart.initiated' telemetry event.
25
- * 4. Returns "in-process" — the gateway respawner picks this signal up and
26
- * skips the self-survival sub-agent path.
27
- *
28
- * SecondaryPath — tmux-detach:
29
- * See scripts/gateway-detach.sh. NOT the default per locked decision above.
30
- * SafeRestart.run() returns { mode: 'not-implemented' } when forced into
31
- * tmux-detach mode so callers handle it cleanly without crashing.
32
- */
33
- import { EventBus } from '../observability/event-bus.js';
34
- export type RestartMode = 'in-process' | 'tmux-detach';
35
- export interface SafeRestartOptions {
36
- /** Session ID that must survive the restart. */
37
- sessionId: string;
38
- /**
39
- * Restart mode. Defaults to 'in-process' per locked PRP_v2 decision.
40
- * 'tmux-detach' is a stub that returns { mode: 'not-implemented' }.
41
- */
42
- mode?: RestartMode;
43
- /** EventBus to emit telemetry events. If omitted, a private bus is used. */
44
- bus?: EventBus;
45
- /**
46
- * Maximum milliseconds to wait for in-flight state flush before proceeding.
47
- * Default: 2000.
48
- */
49
- flushTimeoutMs?: number;
50
- }
51
- export interface SafeRestartResult {
52
- /** 'in-process' when restart succeeded in-process. */
53
- mode: 'in-process' | 'not-implemented';
54
- sessionId: string;
55
- /** ISO timestamp of when restart was initiated. */
56
- initiatedAt: string;
57
- }
58
- export declare class SafeRestart {
59
- private readonly sessionId;
60
- private readonly mode;
61
- private readonly bus;
62
- private readonly flushTimeoutMs;
63
- constructor(opts: SafeRestartOptions);
64
- /**
65
- * Execute the safe-restart sequence.
66
- *
67
- * In-process path:
68
- * 1. Wait up to flushTimeoutMs for in-flight state to drain.
69
- * 2. Emit 'safe-restart.initiated' telemetry.
70
- * 3. Return { mode: 'in-process', ... }.
71
- *
72
- * Tmux-detach path:
73
- * Returns { mode: 'not-implemented', ... } — deferred to v0.17.
74
- * See scripts/gateway-detach.sh for the secondary path stub.
75
- */
76
- run(): Promise<SafeRestartResult>;
77
- /**
78
- * Wait for in-flight state to drain. If flush takes longer than
79
- * flushTimeoutMs, we proceed anyway — restart is more important than
80
- * waiting indefinitely.
81
- */
82
- private flushInFlight;
83
- /**
84
- * Give the EventBus a single microtask tick to deliver any pending
85
- * synchronous events before we mark the session as restart-pending.
86
- */
87
- private drainEventBus;
88
- private emitTelemetry;
89
- }
90
- /**
91
- * Returns true when the --safe-current-session flag is present in argv OR
92
- * when OPENCLAW_SAFE_CURRENT_SESSION=1 is set in the environment.
93
- * Used by src/cli/index.ts to decide whether to run the safe-restart path.
94
- */
95
- export declare function isSafeCurrentSessionRequested(argv?: string[]): boolean;
96
- /**
97
- * Parse --session-id <value> from argv. Returns undefined when not present.
98
- */
99
- export declare function parseSessionIdFromArgv(argv?: string[]): string | undefined;
@@ -1,132 +0,0 @@
1
- /**
2
- * safe-restart — in-process gateway restart that preserves the current
3
- * Telegram session.
4
- *
5
- * Pre-Execution Decision (PRP_v2 §Pre-Execution Decisions, locked):
6
- * Path: --safe-current-session flag (in-process).
7
- * Rationale: avoids tmux zombie risk (Risk Register row 3); cleaner state
8
- * model; tmux-detach remains available as a secondary path (v0.17 deferred).
9
- *
10
- * Usage (programmatic):
11
- * const restart = new SafeRestart({ sessionId: 'my-session' });
12
- * const result = await restart.run();
13
- *
14
- * Usage (CLI flag):
15
- * cc-openclaw --safe-current-session [--session-id <id>]
16
- * Parsed in src/cli/index.ts and forwarded here.
17
- *
18
- * Self-survival contract:
19
- * When OpenClaw triggers a gateway restart while a Telegram session is
20
- * active, the session must NOT fire a sub-agent "self-survival" turn. This
21
- * module registers a SIGTERM handler that:
22
- * 1. Flushes in-flight state (EventBus drain-wait up to FLUSH_TIMEOUT_MS).
23
- * 2. Marks the named session as restart-pending in the session registry.
24
- * 3. Emits a 'safe-restart.initiated' telemetry event.
25
- * 4. Returns "in-process" — the gateway respawner picks this signal up and
26
- * skips the self-survival sub-agent path.
27
- *
28
- * SecondaryPath — tmux-detach:
29
- * See scripts/gateway-detach.sh. NOT the default per locked decision above.
30
- * SafeRestart.run() returns { mode: 'not-implemented' } when forced into
31
- * tmux-detach mode so callers handle it cleanly without crashing.
32
- */
33
- import { EventBus } from '../observability/event-bus.js';
34
- // ── Constants ─────────────────────────────────────────────────────────────────
35
- const FLUSH_TIMEOUT_MS = 2_000;
36
- const ENV_FLAG = 'OPENCLAW_SAFE_CURRENT_SESSION';
37
- // ── SafeRestart class ─────────────────────────────────────────────────────────
38
- export class SafeRestart {
39
- sessionId;
40
- mode;
41
- bus;
42
- flushTimeoutMs;
43
- constructor(opts) {
44
- this.sessionId = opts.sessionId;
45
- this.mode = opts.mode ?? 'in-process';
46
- this.bus = opts.bus ?? new EventBus();
47
- this.flushTimeoutMs = opts.flushTimeoutMs ?? FLUSH_TIMEOUT_MS;
48
- }
49
- /**
50
- * Execute the safe-restart sequence.
51
- *
52
- * In-process path:
53
- * 1. Wait up to flushTimeoutMs for in-flight state to drain.
54
- * 2. Emit 'safe-restart.initiated' telemetry.
55
- * 3. Return { mode: 'in-process', ... }.
56
- *
57
- * Tmux-detach path:
58
- * Returns { mode: 'not-implemented', ... } — deferred to v0.17.
59
- * See scripts/gateway-detach.sh for the secondary path stub.
60
- */
61
- async run() {
62
- const initiatedAt = new Date().toISOString();
63
- if (this.mode === 'tmux-detach') {
64
- // Secondary path — deferred to v0.17. Return not-implemented cleanly.
65
- this.emitTelemetry('safe-restart.not-implemented', initiatedAt);
66
- return { mode: 'not-implemented', sessionId: this.sessionId, initiatedAt };
67
- }
68
- // In-process path.
69
- await this.flushInFlight();
70
- this.emitTelemetry('safe-restart.initiated', initiatedAt);
71
- return { mode: 'in-process', sessionId: this.sessionId, initiatedAt };
72
- }
73
- // ── Private helpers ─────────────────────────────────────────────────────────
74
- /**
75
- * Wait for in-flight state to drain. If flush takes longer than
76
- * flushTimeoutMs, we proceed anyway — restart is more important than
77
- * waiting indefinitely.
78
- */
79
- async flushInFlight() {
80
- await Promise.race([
81
- this.drainEventBus(),
82
- new Promise((resolve) => setTimeout(resolve, this.flushTimeoutMs)),
83
- ]);
84
- }
85
- /**
86
- * Give the EventBus a single microtask tick to deliver any pending
87
- * synchronous events before we mark the session as restart-pending.
88
- */
89
- async drainEventBus() {
90
- // EventBus.emit() is synchronous; a single await tick ensures any
91
- // callers that queued events via Promise.resolve() have run.
92
- await Promise.resolve();
93
- }
94
- emitTelemetry(event, initiatedAt) {
95
- // EventBus EventMap is typed — we use the raw emit approach for
96
- // extensibility events not yet in the typed map. A typed entry will
97
- // be added to EventMap when the telemetry consumer (agent-streaming)
98
- // lands in Phase 2.
99
- try {
100
- this.bus.emit(event, {
101
- sessionId: this.sessionId,
102
- initiatedAt,
103
- mode: this.mode,
104
- });
105
- }
106
- catch {
107
- // Telemetry is best-effort; never block restart on a bus error.
108
- }
109
- }
110
- }
111
- // ── CLI flag helpers ──────────────────────────────────────────────────────────
112
- /**
113
- * Returns true when the --safe-current-session flag is present in argv OR
114
- * when OPENCLAW_SAFE_CURRENT_SESSION=1 is set in the environment.
115
- * Used by src/cli/index.ts to decide whether to run the safe-restart path.
116
- */
117
- export function isSafeCurrentSessionRequested(argv = process.argv) {
118
- if (process.env[ENV_FLAG] === '1')
119
- return true;
120
- return argv.includes('--safe-current-session');
121
- }
122
- /**
123
- * Parse --session-id <value> from argv. Returns undefined when not present.
124
- */
125
- export function parseSessionIdFromArgv(argv = process.argv) {
126
- const idx = argv.indexOf('--session-id');
127
- if (idx !== -1 && idx + 1 < argv.length) {
128
- return argv[idx + 1];
129
- }
130
- return undefined;
131
- }
132
- //# sourceMappingURL=safe-restart.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"safe-restart.js","sourceRoot":"","sources":["../../../src/lifecycle/safe-restart.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AAEzD,iFAAiF;AAEjF,MAAM,gBAAgB,GAAG,KAAK,CAAC;AAC/B,MAAM,QAAQ,GAAG,+BAA+B,CAAC;AA+BjD,iFAAiF;AAEjF,MAAM,OAAO,WAAW;IACL,SAAS,CAAS;IAClB,IAAI,CAAc;IAClB,GAAG,CAAW;IACd,cAAc,CAAS;IAExC,YAAY,IAAwB;QAClC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;QAChC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,YAAY,CAAC;QACtC,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,IAAI,QAAQ,EAAE,CAAC;QACtC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,IAAI,gBAAgB,CAAC;IAChE,CAAC;IAED;;;;;;;;;;;OAWG;IACH,KAAK,CAAC,GAAG;QACP,MAAM,WAAW,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAE7C,IAAI,IAAI,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;YAChC,sEAAsE;YACtE,IAAI,CAAC,aAAa,CAAC,8BAA8B,EAAE,WAAW,CAAC,CAAC;YAChE,OAAO,EAAE,IAAI,EAAE,iBAAiB,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,WAAW,EAAE,CAAC;QAC7E,CAAC;QAED,mBAAmB;QACnB,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;QAC3B,IAAI,CAAC,aAAa,CAAC,wBAAwB,EAAE,WAAW,CAAC,CAAC;QAE1D,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,WAAW,EAAE,CAAC;IACxE,CAAC;IAED,+EAA+E;IAE/E;;;;OAIG;IACK,KAAK,CAAC,aAAa;QACzB,MAAM,OAAO,CAAC,IAAI,CAAC;YACjB,IAAI,CAAC,aAAa,EAAE;YACpB,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;SACzE,CAAC,CAAC;IACL,CAAC;IAED;;;OAGG;IACK,KAAK,CAAC,aAAa;QACzB,kEAAkE;QAClE,6DAA6D;QAC7D,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;IAC1B,CAAC;IAEO,aAAa,CAAC,KAAa,EAAE,WAAmB;QACtD,gEAAgE;QAChE,oEAAoE;QACpE,qEAAqE;QACrE,oBAAoB;QACpB,IAAI,CAAC;YACF,IAAI,CAAC,GAAwD,CAAC,IAAI,CAAC,KAAK,EAAE;gBACzE,SAAS,EAAE,IAAI,CAAC,SAAS;gBACzB,WAAW;gBACX,IAAI,EAAE,IAAI,CAAC,IAAI;aAChB,CAAC,CAAC;QACL,CAAC;QAAC,MAAM,CAAC;YACP,gEAAgE;QAClE,CAAC;IACH,CAAC;CACF;AAED,iFAAiF;AAEjF;;;;GAIG;AACH,MAAM,UAAU,6BAA6B,CAAC,OAAiB,OAAO,CAAC,IAAI;IACzE,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,GAAG;QAAE,OAAO,IAAI,CAAC;IAC/C,OAAO,IAAI,CAAC,QAAQ,CAAC,wBAAwB,CAAC,CAAC;AACjD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,sBAAsB,CAAC,OAAiB,OAAO,CAAC,IAAI;IAClE,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;IACzC,IAAI,GAAG,KAAK,CAAC,CAAC,IAAI,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QACxC,OAAO,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;IACvB,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC"}