@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.
- package/dist/src/engines/persistent-session.js +13 -0
- package/dist/src/engines/persistent-session.js.map +1 -1
- package/dist/src/lib/config.d.ts +2 -0
- package/dist/src/lib/config.js +19 -0
- package/dist/src/lib/config.js.map +1 -1
- package/dist/src/lib/trajectory.d.ts +1 -1
- package/dist/src/lib/trajectory.js.map +1 -1
- package/dist/src/lib/vendor-paths.d.ts +6 -4
- package/dist/src/lib/vendor-paths.js +21 -14
- package/dist/src/lib/vendor-paths.js.map +1 -1
- package/dist/src/openai-compat/openai-compat.d.ts +7 -1
- package/dist/src/openai-compat/openai-compat.js +35 -4
- package/dist/src/openai-compat/openai-compat.js.map +1 -1
- package/dist/src/openai-compat/sse-translator.d.ts +23 -3
- package/dist/src/openai-compat/sse-translator.js +45 -6
- package/dist/src/openai-compat/sse-translator.js.map +1 -1
- package/dist/src/types.d.ts +9 -0
- package/package.json +2 -3
- package/vendor/base-oneshot-session.d.ts +0 -87
- package/vendor/base-oneshot-session.js +0 -227
- package/vendor/base-oneshot-session.js.map +0 -1
- package/vendor/circuit-breaker.d.ts +0 -21
- package/vendor/circuit-breaker.js +0 -47
- package/vendor/circuit-breaker.js.map +0 -1
- package/vendor/consensus.d.ts +0 -20
- package/vendor/consensus.js +0 -52
- package/vendor/consensus.js.map +0 -1
- package/vendor/constants.d.ts +0 -130
- package/vendor/constants.js +0 -139
- package/vendor/constants.js.map +0 -1
- package/vendor/council.d.ts +0 -67
- package/vendor/council.js +0 -913
- package/vendor/council.js.map +0 -1
- package/vendor/embedded-server.d.ts +0 -25
- package/vendor/embedded-server.js +0 -373
- package/vendor/embedded-server.js.map +0 -1
- package/vendor/inbox-manager.d.ts +0 -38
- package/vendor/inbox-manager.js +0 -111
- package/vendor/inbox-manager.js.map +0 -1
- package/vendor/index.d.ts +0 -63
- package/vendor/index.js +0 -705
- package/vendor/index.js.map +0 -1
- package/vendor/logger.d.ts +0 -16
- package/vendor/logger.js +0 -44
- package/vendor/logger.js.map +0 -1
- package/vendor/models.d.ts +0 -69
- package/vendor/models.js +0 -289
- package/vendor/models.js.map +0 -1
- package/vendor/openai-compat.d.ts +0 -197
- package/vendor/openai-compat.js +0 -765
- package/vendor/openai-compat.js.map +0 -1
- package/vendor/persistent-codex-session.d.ts +0 -16
- package/vendor/persistent-codex-session.js +0 -105
- package/vendor/persistent-codex-session.js.map +0 -1
- package/vendor/persistent-cursor-session.d.ts +0 -21
- package/vendor/persistent-cursor-session.js +0 -241
- package/vendor/persistent-cursor-session.js.map +0 -1
- package/vendor/persistent-custom-session.d.ts +0 -78
- package/vendor/persistent-custom-session.js +0 -937
- package/vendor/persistent-custom-session.js.map +0 -1
- package/vendor/persistent-gemini-session.d.ts +0 -21
- package/vendor/persistent-gemini-session.js +0 -216
- package/vendor/persistent-gemini-session.js.map +0 -1
- package/vendor/persistent-session.d.ts +0 -74
- package/vendor/persistent-session.js +0 -698
- package/vendor/persistent-session.js.map +0 -1
- package/vendor/proxy/anthropic-adapter.d.ts +0 -136
- package/vendor/proxy/anthropic-adapter.js +0 -392
- package/vendor/proxy/anthropic-adapter.js.map +0 -1
- package/vendor/proxy/handler.d.ts +0 -39
- package/vendor/proxy/handler.js +0 -323
- package/vendor/proxy/handler.js.map +0 -1
- package/vendor/proxy/schema-cleaner.d.ts +0 -11
- package/vendor/proxy/schema-cleaner.js +0 -34
- package/vendor/proxy/schema-cleaner.js.map +0 -1
- package/vendor/proxy/thought-cache.d.ts +0 -19
- package/vendor/proxy/thought-cache.js +0 -53
- package/vendor/proxy/thought-cache.js.map +0 -1
- package/vendor/session-manager.d.ts +0 -211
- package/vendor/session-manager.js +0 -1345
- package/vendor/session-manager.js.map +0 -1
- package/vendor/skill-resolver.js +0 -107
- package/vendor/types.d.ts +0 -466
- package/vendor/types.js +0 -8
- package/vendor/types.js.map +0 -1
- package/vendor/validation.d.ts +0 -31
- package/vendor/validation.js +0 -104
- 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
|
|
11
|
-
* are
|
|
12
|
-
*
|
|
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
|
|
11
|
-
* are
|
|
12
|
-
*
|
|
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
|
-
//
|
|
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
|
|
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":"AAAA
|
|
1
|
+
{"version":3,"file":"sse-translator.js","sourceRoot":"","sources":["../../../src/openai-compat/sse-translator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAgCH,MAAM,UAAU,mBAAmB,CAAC,MAAiC;IACnE,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,SAAS,GAAG,KAAK,EAAE,eAAe,GAAG,KAAK,EAAE,GAAG,MAAM,CAAC;IACnF,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;IAE9C,sEAAsE;IACtE,MAAM,oBAAoB,GAAG,IAAI,GAAG,EAAkB,CAAC;IACvD,IAAI,iBAAiB,GAAG,CAAC,CAAC;IAC1B,IAAI,YAAY,GAAG,CAAC,CAAC;IACrB,kEAAkE;IAClE,IAAI,cAAc,GAAG,EAAE,CAAC;IACxB,IAAI,mBAAmB,GAAkB,IAAI,CAAC;IAE9C,SAAS,UAAU,CAAC,KAA8B,EAAE,eAA8B,IAAI;QACpF,MAAM,OAAO,GAAG;YACd,EAAE,EAAE,YAAY;YAChB,MAAM,EAAE,uBAAuB;YAC/B,OAAO;YACP,KAAK;YACL,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,CAAC;SAC5D,CAAC;QACF,OAAO,SAAS,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC;IAChD,CAAC;IAED,SAAS,eAAe,CAAC,SAAiB,EAAE,aAAqB;QAC/D,MAAM,OAAO,GAAG;YACd,EAAE,EAAE,YAAY;YAChB,MAAM,EAAE,uBAAuB;YAC/B,OAAO;YACP,KAAK;YACL,OAAO,EAAE,EAAE;YACX,KAAK,EAAE;gBACL,aAAa,EAAE,SAAS;gBACxB,iBAAiB,EAAE,aAAa;gBAChC,YAAY,EAAE,SAAS,GAAG,aAAa;aACxC;SACF,CAAC;QACF,OAAO,SAAS,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC;IAChD,CAAC;IAED,SAAS,aAAa,CAAC,UAA8B;QACnD,QAAQ,UAAU,EAAE,CAAC;YACnB,KAAK,UAAU,CAAC;YAChB,KAAK,eAAe;gBAClB,OAAO,MAAM,CAAC;YAChB,KAAK,UAAU;gBACb,OAAO,YAAY,CAAC;YACtB,KAAK,YAAY;gBACf,OAAO,QAAQ,CAAC;YAClB;gBACE,OAAO,MAAM,CAAC;QAClB,CAAC;IACH,CAAC;IAED,OAAO;QACL,SAAS,CAAC,KAAkB;YAC1B,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;gBACnB,KAAK,eAAe,CAAC,CAAC,CAAC;oBACrB,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;oBAClC,IAAI,KAAK,EAAE,YAAY,KAAK,SAAS,EAAE,CAAC;wBACtC,YAAY,GAAG,KAAK,CAAC,YAAY,CAAC;oBACpC,CAAC;oBACD,OAAO,EAAE,CAAC;gBACZ,CAAC;gBAED,KAAK,qBAAqB,CAAC,CAAC,CAAC;oBAC3B,MAAM,KAAK,GAAG,KAAK,CAAC,aAAa,CAAC;oBAClC,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;wBAC9B,MAAM,KAAK,GAAG,iBAAiB,EAAE,CAAC;wBAClC,oBAAoB,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;wBAC7C,OAAO;4BACL,UAAU,CAAC;gCACT,UAAU,EAAE;oCACV;wCACE,KAAK,EAAE,KAAK;wCACZ,EAAE,EAAE,KAAK,CAAC,EAAE;wCACZ,IAAI,EAAE,UAAU;wCAChB,QAAQ,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE;qCAC9C;iCACF;6BACF,CAAC;yBACH,CAAC;oBACJ,CAAC;oBACD,8DAA8D;oBAC9D,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;wBAC9B,mBAAmB,GAAG,KAAK,CAAC,KAAK,CAAC;wBAClC,OAAO,EAAE,CAAC;oBACZ,CAAC;oBACD,wBAAwB;oBACxB,OAAO,EAAE,CAAC;gBACZ,CAAC;gBAED,KAAK,qBAAqB,CAAC,CAAC,CAAC;oBAC3B,MAAM,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC;oBACtB,IAAI,CAAC,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;wBAC5B,OAAO,CAAC,UAAU,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;oBAC3C,CAAC;oBACD,IAAI,CAAC,CAAC,IAAI,KAAK,kBAAkB,EAAE,CAAC;wBAClC,MAAM,KAAK,GAAG,oBAAoB,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;wBACpD,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;4BACxB,0EAA0E;4BAC1E,OAAO,EAAE,CAAC;wBACZ,CAAC;wBACD,OAAO;4BACL,UAAU,CAAC;gCACT,UAAU,EAAE;oCACV;wCACE,KAAK,EAAE,KAAK;wCACZ,QAAQ,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC,YAAY,EAAE;qCACxC;iCACF;6BACF,CAAC;yBACH,CAAC;oBACJ,CAAC;oBACD,6DAA6D;oBAC7D,2DAA2D;oBAC3D,IAAI,CAAC,CAAC,IAAI,KAAK,gBAAgB,EAAE,CAAC;wBAChC,MAAM,IAAI,GAAI,CAA2B,CAAC,QAAQ,IAAI,EAAE,CAAC;wBACzD,IAAI,IAAI;4BAAE,cAAc,IAAI,IAAI,CAAC;wBACjC,IAAI,eAAe,IAAI,IAAI,EAAE,CAAC;4BAC5B,OAAO,CAAC,UAAU,CAAC,EAAE,SAAS,EAAE,IAAI,EAA6B,CAAC,CAAC,CAAC;wBACtE,CAAC;wBACD,OAAO,EAAE,CAAC;oBACZ,CAAC;oBACD,mEAAmE;oBACnE,6DAA6D;oBAC7D,OAAO,EAAE,CAAC;gBACZ,CAAC;gBAED,KAAK,oBAAoB;oBACvB,+CAA+C;oBAC/C,IAAI,mBAAmB,KAAK,IAAI,IAAI,KAAK,CAAC,KAAK,KAAK,mBAAmB,EAAE,CAAC;wBACxE,mBAAmB,GAAG,IAAI,CAAC;oBAC7B,CAAC;oBACD,OAAO,EAAE,CAAC;gBAEZ,KAAK,eAAe,CAAC,CAAC,CAAC;oBACrB,MAAM,YAAY,GAAG,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;oBAC5D,MAAM,MAAM,GAAG,CAAC,UAAU,CAAC,EAAE,EAAE,YAAY,CAAC,CAAC,CAAC;oBAC9C,IAAI,SAAS,IAAI,KAAK,CAAC,KAAK,EAAE,aAAa,KAAK,SAAS,EAAE,CAAC;wBAC1D,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE,KAAK,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC;oBACxE,CAAC;oBACD,OAAO,MAAM,CAAC;gBAChB,CAAC;gBAED,KAAK,cAAc;oBACjB,OAAO,EAAE,CAAC;gBAEZ,KAAK,OAAO;oBACV,OAAO,CAAC,UAAU,CAAC,EAAE,OAAO,EAAE,WAAW,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC;gBAElG,KAAK,aAAa;oBAChB,OAAO,CAAC,UAAU,CAAC,EAAE,OAAO,EAAE,iBAAiB,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC;gBAExG,6CAA6C;gBAC7C,KAAK,QAAQ,CAAC;gBACd,KAAK,WAAW,CAAC;gBACjB,KAAK,kBAAkB,CAAC;gBACxB,KAAK,QAAQ,CAAC;gBACd,KAAK,SAAS;oBACZ,OAAO,EAAE,CAAC;gBAEZ,OAAO,CAAC,CAAC,CAAC;oBACR,iEAAiE;oBACjE,MAAM,MAAM,GAAU,KAAK,CAAC;oBAC5B,KAAK,MAAM,CAAC;oBACZ,OAAO,EAAE,CAAC;gBACZ,CAAC;YACH,CAAC;QACH,CAAC;QAED,IAAI;YACF,OAAO,CAAC,kBAAkB,CAAC,CAAC;QAC9B,CAAC;QAED;;;;;WAKG;QACH,YAAY;YACV,OAAO,eAAe,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/C,CAAC;KACF,CAAC;AACJ,CAAC"}
|
package/dist/src/types.d.ts
CHANGED
|
@@ -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.
|
|
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"}
|
package/vendor/consensus.d.ts
DELETED
|
@@ -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;
|