@intutic/clawde 1.10.1 → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -5
- package/dist/budget-checker.d.ts +0 -1
- package/dist/budget-checker.d.ts.map +1 -1
- package/dist/budget-checker.js +0 -8
- package/dist/budget-checker.js.map +1 -1
- package/dist/circuit-breaker.d.ts.map +1 -1
- package/dist/circuit-breaker.js +13 -27
- package/dist/circuit-breaker.js.map +1 -1
- package/dist/client.d.ts +10 -2
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +61 -70
- package/dist/client.js.map +1 -1
- package/dist/errors.d.ts +14 -0
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +19 -1
- package/dist/errors.js.map +1 -1
- package/dist/event-emitter.d.ts +2 -2
- package/dist/event-emitter.d.ts.map +1 -1
- package/dist/event-emitter.js.map +1 -1
- package/dist/refusals.d.ts +27 -0
- package/dist/refusals.d.ts.map +1 -0
- package/dist/refusals.js +50 -0
- package/dist/refusals.js.map +1 -0
- package/dist/types.d.ts +41 -3
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -10,11 +10,12 @@ npm install @intutic/clawde
|
|
|
10
10
|
|
|
11
11
|
## Features
|
|
12
12
|
|
|
13
|
-
- **
|
|
14
|
-
- **
|
|
15
|
-
- **
|
|
16
|
-
- **
|
|
17
|
-
- **
|
|
13
|
+
- **Governed chat:** `chat()` sends a request through the proxy and resolves with `verdict: 'allow'`. A governance refusal (policy block, reask, loop run held for review, spend cap, DLP block) throws `ClawdeBlockedError` with the proxy's `verdict`, `code` and reason, and is never retried; transport failures and 5xx answers are retried.
|
|
14
|
+
- **Verdict Events:** `client.on('kill' | 'reask' | 'hold', ...)` fires on a refusal, before `chat()` throws. See the [SDK reference](https://docs.intutic.ai/reference/clawde-sdk#_5-verdicts-and-errors) for every refusal code.
|
|
15
|
+
- **Anthropic requests:** `provider: 'anthropic'` translates OpenAI-style parameters to an Anthropic Messages body, sends it to the proxy's `/v1/messages` route, and translates the reply back.
|
|
16
|
+
- **Budget Check:** `checkBudget()` reports whether the workspace has budget left, from the control plane's `GET /api/v1/budget`.
|
|
17
|
+
- **Circuit Breaker:** `client.circuitBreaker(toolName, options)(fn)` runs `fn`, after a workspace budget check when `requireBudget` is set, failing closed unless `failOpen` is set.
|
|
18
|
+
- **Context Resolution:** `resolveContext()` reads the sync daemon's `~/.intutic/config.json` (git branch, Jira ticket, PagerDuty incident, CI pipeline, workspace, session), falling back to environment variables.
|
|
18
19
|
- **Control-Plane Management (`ControlPlaneClient`):** Org signup, team/workspace creation, gateway registration and assignment, and provider-credential provisioning — the CLI's management surface, callable programmatically. See the [SDK reference](https://docs.intutic.ai/reference/clawde-sdk#control-plane-management-controlplaneclient).
|
|
19
20
|
|
|
20
21
|
## License
|
package/dist/budget-checker.d.ts
CHANGED
|
@@ -18,6 +18,5 @@ export declare class BudgetChecker {
|
|
|
18
18
|
* for API/cache-behavior compatibility with callers already using them.
|
|
19
19
|
*/
|
|
20
20
|
checkBudget(model: string, estimatedTokens: number): Promise<BudgetCheckResult>;
|
|
21
|
-
updateCachedBudget(model: string, estimatedTokens: number, remainingUsd: number, allowed: boolean): void;
|
|
22
21
|
}
|
|
23
22
|
//# sourceMappingURL=budget-checker.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"budget-checker.d.ts","sourceRoot":"","sources":["../src/budget-checker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAA;AAc3C,qBAAa,aAAa;IACxB,OAAO,CAAC,KAAK,CAAgC;IAC7C,OAAO,CAAC,QAAQ,CAAQ;IACxB,OAAO,CAAC,eAAe,CAAQ;IAC/B,OAAO,CAAC,MAAM,CAAQ;gBAEV,eAAe,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAKnD;;;;;;;;;;;OAWG;IACU,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"budget-checker.d.ts","sourceRoot":"","sources":["../src/budget-checker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAA;AAc3C,qBAAa,aAAa;IACxB,OAAO,CAAC,KAAK,CAAgC;IAC7C,OAAO,CAAC,QAAQ,CAAQ;IACxB,OAAO,CAAC,eAAe,CAAQ;IAC/B,OAAO,CAAC,MAAM,CAAQ;gBAEV,eAAe,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAKnD;;;;;;;;;;;OAWG;IACU,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;CAoC7F"}
|
package/dist/budget-checker.js
CHANGED
|
@@ -56,14 +56,6 @@ class BudgetChecker {
|
|
|
56
56
|
throw new errors_1.ClawdeConnectionError(`Could not reach control-plane budget endpoint: ${err.message}`);
|
|
57
57
|
}
|
|
58
58
|
}
|
|
59
|
-
// Helper to manually update/pre-populate budget cache from response headers
|
|
60
|
-
updateCachedBudget(model, estimatedTokens, remainingUsd, allowed) {
|
|
61
|
-
const cacheKey = `${model}:${estimatedTokens}`;
|
|
62
|
-
this.cache.set(cacheKey, {
|
|
63
|
-
result: { allowed, remaining_usd: remainingUsd },
|
|
64
|
-
timestamp: Date.now(),
|
|
65
|
-
});
|
|
66
|
-
}
|
|
67
59
|
}
|
|
68
60
|
exports.BudgetChecker = BudgetChecker;
|
|
69
61
|
//# sourceMappingURL=budget-checker.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"budget-checker.js","sourceRoot":"","sources":["../src/budget-checker.ts"],"names":[],"mappings":";;;AACA,qCAAgD;AAahD,MAAa,aAAa;IAChB,KAAK,GAAG,IAAI,GAAG,EAAsB,CAAA;IACrC,QAAQ,GAAG,KAAK,CAAA,CAAC,UAAU;IAC3B,eAAe,CAAQ;IACvB,MAAM,CAAQ;IAEtB,YAAY,eAAuB,EAAE,MAAc;QACjD,IAAI,CAAC,eAAe,GAAG,eAAe,CAAA;QACtC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;IACtB,CAAC;IAED;;;;;;;;;;;OAWG;IACI,KAAK,CAAC,WAAW,CAAC,KAAa,EAAE,eAAuB;QAC7D,MAAM,QAAQ,GAAG,GAAG,KAAK,IAAI,eAAe,EAAE,CAAA;QAC9C,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;QACtB,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;QAEvC,IAAI,MAAM,IAAI,GAAG,GAAG,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;YACrD,OAAO,MAAM,CAAC,MAAM,CAAA;QACtB,CAAC;QAED,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,eAAe,gBAAgB,EAAE;gBACpE,MAAM,EAAE,KAAK;gBACb,OAAO,EAAE;oBACP,eAAe,EAAE,UAAU,IAAI,CAAC,MAAM,EAAE;oBACxC,QAAQ,EAAE,kBAAkB;iBAC7B;aACF,CAAC,CAAA;YAEF,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,MAAM,IAAI,KAAK,CAAC,oCAAoC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAA;YACxE,CAAC;YAED,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAA0B,CAAA;YAC7D,MAAM,MAAM,GAAsB;gBAChC,OAAO,EAAE,IAAI,CAAC,oBAAoB,GAAG,CAAC;gBACtC,aAAa,EAAE,IAAI,CAAC,oBAAoB;gBACxC,MAAM,EAAE,IAAI,CAAC,eAAe;oBAC1B,CAAC,CAAC,qDAAqD;oBACvD,CAAC,CAAC,SAAS;aACd,CAAA;YACD,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,CAAA;YACpD,OAAO,MAAM,CAAA;QACf,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,MAAM,IAAI,8BAAqB,CAAC,kDAAkD,GAAG,CAAC,OAAO,EAAE,CAAC,CAAA;QAClG,CAAC;IACH,CAAC;
|
|
1
|
+
{"version":3,"file":"budget-checker.js","sourceRoot":"","sources":["../src/budget-checker.ts"],"names":[],"mappings":";;;AACA,qCAAgD;AAahD,MAAa,aAAa;IAChB,KAAK,GAAG,IAAI,GAAG,EAAsB,CAAA;IACrC,QAAQ,GAAG,KAAK,CAAA,CAAC,UAAU;IAC3B,eAAe,CAAQ;IACvB,MAAM,CAAQ;IAEtB,YAAY,eAAuB,EAAE,MAAc;QACjD,IAAI,CAAC,eAAe,GAAG,eAAe,CAAA;QACtC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;IACtB,CAAC;IAED;;;;;;;;;;;OAWG;IACI,KAAK,CAAC,WAAW,CAAC,KAAa,EAAE,eAAuB;QAC7D,MAAM,QAAQ,GAAG,GAAG,KAAK,IAAI,eAAe,EAAE,CAAA;QAC9C,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;QACtB,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;QAEvC,IAAI,MAAM,IAAI,GAAG,GAAG,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;YACrD,OAAO,MAAM,CAAC,MAAM,CAAA;QACtB,CAAC;QAED,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,eAAe,gBAAgB,EAAE;gBACpE,MAAM,EAAE,KAAK;gBACb,OAAO,EAAE;oBACP,eAAe,EAAE,UAAU,IAAI,CAAC,MAAM,EAAE;oBACxC,QAAQ,EAAE,kBAAkB;iBAC7B;aACF,CAAC,CAAA;YAEF,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,MAAM,IAAI,KAAK,CAAC,oCAAoC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAA;YACxE,CAAC;YAED,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAA0B,CAAA;YAC7D,MAAM,MAAM,GAAsB;gBAChC,OAAO,EAAE,IAAI,CAAC,oBAAoB,GAAG,CAAC;gBACtC,aAAa,EAAE,IAAI,CAAC,oBAAoB;gBACxC,MAAM,EAAE,IAAI,CAAC,eAAe;oBAC1B,CAAC,CAAC,qDAAqD;oBACvD,CAAC,CAAC,SAAS;aACd,CAAA;YACD,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,CAAA;YACpD,OAAO,MAAM,CAAA;QACf,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,MAAM,IAAI,8BAAqB,CAAC,kDAAkD,GAAG,CAAC,OAAO,EAAE,CAAC,CAAA;QAClG,CAAC;IACH,CAAC;CACF;AA3DD,sCA2DC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"circuit-breaker.d.ts","sourceRoot":"","sources":["../src/circuit-breaker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAA;AAG/C,qBAAa,cAAc;IACzB,OAAO,CAAC,MAAM,CAAK;gBAEP,MAAM,EAAE,GAAG;IAIhB,IAAI,CAAC,CAAC,EACX,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,qBAA0B,GAClC,CAAC,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"circuit-breaker.d.ts","sourceRoot":"","sources":["../src/circuit-breaker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAA;AAG/C,qBAAa,cAAc;IACzB,OAAO,CAAC,MAAM,CAAK;gBAEP,MAAM,EAAE,GAAG;IAIhB,IAAI,CAAC,CAAC,EACX,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,qBAA0B,GAClC,CAAC,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC;CAoCxC"}
|
package/dist/circuit-breaker.js
CHANGED
|
@@ -10,43 +10,29 @@ class CircuitBreaker {
|
|
|
10
10
|
wrap(toolName, options = {}) {
|
|
11
11
|
const failOpen = options.failOpen ?? false;
|
|
12
12
|
return async (fn) => {
|
|
13
|
-
// 1. Pre-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
// If maxCostUsd is specified, check against current budget limit or remaining
|
|
17
|
-
if (options.maxCostUsd !== undefined) {
|
|
18
|
-
// Pre-flight check
|
|
13
|
+
// 1. Pre-check: workspace budget, when asked for
|
|
14
|
+
if (options.requireBudget || options.maxCostUsd !== undefined) {
|
|
15
|
+
try {
|
|
19
16
|
const budget = await this.client.checkBudget('default', 1);
|
|
20
17
|
if (!budget.allowed) {
|
|
21
18
|
throw new errors_1.ClawdeVerdictError('kill', `Circuit breaker tripped for tool '${toolName}': budget exceeded. Remaining: $${budget.remaining_usd}`);
|
|
22
19
|
}
|
|
23
20
|
}
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
console.warn(`[Clawde SDK] Circuit breaker pre-check failed (failing open): ${err.message}`);
|
|
21
|
+
catch (err) {
|
|
22
|
+
if (!failOpen) {
|
|
23
|
+
throw err;
|
|
24
|
+
}
|
|
25
|
+
if (process.env.INTUTIC_DEBUG === 'true') {
|
|
26
|
+
console.warn(`[Clawde SDK] Circuit breaker pre-check failed (failing open): ${err.message}`);
|
|
27
|
+
}
|
|
32
28
|
}
|
|
33
29
|
}
|
|
34
|
-
// 2.
|
|
30
|
+
// 2. Run the function. A refusal from chat() arrives as a thrown
|
|
31
|
+
// ClawdeBlockedError, so fail-closed needs nothing beyond rethrowing.
|
|
35
32
|
try {
|
|
36
|
-
|
|
37
|
-
// 3. Post-Check: If the result is a ChatResponse (or has verdict headers), inspect it
|
|
38
|
-
if (result && typeof result === 'object') {
|
|
39
|
-
const res = result;
|
|
40
|
-
if (res.verdict === 'kill') {
|
|
41
|
-
throw new errors_1.ClawdeVerdictError('kill', `Execution blocked by governance policy (Verdict: KILL)`);
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
return result;
|
|
33
|
+
return await fn();
|
|
45
34
|
}
|
|
46
35
|
catch (err) {
|
|
47
|
-
if (err instanceof errors_1.ClawdeVerdictError && !failOpen) {
|
|
48
|
-
throw err;
|
|
49
|
-
}
|
|
50
36
|
if (!failOpen) {
|
|
51
37
|
throw err;
|
|
52
38
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"circuit-breaker.js","sourceRoot":"","sources":["../src/circuit-breaker.ts"],"names":[],"mappings":";;;AACA,qCAA6C;AAE7C,MAAa,cAAc;IACjB,MAAM,CAAK;IAEnB,YAAY,MAAW;QACrB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;IACtB,CAAC;IAEM,IAAI,CACT,QAAgB,EAChB,UAAiC,EAAE;QAEnC,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,KAAK,CAAA;QAE1C,OAAO,KAAK,EAAE,EAAoB,EAAc,EAAE;YAChD,
|
|
1
|
+
{"version":3,"file":"circuit-breaker.js","sourceRoot":"","sources":["../src/circuit-breaker.ts"],"names":[],"mappings":";;;AACA,qCAA6C;AAE7C,MAAa,cAAc;IACjB,MAAM,CAAK;IAEnB,YAAY,MAAW;QACrB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;IACtB,CAAC;IAEM,IAAI,CACT,QAAgB,EAChB,UAAiC,EAAE;QAEnC,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,KAAK,CAAA;QAE1C,OAAO,KAAK,EAAE,EAAoB,EAAc,EAAE;YAChD,iDAAiD;YACjD,IAAI,OAAO,CAAC,aAAa,IAAI,OAAO,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;gBAC9D,IAAI,CAAC;oBACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,SAAS,EAAE,CAAC,CAAC,CAAA;oBAC1D,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;wBACpB,MAAM,IAAI,2BAAkB,CAAC,MAAM,EAAE,qCAAqC,QAAQ,mCAAmC,MAAM,CAAC,aAAa,EAAE,CAAC,CAAA;oBAC9I,CAAC;gBACH,CAAC;gBAAC,OAAO,GAAQ,EAAE,CAAC;oBAClB,IAAI,CAAC,QAAQ,EAAE,CAAC;wBACd,MAAM,GAAG,CAAA;oBACX,CAAC;oBACD,IAAI,OAAO,CAAC,GAAG,CAAC,aAAa,KAAK,MAAM,EAAE,CAAC;wBACzC,OAAO,CAAC,IAAI,CAAC,iEAAiE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAA;oBAC9F,CAAC;gBACH,CAAC;YACH,CAAC;YAED,iEAAiE;YACjE,sEAAsE;YACtE,IAAI,CAAC;gBACH,OAAO,MAAM,EAAE,EAAE,CAAA;YACnB,CAAC;YAAC,OAAO,GAAQ,EAAE,CAAC;gBAClB,IAAI,CAAC,QAAQ,EAAE,CAAC;oBACd,MAAM,GAAG,CAAA;gBACX,CAAC;gBACD,IAAI,OAAO,CAAC,GAAG,CAAC,aAAa,KAAK,MAAM,EAAE,CAAC;oBACzC,OAAO,CAAC,IAAI,CAAC,iEAAiE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAA;gBAC9F,CAAC;gBACD,OAAO,IAAW,CAAA,CAAC,kCAAkC;YACvD,CAAC;QACH,CAAC,CAAA;IACH,CAAC;CACF;AA9CD,wCA8CC"}
|
package/dist/client.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ClawdeClientOptions, ChatParams, ChatResponse, ResolvedContext, BudgetCheckResult, EventCallback, CircuitBreakerOptions } from './types';
|
|
1
|
+
import { ClawdeClientOptions, ChatParams, ChatResponse, ResolvedContext, BudgetCheckResult, EventCallback, CircuitBreakerOptions, VerdictEvent } from './types';
|
|
2
2
|
export declare class ClawdeClient {
|
|
3
3
|
private apiKey;
|
|
4
4
|
private baseUrl;
|
|
@@ -13,11 +13,19 @@ export declare class ClawdeClient {
|
|
|
13
13
|
private circuitBreakerWrapper;
|
|
14
14
|
private eventEmitter;
|
|
15
15
|
constructor(options: ClawdeClientOptions);
|
|
16
|
-
on(event:
|
|
16
|
+
on(event: VerdictEvent, callback: EventCallback): void;
|
|
17
17
|
off(event: string, callback: EventCallback): void;
|
|
18
18
|
checkBudget(model: string, estimatedTokens: number): Promise<BudgetCheckResult>;
|
|
19
19
|
resolveContext(): Promise<ResolvedContext>;
|
|
20
20
|
circuitBreaker<T>(toolName: string, options?: CircuitBreakerOptions): (fn: () => Promise<T>) => Promise<T>;
|
|
21
|
+
/**
|
|
22
|
+
* Send a chat request through the proxy.
|
|
23
|
+
*
|
|
24
|
+
* Resolves with `verdict: 'allow'` when the proxy let the request through. A
|
|
25
|
+
* governance refusal fires the matching event and rejects with
|
|
26
|
+
* `ClawdeBlockedError`, unretried. Transport failures, timeouts and 5xx
|
|
27
|
+
* answers are retried; anything else rejects with `ClawdeConnectionError`.
|
|
28
|
+
*/
|
|
21
29
|
chat(params: ChatParams): Promise<ChatResponse>;
|
|
22
30
|
}
|
|
23
31
|
//# sourceMappingURL=client.d.ts.map
|
package/dist/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,EACnB,UAAU,EACV,YAAY,EACZ,eAAe,EACf,iBAAiB,EACjB,aAAa,EACb,qBAAqB,
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,EACnB,UAAU,EACV,YAAY,EACZ,eAAe,EACf,iBAAiB,EACjB,aAAa,EACb,qBAAqB,EACrB,YAAY,EACb,MAAM,SAAS,CAAA;AAUhB,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,OAAO,CAAQ;IACvB,OAAO,CAAC,eAAe,CAAQ;IAC/B,OAAO,CAAC,QAAQ,CAAC,CAAmC;IACpD,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,OAAO,CAAQ;IACvB,OAAO,CAAC,OAAO,CAAQ;IAEvB,wEAAwE;IACxE,OAAO,CAAC,QAAQ,CAAe;IAE/B,OAAO,CAAC,aAAa,CAAe;IACpC,OAAO,CAAC,qBAAqB,CAAgB;IAC7C,OAAO,CAAC,YAAY,CAAoB;gBAE5B,OAAO,EAAE,mBAAmB;IAuBjC,EAAE,CAAC,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,aAAa,GAAG,IAAI;IAItD,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,GAAG,IAAI;IAK3C,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAK/E,cAAc,IAAI,OAAO,CAAC,eAAe,CAAC;IAQhD,cAAc,CAAC,CAAC,EACrB,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,qBAA0B,GAClC,CAAC,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC;IAIvC;;;;;;;OAOG;IACU,IAAI,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,YAAY,CAAC;CAqE7D"}
|
package/dist/client.js
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.ClawdeClient = void 0;
|
|
4
4
|
const errors_1 = require("./errors");
|
|
5
|
+
const refusals_1 = require("./refusals");
|
|
5
6
|
const schema_enforcer_1 = require("./schema-enforcer");
|
|
6
7
|
const context_resolver_1 = require("./context-resolver");
|
|
7
8
|
const budget_checker_1 = require("./budget-checker");
|
|
@@ -62,89 +63,79 @@ class ClawdeClient {
|
|
|
62
63
|
circuitBreaker(toolName, options = {}) {
|
|
63
64
|
return this.circuitBreakerWrapper.wrap(toolName, options);
|
|
64
65
|
}
|
|
65
|
-
|
|
66
|
+
/**
|
|
67
|
+
* Send a chat request through the proxy.
|
|
68
|
+
*
|
|
69
|
+
* Resolves with `verdict: 'allow'` when the proxy let the request through. A
|
|
70
|
+
* governance refusal fires the matching event and rejects with
|
|
71
|
+
* `ClawdeBlockedError`, unretried. Transport failures, timeouts and 5xx
|
|
72
|
+
* answers are retried; anything else rejects with `ClawdeConnectionError`.
|
|
73
|
+
*/
|
|
66
74
|
async chat(params) {
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
//
|
|
70
|
-
const
|
|
71
|
-
|
|
72
|
-
|
|
75
|
+
const anthropic = this.provider === 'anthropic';
|
|
76
|
+
// The proxy picks the wire format by route: an Anthropic Messages body
|
|
77
|
+
// sent to /v1/chat/completions is parsed as an OpenAI one.
|
|
78
|
+
const url = `${this.baseUrl}${anthropic ? '/v1/messages' : '/v1/chat/completions'}`;
|
|
79
|
+
const headers = {
|
|
80
|
+
'Content-Type': 'application/json',
|
|
81
|
+
...(anthropic
|
|
82
|
+
? { 'x-api-key': this.apiKey, 'anthropic-version': '2023-06-01' }
|
|
83
|
+
: { 'Authorization': `Bearer ${this.apiKey}` }),
|
|
84
|
+
// Without these the proxy sees graph_id == session_id, treats every
|
|
85
|
+
// request as a graph of one, and skips membership, fleet spend and
|
|
86
|
+
// node counting entirely.
|
|
87
|
+
...(0, graph_identity_1.identityHeaders)(this.identity),
|
|
88
|
+
};
|
|
89
|
+
const body = JSON.stringify((0, schema_enforcer_1.normalizeRequest)(params, this.provider));
|
|
90
|
+
let lastError = '';
|
|
73
91
|
const maxAttempts = this.retries + 1;
|
|
74
92
|
for (let attempt = 1; attempt <= maxAttempts; attempt++) {
|
|
93
|
+
if (attempt > 1) {
|
|
94
|
+
if (process.env.INTUTIC_DEBUG === 'true') {
|
|
95
|
+
console.warn(`[Clawde SDK] Attempt ${attempt - 1} failed, retrying... Error: ${lastError}`);
|
|
96
|
+
}
|
|
97
|
+
await new Promise((resolve) => setTimeout(resolve, (attempt - 1) * 100));
|
|
98
|
+
}
|
|
75
99
|
const controller = new AbortController();
|
|
76
100
|
const timer = setTimeout(() => controller.abort(), this.timeout);
|
|
101
|
+
let status;
|
|
102
|
+
let text;
|
|
77
103
|
try {
|
|
78
|
-
const
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
'X-Intutic-Context': JSON.stringify(context),
|
|
82
|
-
// Without these the proxy sees graph_id == session_id, treats every
|
|
83
|
-
// request as a graph of one, and skips membership, fleet spend and
|
|
84
|
-
// node counting entirely.
|
|
85
|
-
...(0, graph_identity_1.identityHeaders)(this.identity),
|
|
86
|
-
};
|
|
87
|
-
if (params.max_cost_usd !== undefined) {
|
|
88
|
-
headers['X-Intutic-Cost-Limit'] = String(params.max_cost_usd);
|
|
89
|
-
}
|
|
90
|
-
if (params.sensitivity_tier !== undefined) {
|
|
91
|
-
headers['X-Intutic-Sensitivity'] = String(params.sensitivity_tier);
|
|
92
|
-
}
|
|
93
|
-
const response = await fetch(`${this.baseUrl}/v1/chat/completions`, {
|
|
94
|
-
method: 'POST',
|
|
95
|
-
headers,
|
|
96
|
-
body: JSON.stringify(requestPayload),
|
|
97
|
-
signal: controller.signal,
|
|
98
|
-
});
|
|
99
|
-
clearTimeout(timer);
|
|
100
|
-
if (!response.ok) {
|
|
101
|
-
throw new Error(`HTTP error ${response.status}: ${await response.text()}`);
|
|
102
|
-
}
|
|
103
|
-
const json = await response.json();
|
|
104
|
-
const normalized = (0, schema_enforcer_1.normalizeResponse)(json, this.provider);
|
|
105
|
-
// 4. Extract Intutic response headers
|
|
106
|
-
const verdictHeader = response.headers.get('x-intutic-verdict') || 'allow';
|
|
107
|
-
const budgetRemainingHeader = response.headers.get('x-intutic-budget-remaining');
|
|
108
|
-
const budgetPctHeader = response.headers.get('x-intutic-budget-pct');
|
|
109
|
-
normalized.verdict = verdictHeader;
|
|
110
|
-
if (budgetRemainingHeader) {
|
|
111
|
-
normalized.budgetRemainingUsd = parseFloat(budgetRemainingHeader);
|
|
112
|
-
}
|
|
113
|
-
if (budgetPctHeader) {
|
|
114
|
-
normalized.budgetPctUsed = parseFloat(budgetPctHeader);
|
|
115
|
-
}
|
|
116
|
-
// 5. Update local budget cache
|
|
117
|
-
if (normalized.budgetRemainingUsd !== undefined) {
|
|
118
|
-
this.budgetChecker.updateCachedBudget(params.model, params.messages.length, // approximation
|
|
119
|
-
normalized.budgetRemainingUsd, verdictHeader !== 'kill');
|
|
120
|
-
}
|
|
121
|
-
// 6. Trigger event emitters
|
|
122
|
-
if (normalized.verdict && normalized.verdict !== 'allow') {
|
|
123
|
-
this.eventEmitter.emit(normalized.verdict, normalized);
|
|
124
|
-
}
|
|
125
|
-
// 7. Policy enforcement
|
|
126
|
-
if (normalized.verdict === 'kill') {
|
|
127
|
-
throw new errors_1.ClawdeVerdictError('kill', 'Request blocked by policy (Verdict: KILL)');
|
|
128
|
-
}
|
|
129
|
-
return normalized;
|
|
104
|
+
const response = await fetch(url, { method: 'POST', headers, body, signal: controller.signal });
|
|
105
|
+
status = response.status;
|
|
106
|
+
text = await response.text();
|
|
130
107
|
}
|
|
131
108
|
catch (err) {
|
|
109
|
+
lastError = err instanceof Error ? err.message : String(err);
|
|
110
|
+
continue;
|
|
111
|
+
}
|
|
112
|
+
finally {
|
|
132
113
|
clearTimeout(timer);
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
114
|
+
}
|
|
115
|
+
if (status >= 200 && status < 300) {
|
|
116
|
+
let json;
|
|
117
|
+
try {
|
|
118
|
+
json = JSON.parse(text);
|
|
136
119
|
}
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
console.warn(`[Clawde SDK] Attempt ${attempt} failed, retrying... Error: ${err.message}`);
|
|
140
|
-
}
|
|
141
|
-
// backoff delay
|
|
142
|
-
await new Promise((resolve) => setTimeout(resolve, attempt * 100));
|
|
143
|
-
continue;
|
|
120
|
+
catch {
|
|
121
|
+
throw new errors_1.ClawdeConnectionError(`Proxy answered ${status} with a body that is not JSON: ${text}`);
|
|
144
122
|
}
|
|
123
|
+
const normalized = (0, schema_enforcer_1.normalizeResponse)(json, this.provider);
|
|
124
|
+
normalized.verdict = 'allow';
|
|
125
|
+
return normalized;
|
|
126
|
+
}
|
|
127
|
+
const refusal = (0, refusals_1.parseRefusal)(status, text);
|
|
128
|
+
if (refusal) {
|
|
129
|
+
this.eventEmitter.emit(refusal.verdict, { ...refusal, status });
|
|
130
|
+
throw new errors_1.ClawdeBlockedError(refusal.verdict, refusal.code, status, refusal.message);
|
|
145
131
|
}
|
|
132
|
+
lastError = `HTTP error ${status}: ${text}`;
|
|
133
|
+
// A 4xx that is not a refusal (bad key, malformed body) fails the same
|
|
134
|
+
// way every time; only a 5xx is worth another attempt.
|
|
135
|
+
if (status < 500)
|
|
136
|
+
throw new errors_1.ClawdeConnectionError(lastError);
|
|
146
137
|
}
|
|
147
|
-
throw new errors_1.ClawdeConnectionError(`Request failed after ${maxAttempts} attempts. Last error: ${lastError
|
|
138
|
+
throw new errors_1.ClawdeConnectionError(`Request failed after ${maxAttempts} attempts. Last error: ${lastError}`);
|
|
148
139
|
}
|
|
149
140
|
}
|
|
150
141
|
exports.ClawdeClient = ClawdeClient;
|
package/dist/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
package/dist/errors.d.ts
CHANGED
|
@@ -1,14 +1,28 @@
|
|
|
1
|
+
import type { RefusalVerdict } from './types';
|
|
1
2
|
export declare class ClawdeError extends Error {
|
|
2
3
|
constructor(message: string);
|
|
3
4
|
}
|
|
5
|
+
/** The proxy is unreachable, timed out, or answered with an error that is not a governance refusal. */
|
|
4
6
|
export declare class ClawdeConnectionError extends ClawdeError {
|
|
5
7
|
constructor(message: string);
|
|
6
8
|
}
|
|
7
9
|
export declare class ClawdeBudgetExceededError extends ClawdeError {
|
|
8
10
|
constructor(message: string);
|
|
9
11
|
}
|
|
12
|
+
/** A governance verdict stopped the call: a proxy refusal (`ClawdeBlockedError`) or the circuit breaker's budget check. */
|
|
10
13
|
export declare class ClawdeVerdictError extends ClawdeError {
|
|
11
14
|
verdict: string;
|
|
12
15
|
constructor(verdict: string, message: string);
|
|
13
16
|
}
|
|
17
|
+
/**
|
|
18
|
+
* The proxy refused the request: a policy block, a reask, a loop run held for
|
|
19
|
+
* review, a spend cap or a DLP block. Never retried — the same request would be
|
|
20
|
+
* refused again. `code` is the proxy's error code and `message` its reason.
|
|
21
|
+
*/
|
|
22
|
+
export declare class ClawdeBlockedError extends ClawdeVerdictError {
|
|
23
|
+
verdict: RefusalVerdict;
|
|
24
|
+
readonly code: string;
|
|
25
|
+
readonly status: number;
|
|
26
|
+
constructor(verdict: RefusalVerdict, code: string, status: number, message: string);
|
|
27
|
+
}
|
|
14
28
|
//# sourceMappingURL=errors.d.ts.map
|
package/dist/errors.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,qBAAa,WAAY,SAAQ,KAAK;gBACxB,OAAO,EAAE,MAAM;CAI5B;AAED,qBAAa,qBAAsB,SAAQ,WAAW;gBACxC,OAAO,EAAE,MAAM;CAI5B;AAED,qBAAa,yBAA0B,SAAQ,WAAW;gBAC5C,OAAO,EAAE,MAAM;CAI5B;AAED,qBAAa,kBAAmB,SAAQ,WAAW;IAC1C,OAAO,EAAE,MAAM,CAAA;gBAEV,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;CAK7C"}
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAE7C,qBAAa,WAAY,SAAQ,KAAK;gBACxB,OAAO,EAAE,MAAM;CAI5B;AAED,uGAAuG;AACvG,qBAAa,qBAAsB,SAAQ,WAAW;gBACxC,OAAO,EAAE,MAAM;CAI5B;AAED,qBAAa,yBAA0B,SAAQ,WAAW;gBAC5C,OAAO,EAAE,MAAM;CAI5B;AAED,2HAA2H;AAC3H,qBAAa,kBAAmB,SAAQ,WAAW;IAC1C,OAAO,EAAE,MAAM,CAAA;gBAEV,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;CAK7C;AAED;;;;GAIG;AACH,qBAAa,kBAAmB,SAAQ,kBAAkB;IACzC,OAAO,EAAE,cAAc,CAAA;IACtC,SAAgB,IAAI,EAAE,MAAM,CAAA;IAC5B,SAAgB,MAAM,EAAE,MAAM,CAAA;gBAElB,OAAO,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;CAMnF"}
|
package/dist/errors.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.ClawdeVerdictError = exports.ClawdeBudgetExceededError = exports.ClawdeConnectionError = exports.ClawdeError = void 0;
|
|
3
|
+
exports.ClawdeBlockedError = exports.ClawdeVerdictError = exports.ClawdeBudgetExceededError = exports.ClawdeConnectionError = exports.ClawdeError = void 0;
|
|
4
4
|
class ClawdeError extends Error {
|
|
5
5
|
constructor(message) {
|
|
6
6
|
super(message);
|
|
@@ -8,6 +8,7 @@ class ClawdeError extends Error {
|
|
|
8
8
|
}
|
|
9
9
|
}
|
|
10
10
|
exports.ClawdeError = ClawdeError;
|
|
11
|
+
/** The proxy is unreachable, timed out, or answered with an error that is not a governance refusal. */
|
|
11
12
|
class ClawdeConnectionError extends ClawdeError {
|
|
12
13
|
constructor(message) {
|
|
13
14
|
super(message);
|
|
@@ -22,6 +23,7 @@ class ClawdeBudgetExceededError extends ClawdeError {
|
|
|
22
23
|
}
|
|
23
24
|
}
|
|
24
25
|
exports.ClawdeBudgetExceededError = ClawdeBudgetExceededError;
|
|
26
|
+
/** A governance verdict stopped the call: a proxy refusal (`ClawdeBlockedError`) or the circuit breaker's budget check. */
|
|
25
27
|
class ClawdeVerdictError extends ClawdeError {
|
|
26
28
|
verdict;
|
|
27
29
|
constructor(verdict, message) {
|
|
@@ -31,4 +33,20 @@ class ClawdeVerdictError extends ClawdeError {
|
|
|
31
33
|
}
|
|
32
34
|
}
|
|
33
35
|
exports.ClawdeVerdictError = ClawdeVerdictError;
|
|
36
|
+
/**
|
|
37
|
+
* The proxy refused the request: a policy block, a reask, a loop run held for
|
|
38
|
+
* review, a spend cap or a DLP block. Never retried — the same request would be
|
|
39
|
+
* refused again. `code` is the proxy's error code and `message` its reason.
|
|
40
|
+
*/
|
|
41
|
+
class ClawdeBlockedError extends ClawdeVerdictError {
|
|
42
|
+
code;
|
|
43
|
+
status;
|
|
44
|
+
constructor(verdict, code, status, message) {
|
|
45
|
+
super(verdict, message);
|
|
46
|
+
this.name = 'ClawdeBlockedError';
|
|
47
|
+
this.code = code;
|
|
48
|
+
this.status = status;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
exports.ClawdeBlockedError = ClawdeBlockedError;
|
|
34
52
|
//# sourceMappingURL=errors.js.map
|
package/dist/errors.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":";;;AAEA,MAAa,WAAY,SAAQ,KAAK;IACpC,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAA;QACd,IAAI,CAAC,IAAI,GAAG,aAAa,CAAA;IAC3B,CAAC;CACF;AALD,kCAKC;AAED,uGAAuG;AACvG,MAAa,qBAAsB,SAAQ,WAAW;IACpD,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAA;QACd,IAAI,CAAC,IAAI,GAAG,uBAAuB,CAAA;IACrC,CAAC;CACF;AALD,sDAKC;AAED,MAAa,yBAA0B,SAAQ,WAAW;IACxD,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAA;QACd,IAAI,CAAC,IAAI,GAAG,2BAA2B,CAAA;IACzC,CAAC;CACF;AALD,8DAKC;AAED,2HAA2H;AAC3H,MAAa,kBAAmB,SAAQ,WAAW;IAC1C,OAAO,CAAQ;IAEtB,YAAY,OAAe,EAAE,OAAe;QAC1C,KAAK,CAAC,OAAO,CAAC,CAAA;QACd,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAA;QAChC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;IACxB,CAAC;CACF;AARD,gDAQC;AAED;;;;GAIG;AACH,MAAa,kBAAmB,SAAQ,kBAAkB;IAExC,IAAI,CAAQ;IACZ,MAAM,CAAQ;IAE9B,YAAY,OAAuB,EAAE,IAAY,EAAE,MAAc,EAAE,OAAe;QAChF,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;QACvB,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAA;QAChC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;QAChB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;IACtB,CAAC;CACF;AAXD,gDAWC"}
|
package/dist/event-emitter.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { EventCallback } from './types';
|
|
1
|
+
import { EventCallback, VerdictEvent } from './types';
|
|
2
2
|
export declare class ClawdeEventEmitter {
|
|
3
3
|
private emitter;
|
|
4
|
-
on(event:
|
|
4
|
+
on(event: VerdictEvent, callback: EventCallback): void;
|
|
5
5
|
off(event: string, callback: EventCallback): void;
|
|
6
6
|
emit(event: string, data: any): void;
|
|
7
7
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"event-emitter.d.ts","sourceRoot":"","sources":["../src/event-emitter.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;
|
|
1
|
+
{"version":3,"file":"event-emitter.d.ts","sourceRoot":"","sources":["../src/event-emitter.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAErD,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,OAAO,CAAqB;IAE7B,EAAE,CAAC,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,aAAa,GAAG,IAAI;IAItD,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,GAAG,IAAI;IAIjD,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,GAAG,IAAI;CAG5C"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"event-emitter.js","sourceRoot":"","sources":["../src/event-emitter.ts"],"names":[],"mappings":";;;AAAA,mCAAqC;AAGrC,MAAa,kBAAkB;IACrB,OAAO,GAAG,IAAI,qBAAY,EAAE,CAAA;IAE7B,EAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"event-emitter.js","sourceRoot":"","sources":["../src/event-emitter.ts"],"names":[],"mappings":";;;AAAA,mCAAqC;AAGrC,MAAa,kBAAkB;IACrB,OAAO,GAAG,IAAI,qBAAY,EAAE,CAAA;IAE7B,EAAE,CAAC,KAAmB,EAAE,QAAuB;QACpD,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAA;IAClC,CAAC;IAEM,GAAG,CAAC,KAAa,EAAE,QAAuB;QAC/C,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAA;IACnC,CAAC;IAEM,IAAI,CAAC,KAAa,EAAE,IAAS;QAClC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;IAChC,CAAC;CACF;AAdD,gDAcC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { RefusalVerdict } from './types';
|
|
2
|
+
/**
|
|
3
|
+
* The proxy's governance refusals: the `error.type` of its JSON error body
|
|
4
|
+
* (`{"error": {"type", "message"}}`, `json_error` in packages/proxy/src/proxy.rs),
|
|
5
|
+
* the status it always pairs that type with, and the verdict it represents.
|
|
6
|
+
*
|
|
7
|
+
* Matching on the pair rather than the status alone matters because the same
|
|
8
|
+
* statuses also carry errors that are not decisions: a provider's own 429 rate
|
|
9
|
+
* limit, a 403 for a key used against the wrong workspace, a 400 for a malformed
|
|
10
|
+
* body. Those are not refusals and must not be reported as one.
|
|
11
|
+
*
|
|
12
|
+
* `__tests__/refusals.test.ts` checks this table against proxy.rs, so a refusal
|
|
13
|
+
* the proxy adds or renames fails the build instead of silently turning back
|
|
14
|
+
* into a retried connection error.
|
|
15
|
+
*/
|
|
16
|
+
export declare const PROXY_REFUSALS: Readonly<Record<string, {
|
|
17
|
+
status: number;
|
|
18
|
+
verdict: RefusalVerdict;
|
|
19
|
+
}>>;
|
|
20
|
+
export interface ProxyRefusal {
|
|
21
|
+
verdict: RefusalVerdict;
|
|
22
|
+
code: string;
|
|
23
|
+
message: string;
|
|
24
|
+
}
|
|
25
|
+
/** The refusal an error response carries, or `null` when it is any other kind of failure. */
|
|
26
|
+
export declare function parseRefusal(status: number, body: string): ProxyRefusal | null;
|
|
27
|
+
//# sourceMappingURL=refusals.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"refusals.d.ts","sourceRoot":"","sources":["../src/refusals.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAE7C;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,cAAc,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,cAAc,CAAA;CAAE,CAAC,CAUhG,CAAA;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,cAAc,CAAA;IACvB,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,6FAA6F;AAC7F,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,CAe9E"}
|
package/dist/refusals.js
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PROXY_REFUSALS = void 0;
|
|
4
|
+
exports.parseRefusal = parseRefusal;
|
|
5
|
+
/**
|
|
6
|
+
* The proxy's governance refusals: the `error.type` of its JSON error body
|
|
7
|
+
* (`{"error": {"type", "message"}}`, `json_error` in packages/proxy/src/proxy.rs),
|
|
8
|
+
* the status it always pairs that type with, and the verdict it represents.
|
|
9
|
+
*
|
|
10
|
+
* Matching on the pair rather than the status alone matters because the same
|
|
11
|
+
* statuses also carry errors that are not decisions: a provider's own 429 rate
|
|
12
|
+
* limit, a 403 for a key used against the wrong workspace, a 400 for a malformed
|
|
13
|
+
* body. Those are not refusals and must not be reported as one.
|
|
14
|
+
*
|
|
15
|
+
* `__tests__/refusals.test.ts` checks this table against proxy.rs, so a refusal
|
|
16
|
+
* the proxy adds or renames fails the build instead of silently turning back
|
|
17
|
+
* into a retried connection error.
|
|
18
|
+
*/
|
|
19
|
+
exports.PROXY_REFUSALS = {
|
|
20
|
+
policy_denied: { status: 403, verdict: 'kill' },
|
|
21
|
+
model_not_allowed: { status: 403, verdict: 'kill' },
|
|
22
|
+
LOOP_RUN_TERMINATED: { status: 403, verdict: 'kill' },
|
|
23
|
+
LOOP_RUN_PENDING_REVIEW: { status: 403, verdict: 'hold' },
|
|
24
|
+
policy_reask: { status: 409, verdict: 'reask' },
|
|
25
|
+
BUDGET_EXCEEDED: { status: 429, verdict: 'kill' },
|
|
26
|
+
OVERAGE_HARD_CAP_EXCEEDED: { status: 429, verdict: 'kill' },
|
|
27
|
+
COST_GATE_EXCEEDED: { status: 402, verdict: 'kill' },
|
|
28
|
+
dlp_policy_violation: { status: 400, verdict: 'kill' },
|
|
29
|
+
};
|
|
30
|
+
/** The refusal an error response carries, or `null` when it is any other kind of failure. */
|
|
31
|
+
function parseRefusal(status, body) {
|
|
32
|
+
let error;
|
|
33
|
+
try {
|
|
34
|
+
error = JSON.parse(body)?.error;
|
|
35
|
+
}
|
|
36
|
+
catch {
|
|
37
|
+
return null;
|
|
38
|
+
}
|
|
39
|
+
if (!error || typeof error.type !== 'string')
|
|
40
|
+
return null;
|
|
41
|
+
const known = exports.PROXY_REFUSALS[error.type];
|
|
42
|
+
if (!known || known.status !== status)
|
|
43
|
+
return null;
|
|
44
|
+
return {
|
|
45
|
+
verdict: known.verdict,
|
|
46
|
+
code: error.type,
|
|
47
|
+
message: typeof error.message === 'string' ? error.message : error.type,
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=refusals.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"refusals.js","sourceRoot":"","sources":["../src/refusals.ts"],"names":[],"mappings":";;;AAmCA,oCAeC;AAhDD;;;;;;;;;;;;;GAaG;AACU,QAAA,cAAc,GAA0E;IACnG,aAAa,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE;IAC/C,iBAAiB,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE;IACnD,mBAAmB,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE;IACrD,uBAAuB,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE;IACzD,YAAY,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE;IAC/C,eAAe,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE;IACjD,yBAAyB,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE;IAC3D,kBAAkB,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE;IACpD,oBAAoB,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE;CACvD,CAAA;AAQD,6FAA6F;AAC7F,SAAgB,YAAY,CAAC,MAAc,EAAE,IAAY;IACvD,IAAI,KAAwD,CAAA;IAC5D,IAAI,CAAC;QACH,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,CAAA;IACjC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAA;IACb,CAAC;IACD,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAA;IACzD,MAAM,KAAK,GAAG,sBAAc,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;IACxC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,KAAK,MAAM;QAAE,OAAO,IAAI,CAAA;IAClD,OAAO;QACL,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,OAAO,EAAE,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI;KACxE,CAAA;AACH,CAAC"}
|
package/dist/types.d.ts
CHANGED
|
@@ -52,12 +52,43 @@ export interface ChatResponse {
|
|
|
52
52
|
completion_tokens: number;
|
|
53
53
|
total_tokens: number;
|
|
54
54
|
};
|
|
55
|
-
|
|
55
|
+
/** Always `allow`: a response only comes back when the proxy let the request through. */
|
|
56
|
+
verdict?: Verdict | LegacyVerdict;
|
|
57
|
+
/** @deprecated Never set: the proxy does not report budget on responses. Use `checkBudget()`. */
|
|
56
58
|
budgetRemainingUsd?: number;
|
|
59
|
+
/** @deprecated Never set: the proxy does not report budget on responses. Use `checkBudget()`. */
|
|
57
60
|
budgetPctUsed?: number;
|
|
58
61
|
}
|
|
62
|
+
/**
|
|
63
|
+
* A governance refusal the proxy answered with: `kill` blocks the request, `reask`
|
|
64
|
+
* refuses this attempt and tells the agent to revise it (it escalates to `kill`
|
|
65
|
+
* after repeated attempts), and `hold` pauses a loop run until a human reviews it.
|
|
66
|
+
*/
|
|
67
|
+
export type RefusalVerdict = 'kill' | 'reask' | 'hold';
|
|
68
|
+
/** What `chat()` can know about a request: it was let through, or refused. */
|
|
69
|
+
export type Verdict = 'allow' | RefusalVerdict;
|
|
70
|
+
/**
|
|
71
|
+
* @deprecated Never reported. The proxy applies these inside the response and
|
|
72
|
+
* does not tell the client, so no response carries them and no event fires for
|
|
73
|
+
* them. Still accepted so code written against 2.0 compiles; they will be
|
|
74
|
+
* removed in the next major version.
|
|
75
|
+
*/
|
|
76
|
+
export type LegacyVerdict = 'hijack' | 'enhance' | 'bypass';
|
|
77
|
+
/** Events `on()` accepts. */
|
|
78
|
+
export type VerdictEvent = RefusalVerdict | LegacyVerdict;
|
|
59
79
|
export interface CircuitBreakerOptions {
|
|
80
|
+
/**
|
|
81
|
+
* Run `checkBudget()` first and refuse to run the function when the workspace
|
|
82
|
+
* has no budget left. Default: false.
|
|
83
|
+
*/
|
|
84
|
+
requireBudget?: boolean;
|
|
85
|
+
/**
|
|
86
|
+
* @deprecated Use `requireBudget: true`. Any value turns the workspace budget
|
|
87
|
+
* check on; the amount is not compared with anything, because nothing reports
|
|
88
|
+
* a call's cost before it is made.
|
|
89
|
+
*/
|
|
60
90
|
maxCostUsd?: number;
|
|
91
|
+
/** @deprecated Ignored: neither the SDK nor the proxy reads a sensitivity tier. */
|
|
61
92
|
sensitivityTier?: 'low' | 'medium' | 'high' | 'critical';
|
|
62
93
|
failOpen?: boolean;
|
|
63
94
|
}
|
|
@@ -75,11 +106,18 @@ export interface BudgetCheckResult {
|
|
|
75
106
|
remaining_usd: number;
|
|
76
107
|
reason?: string;
|
|
77
108
|
}
|
|
109
|
+
/** Called with the refusal before `chat()` throws it as a `ClawdeBlockedError`. */
|
|
78
110
|
export type EventCallback = (data: {
|
|
79
|
-
|
|
111
|
+
/** One of the `RefusalVerdict` values; typed wider so listeners written against 2.0 compile. */
|
|
112
|
+
verdict: Verdict | LegacyVerdict;
|
|
113
|
+
/** The proxy's error code, e.g. `policy_denied` or `OVERAGE_HARD_CAP_EXCEEDED`. */
|
|
114
|
+
code: string;
|
|
115
|
+
status: number;
|
|
116
|
+
message: string;
|
|
117
|
+
/** @deprecated Never set. */
|
|
80
118
|
budgetRemainingUsd?: number;
|
|
119
|
+
/** @deprecated Never set. */
|
|
81
120
|
budgetPctUsed?: number;
|
|
82
|
-
[key: string]: any;
|
|
83
121
|
}) => void | Promise<void>;
|
|
84
122
|
export interface ControlPlaneClientOptions {
|
|
85
123
|
apiKey: string;
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB;;;;OAIG;IACH,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,EAAE,QAAQ,GAAG,WAAW,GAAG,QAAQ,CAAA;IAC5C,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB;;;;;OAKG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC,OAAO,kBAAkB,EAAE,aAAa,CAAC,CAAA;CAClE;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,QAAQ,GAAG,MAAM,GAAG,WAAW,GAAG,MAAM,CAAA;IAC9C,OAAO,EAAE,MAAM,GAAG,GAAG,EAAE,CAAA;IACvB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,UAAU,CAAC,EAAE,GAAG,EAAE,CAAA;IAClB,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB;AAED,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,WAAW,EAAE,CAAA;IACvB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,KAAK,CAAC,EAAE,GAAG,EAAE,CAAA;IACb,WAAW,CAAC,EAAE,GAAG,CAAA;IACjB,eAAe,CAAC,EAAE,GAAG,CAAA;IACrB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CACnB;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAA;IACV,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE;QACP,KAAK,EAAE,MAAM,CAAA;QACb,OAAO,EAAE,WAAW,CAAA;QACpB,aAAa,EAAE,MAAM,CAAA;KACtB,EAAE,CAAA;IACH,KAAK,CAAC,EAAE;QACN,aAAa,EAAE,MAAM,CAAA;QACrB,iBAAiB,EAAE,MAAM,CAAA;QACzB,YAAY,EAAE,MAAM,CAAA;KACrB,CAAA;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|