@a1hvdy/cc-openclaw 0.3.3 → 0.4.6
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/channels/adapter.d.ts +0 -1
- package/dist/src/channels/telegram/completion-summary.d.ts +0 -1
- package/dist/src/channels/telegram/error-renderer.d.ts +0 -1
- package/dist/src/channels/telegram/event-reducer.d.ts +0 -1
- package/dist/src/channels/telegram/event-reducer.js +17 -3
- package/dist/src/channels/telegram/event-reducer.js.map +1 -1
- package/dist/src/channels/telegram/index.d.ts +0 -1
- package/dist/src/channels/telegram/injector.d.ts +0 -1
- package/dist/src/channels/telegram/live-card.d.ts +0 -1
- package/dist/src/channels/telegram/live-card.js +9 -2
- package/dist/src/channels/telegram/live-card.js.map +1 -1
- package/dist/src/channels/telegram/state-machine.d.ts +0 -1
- package/dist/src/channels/telegram/tool-tracker.d.ts +0 -1
- package/dist/src/command-router/cc-handler.d.ts +0 -1
- package/dist/src/command-router/cc-handler.js +52 -3
- package/dist/src/command-router/cc-handler.js.map +1 -1
- package/dist/src/command-router/index.d.ts +0 -1
- package/dist/src/constants.d.ts +0 -1
- package/dist/src/council/consensus.d.ts +0 -1
- package/dist/src/council/council.d.ts +0 -1
- package/dist/src/council/index.d.ts +0 -1
- package/dist/src/engines/base-oneshot-session.d.ts +0 -1
- package/dist/src/engines/index.d.ts +0 -1
- package/dist/src/engines/persistent-codex-session.d.ts +0 -1
- package/dist/src/engines/persistent-cursor-session.d.ts +0 -1
- package/dist/src/engines/persistent-custom-session.d.ts +0 -1
- package/dist/src/engines/persistent-gemini-session.d.ts +0 -1
- package/dist/src/engines/persistent-session.d.ts +0 -1
- package/dist/src/health/handler.d.ts +0 -1
- package/dist/src/health/index.d.ts +0 -1
- package/dist/src/health/metrics.d.ts +52 -0
- package/dist/src/health/metrics.js +116 -0
- package/dist/src/health/metrics.js.map +1 -0
- package/dist/src/index.d.ts +0 -1
- package/dist/src/index.js +15 -11
- package/dist/src/index.js.map +1 -1
- package/dist/src/lib/auto-recovery.d.ts +0 -1
- package/dist/src/lib/cache-parity.d.ts +0 -1
- package/dist/src/lib/circuit-breaker.d.ts +0 -1
- package/dist/src/lib/config.d.ts +0 -1
- package/dist/src/lib/debug-tap.d.ts +15 -0
- package/dist/src/lib/debug-tap.d.ts.map +1 -0
- package/dist/src/lib/debug-tap.js +185 -0
- package/dist/src/lib/debug-tap.js.map +1 -0
- package/dist/src/lib/drift-detector.d.ts +0 -1
- package/dist/src/lib/error-formatter.d.ts +2 -2
- package/dist/src/lib/error-formatter.js +16 -1
- package/dist/src/lib/error-formatter.js.map +1 -1
- package/dist/src/lib/heartbeat-workaround.d.ts +0 -1
- package/dist/src/lib/index.d.ts +0 -1
- package/dist/src/lib/register-guard.d.ts +25 -18
- package/dist/src/lib/register-guard.js +43 -22
- package/dist/src/lib/register-guard.js.map +1 -1
- package/dist/src/lib/route-flag.d.ts +0 -1
- package/dist/src/lib/status-tee-reader.d.ts +28 -0
- package/dist/src/lib/status-tee-reader.js +82 -0
- package/dist/src/lib/status-tee-reader.js.map +1 -0
- package/dist/src/lib/sysprompt-strip.d.ts +0 -1
- package/dist/src/lib/telemetry.d.ts +0 -1
- package/dist/src/lib/test-mode.d.ts +0 -1
- package/dist/src/lib/trajectory.d.ts +35 -0
- package/dist/src/lib/trajectory.js +84 -0
- package/dist/src/lib/trajectory.js.map +1 -0
- package/dist/src/lib/vendor-paths.d.ts +0 -1
- package/dist/src/logger.d.ts +0 -1
- package/dist/src/mcp/bridge.d.ts +0 -1
- package/dist/src/mcp/index.d.ts +0 -1
- package/dist/src/models.d.ts +0 -1
- package/dist/src/openai-compat/cli-stream-parser.d.ts +0 -1
- package/dist/src/openai-compat/index.d.ts +0 -1
- package/dist/src/openai-compat/openai-compat.d.ts +0 -1
- package/dist/src/openai-compat/openai-compat.js +73 -4
- package/dist/src/openai-compat/openai-compat.js.map +1 -1
- package/dist/src/openai-compat/skill-resolver.d.ts +0 -1
- package/dist/src/openai-compat/sse-translator.d.ts +0 -1
- package/dist/src/proxy/anthropic-adapter.d.ts +0 -1
- package/dist/src/proxy/handler.d.ts +0 -1
- package/dist/src/proxy/index.d.ts +0 -1
- package/dist/src/proxy/schema-cleaner.d.ts +0 -1
- package/dist/src/proxy/thought-cache.d.ts +0 -1
- package/dist/src/session/embedded-server.d.ts +0 -1
- package/dist/src/session/embedded-server.js +25 -1
- package/dist/src/session/embedded-server.js.map +1 -1
- package/dist/src/session/inbox-manager.d.ts +0 -1
- package/dist/src/session/index.d.ts +0 -1
- package/dist/src/session/session-manager.d.ts +0 -1
- package/dist/src/session/session-manager.js +25 -0
- package/dist/src/session/session-manager.js.map +1 -1
- package/dist/src/session-bootstrap/cwd-patch.d.ts +0 -1
- package/dist/src/session-bootstrap/index.d.ts +0 -1
- package/dist/src/session-bootstrap/sysprompt-strip.d.ts +0 -1
- package/dist/src/session-bootstrap/think-conflict-resolver.d.ts +0 -1
- package/dist/src/types.d.ts +0 -1
- package/dist/src/validation.d.ts +0 -1
- package/mcp-tools.json +1 -1
- package/package.json +31 -9
- package/vendor/embedded-server.js +13 -0
- package/dist/src/circuit-breaker.d.ts +0 -22
- package/dist/src/circuit-breaker.d.ts.map +0 -1
- package/dist/src/circuit-breaker.js +0 -47
- package/dist/src/circuit-breaker.js.map +0 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@a1hvdy/cc-openclaw",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.6",
|
|
4
4
|
"description": "A1xAI's Anthropic CLI bridge plugin for OpenClaw",
|
|
5
5
|
"author": "@a1cy",
|
|
6
6
|
"license": "MIT",
|
|
@@ -9,15 +9,33 @@
|
|
|
9
9
|
"types": "dist/src/index.d.ts",
|
|
10
10
|
"homepage": "https://github.com/A1cy/cc-openclaw",
|
|
11
11
|
"repository": "github:A1cy/cc-openclaw",
|
|
12
|
-
"engines": {
|
|
12
|
+
"engines": {
|
|
13
|
+
"node": ">=22.0.0"
|
|
14
|
+
},
|
|
13
15
|
"openclaw": {
|
|
14
|
-
"extensions": [
|
|
16
|
+
"extensions": [
|
|
17
|
+
"./dist/src/index.js"
|
|
18
|
+
],
|
|
15
19
|
"hooks": {},
|
|
16
|
-
"activation": {
|
|
20
|
+
"activation": {
|
|
21
|
+
"onStartup": true
|
|
22
|
+
}
|
|
17
23
|
},
|
|
18
|
-
"files": [
|
|
24
|
+
"files": [
|
|
25
|
+
"dist/",
|
|
26
|
+
"vendor/",
|
|
27
|
+
"configs/",
|
|
28
|
+
"skills/",
|
|
29
|
+
"openclaw.plugin.json",
|
|
30
|
+
"README.md",
|
|
31
|
+
"LICENSE",
|
|
32
|
+
"mcp-config.template.json",
|
|
33
|
+
"mcp-tools.json",
|
|
34
|
+
"openclaw-mcp-bridge.cjs",
|
|
35
|
+
"stubs/"
|
|
36
|
+
],
|
|
19
37
|
"scripts": {
|
|
20
|
-
"build": "tsc",
|
|
38
|
+
"build": "tsc -p tsconfig.build.json",
|
|
21
39
|
"dev": "tsx watch src/index.ts",
|
|
22
40
|
"test": "vitest run",
|
|
23
41
|
"test:watch": "vitest",
|
|
@@ -28,8 +46,12 @@
|
|
|
28
46
|
"format:check": "prettier -c .",
|
|
29
47
|
"prepublishOnly": "npm run build && npm test"
|
|
30
48
|
},
|
|
31
|
-
"dependencies": {
|
|
32
|
-
|
|
49
|
+
"dependencies": {
|
|
50
|
+
"commander": "^12.1.0"
|
|
51
|
+
},
|
|
52
|
+
"peerDependencies": {
|
|
53
|
+
"openclaw": ">=2026.3.0"
|
|
54
|
+
},
|
|
33
55
|
"devDependencies": {
|
|
34
56
|
"@eslint/js": "^9.15.0",
|
|
35
57
|
"@types/node": "^22.10.0",
|
|
@@ -42,4 +64,4 @@
|
|
|
42
64
|
"typescript-eslint": "^8.20.0",
|
|
43
65
|
"vitest": "^3.1.0"
|
|
44
66
|
}
|
|
45
|
-
}
|
|
67
|
+
}
|
|
@@ -14,6 +14,10 @@ import { sanitizeCwd, validateRegex } from './validation.js';
|
|
|
14
14
|
import { handleChatCompletion } from './openai-compat.js';
|
|
15
15
|
import { getModelList } from './models.js';
|
|
16
16
|
import { DEFAULT_SERVER_PORT, MAX_BODY_SIZE, RATE_LIMIT_MAX_REQUESTS, RATE_LIMIT_WINDOW_MS, OPENAI_COMPAT_SESSION_PREFIX, } from './constants.js';
|
|
17
|
+
// Pillar A v0.4.0 — metrics module. Lives in dist/ (TS-compiled), reachable
|
|
18
|
+
// via relative path since both vendor/ and dist/ are siblings under the
|
|
19
|
+
// plugin install root. Sync script always rebuilds dist/ so this resolves.
|
|
20
|
+
import { metricsRegistry, PROMETHEUS_CONTENT_TYPE } from '../dist/src/health/metrics.js';
|
|
17
21
|
export class EmbeddedServer {
|
|
18
22
|
server = null;
|
|
19
23
|
manager;
|
|
@@ -294,6 +298,15 @@ export class EmbeddedServer {
|
|
|
294
298
|
json(200, { ok: true, version: this.manager.getVersion(), sessions: this.manager.listSessions().length });
|
|
295
299
|
return;
|
|
296
300
|
}
|
|
301
|
+
// ─── Metrics (Pillar A v0.4.0) ─────────────────────────────
|
|
302
|
+
if (path === '/metrics') {
|
|
303
|
+
metricsRegistry.requestsTotal.inc({ status: 'success' });
|
|
304
|
+
metricsRegistry.workers.set(this.manager.listSessions().length);
|
|
305
|
+
const out = metricsRegistry.serializePrometheus();
|
|
306
|
+
res.writeHead(200, { 'Content-Type': PROMETHEUS_CONTENT_TYPE });
|
|
307
|
+
res.end(out);
|
|
308
|
+
return;
|
|
309
|
+
}
|
|
297
310
|
// ─── OpenAI-Compatible Routes ─────────────────────────────
|
|
298
311
|
if (path === '/v1/chat/completions') {
|
|
299
312
|
await handleChatCompletion(this.manager, body, headers, res);
|
|
@@ -1,22 +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
|
-
}
|
|
22
|
-
//# sourceMappingURL=circuit-breaker.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"circuit-breaker.d.ts","sourceRoot":"","sources":["../../src/circuit-breaker.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAcH,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAmC;IAEnD,4EAA4E;IAC5E,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAa3B,wEAAwE;IACxE,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAYnC,wEAAwE;IACxE,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAI3B,kDAAkD;IAClD,SAAS,IAAI,MAAM,CAAC,MAAM,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC;CAW/E"}
|
|
@@ -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"}
|