@a1hvdy/cc-openclaw 0.6.0 → 0.7.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 (88) hide show
  1. package/dist/src/engines/persistent-session.js +13 -0
  2. package/dist/src/engines/persistent-session.js.map +1 -1
  3. package/dist/src/lib/config.d.ts +2 -0
  4. package/dist/src/lib/config.js +19 -0
  5. package/dist/src/lib/config.js.map +1 -1
  6. package/dist/src/lib/trajectory.d.ts +1 -1
  7. package/dist/src/lib/trajectory.js.map +1 -1
  8. package/dist/src/lib/vendor-paths.d.ts +6 -4
  9. package/dist/src/lib/vendor-paths.js +21 -14
  10. package/dist/src/lib/vendor-paths.js.map +1 -1
  11. package/dist/src/openai-compat/openai-compat.d.ts +7 -1
  12. package/dist/src/openai-compat/openai-compat.js +35 -4
  13. package/dist/src/openai-compat/openai-compat.js.map +1 -1
  14. package/dist/src/openai-compat/sse-translator.d.ts +23 -3
  15. package/dist/src/openai-compat/sse-translator.js +45 -6
  16. package/dist/src/openai-compat/sse-translator.js.map +1 -1
  17. package/dist/src/types.d.ts +9 -0
  18. package/package.json +2 -3
  19. package/vendor/base-oneshot-session.d.ts +0 -87
  20. package/vendor/base-oneshot-session.js +0 -227
  21. package/vendor/base-oneshot-session.js.map +0 -1
  22. package/vendor/circuit-breaker.d.ts +0 -21
  23. package/vendor/circuit-breaker.js +0 -47
  24. package/vendor/circuit-breaker.js.map +0 -1
  25. package/vendor/consensus.d.ts +0 -20
  26. package/vendor/consensus.js +0 -52
  27. package/vendor/consensus.js.map +0 -1
  28. package/vendor/constants.d.ts +0 -130
  29. package/vendor/constants.js +0 -139
  30. package/vendor/constants.js.map +0 -1
  31. package/vendor/council.d.ts +0 -67
  32. package/vendor/council.js +0 -913
  33. package/vendor/council.js.map +0 -1
  34. package/vendor/embedded-server.d.ts +0 -25
  35. package/vendor/embedded-server.js +0 -373
  36. package/vendor/embedded-server.js.map +0 -1
  37. package/vendor/inbox-manager.d.ts +0 -38
  38. package/vendor/inbox-manager.js +0 -111
  39. package/vendor/inbox-manager.js.map +0 -1
  40. package/vendor/index.d.ts +0 -63
  41. package/vendor/index.js +0 -705
  42. package/vendor/index.js.map +0 -1
  43. package/vendor/logger.d.ts +0 -16
  44. package/vendor/logger.js +0 -44
  45. package/vendor/logger.js.map +0 -1
  46. package/vendor/models.d.ts +0 -69
  47. package/vendor/models.js +0 -289
  48. package/vendor/models.js.map +0 -1
  49. package/vendor/openai-compat.d.ts +0 -197
  50. package/vendor/openai-compat.js +0 -765
  51. package/vendor/openai-compat.js.map +0 -1
  52. package/vendor/persistent-codex-session.d.ts +0 -16
  53. package/vendor/persistent-codex-session.js +0 -105
  54. package/vendor/persistent-codex-session.js.map +0 -1
  55. package/vendor/persistent-cursor-session.d.ts +0 -21
  56. package/vendor/persistent-cursor-session.js +0 -241
  57. package/vendor/persistent-cursor-session.js.map +0 -1
  58. package/vendor/persistent-custom-session.d.ts +0 -78
  59. package/vendor/persistent-custom-session.js +0 -937
  60. package/vendor/persistent-custom-session.js.map +0 -1
  61. package/vendor/persistent-gemini-session.d.ts +0 -21
  62. package/vendor/persistent-gemini-session.js +0 -216
  63. package/vendor/persistent-gemini-session.js.map +0 -1
  64. package/vendor/persistent-session.d.ts +0 -74
  65. package/vendor/persistent-session.js +0 -698
  66. package/vendor/persistent-session.js.map +0 -1
  67. package/vendor/proxy/anthropic-adapter.d.ts +0 -136
  68. package/vendor/proxy/anthropic-adapter.js +0 -392
  69. package/vendor/proxy/anthropic-adapter.js.map +0 -1
  70. package/vendor/proxy/handler.d.ts +0 -39
  71. package/vendor/proxy/handler.js +0 -323
  72. package/vendor/proxy/handler.js.map +0 -1
  73. package/vendor/proxy/schema-cleaner.d.ts +0 -11
  74. package/vendor/proxy/schema-cleaner.js +0 -34
  75. package/vendor/proxy/schema-cleaner.js.map +0 -1
  76. package/vendor/proxy/thought-cache.d.ts +0 -19
  77. package/vendor/proxy/thought-cache.js +0 -53
  78. package/vendor/proxy/thought-cache.js.map +0 -1
  79. package/vendor/session-manager.d.ts +0 -211
  80. package/vendor/session-manager.js +0 -1345
  81. package/vendor/session-manager.js.map +0 -1
  82. package/vendor/skill-resolver.js +0 -107
  83. package/vendor/types.d.ts +0 -466
  84. package/vendor/types.js +0 -8
  85. package/vendor/types.js.map +0 -1
  86. package/vendor/validation.d.ts +0 -31
  87. package/vendor/validation.js +0 -104
  88. package/vendor/validation.js.map +0 -1
@@ -7,13 +7,19 @@
7
7
  * stream.
8
8
  *
9
9
  * Anthropic content blocks (text vs tool_use vs thinking) become OpenAI
10
- * `delta.content` (text) or `delta.tool_calls[N]` (tool_use). Thinking blocks
11
- * are skipped cc-openclaw does not surface extended thinking through the
12
- * OpenAI compat surface.
10
+ * `delta.content` (text) or `delta.tool_calls[N]` (tool_use). Thinking
11
+ * blocks are dropped by default; v0.7.0 added an opt-in `surfaceThinking`
12
+ * flag that accumulates thinking_delta text and exposes it as a `reasoning`
13
+ * field (mirroring OpenAI o1/o3 schema). Default OFF for privacy: thinking
14
+ * content can contain raw chain-of-thought, considered-but-rejected
15
+ * candidates, and PII. `signature_delta` is NEVER forwarded — it carries
16
+ * Anthropic's cryptographic block-integrity signature, internal-only.
13
17
  *
14
18
  * State: each translator instance tracks a per-content-block-index map of
15
19
  * `tool_use` blocks to their assigned OpenAI tool_calls index, so
16
20
  * `input_json_delta` events emit deltas at the correct tool_calls[N] slot.
21
+ * When `surfaceThinking` is on, additionally tracks `thinkingBuffer` and
22
+ * `thinkingIndex` to assemble the reasoning text across deltas.
17
23
  */
18
24
  import type { ParsedEvent } from './cli-stream-parser.js';
19
25
  export interface SseTranslator {
@@ -21,11 +27,25 @@ export interface SseTranslator {
21
27
  translate(event: ParsedEvent): string[];
22
28
  /** Emit final `data: [DONE]\n\n` sentinel. Call once at end of stream. */
23
29
  done(): string[];
30
+ /**
31
+ * v0.7.0: read accumulated thinking text after stream ends. Empty string
32
+ * when `surfaceThinking` was off or no thinking blocks fired. Used by
33
+ * non-streaming response builder to attach `choices[0].message.reasoning`.
34
+ */
35
+ getReasoning(): string;
24
36
  }
25
37
  export interface CreateSseTranslatorParams {
26
38
  completionId: string;
27
39
  model: string;
28
40
  /** When true, emits an OpenAI usage chunk on message_delta (default false). */
29
41
  emitUsage?: boolean;
42
+ /**
43
+ * v0.7.0: when true, accumulates `thinking_delta` text and emits synthetic
44
+ * SSE chunks with `delta.reasoning = <text>` (mirroring OpenAI o1/o3 streaming
45
+ * shape). Default false. Privacy-sensitive — opt-in only via env-flag-driven
46
+ * caller, typically `getSurfaceThinkingEnabled()` from `lib/config.ts`.
47
+ * `signature_delta` is NEVER forwarded regardless of this flag.
48
+ */
49
+ surfaceThinking?: boolean;
30
50
  }
31
51
  export declare function createSseTranslator(params: CreateSseTranslatorParams): SseTranslator;
@@ -7,21 +7,30 @@
7
7
  * stream.
8
8
  *
9
9
  * Anthropic content blocks (text vs tool_use vs thinking) become OpenAI
10
- * `delta.content` (text) or `delta.tool_calls[N]` (tool_use). Thinking blocks
11
- * are skipped cc-openclaw does not surface extended thinking through the
12
- * OpenAI compat surface.
10
+ * `delta.content` (text) or `delta.tool_calls[N]` (tool_use). Thinking
11
+ * blocks are dropped by default; v0.7.0 added an opt-in `surfaceThinking`
12
+ * flag that accumulates thinking_delta text and exposes it as a `reasoning`
13
+ * field (mirroring OpenAI o1/o3 schema). Default OFF for privacy: thinking
14
+ * content can contain raw chain-of-thought, considered-but-rejected
15
+ * candidates, and PII. `signature_delta` is NEVER forwarded — it carries
16
+ * Anthropic's cryptographic block-integrity signature, internal-only.
13
17
  *
14
18
  * State: each translator instance tracks a per-content-block-index map of
15
19
  * `tool_use` blocks to their assigned OpenAI tool_calls index, so
16
20
  * `input_json_delta` events emit deltas at the correct tool_calls[N] slot.
21
+ * When `surfaceThinking` is on, additionally tracks `thinkingBuffer` and
22
+ * `thinkingIndex` to assemble the reasoning text across deltas.
17
23
  */
18
24
  export function createSseTranslator(params) {
19
- const { completionId, model, emitUsage = false } = params;
25
+ const { completionId, model, emitUsage = false, surfaceThinking = false } = params;
20
26
  const created = Math.floor(Date.now() / 1000);
21
27
  // anthropic_index → openai_tool_call_index (only for tool_use blocks)
22
28
  const indexToToolCallIndex = new Map();
23
29
  let nextToolCallIndex = 0;
24
30
  let promptTokens = 0;
31
+ // v0.7.0: thinking-block accumulation (gated on surfaceThinking).
32
+ let thinkingBuffer = '';
33
+ let thinkingActiveIndex = null;
25
34
  function buildChunk(delta, finishReason = null) {
26
35
  const payload = {
27
36
  id: completionId,
@@ -88,7 +97,12 @@ export function createSseTranslator(params) {
88
97
  }),
89
98
  ];
90
99
  }
91
- // text and thinking: no SSE on start
100
+ // v0.7.0: track active thinking block for delta accumulation.
101
+ if (block.type === 'thinking') {
102
+ thinkingActiveIndex = event.index;
103
+ return [];
104
+ }
105
+ // text: no SSE on start
92
106
  return [];
93
107
  }
94
108
  case 'content_block_delta': {
@@ -113,10 +127,26 @@ export function createSseTranslator(params) {
113
127
  }),
114
128
  ];
115
129
  }
116
- // thinking_delta and signature_delta: skip
130
+ // v0.7.0: thinking_delta accumulate buffer; emit synthetic
131
+ // `delta.reasoning` chunk only when surfaceThinking is on.
132
+ if (d.type === 'thinking_delta') {
133
+ const text = d.thinking ?? '';
134
+ if (text)
135
+ thinkingBuffer += text;
136
+ if (surfaceThinking && text) {
137
+ return [buildChunk({ reasoning: text })];
138
+ }
139
+ return [];
140
+ }
141
+ // signature_delta: NEVER forward (Anthropic-internal cryptographic
142
+ // integrity field). signature_delta also doesn't accumulate.
117
143
  return [];
118
144
  }
119
145
  case 'content_block_stop':
146
+ // v0.7.0: clear active thinking-block tracking
147
+ if (thinkingActiveIndex !== null && event.index === thinkingActiveIndex) {
148
+ thinkingActiveIndex = null;
149
+ }
120
150
  return [];
121
151
  case 'message_delta': {
122
152
  const finishReason = mapStopReason(event.delta.stop_reason);
@@ -150,6 +180,15 @@ export function createSseTranslator(params) {
150
180
  done() {
151
181
  return ['data: [DONE]\n\n'];
152
182
  },
183
+ /**
184
+ * v0.7.0: returns accumulated thinking-block text for the non-streaming
185
+ * response path to attach as `choices[0].message.reasoning`. Returns
186
+ * empty string when `surfaceThinking` was off or no thinking blocks
187
+ * fired this turn. Always safe to call.
188
+ */
189
+ getReasoning() {
190
+ return surfaceThinking ? thinkingBuffer : '';
191
+ },
153
192
  };
154
193
  }
155
194
  //# sourceMappingURL=sse-translator.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"sse-translator.js","sourceRoot":"","sources":["../../../src/openai-compat/sse-translator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sse-translator.js","sourceRoot":"","sources":["../../../src/openai-compat/sse-translator.ts"],"names":[],"mappings":"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"}
@@ -291,6 +291,15 @@ export interface StreamCallbacks {
291
291
  onText?: (text: string) => void;
292
292
  onToolUse?: (event: unknown) => void;
293
293
  onToolResult?: (event: unknown) => void;
294
+ /**
295
+ * v0.7.1: extended-thinking content (opus-4-7+ with reasoning enabled).
296
+ * Fires once per `thinking_delta` event with the partial reasoning text.
297
+ * The caller is responsible for accumulation. Privacy-sensitive — most
298
+ * paths should gate this on `getSurfaceThinkingEnabled()` from
299
+ * `lib/config.ts` before subscribing. NEVER receives `signature_delta`
300
+ * content (Anthropic-internal cryptographic field).
301
+ */
302
+ onThinking?: (text: string) => void;
294
303
  }
295
304
  export interface TurnResult {
296
305
  text: string;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@a1hvdy/cc-openclaw",
3
- "version": "0.6.0",
3
+ "version": "0.7.1",
4
4
  "description": "A1xAI's Anthropic CLI bridge plugin for OpenClaw",
5
5
  "author": "@a1cy",
6
6
  "license": "MIT",
@@ -23,7 +23,6 @@
23
23
  },
24
24
  "files": [
25
25
  "dist/",
26
- "vendor/",
27
26
  "configs/",
28
27
  "skills/",
29
28
  "openclaw.plugin.json",
@@ -64,4 +63,4 @@
64
63
  "typescript-eslint": "^8.20.0",
65
64
  "vitest": "^3.1.0"
66
65
  }
67
- }
66
+ }
@@ -1,87 +0,0 @@
1
- /**
2
- * Base class for one-shot (process-per-send) session engines.
3
- *
4
- * Shared by Codex, Gemini, and Cursor — eliminates ~200 LOC of duplication
5
- * per engine. Subclasses only implement _run() (engine-specific CLI invocation)
6
- * and optionally override _cleanupProc() for extra cleanup (readline, streams).
7
- */
8
- import { ChildProcess } from 'node:child_process';
9
- import { EventEmitter } from 'node:events';
10
- import { type SessionConfig, type SessionStats, type EffortLevel, type ISession, type SessionSendOptions, type TurnResult, type CostBreakdown } from './types.js';
11
- /**
12
- * Parameterizes engine-specific behavior without requiring method overrides.
13
- * Passed to the BaseOneShotSession constructor by each subclass.
14
- */
15
- export interface OneShotEngineConfig {
16
- /** Prefix for session ID generation, e.g. 'codex', 'gemini', 'cursor' */
17
- enginePrefix: string;
18
- /** Fallback model for pricing lookups when session has no explicit model */
19
- defaultModel: string;
20
- /** Model name shown in getCost() output; defaults to defaultModel if omitted */
21
- defaultModelDisplay?: string;
22
- /** Whether this engine tracks cached token pricing (Codex=false, Gemini/Cursor=true) */
23
- supportsCachedTokens: boolean;
24
- /** Human-readable engine name for compact() no-op message */
25
- engineDisplayName: string;
26
- }
27
- export declare abstract class BaseOneShotSession extends EventEmitter implements ISession {
28
- protected options: SessionConfig;
29
- protected engineBin: string;
30
- protected engineCfg: OneShotEngineConfig;
31
- private _isReady;
32
- private _isPaused;
33
- private _isBusy;
34
- protected currentProc: ChildProcess | null;
35
- private currentRequestId;
36
- private _startTime;
37
- private _history;
38
- sessionId?: string;
39
- protected _stats: {
40
- turns: number;
41
- toolCalls: number;
42
- toolErrors: number;
43
- tokensIn: number;
44
- tokensOut: number;
45
- cachedTokens: number;
46
- costUsd: number;
47
- lastActivity: string | null;
48
- };
49
- constructor(config: SessionConfig, bin: string, engineCfg: OneShotEngineConfig);
50
- get pid(): number | undefined;
51
- get isReady(): boolean;
52
- get isPaused(): boolean;
53
- get isBusy(): boolean;
54
- start(): Promise<this>;
55
- send(message: string | unknown[], options?: SessionSendOptions): Promise<TurnResult | {
56
- requestId: number;
57
- sent: boolean;
58
- }>;
59
- /** Engine-specific: spawn the CLI and return a TurnResult. */
60
- protected abstract _run(message: string, options: SessionSendOptions): Promise<TurnResult>;
61
- getStats(): SessionStats & {
62
- sessionId?: string;
63
- uptime: number;
64
- };
65
- getHistory(limit?: number): Array<{
66
- time: string;
67
- type: string;
68
- event: unknown;
69
- }>;
70
- compact(_summary?: string): Promise<TurnResult>;
71
- getEffort(): EffortLevel;
72
- setEffort(level: EffortLevel): void;
73
- getCost(): CostBreakdown;
74
- resolveModel(alias: string): string;
75
- pause(): void;
76
- resume(): void;
77
- stop(): void;
78
- /** Override in subclasses that need extra cleanup (readline, stream destroy). */
79
- protected _cleanupProc(): void;
80
- protected _getModelPricing(): import("./models.js").ModelPricing;
81
- protected _recordTurnComplete(): void;
82
- protected _addHistory(event: {
83
- text: string;
84
- code: number | null;
85
- }): void;
86
- protected _updateCost(): void;
87
- }
@@ -1,227 +0,0 @@
1
- /**
2
- * Base class for one-shot (process-per-send) session engines.
3
- *
4
- * Shared by Codex, Gemini, and Cursor — eliminates ~200 LOC of duplication
5
- * per engine. Subclasses only implement _run() (engine-specific CLI invocation)
6
- * and optionally override _cleanupProc() for extra cleanup (readline, streams).
7
- */
8
- import { EventEmitter } from 'node:events';
9
- import * as fs from 'node:fs';
10
- import * as path from 'node:path';
11
- import { getModelPricing as _getModelPricingBase, } from './types.js';
12
- import { resolveAlias } from './models.js';
13
- import { MAX_HISTORY_ITEMS, DEFAULT_HISTORY_LIMIT, SESSION_EVENT } from './constants.js';
14
- // ─── BaseOneShotSession ────────────────────────────────────────────────────
15
- export class BaseOneShotSession extends EventEmitter {
16
- options;
17
- engineBin;
18
- engineCfg;
19
- _isReady = false;
20
- _isPaused = false;
21
- _isBusy = false;
22
- currentProc = null;
23
- currentRequestId = 0;
24
- _startTime = null;
25
- _history = [];
26
- sessionId;
27
- _stats = {
28
- turns: 0,
29
- toolCalls: 0,
30
- toolErrors: 0,
31
- tokensIn: 0,
32
- tokensOut: 0,
33
- cachedTokens: 0,
34
- costUsd: 0,
35
- lastActivity: null,
36
- };
37
- constructor(config, bin, engineCfg) {
38
- super();
39
- this.engineBin = bin;
40
- this.engineCfg = engineCfg;
41
- this.options = {
42
- ...config,
43
- permissionMode: config.permissionMode || 'bypassPermissions',
44
- };
45
- }
46
- // ── Property Accessors ─────────────────────────────────────────────────
47
- get pid() {
48
- return this.currentProc?.pid ?? undefined;
49
- }
50
- get isReady() {
51
- return this._isReady;
52
- }
53
- get isPaused() {
54
- return this._isPaused;
55
- }
56
- get isBusy() {
57
- return this._isBusy;
58
- }
59
- // ── start() ────────────────────────────────────────────────────────────
60
- async start() {
61
- if (this.options.cwd) {
62
- this.options.cwd = path.resolve(this.options.cwd);
63
- if (!fs.existsSync(this.options.cwd)) {
64
- fs.mkdirSync(this.options.cwd, { recursive: true });
65
- }
66
- }
67
- this.sessionId = `${this.engineCfg.enginePrefix}-${Date.now()}-${Math.random().toString(36).slice(2, 6)}`;
68
- this._startTime = new Date().toISOString();
69
- this._isReady = true;
70
- this.emit(SESSION_EVENT.READY);
71
- this.emit(SESSION_EVENT.INIT, { type: 'system', subtype: 'init', session_id: this.sessionId });
72
- return this;
73
- }
74
- // ── send() ─────────────────────────────────────────────────────────────
75
- async send(message, options = {}) {
76
- if (!this._isReady)
77
- throw new Error('Session not ready. Call start() first.');
78
- const requestId = ++this.currentRequestId;
79
- const textMessage = typeof message === 'string' ? message : JSON.stringify(message);
80
- if (!options.waitForComplete) {
81
- this._run(textMessage, options).catch((err) => this.emit(SESSION_EVENT.ERROR, err));
82
- return { requestId, sent: true };
83
- }
84
- this._isBusy = true;
85
- try {
86
- return await this._run(textMessage, options);
87
- }
88
- finally {
89
- this._isBusy = false;
90
- }
91
- }
92
- // ── getStats() ─────────────────────────────────────────────────────────
93
- getStats() {
94
- return {
95
- turns: this._stats.turns,
96
- toolCalls: this._stats.toolCalls,
97
- toolErrors: this._stats.toolErrors,
98
- tokensIn: this._stats.tokensIn,
99
- tokensOut: this._stats.tokensOut,
100
- cachedTokens: this._stats.cachedTokens,
101
- costUsd: Math.round(this._stats.costUsd * 10000) / 10000,
102
- isReady: this._isReady,
103
- startTime: this._startTime,
104
- lastActivity: this._stats.lastActivity,
105
- contextPercent: 0,
106
- sessionId: this.sessionId,
107
- uptime: this._startTime ? Math.round((Date.now() - new Date(this._startTime).getTime()) / 1000) : 0,
108
- };
109
- }
110
- // ── getHistory() ───────────────────────────────────────────────────────
111
- getHistory(limit = DEFAULT_HISTORY_LIMIT) {
112
- return this._history.slice(-limit);
113
- }
114
- // ── compact() ──────────────────────────────────────────────────────────
115
- async compact(_summary) {
116
- const event = {
117
- type: 'result',
118
- result: `${this.engineCfg.engineDisplayName} engine does not support compaction`,
119
- };
120
- return { text: event.result, event };
121
- }
122
- // ── Effort ─────────────────────────────────────────────────────────────
123
- getEffort() {
124
- return this.options.effort || 'auto';
125
- }
126
- setEffort(level) {
127
- this.options.effort = level;
128
- }
129
- // ── getCost() ──────────────────────────────────────────────────────────
130
- getCost() {
131
- const pricing = this._getModelPricing();
132
- const displayModel = this.options.model || this.engineCfg.defaultModelDisplay || this.engineCfg.defaultModel;
133
- if (this.engineCfg.supportsCachedTokens) {
134
- const cachedPrice = pricing.cached ?? 0;
135
- const nonCachedIn = Math.max(0, this._stats.tokensIn - this._stats.cachedTokens);
136
- return {
137
- model: displayModel,
138
- tokensIn: this._stats.tokensIn,
139
- tokensOut: this._stats.tokensOut,
140
- cachedTokens: this._stats.cachedTokens,
141
- pricing: { inputPer1M: pricing.input, outputPer1M: pricing.output, cachedPer1M: cachedPrice || undefined },
142
- breakdown: {
143
- inputCost: (nonCachedIn / 1_000_000) * pricing.input,
144
- cachedCost: (this._stats.cachedTokens / 1_000_000) * cachedPrice,
145
- outputCost: (this._stats.tokensOut / 1_000_000) * pricing.output,
146
- },
147
- totalUsd: this._stats.costUsd,
148
- };
149
- }
150
- // Non-cached path (e.g. Codex)
151
- return {
152
- model: displayModel,
153
- tokensIn: this._stats.tokensIn,
154
- tokensOut: this._stats.tokensOut,
155
- cachedTokens: 0,
156
- pricing: { inputPer1M: pricing.input, outputPer1M: pricing.output, cachedPer1M: undefined },
157
- breakdown: {
158
- inputCost: (this._stats.tokensIn / 1_000_000) * pricing.input,
159
- cachedCost: 0,
160
- outputCost: (this._stats.tokensOut / 1_000_000) * pricing.output,
161
- },
162
- totalUsd: this._stats.costUsd,
163
- };
164
- }
165
- // ── resolveModel() ─────────────────────────────────────────────────────
166
- resolveModel(alias) {
167
- return resolveAlias(alias);
168
- }
169
- // ── pause / resume ─────────────────────────────────────────────────────
170
- pause() {
171
- this._isPaused = true;
172
- this.emit(SESSION_EVENT.PAUSED, { sessionId: this.sessionId });
173
- }
174
- resume() {
175
- this._isPaused = false;
176
- this.emit(SESSION_EVENT.RESUMED, { sessionId: this.sessionId });
177
- }
178
- // ── stop() ─────────────────────────────────────────────────────────────
179
- stop() {
180
- this._cleanupProc();
181
- this._isReady = false;
182
- this._isPaused = false;
183
- this.emit(SESSION_EVENT.CLOSE, 143);
184
- }
185
- /** Override in subclasses that need extra cleanup (readline, stream destroy). */
186
- _cleanupProc() {
187
- if (this.currentProc) {
188
- try {
189
- this.currentProc.kill('SIGTERM');
190
- }
191
- catch {
192
- // Process may have already exited
193
- }
194
- this.currentProc = null;
195
- }
196
- }
197
- // ── Protected Helpers (for subclass _run() implementations) ────────────
198
- _getModelPricing() {
199
- return _getModelPricingBase(this.options.model, this.engineCfg.defaultModel);
200
- }
201
- _recordTurnComplete() {
202
- this._stats.turns++;
203
- this._stats.lastActivity = new Date().toISOString();
204
- }
205
- _addHistory(event) {
206
- const now = this._stats.lastActivity || new Date().toISOString();
207
- this._history.push({ time: now, type: 'result', event });
208
- if (this._history.length > MAX_HISTORY_ITEMS)
209
- this._history.shift();
210
- }
211
- _updateCost() {
212
- const pricing = this._getModelPricing();
213
- if (this.engineCfg.supportsCachedTokens) {
214
- const cachedPrice = pricing.cached ?? 0;
215
- const nonCachedIn = Math.max(0, this._stats.tokensIn - this._stats.cachedTokens);
216
- this._stats.costUsd =
217
- (nonCachedIn / 1_000_000) * pricing.input +
218
- (this._stats.cachedTokens / 1_000_000) * cachedPrice +
219
- (this._stats.tokensOut / 1_000_000) * pricing.output;
220
- }
221
- else {
222
- this._stats.costUsd =
223
- (this._stats.tokensIn / 1_000_000) * pricing.input + (this._stats.tokensOut / 1_000_000) * pricing.output;
224
- }
225
- }
226
- }
227
- //# sourceMappingURL=base-oneshot-session.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"base-oneshot-session.js","sourceRoot":"","sources":["../../src/base-oneshot-session.ts"],"names":[],"mappings":"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"}
@@ -1,21 +0,0 @@
1
- /**
2
- * Circuit breaker for engine failure tracking.
3
- *
4
- * Opens after CIRCUIT_BREAKER_THRESHOLD consecutive failures per engine,
5
- * with exponential backoff capped at CIRCUIT_BREAKER_MAX_BACKOFF_MS.
6
- * Resets on a successful engine start.
7
- */
8
- export declare class CircuitBreaker {
9
- private breakers;
10
- /** Throws if the engine circuit is open and backoff has not yet expired. */
11
- check(engine: string): void;
12
- /** Record a failure — increments count and sets exponential backoff. */
13
- recordFailure(engine: string): void;
14
- /** Reset (clear) the breaker for an engine after a successful start. */
15
- reset(engine: string): void;
16
- /** Get status snapshot for health() reporting. */
17
- getStatus(): Record<string, {
18
- failures: number;
19
- backoffUntil: string | null;
20
- }>;
21
- }
@@ -1,47 +0,0 @@
1
- /**
2
- * Circuit breaker for engine failure tracking.
3
- *
4
- * Opens after CIRCUIT_BREAKER_THRESHOLD consecutive failures per engine,
5
- * with exponential backoff capped at CIRCUIT_BREAKER_MAX_BACKOFF_MS.
6
- * Resets on a successful engine start.
7
- */
8
- import { CIRCUIT_BREAKER_THRESHOLD, CIRCUIT_BREAKER_BACKOFF_BASE_MS, CIRCUIT_BREAKER_MAX_BACKOFF_MS, } from './constants.js';
9
- export class CircuitBreaker {
10
- breakers = new Map();
11
- /** Throws if the engine circuit is open and backoff has not yet expired. */
12
- check(engine) {
13
- const breaker = this.breakers.get(engine);
14
- if (!breaker)
15
- return;
16
- if (breaker.count >= CIRCUIT_BREAKER_THRESHOLD && Date.now() < breaker.backoffUntil) {
17
- const remaining = Math.ceil((breaker.backoffUntil - Date.now()) / 1000);
18
- throw new Error(`Engine '${engine}' circuit breaker open after ${breaker.count} consecutive failures. ` +
19
- `Retry in ${remaining}s.`);
20
- }
21
- // If backoff has expired, allow the attempt (will reset on success)
22
- }
23
- /** Record a failure — increments count and sets exponential backoff. */
24
- recordFailure(engine) {
25
- const existing = this.breakers.get(engine) || { count: 0, lastFailure: 0, backoffUntil: 0 };
26
- existing.count++;
27
- existing.lastFailure = Date.now();
28
- const backoff = Math.min(CIRCUIT_BREAKER_BACKOFF_BASE_MS * Math.pow(2, existing.count - 1), CIRCUIT_BREAKER_MAX_BACKOFF_MS);
29
- existing.backoffUntil = Date.now() + backoff;
30
- this.breakers.set(engine, existing);
31
- }
32
- /** Reset (clear) the breaker for an engine after a successful start. */
33
- reset(engine) {
34
- this.breakers.delete(engine);
35
- }
36
- /** Get status snapshot for health() reporting. */
37
- getStatus() {
38
- return Object.fromEntries([...this.breakers].map(([engine, state]) => [
39
- engine,
40
- {
41
- failures: state.count,
42
- backoffUntil: state.backoffUntil > Date.now() ? new Date(state.backoffUntil).toISOString() : null,
43
- },
44
- ]));
45
- }
46
- }
47
- //# sourceMappingURL=circuit-breaker.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"circuit-breaker.js","sourceRoot":"","sources":["../../src/circuit-breaker.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EACL,yBAAyB,EACzB,+BAA+B,EAC/B,8BAA8B,GAC/B,MAAM,gBAAgB,CAAC;AAQxB,MAAM,OAAO,cAAc;IACjB,QAAQ,GAAG,IAAI,GAAG,EAAwB,CAAC;IAEnD,4EAA4E;IAC5E,KAAK,CAAC,MAAc;QAClB,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC1C,IAAI,CAAC,OAAO;YAAE,OAAO;QACrB,IAAI,OAAO,CAAC,KAAK,IAAI,yBAAyB,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;YACpF,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;YACxE,MAAM,IAAI,KAAK,CACb,WAAW,MAAM,gCAAgC,OAAO,CAAC,KAAK,yBAAyB;gBACrF,YAAY,SAAS,IAAI,CAC5B,CAAC;QACJ,CAAC;QACD,oEAAoE;IACtE,CAAC;IAED,wEAAwE;IACxE,aAAa,CAAC,MAAc;QAC1B,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,CAAC;QAC5F,QAAQ,CAAC,KAAK,EAAE,CAAC;QACjB,QAAQ,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAClC,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CACtB,+BAA+B,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,KAAK,GAAG,CAAC,CAAC,EACjE,8BAA8B,CAC/B,CAAC;QACF,QAAQ,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC;QAC7C,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IACtC,CAAC;IAED,wEAAwE;IACxE,KAAK,CAAC,MAAc;QAClB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC/B,CAAC;IAED,kDAAkD;IAClD,SAAS;QACP,OAAO,MAAM,CAAC,WAAW,CACvB,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC;YAC1C,MAAM;YACN;gBACE,QAAQ,EAAE,KAAK,CAAC,KAAK;gBACrB,YAAY,EAAE,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,IAAI;aAClG;SACF,CAAC,CACH,CAAC;IACJ,CAAC;CACF"}
@@ -1,20 +0,0 @@
1
- /**
2
- * Consensus vote parsing utilities
3
- *
4
- * Ported from three-minds — detects [CONSENSUS: YES/NO] tags in agent
5
- * responses with multiple fallback patterns for variant formats.
6
- */
7
- /** Remove all [CONSENSUS: YES/NO] tags from text */
8
- export declare function stripConsensusTags(text: string): string;
9
- /** Check whether text contains any consensus vote marker */
10
- export declare function hasConsensusMarker(text: string): boolean;
11
- /**
12
- * Parse a consensus vote from agent response text.
13
- *
14
- * Priority chain:
15
- * 1. Strict format: [CONSENSUS: YES] / [CONSENSUS: NO]
16
- * 2. Common variants: consensus: yes, **consensus**: no, CONSENSUS=YES, etc.
17
- * 3. Tail fallback: analyse last 8 lines for positive/negative signals
18
- * 4. Default: false (no consensus)
19
- */
20
- export declare function parseConsensus(content: string): boolean;